agentloopkit 0.24.1 → 0.24.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/core/init.ts","../../src/core/constants.ts","../../src/core/config.ts","../../src/core/errors.ts","../../src/core/file-system.ts","../../src/core/package-manager.ts","../../src/core/project-detection.ts","../../src/core/template-renderer.ts","../../src/core/logger.ts","../../src/cli/commands/doctor.ts","../../src/core/doctor.ts","../../src/core/git.ts","../../src/core/safety.ts","../../src/cli/commands/create-task.ts","../../src/core/task-contract.ts","../../src/core/dates.ts","../../src/core/slug.ts","../../src/cli/commands/verify.ts","../../src/core/verification.ts","../../src/cli/commands/summarize.ts","../../src/core/pr-summary.ts","../../src/core/artifacts.ts","../../src/core/task-state.ts","../../src/cli/commands/install-agent.ts","../../src/core/agent-installation.ts","../../src/cli/commands/list-templates.ts","../../src/cli/commands/version.ts","../../src/core/version.ts","../../src/cli/commands/status.ts","../../src/core/status.ts","../../src/cli/commands/next.ts","../../src/cli/commands/task.ts","../../src/cli/commands/completion.ts","../../src/core/completions.ts","../../src/cli/commands/check-gates.ts","../../src/core/check-gates.ts","../../src/cli/commands/report.ts","../../src/core/html-report.ts","../../src/cli/commands/badge.ts","../../src/core/badge.ts","../../src/cli/commands/policy.ts","../../src/core/policy.ts","../../src/cli/commands/ci-summary.ts","../../src/core/ci-summary.ts","../../src/cli/commands/release-notes.ts","../../src/core/release-notes.ts","../../src/cli/commands/npm-status.ts","../../src/core/npm-status.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from './commands/init.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { createTaskCommand } from './commands/create-task.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { handoffCommand, summarizeCommand } from './commands/summarize.js';\nimport { installAgentCommand } from './commands/install-agent.js';\nimport { listTemplatesCommand } from './commands/list-templates.js';\nimport { versionCommand } from './commands/version.js';\nimport { statusCommand } from './commands/status.js';\nimport { nextCommand } from './commands/next.js';\nimport { taskCommand } from './commands/task.js';\nimport { completionCommand } from './commands/completion.js';\nimport { checkGatesCommand } from './commands/check-gates.js';\nimport { reportCommand } from './commands/report.js';\nimport { badgeCommand } from './commands/badge.js';\nimport { policyCommand } from './commands/policy.js';\nimport { ciSummaryCommand } from './commands/ci-summary.js';\nimport { releaseNotesCommand } from './commands/release-notes.js';\nimport { npmStatusCommand } from './commands/npm-status.js';\nimport { getPackageVersion } from '../core/version.js';\n\nconst program = new Command();\n\nprogram\n .name('agentloop')\n .description('A drop-in engineering loop for coding agents.')\n .version(getPackageVersion(), '-V, --version', 'print CLI version');\n\nprogram.addCommand(initCommand());\nprogram.addCommand(doctorCommand());\nprogram.addCommand(createTaskCommand());\nprogram.addCommand(verifyCommand());\nprogram.addCommand(summarizeCommand());\nprogram.addCommand(handoffCommand());\nprogram.addCommand(statusCommand());\nprogram.addCommand(nextCommand());\nprogram.addCommand(checkGatesCommand());\nprogram.addCommand(reportCommand());\nprogram.addCommand(badgeCommand());\nprogram.addCommand(ciSummaryCommand());\nprogram.addCommand(releaseNotesCommand());\nprogram.addCommand(npmStatusCommand());\nprogram.addCommand(policyCommand());\nprogram.addCommand(taskCommand());\nprogram.addCommand(installAgentCommand());\nprogram.addCommand(listTemplatesCommand());\nprogram.addCommand(completionCommand());\nprogram.addCommand(versionCommand());\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`agentloop: ${message}`);\n process.exitCode = 1;\n});\n","import { Command } from 'commander';\nimport { initializeAgentLoop } from '../../core/init.js';\nimport { consoleLogger as logger } from '../../core/logger.js';\n\nexport function initCommand() {\n return new Command('init')\n .description('Initialize AgentLoopKit in the current repository')\n .option('--dry-run', 'show planned changes without writing files')\n .option('--json', 'print machine-readable output')\n .action(async (options: { dryRun?: boolean; json?: boolean }) => {\n const result = await initializeAgentLoop({ cwd: process.cwd(), dryRun: options.dryRun });\n if (options.json) {\n logger.info(JSON.stringify(result, null, 2));\n return;\n }\n logger.info(\n options.dryRun ? 'AgentLoopKit init dry run complete.' : 'AgentLoopKit initialized.',\n );\n logger.info(`Created: ${result.created.length}`);\n logger.info(`Updated: ${result.updated.length}`);\n logger.info(`Skipped: ${result.skipped.length}`);\n if (!options.dryRun) {\n logger.info('\\nNext steps:');\n logger.info('- Review AGENTS.md and AGENTLOOP.md');\n logger.info('- Run agentloop doctor');\n logger.info('- Create a task with agentloop create-task');\n }\n });\n}\n","import path from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport {\n AGENTLOOP_DIR,\n AGENTLOOP_FILE,\n AGENTLOOP_MANIFEST_FILE,\n AGENTS_FILE,\n CONFIG_FILE,\n CURRENT_TEMPLATE_VERSION,\n PACKAGE_NAME,\n TEMPLATE_GROUPS,\n} from './constants.js';\nimport { createDefaultConfig } from './config.js';\nimport { pathExists, readTextIfExists, writeTextFile } from './file-system.js';\nimport { detectPackageManager } from './package-manager.js';\nimport { detectPackageScripts, detectProjectName, detectProjectType } from './project-detection.js';\nimport { getTemplateRoot, readTemplate, TemplateValues } from './template-renderer.js';\n\nexport type InitResult = {\n created: string[];\n updated: string[];\n skipped: string[];\n dryRun: boolean;\n};\n\nasync function writeGeneratedFile(filePath: string, content: string, result: InitResult) {\n if (await pathExists(filePath)) {\n result.skipped.push(filePath);\n return;\n }\n if (result.dryRun) {\n result.created.push(filePath);\n return;\n }\n await writeTextFile(filePath, content);\n result.created.push(filePath);\n}\n\nasync function writeRenderedTemplateGroup(\n cwd: string,\n group: string,\n values: TemplateValues,\n result: InitResult,\n) {\n const templateDir = path.join(getTemplateRoot(), group);\n const entries = await readdir(templateDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const relative = `${group}/${entry.name}`;\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, group, entry.name),\n await readTemplate(relative, values),\n result,\n );\n }\n}\n\nasync function upsertAgentsFile(cwd: string, content: string, result: InitResult) {\n const filePath = path.join(cwd, AGENTS_FILE);\n const existing = await readTextIfExists(filePath);\n const marker = '<!-- agentloopkit:start -->';\n if (!existing) {\n if (result.dryRun) {\n result.created.push(filePath);\n return;\n }\n await writeTextFile(filePath, content);\n result.created.push(filePath);\n return;\n }\n if (existing.includes(marker)) {\n result.skipped.push(filePath);\n return;\n }\n const section = content\n .replace(/^# AGENTS\\s*/i, '## AgentLoopKit\\n\\n')\n .replace('<!-- agentloopkit:start -->', marker);\n if (result.dryRun) {\n result.updated.push(filePath);\n return;\n }\n await writeTextFile(filePath, `${existing.trimEnd()}\\n\\n${section.trim()}\\n`);\n result.updated.push(filePath);\n}\n\nexport async function initializeAgentLoop(options: {\n cwd: string;\n dryRun?: boolean;\n}): Promise<InitResult> {\n const result: InitResult = {\n created: [],\n updated: [],\n skipped: [],\n dryRun: Boolean(options.dryRun),\n };\n const cwd = options.cwd;\n const packageManager = await detectPackageManager(cwd);\n const projectType = await detectProjectType(cwd);\n const projectName = await detectProjectName(cwd);\n const commands = await detectPackageScripts(cwd, packageManager);\n const config = createDefaultConfig({\n name: projectName,\n type: projectType,\n packageManager,\n commands,\n });\n const values = {\n projectName,\n projectType,\n packageManager,\n testCommand: commands.test || 'not configured',\n lintCommand: commands.lint || 'not configured',\n typecheckCommand: commands.typecheck || 'not configured',\n buildCommand: commands.build || 'not configured',\n formatCommand: commands.format || 'not configured',\n };\n\n for (const group of TEMPLATE_GROUPS) {\n if (group === 'tasks') continue;\n await writeRenderedTemplateGroup(cwd, group, values, result);\n }\n\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'README.md'),\n await readTemplate('root/agentloop-directory-readme.md', values),\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_MANIFEST_FILE),\n `${JSON.stringify(\n {\n version: 1,\n templateVersion: CURRENT_TEMPLATE_VERSION,\n generatedBy: PACKAGE_NAME,\n },\n null,\n 2,\n )}\\n`,\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'tasks', 'README.md'),\n await readTemplate('tasks/README.md', values),\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'reports', 'README.md'),\n '# Verification Reports\\n\\nAgentLoopKit writes verification reports here when you run `agentloop verify`.\\n',\n result,\n );\n\n const agentsContent = await readTemplate('root/AGENTS.md', values);\n await upsertAgentsFile(cwd, agentsContent, result);\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_FILE),\n await readTemplate('root/AGENTLOOP.md', values),\n result,\n );\n\n const configPath = path.join(cwd, CONFIG_FILE);\n if (await pathExists(configPath)) {\n result.skipped.push(configPath);\n } else if (result.dryRun) {\n result.created.push(configPath);\n } else {\n await writeTextFile(configPath, `${JSON.stringify(config, null, 2)}\\n`);\n result.created.push(configPath);\n }\n\n return result;\n}\n","export const PRODUCT_NAME = 'AgentLoopKit';\nexport const PACKAGE_NAME = 'agentloopkit';\nexport const CLI_NAME = 'agentloop';\nexport const TAGLINE = 'A drop-in engineering loop for coding agents.';\nexport const CONFIG_FILE = 'agentloop.config.json';\nexport const AGENTLOOP_DIR = '.agentloop';\nexport const AGENTLOOP_MANIFEST_FILE = '.agentloop/manifest.json';\nexport const CURRENT_TEMPLATE_VERSION = 1;\nexport const AGENTS_FILE = 'AGENTS.md';\nexport const AGENTLOOP_FILE = 'AGENTLOOP.md';\n\nexport const LOOP_STEPS = [\n 'Specify',\n 'Constrain',\n 'Plan',\n 'Implement',\n 'Verify',\n 'Review',\n 'Handoff',\n] as const;\n\nexport const TEMPLATE_GROUPS = [\n 'loops',\n 'gates',\n 'handoffs',\n 'agents',\n 'policies',\n 'tasks',\n 'harness',\n] as const;\n\nexport const SUPPORTED_AGENTS = [\n 'codex',\n 'claude-code',\n 'cursor',\n 'opencode',\n 'gemini-cli',\n 'github-copilot-cli',\n 'generic',\n] as const;\n\nexport const TASK_TYPES = [\n 'feature',\n 'bugfix',\n 'refactor',\n 'tests',\n 'docs',\n 'release',\n 'security-review',\n 'dependency-upgrade',\n 'migration',\n] as const;\n\nexport const DEFAULT_COMMAND_KEYS = ['test', 'lint', 'typecheck', 'build', 'format'] as const;\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { CONFIG_FILE } from './constants.js';\nimport { ConfigError } from './errors.js';\n\nexport const ProjectTypeSchema = z.enum([\n 'nextjs',\n 'react-vite',\n 'node',\n 'typescript-package',\n 'python',\n 'docs-only',\n 'generic',\n]);\n\nexport const PackageManagerSchema = z.enum(['pnpm', 'npm', 'yarn', 'bun']);\n\nexport const CommandConfigSchema = z.object({\n test: z.string().default(''),\n lint: z.string().default(''),\n typecheck: z.string().default(''),\n build: z.string().default(''),\n format: z.string().default(''),\n});\n\nexport const AgentLoopConfigSchema = z.object({\n $schema: z.string().optional(),\n version: z.literal(1),\n project: z.object({\n name: z.string(),\n type: ProjectTypeSchema,\n packageManager: PackageManagerSchema,\n }),\n paths: z.object({\n root: z.string(),\n agentloopDir: z.string(),\n tasksDir: z.string(),\n reportsDir: z.string(),\n handoffsDir: z.string(),\n }),\n commands: CommandConfigSchema,\n safety: z.object({\n requireCleanWorkingTree: z.boolean(),\n warnOnDirtyWorkingTree: z.boolean(),\n protectEnvFiles: z.boolean(),\n protectMigrations: z.boolean(),\n protectLockfiles: z.boolean(),\n }),\n summary: z.object({\n includeDiffStats: z.boolean(),\n includeChangedFiles: z.boolean(),\n includeVerification: z.boolean(),\n includeRisks: z.boolean(),\n includeRollback: z.boolean(),\n }),\n});\n\nexport type ProjectType = z.infer<typeof ProjectTypeSchema>;\nexport type PackageManager = z.infer<typeof PackageManagerSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\nexport type AgentLoopConfig = z.infer<typeof AgentLoopConfigSchema>;\n\nexport type DefaultConfigInput = {\n name?: string;\n type?: ProjectType;\n packageManager?: PackageManager;\n commands?: Partial<CommandConfig>;\n};\n\nconst CONFIG_SCHEMA_URL =\n 'https://raw.githubusercontent.com/abhiyoheswaran1/AgentLoopKit/main/schema/agentloop.config.schema.json';\n\nexport function createDefaultConfig(input: DefaultConfigInput = {}): AgentLoopConfig {\n return {\n $schema: CONFIG_SCHEMA_URL,\n version: 1,\n project: {\n name: input.name ?? '',\n type: input.type ?? 'generic',\n packageManager: input.packageManager ?? 'npm',\n },\n paths: {\n root: '.',\n agentloopDir: '.agentloop',\n tasksDir: '.agentloop/tasks',\n reportsDir: '.agentloop/reports',\n handoffsDir: '.agentloop/handoffs',\n },\n commands: {\n test: input.commands?.test ?? '',\n lint: input.commands?.lint ?? '',\n typecheck: input.commands?.typecheck ?? '',\n build: input.commands?.build ?? '',\n format: input.commands?.format ?? '',\n },\n safety: {\n requireCleanWorkingTree: false,\n warnOnDirtyWorkingTree: true,\n protectEnvFiles: true,\n protectMigrations: true,\n protectLockfiles: false,\n },\n summary: {\n includeDiffStats: true,\n includeChangedFiles: true,\n includeVerification: true,\n includeRisks: true,\n includeRollback: true,\n },\n };\n}\n\nexport function parseAgentLoopConfig(value: unknown): AgentLoopConfig {\n const parsed = AgentLoopConfigSchema.safeParse(value);\n if (!parsed.success) {\n throw new ConfigError(`Invalid AgentLoopKit config: ${parsed.error.message}`);\n }\n return parsed.data;\n}\n\nexport async function loadAgentLoopConfig(cwd: string): Promise<AgentLoopConfig> {\n const filePath = path.join(cwd, CONFIG_FILE);\n const raw = await readFile(filePath, 'utf8');\n return parseAgentLoopConfig(JSON.parse(raw));\n}\n","export class AgentLoopError extends Error {\n constructor(\n message: string,\n public readonly code = 'AGENTLOOP_ERROR',\n ) {\n super(message);\n this.name = 'AgentLoopError';\n }\n}\n\nexport class ConfigError extends AgentLoopError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n","import { access, mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport async function pathExists(filePath: string) {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readTextIfExists(filePath: string) {\n if (!(await pathExists(filePath))) return '';\n return readFile(filePath, 'utf8');\n}\n\nexport async function writeFileIfMissing(filePath: string, content: string) {\n if (await pathExists(filePath)) return false;\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n return true;\n}\n\nexport async function writeTextFile(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n}\n\nexport async function listFilesRecursive(root: string, options: { ignore?: string[] } = {}) {\n const ignore = new Set(\n options.ignore ?? ['.git', '.agentloop', 'node_modules', 'dist', 'coverage'],\n );\n const files: string[] = [];\n\n async function walk(current: string) {\n if (!(await pathExists(current))) return;\n const entries = await readdir(current, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n if (ignore.has(entry.name)) continue;\n const absolute = path.join(current, entry.name);\n if (entry.isDirectory()) {\n await walk(absolute);\n } else if (entry.isFile()) {\n files.push(absolute);\n }\n }\n }\n\n const rootStat = await stat(root).catch(() => undefined);\n if (!rootStat?.isDirectory()) return [];\n await walk(root);\n return files;\n}\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { PackageManager, PackageManagerSchema } from './config.js';\nimport { pathExists } from './file-system.js';\n\nexport async function detectPackageManager(cwd: string): Promise<PackageManager> {\n if (await pathExists(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(cwd, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(cwd, 'bun.lock'))) return 'bun';\n if (await pathExists(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (await pathExists(path.join(cwd, 'package-lock.json'))) return 'npm';\n\n const packageJsonPath = path.join(cwd, 'package.json');\n if (await pathExists(packageJsonPath)) {\n const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8')) as {\n packageManager?: string;\n };\n const manager = packageJson.packageManager?.split('@')[0];\n const parsed = PackageManagerSchema.safeParse(manager);\n if (parsed.success) return parsed.data;\n }\n\n return 'npm';\n}\n\nexport function packageManagerRunCommand(manager: PackageManager, scriptName: string) {\n return `${manager} run ${scriptName}`;\n}\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { CommandConfig, PackageManager, ProjectType } from './config.js';\nimport { DEFAULT_COMMAND_KEYS } from './constants.js';\nimport { listFilesRecursive, pathExists } from './file-system.js';\nimport { packageManagerRunCommand } from './package-manager.js';\n\ntype PackageJson = {\n name?: string;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n workspaces?: string[] | { packages?: string[] };\n};\n\nexport type MonorepoInfo = {\n detected: boolean;\n markers: string[];\n};\n\nconst MONOREPO_FILE_MARKERS = [\n 'pnpm-workspace.yaml',\n 'turbo.json',\n 'nx.json',\n 'lerna.json',\n 'rush.json',\n] as const;\n\nexport async function readPackageJson(cwd: string): Promise<PackageJson | undefined> {\n const filePath = path.join(cwd, 'package.json');\n if (!(await pathExists(filePath))) return undefined;\n return JSON.parse(await readFile(filePath, 'utf8')) as PackageJson;\n}\n\nexport async function detectProjectName(cwd: string) {\n const packageJson = await readPackageJson(cwd);\n if (packageJson?.name) return packageJson.name;\n return path.basename(cwd);\n}\n\nexport async function detectProjectType(cwd: string): Promise<ProjectType> {\n const packageJson = await readPackageJson(cwd);\n const deps = { ...packageJson?.dependencies, ...packageJson?.devDependencies };\n\n if (deps.next) return 'nextjs';\n if (deps.vite && deps.react) return 'react-vite';\n if (deps.typescript && packageJson) return 'typescript-package';\n if (packageJson) return 'node';\n if (\n (await pathExists(path.join(cwd, 'pyproject.toml'))) ||\n (await pathExists(path.join(cwd, 'requirements.txt')))\n ) {\n return 'python';\n }\n\n const files = await listFilesRecursive(cwd);\n const relativeFiles = files.map((file) => path.relative(cwd, file));\n const hasCode = relativeFiles.some((file) =>\n /\\.(ts|tsx|js|jsx|py|go|rs|java|rb|php|cs)$/.test(file),\n );\n const hasDocs = relativeFiles.some((file) => file.endsWith('.md') || file.startsWith('docs/'));\n if (hasDocs && !hasCode) return 'docs-only';\n\n return 'generic';\n}\n\nexport async function detectMonorepo(cwd: string): Promise<MonorepoInfo> {\n const markers: string[] = [];\n const packageJson = await readPackageJson(cwd);\n if (packageJson?.workspaces) {\n markers.push('package.json workspaces');\n }\n\n for (const marker of MONOREPO_FILE_MARKERS) {\n if (await pathExists(path.join(cwd, marker))) {\n markers.push(marker);\n }\n }\n\n return { detected: markers.length > 0, markers };\n}\n\nexport async function detectPackageScripts(\n cwd: string,\n packageManager: PackageManager,\n): Promise<CommandConfig> {\n const packageJson = await readPackageJson(cwd);\n const commands: CommandConfig = { test: '', lint: '', typecheck: '', build: '', format: '' };\n for (const key of DEFAULT_COMMAND_KEYS) {\n if (packageJson?.scripts?.[key]) {\n commands[key] = packageManagerRunCommand(packageManager, key);\n }\n }\n return commands;\n}\n","import { cp, readFile, readdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport type TemplateValues = Record<string, string | number | boolean | undefined>;\n\nexport function renderTemplateString(template: string, values: TemplateValues) {\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (match, key: string) => {\n const value = values[key];\n return value === undefined ? match : String(value);\n });\n}\n\nexport function getTemplateRoot() {\n return fileURLToPath(new URL('../templates', import.meta.url));\n}\n\nexport async function readTemplate(relativePath: string, values: TemplateValues = {}) {\n const raw = await readFile(path.join(getTemplateRoot(), relativePath), 'utf8');\n return renderTemplateString(raw, values);\n}\n\nexport async function copyTemplateFile(\n relativePath: string,\n targetPath: string,\n values: TemplateValues = {},\n) {\n const content = await readTemplate(relativePath, values);\n await import('node:fs/promises').then(({ mkdir, writeFile }) =>\n mkdir(path.dirname(targetPath), { recursive: true }).then(() => writeFile(targetPath, content)),\n );\n}\n\nexport async function copyTemplateDirectory(sourceRelative: string, target: string) {\n await cp(path.join(getTemplateRoot(), sourceRelative), target, { recursive: true, force: true });\n}\n\nexport async function listTemplateFiles() {\n const root = getTemplateRoot();\n const groups = await readdir(root, { withFileTypes: true });\n const result: Record<string, string[]> = {};\n\n for (const group of groups) {\n if (!group.isDirectory()) continue;\n const entries = await readdir(path.join(root, group.name), { withFileTypes: true });\n result[group.name] = entries\n .filter((entry) => entry.isFile())\n .map((entry) => entry.name)\n .sort();\n }\n\n return result;\n}\n","type Logger = {\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport const consoleLogger: Logger = {\n info: (message) => console.log(message),\n warn: (message) => console.warn(message),\n error: (message) => console.error(message),\n};\n","import { Command } from 'commander';\nimport { runDoctor } from '../../core/doctor.js';\n\nexport function doctorCommand() {\n return new Command('doctor')\n .description('Check whether this repo is ready for agentic engineering')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const result = await runDoctor({ cwd: process.cwd() });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n if (result.serious.length > 0) process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { AGENTLOOP_MANIFEST_FILE, CONFIG_FILE, CURRENT_TEMPLATE_VERSION } from './constants.js';\nimport { loadAgentLoopConfig } from './config.js';\nimport { pathExists, readTextIfExists } from './file-system.js';\nimport { commandExists, getGitStatus, isInsideGitRepo } from './git.js';\nimport { detectPackageManager } from './package-manager.js';\nimport { detectMonorepo, detectPackageScripts, detectProjectType } from './project-detection.js';\nimport { detectRiskFiles } from './safety.js';\n\nexport type DoctorCheck = {\n name: string;\n status: 'pass' | 'warn' | 'fail';\n message: string;\n};\n\nexport type DoctorResult = {\n checks: DoctorCheck[];\n warnings: DoctorCheck[];\n serious: DoctorCheck[];\n markdown: string;\n};\n\nconst MONOREPO_VERIFICATION_GUIDANCE =\n 'Root checks may not cover every package; add package-specific verification commands to the task contract, such as pnpm --filter <package> test, npm --workspace <package> test, or cd packages/<name> && npm test. AgentLoopKit does not run workspace commands automatically.';\n\nconst MISSING_MANIFEST_MESSAGE =\n 'missing .agentloop/manifest.json; run agentloop init with the current CLI to add missing files without overwriting existing harness files';\n\nconst INVALID_MANIFEST_MESSAGE =\n 'invalid .agentloop/manifest.json; review docs/template-migrations.md and recreate the manifest with agentloop init if needed';\n\nfunction check(name: string, status: DoctorCheck['status'], message: string): DoctorCheck {\n return { name, status, message };\n}\n\nconst RISK_CATEGORY_LABELS = {\n migrations: 'migrations',\n auth: 'auth',\n security: 'security',\n billing: 'billing',\n deployment: 'deployment',\n lockfiles: 'lockfiles',\n envFiles: 'env files',\n} as const;\n\nfunction formatRiskFiles(files: string[]) {\n const preview = files.slice(0, 3).join(', ');\n const remaining = files.length - 3;\n return `${files.length} detected: ${preview}${remaining > 0 ? ` (+${remaining} more)` : ''}`;\n}\n\nasync function checkTemplateManifest(cwd: string): Promise<DoctorCheck> {\n const manifest = await readTextIfExists(path.join(cwd, AGENTLOOP_MANIFEST_FILE));\n if (!manifest) return check('Template manifest', 'warn', MISSING_MANIFEST_MESSAGE);\n\n try {\n const parsed = JSON.parse(manifest) as {\n version?: unknown;\n templateVersion?: unknown;\n generatedBy?: unknown;\n };\n if (\n parsed.version !== 1 ||\n typeof parsed.templateVersion !== 'number' ||\n parsed.generatedBy !== 'agentloopkit'\n ) {\n return check('Template manifest', 'warn', INVALID_MANIFEST_MESSAGE);\n }\n\n if (parsed.templateVersion < CURRENT_TEMPLATE_VERSION) {\n return check(\n 'Template manifest',\n 'warn',\n `template version ${parsed.templateVersion} is older than current version ${CURRENT_TEMPLATE_VERSION}; review docs/template-migrations.md and rerun agentloop init to add missing files`,\n );\n }\n\n if (parsed.templateVersion > CURRENT_TEMPLATE_VERSION) {\n return check(\n 'Template manifest',\n 'warn',\n `template version ${parsed.templateVersion} is newer than this CLI supports; upgrade AgentLoopKit before changing generated harness files`,\n );\n }\n\n return check(\n 'Template manifest',\n 'pass',\n `template version ${CURRENT_TEMPLATE_VERSION} is current`,\n );\n } catch {\n return check('Template manifest', 'warn', INVALID_MANIFEST_MESSAGE);\n }\n}\n\nexport async function runDoctor(options: { cwd: string }): Promise<DoctorResult> {\n const cwd = options.cwd;\n const checks: DoctorCheck[] = [];\n\n checks.push(check('Current directory', 'pass', cwd));\n const gitInstalled = await commandExists('git');\n checks.push(\n check(\n 'Git installed',\n gitInstalled ? 'pass' : 'warn',\n gitInstalled ? 'git is available' : 'git not found',\n ),\n );\n const inGit = gitInstalled ? await isInsideGitRepo(cwd) : false;\n checks.push(\n check(\n 'Git repository',\n inGit ? 'pass' : 'warn',\n inGit ? 'inside a git repo' : 'not inside a git repo',\n ),\n );\n\n const status = inGit ? await getGitStatus(cwd) : '';\n checks.push(\n check(\n 'Working tree',\n status.trim() ? 'warn' : 'pass',\n status.trim() ? 'working tree has changes' : 'clean',\n ),\n );\n\n for (const file of ['AGENTS.md', 'AGENTLOOP.md', '.agentloop']) {\n const exists = await pathExists(path.join(cwd, file));\n checks.push(check(file, exists ? 'pass' : 'warn', exists ? 'found' : 'missing'));\n }\n checks.push(await checkTemplateManifest(cwd));\n\n try {\n await loadAgentLoopConfig(cwd);\n checks.push(check(CONFIG_FILE, 'pass', 'valid'));\n } catch (error) {\n checks.push(\n check(CONFIG_FILE, 'fail', error instanceof Error ? error.message : 'invalid config'),\n );\n }\n\n const agents = await readTextIfExists(path.join(cwd, 'AGENTS.md'));\n if (agents && !agents.includes('AgentLoopKit')) {\n checks.push(\n check('AGENTS.md AgentLoopKit section', 'warn', 'AGENTS.md does not mention AgentLoopKit'),\n );\n }\n\n const packageManager = await detectPackageManager(cwd);\n const projectType = await detectProjectType(cwd);\n const monorepo = await detectMonorepo(cwd);\n const commands = await detectPackageScripts(cwd, packageManager);\n checks.push(check('Package manager', 'pass', packageManager));\n checks.push(check('Project type', 'pass', projectType));\n checks.push(\n check(\n 'Monorepo',\n monorepo.detected ? 'warn' : 'pass',\n monorepo.detected\n ? `workspace markers detected: ${monorepo.markers.join(', ')}. ${MONOREPO_VERIFICATION_GUIDANCE}`\n : 'not detected',\n ),\n );\n\n for (const key of ['test', 'lint', 'typecheck', 'build'] as const) {\n checks.push(\n check(`${key} command`, commands[key] ? 'pass' : 'warn', commands[key] || 'not detected'),\n );\n }\n\n const risks = await detectRiskFiles(cwd);\n const riskCount = Object.values(risks).reduce((count, files) => count + files.length, 0);\n checks.push(\n check(\n 'Potential risk files',\n riskCount ? 'warn' : 'pass',\n riskCount ? `${riskCount} risk file(s) detected` : 'none detected',\n ),\n );\n for (const [category, files] of Object.entries(risks)) {\n if (files.length === 0) continue;\n checks.push(\n check(\n `Risk files: ${RISK_CATEGORY_LABELS[category as keyof typeof RISK_CATEGORY_LABELS]}`,\n 'warn',\n formatRiskFiles(files),\n ),\n );\n }\n if (!commands.test) {\n checks.push(check('Tests', 'warn', 'no test command detected'));\n }\n\n const warnings = checks.filter((item) => item.status === 'warn');\n const serious = checks.filter((item) => item.status === 'fail');\n const markdown = `# AgentLoopKit Doctor\n\n${checks\n .map((item) => {\n const icon = item.status === 'pass' ? '[pass]' : item.status === 'warn' ? '[warn]' : '[fail]';\n return `- ${icon} ${item.name}: ${item.message}`;\n })\n .join('\\n')}\n`;\n\n return { checks, warnings, serious, markdown };\n}\n","import { execa } from 'execa';\n\nexport type GitFileStatus = {\n status: string;\n path: string;\n};\n\nexport async function commandExists(command: string) {\n const result = await execa(command, ['--version'], { reject: false });\n return result.exitCode === 0;\n}\n\nexport async function isInsideGitRepo(cwd: string) {\n const result = await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd, reject: false });\n return result.exitCode === 0 && result.stdout.trim() === 'true';\n}\n\nexport async function getGitBranch(cwd: string) {\n const result = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout.trim() : '';\n}\n\nexport async function getGitCommit(cwd: string) {\n const result = await execa('git', ['rev-parse', '--short', 'HEAD'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout.trim() : '';\n}\n\nexport async function getGitStatus(cwd: string) {\n const result = await execa('git', ['status', '--short'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout : '';\n}\n\nexport async function getGitDiffStat(cwd: string) {\n const result = await execa('git', ['diff', '--stat'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout : '';\n}\n\nexport async function parseGitStatus(status: string): Promise<GitFileStatus[]> {\n return status\n .split('\\n')\n .map((line) => line.trimEnd())\n .filter(Boolean)\n .map((line) => ({\n status: line.slice(0, 2).trim() || '?',\n path: line.slice(3).trim(),\n }));\n}\n","import path from 'node:path';\nimport { listFilesRecursive } from './file-system.js';\n\nexport type RiskFiles = {\n migrations: string[];\n auth: string[];\n security: string[];\n billing: string[];\n deployment: string[];\n lockfiles: string[];\n envFiles: string[];\n};\n\nfunction relative(cwd: string, file: string) {\n return path.relative(cwd, file).replaceAll(path.sep, '/');\n}\n\nfunction isSemanticRiskCandidate(file: string) {\n const extension = path.extname(file).toLowerCase();\n if (['.md', '.mdx', '.txt', '.rst', '.adoc'].includes(extension)) return false;\n return true;\n}\n\nexport async function detectRiskFiles(cwd: string): Promise<RiskFiles> {\n const files = (await listFilesRecursive(cwd)).map((file) => relative(cwd, file));\n const semanticIncludes = (needles: string[]) =>\n files.filter(\n (file) =>\n isSemanticRiskCandidate(file) &&\n needles.some((needle) => file.toLowerCase().includes(needle)),\n );\n const migrationFiles = files.filter((file) => {\n const normalized = file.toLowerCase();\n return (\n isSemanticRiskCandidate(file) &&\n (normalized.includes('migrations/') ||\n normalized.includes('/migration/') ||\n path.basename(normalized).includes('migration'))\n );\n });\n\n return {\n migrations: migrationFiles,\n auth: semanticIncludes(['auth', 'oauth', 'session', 'passport']),\n security: semanticIncludes(['security', 'crypto', 'secret', 'permission', 'policy']),\n billing: semanticIncludes(['billing', 'stripe', 'payment', 'invoice']),\n deployment: files.filter((file) =>\n /(^|\\/)(Dockerfile|docker-compose|vercel\\.json|netlify\\.toml|fly\\.toml|render\\.yaml|\\.github\\/workflows\\/)/i.test(\n file,\n ),\n ),\n lockfiles: files.filter((file) =>\n ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock', 'bun.lock', 'bun.lockb'].includes(\n path.basename(file),\n ),\n ),\n envFiles: files.filter((file) => /^\\.env($|\\.)|\\/\\.env($|\\.)/.test(file)),\n };\n}\n","import { Command } from 'commander';\nimport prompts from 'prompts';\nimport { TASK_TYPES } from '../../core/constants.js';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { createTaskContractFile, TaskType } from '../../core/task-contract.js';\n\nfunction lines(value: string | undefined, previous: string[]) {\n const current = value\n ? value\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean)\n : [];\n return [...previous, ...current];\n}\n\nfunction stringOption(options: Record<string, unknown>, ...keys: string[]) {\n for (const key of keys) {\n if (typeof options[key] === 'string') return options[key] as string;\n }\n return '';\n}\n\nfunction listOption(options: Record<string, unknown>, ...keys: string[]) {\n return keys.flatMap((key) => (Array.isArray(options[key]) ? (options[key] as string[]) : []));\n}\n\nasync function collectInteractive(initial: { title?: string; type?: TaskType }) {\n const answers = await prompts([\n {\n type: initial.title ? null : 'text',\n name: 'title',\n message: 'Task title',\n },\n {\n type: initial.type ? null : 'select',\n name: 'type',\n message: 'Task type',\n choices: TASK_TYPES.map((type) => ({ title: type, value: type })),\n },\n { type: 'text', name: 'problemStatement', message: 'Problem statement' },\n { type: 'text', name: 'desiredOutcome', message: 'Desired outcome' },\n { type: 'text', name: 'constraints', message: 'Constraints (separate with semicolons)' },\n { type: 'text', name: 'nonGoals', message: 'Non-goals (separate with semicolons)' },\n {\n type: 'text',\n name: 'likelyFiles',\n message: 'Likely files or areas (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'forbiddenFiles',\n message: 'Files or areas not to touch (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'acceptanceCriteria',\n message: 'Acceptance criteria (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'verificationCommands',\n message: 'Verification commands (separate with semicolons)',\n },\n { type: 'text', name: 'rollbackNotes', message: 'Rollback notes' },\n ]);\n\n return {\n title: initial.title ?? answers.title,\n type: initial.type ?? answers.type,\n problemStatement: answers.problemStatement,\n desiredOutcome: answers.desiredOutcome,\n constraints: String(answers.constraints ?? '')\n .split(';')\n .filter(Boolean),\n nonGoals: String(answers.nonGoals ?? '')\n .split(';')\n .filter(Boolean),\n likelyFiles: String(answers.likelyFiles ?? '')\n .split(';')\n .filter(Boolean),\n forbiddenFiles: String(answers.forbiddenFiles ?? '')\n .split(';')\n .filter(Boolean),\n acceptanceCriteria: String(answers.acceptanceCriteria ?? '')\n .split(';')\n .filter(Boolean),\n verificationCommands: String(answers.verificationCommands ?? '')\n .split(';')\n .filter(Boolean),\n rollbackNotes: answers.rollbackNotes,\n };\n}\n\nexport function createTaskCommand() {\n return new Command('create-task')\n .description('Create a task contract for an agentic coding session')\n .option('--title <title>', 'task title')\n .option('--type <type>', 'task type')\n .option('--out <path>', 'output file path')\n .option('--problem <text>', 'problem statement')\n .option('--problem-statement <text>', 'problem statement')\n .option('--outcome <text>', 'desired outcome')\n .option('--desired-outcome <text>', 'desired outcome')\n .option('--constraint <text>', 'constraint; repeat or use newlines', lines, [])\n .option('--non-goal <text>', 'non-goal; repeat or use newlines', lines, [])\n .option('--assumption <text>', 'assumption; repeat or use newlines', lines, [])\n .option('--likely-file <path>', 'likely file or area; repeat or use newlines', lines, [])\n .option(\n '--forbidden-file <path>',\n 'file or area not to touch; repeat or use newlines',\n lines,\n [],\n )\n .option('--acceptance <text>', 'acceptance criterion; repeat or use newlines', lines, [])\n .option('--verify-command <command>', 'verification command; repeat or use newlines', lines, [])\n .option('--verification <command>', 'verification command; repeat or use newlines', lines, [])\n .option('--rollback <text>', 'rollback notes')\n .option('--json', 'print machine-readable output')\n .action(async (options: Record<string, unknown>) => {\n const type =\n typeof options.type === 'string' && TASK_TYPES.includes(options.type as TaskType)\n ? (options.type as TaskType)\n : undefined;\n const title = typeof options.title === 'string' ? options.title : undefined;\n const config = await loadAgentLoopConfig(process.cwd());\n const input =\n title && type\n ? {\n title,\n type,\n problemStatement: stringOption(options, 'problemStatement', 'problem'),\n desiredOutcome: stringOption(options, 'desiredOutcome', 'outcome'),\n constraints: listOption(options, 'constraint'),\n nonGoals: listOption(options, 'nonGoal'),\n assumptions: listOption(options, 'assumption'),\n likelyFiles: listOption(options, 'likelyFile'),\n forbiddenFiles: listOption(options, 'forbiddenFile'),\n acceptanceCriteria: listOption(options, 'acceptance'),\n verificationCommands: listOption(options, 'verifyCommand', 'verification'),\n rollbackNotes: stringOption(options, 'rollback'),\n }\n : await collectInteractive({ title, type });\n const result = await createTaskContractFile({\n cwd: process.cwd(),\n config,\n input,\n out: typeof options.out === 'string' ? options.out : undefined,\n });\n if (options.json) {\n console.log(JSON.stringify({ task: result }, null, 2));\n return;\n }\n console.log(`Task contract created: ${result.path}`);\n });\n}\n","import path from 'node:path';\nimport { AgentLoopConfig } from './config.js';\nimport { formatDate } from './dates.js';\nimport { writeTextFile } from './file-system.js';\nimport { slugify } from './slug.js';\n\nexport type TaskType =\n | 'feature'\n | 'bugfix'\n | 'refactor'\n | 'tests'\n | 'docs'\n | 'release'\n | 'security-review'\n | 'dependency-upgrade'\n | 'migration';\n\nexport type TaskContractInput = {\n title: string;\n type: TaskType;\n createdDate?: string;\n problemStatement?: string;\n desiredOutcome?: string;\n constraints?: string[];\n nonGoals?: string[];\n assumptions?: string[];\n likelyFiles?: string[];\n forbiddenFiles?: string[];\n acceptanceCriteria?: string[];\n verificationCommands?: string[];\n rollbackNotes?: string;\n};\n\nfunction list(values: string[] | undefined, fallback = 'None recorded yet.') {\n const clean = values?.map((value) => value.trim()).filter(Boolean) ?? [];\n if (clean.length === 0) return `- ${fallback}`;\n return clean.map((value) => `- ${value}`).join('\\n');\n}\n\nexport function generateTaskContract(input: TaskContractInput) {\n const createdDate = input.createdDate ?? formatDate();\n return `# ${input.title}\n\n- Created date: ${createdDate}\n- Task type: ${input.type}\n- Status: proposed\n\n## Problem Statement\n${input.problemStatement || 'Describe the problem this task should solve.'}\n\n## Desired Outcome\n${input.desiredOutcome || 'Describe the concrete result expected from this task.'}\n\n## Constraints\n${list(input.constraints)}\n\n## Non-Goals\n${list(input.nonGoals)}\n\n## Assumptions\n${list(input.assumptions)}\n\n## Likely Files or Areas\n${list(input.likelyFiles)}\n\n## Files or Areas Not to Touch\n${list(input.forbiddenFiles)}\n\n## Acceptance Criteria\n${list(input.acceptanceCriteria, 'Add acceptance criteria before implementation starts.')}\n\n## Verification Commands\n${list(input.verificationCommands, 'No verification command recorded.')}\n\n## Implementation Plan\n- Inspect relevant files before editing.\n- Keep changes focused on this contract.\n- Record any architecture decision in DECISIONS.md.\n\n## Risk Notes\n- Re-check protected areas before changing migrations, auth, secrets, billing, deployment, or public APIs.\n\n## Rollback Notes\n${input.rollbackNotes || 'Document how to revert or disable this change.'}\n\n## Handoff Requirements\n- Summarize files changed.\n- Include verification commands and results.\n- State unverified areas honestly.\n- Include risks, rollback notes, and reviewer checklist.\n`;\n}\n\nexport async function createTaskContractFile(options: {\n cwd: string;\n config: AgentLoopConfig;\n input: TaskContractInput;\n out?: string;\n}) {\n const createdDate = options.input.createdDate ?? formatDate();\n const relativePath =\n options.out ??\n path.join(options.config.paths.tasksDir, `${createdDate}-${slugify(options.input.title)}.md`);\n const absolutePath = path.isAbsolute(relativePath)\n ? relativePath\n : path.join(options.cwd, relativePath);\n const markdown = generateTaskContract({ ...options.input, createdDate });\n await writeTextFile(absolutePath, markdown);\n return { path: absolutePath, markdown };\n}\n","function pad(value: number) {\n return String(value).padStart(2, '0');\n}\n\nexport function formatDate(date = new Date()) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nexport function formatTimestamp(date = new Date()) {\n return `${formatDate(date)}-${pad(date.getHours())}-${pad(date.getMinutes())}`;\n}\n","export function slugify(value: string) {\n const slug = value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/-{2,}/g, '-');\n\n return slug || 'task';\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { runVerification } from '../../core/verification.js';\n\nfunction collect(value: string, previous: string[]) {\n previous.push(value);\n return previous;\n}\n\nexport function verifyCommand() {\n return new Command('verify')\n .description('Run configured verification commands and write a report')\n .option('--task <path>', 'task contract path for humans to cross-reference')\n .option('--json', 'print machine-readable output')\n .option('--no-build', 'skip build command')\n .option('--no-test', 'skip test command')\n .option('--no-lint', 'skip lint command')\n .option('--no-typecheck', 'skip typecheck command')\n .option('--command <command>', 'custom command to run', collect, [])\n .action(async (options: Record<string, unknown>) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await runVerification({\n cwd: process.cwd(),\n config,\n taskPath: typeof options.task === 'string' ? options.task : undefined,\n skip: {\n build: options.build === false,\n test: options.test === false,\n lint: options.lint === false,\n typecheck: options.typecheck === false,\n },\n customCommands: options.command as string[],\n });\n if (options.json) console.log(JSON.stringify(result, null, 2));\n else\n console.log(\n `Verification report written: ${result.reportPath}\\nOverall status: ${result.overallStatus}`,\n );\n if (result.overallStatus === 'fail') process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { getGitBranch, getGitCommit, getGitStatus } from './git.js';\nimport { writeTextFile } from './file-system.js';\n\nexport type VerificationCommandKey = 'test' | 'lint' | 'typecheck' | 'build' | 'custom';\n\nexport type VerificationCommandResult = {\n key: VerificationCommandKey;\n command: string;\n exitCode: number;\n passed: boolean;\n output: string;\n};\n\nexport type VerificationCiContext = {\n provider: 'github-actions' | 'gitlab-ci' | 'buildkite' | 'generic-ci';\n providerName: string;\n workflow?: string;\n event?: string;\n ref?: string;\n commit?: string;\n runUrl?: string;\n runAttempt?: string;\n};\n\nexport type VerificationOptions = {\n cwd: string;\n config: AgentLoopConfig;\n reportTimestamp?: string;\n nowIso?: string;\n env?: NodeJS.ProcessEnv;\n taskPath?: string;\n skip?: Partial<Record<'test' | 'lint' | 'typecheck' | 'build', boolean>>;\n customCommands?: string[];\n};\n\nexport type VerificationResult = {\n overallStatus: 'pass' | 'fail' | 'not-run';\n commands: VerificationCommandResult[];\n notRun: string[];\n ciContext?: VerificationCiContext;\n markdown: string;\n reportPath: string;\n};\n\nfunction excerpt(output: string, limit = 5000) {\n if (output.length <= limit) return output;\n const headLimit = Math.ceil(limit / 2);\n const tailLimit = Math.floor(limit / 2);\n return `${output.slice(0, headLimit)}\n\n[output truncated: showing first ${headLimit} and last ${tailLimit} characters of ${\n output.length\n } total]\n\n${output.slice(-tailLimit)}`;\n}\n\nfunction failureSnippet(output: string, maxLines = 12, maxChars = 2000) {\n const lines = output\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .filter((line) => line.trim());\n const tail = lines.slice(-maxLines).join('\\n') || '(no output)';\n if (tail.length <= maxChars) return tail;\n return `${tail.slice(0, maxChars)}\n[failure summary truncated]`;\n}\n\nfunction renderFailureSummary(results: VerificationCommandResult[]) {\n const failures = results.filter((result) => !result.passed);\n if (!failures.length) return '';\n\n return `## Failure Summary\n${failures\n .map(\n (result) => `### ${result.key}: \\`${result.command}\\`\n\n- Exit code: ${result.exitCode}\n\n\\`\\`\\`text\n${failureSnippet(result.output)}\n\\`\\`\\``,\n )\n .join('\\n\\n')}\n\n`;\n}\n\nfunction commandEntries(config: AgentLoopConfig, options: VerificationOptions) {\n const configured: Array<[VerificationCommandKey, string]> = [\n ['test', config.commands.test],\n ['lint', config.commands.lint],\n ['typecheck', config.commands.typecheck],\n ['build', config.commands.build],\n ];\n\n const active = configured.filter(([key, command]) => {\n if (key === 'custom') return false;\n return command && !options.skip?.[key as 'test' | 'lint' | 'typecheck' | 'build'];\n });\n\n for (const command of options.customCommands ?? []) {\n if (command.trim()) active.push(['custom', command.trim()]);\n }\n\n return active;\n}\n\nfunction singleLine(value: string | undefined, limit = 300) {\n const clean = value?.replace(/\\s+/g, ' ').trim();\n if (!clean) return undefined;\n return clean.length > limit ? `${clean.slice(0, limit)}...` : clean;\n}\n\nfunction withoutTrailingSlash(value: string) {\n return value.replace(/\\/+$/, '');\n}\n\nfunction isEnabledCi(value: string | undefined) {\n const clean = value?.trim().toLowerCase();\n return clean === 'true' || clean === '1';\n}\n\nexport function detectCiContext(env: NodeJS.ProcessEnv): VerificationCiContext | undefined {\n if (env.GITHUB_ACTIONS === 'true') {\n const serverUrl = withoutTrailingSlash(\n singleLine(env.GITHUB_SERVER_URL) ?? 'https://github.com',\n );\n const repository = singleLine(env.GITHUB_REPOSITORY);\n const runId = singleLine(env.GITHUB_RUN_ID);\n const runUrl =\n repository && runId ? `${serverUrl}/${repository}/actions/runs/${runId}` : undefined;\n\n return {\n provider: 'github-actions',\n providerName: 'GitHub Actions',\n workflow: singleLine(env.GITHUB_WORKFLOW),\n event: singleLine(env.GITHUB_EVENT_NAME),\n ref: singleLine(env.GITHUB_REF),\n commit: singleLine(env.GITHUB_SHA),\n runUrl,\n runAttempt: singleLine(env.GITHUB_RUN_ATTEMPT),\n };\n }\n\n if (env.GITLAB_CI === 'true') {\n return {\n provider: 'gitlab-ci',\n providerName: 'GitLab CI',\n workflow: singleLine(env.CI_PROJECT_PATH),\n event: singleLine(env.CI_PIPELINE_SOURCE),\n ref: singleLine(env.CI_COMMIT_REF_NAME),\n commit: singleLine(env.CI_COMMIT_SHA),\n runUrl: singleLine(env.CI_PIPELINE_URL),\n };\n }\n\n if (env.BUILDKITE === 'true') {\n return {\n provider: 'buildkite',\n providerName: 'Buildkite',\n workflow: singleLine(env.BUILDKITE_PIPELINE_SLUG),\n event: singleLine(env.BUILDKITE_SOURCE),\n ref: singleLine(env.BUILDKITE_BRANCH),\n commit: singleLine(env.BUILDKITE_COMMIT),\n runUrl: singleLine(env.BUILDKITE_BUILD_URL),\n };\n }\n\n if (isEnabledCi(env.CI)) {\n return {\n provider: 'generic-ci',\n providerName: 'Generic CI',\n };\n }\n\n return undefined;\n}\n\nfunction renderCiContext(ciContext: VerificationCiContext | undefined) {\n if (!ciContext) return '';\n\n const lines = [`- Provider: ${ciContext.providerName}`];\n if (ciContext.workflow) lines.push(`- Workflow: ${ciContext.workflow}`);\n if (ciContext.event) lines.push(`- Event: ${ciContext.event}`);\n if (ciContext.ref) lines.push(`- Ref: ${ciContext.ref}`);\n if (ciContext.commit) lines.push(`- Commit: ${ciContext.commit}`);\n if (ciContext.runUrl) lines.push(`- Run URL: ${ciContext.runUrl}`);\n if (ciContext.runAttempt) lines.push(`- Run attempt: ${ciContext.runAttempt}`);\n\n return `## CI Context\n${lines.join('\\n')}\n\n`;\n}\n\nfunction parseTaskMetadata(markdown: string) {\n const lines = markdown.split(/\\r?\\n/);\n return {\n title: lines.find((line) => line.startsWith('# '))?.replace(/^#\\s+/, '').trim(),\n type: lines.find((line) => line.startsWith('- Task type:'))?.replace('- Task type:', '').trim(),\n status: lines.find((line) => line.startsWith('- Status:'))?.replace('- Status:', '').trim(),\n };\n}\n\nfunction isMarkdownTaskPath(taskPath: string) {\n const normalized = taskPath.replace(/\\\\/g, '/').toLowerCase();\n const segments = normalized.split('/').filter(Boolean);\n return normalized.endsWith('.md') && !segments.some((segment) => segment === '.env' || segment.startsWith('.env.'));\n}\n\nasync function renderTaskContext(cwd: string, taskPath: string | undefined) {\n if (!taskPath?.trim()) return '';\n\n const cleanPath = taskPath.trim();\n if (!isMarkdownTaskPath(cleanPath)) {\n return `## Task Context\n- Path: ${cleanPath}\n- Status: unavailable\n- Note: Task path must point to a Markdown task contract.\n\n`;\n }\n\n const absolutePath = path.isAbsolute(cleanPath) ? cleanPath : path.join(cwd, cleanPath);\n\n try {\n const markdown = await readFile(absolutePath, 'utf8');\n const metadata = parseTaskMetadata(markdown);\n const lines = [`- Path: ${cleanPath}`];\n if (metadata.title) lines.push(`- Title: ${metadata.title}`);\n if (metadata.type) lines.push(`- Task type: ${metadata.type}`);\n if (metadata.status) lines.push(`- Status: ${metadata.status}`);\n\n return `## Task Context\n${lines.join('\\n')}\n\n`;\n } catch {\n return `## Task Context\n- Path: ${cleanPath}\n- Status: unavailable\n- Note: Task file could not be read.\n\n`;\n }\n}\n\nexport async function runVerification(options: VerificationOptions): Promise<VerificationResult> {\n const timestamp = options.reportTimestamp ?? formatTimestamp();\n const nowIso = options.nowIso ?? new Date().toISOString();\n const env = options.env ?? process.env;\n const ciContext = detectCiContext(env);\n const commands = commandEntries(options.config, options);\n const notRun = [\n ...(['test', 'lint', 'typecheck', 'build'] as const).filter((key) => {\n if (options.skip?.[key]) return true;\n return !options.config.commands[key];\n }),\n ];\n\n const results: VerificationCommandResult[] = [];\n for (const [key, command] of commands) {\n const result = await execa(command, {\n cwd: options.cwd,\n shell: true,\n all: true,\n reject: false,\n env: { ...env, FORCE_COLOR: '0' },\n });\n results.push({\n key,\n command,\n exitCode: result.exitCode ?? 1,\n passed: result.exitCode === 0,\n output: result.all ?? result.stdout ?? result.stderr ?? '',\n });\n }\n\n const overallStatus =\n results.length === 0 ? 'not-run' : results.every((result) => result.passed) ? 'pass' : 'fail';\n const reportPath = path.join(\n options.cwd,\n options.config.paths.reportsDir,\n `${timestamp}-verification-report.md`,\n );\n const branch = await getGitBranch(options.cwd);\n const commit = await getGitCommit(options.cwd);\n const status = await getGitStatus(options.cwd);\n const taskContext = await renderTaskContext(options.cwd, options.taskPath);\n\n const markdown = `# Verification Report\n\n- Timestamp: ${nowIso}\n- Repo: ${path.basename(options.cwd)}\n- Git branch: ${branch || 'not available'}\n- Git commit: ${commit || 'not available'}\n- Working tree: ${status.trim() ? 'dirty' : 'clean or unavailable'}\n- Overall status: ${overallStatus}\n\n${renderCiContext(ciContext)}\n${taskContext}\n${renderFailureSummary(results)}\n## Commands Run\n${\n results.length === 0\n ? 'No verification commands were configured or selected.'\n : results\n .map(\n (result) => `### ${result.key}: \\`${result.command}\\`\n\n- Exit code: ${result.exitCode}\n- Status: ${result.passed ? 'pass' : 'fail'}\n\n\\`\\`\\`text\n${excerpt(result.output || '(no output)')}\n\\`\\`\\``,\n )\n .join('\\n\\n')\n}\n\n## Not Run\n${notRun.length ? notRun.map((item) => `- ${item}`).join('\\n') : '- Nothing skipped.'}\n\n## Recommended Next Actions\n${\n overallStatus === 'pass'\n ? '- Review the diff and prepare a handoff summary.'\n : overallStatus === 'fail'\n ? '- Fix failing commands before claiming completion.'\n : '- Add test, lint, typecheck, or build commands to agentloop.config.json.'\n}\n`;\n\n await writeTextFile(reportPath, markdown);\n return { overallStatus, commands: results, notRun, ciContext, markdown, reportPath };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { summarizeRepository } from '../../core/pr-summary.js';\n\nasync function runSummaryCommand(options: Record<string, unknown>, defaultWrite: boolean) {\n const config = await loadAgentLoopConfig(process.cwd());\n const writeOption = typeof options.write === 'boolean' ? options.write : defaultWrite;\n const result = await summarizeRepository({\n cwd: process.cwd(),\n config,\n taskPath: typeof options.task === 'string' ? options.task : undefined,\n reportPath: typeof options.report === 'string' ? options.report : undefined,\n write: writeOption,\n });\n if (options.json || options.format === 'json') {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n if (writeOption) console.log(`\\nSummary written: ${result.outPath}`);\n }\n}\n\nexport function summarizeCommand() {\n return new Command('summarize')\n .description('Generate a deterministic PR/reviewer summary')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--format <format>', 'markdown or json', 'markdown')\n .option('--write', 'write summary to .agentloop/handoffs')\n .option('--json', 'print JSON output')\n .action((options: Record<string, unknown>) => runSummaryCommand(options, false));\n}\n\nexport function handoffCommand() {\n return new Command('handoff')\n .description('Generate and write a deterministic reviewer handoff')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--format <format>', 'markdown or json', 'markdown')\n .option('--no-write', 'print handoff without writing a file')\n .option('--json', 'print JSON output')\n .action((options: Record<string, unknown>) => runSummaryCommand(options, true));\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { getGitDiffStat, getGitStatus, parseGitStatus, GitFileStatus } from './git.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { latestMarkdownFile, verificationReportPattern } from './artifacts.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type PrSummaryInput = {\n timestamp: string;\n status: string;\n changedFiles: GitFileStatus[];\n taskMarkdown?: string;\n verificationMarkdown?: string;\n diffStat?: string;\n};\n\ntype ChangeArea = {\n key: string;\n title: string;\n files: GitFileStatus[];\n};\n\nconst CHANGE_AREAS: Array<{ key: string; title: string; matches: (filePath: string) => boolean }> =\n [\n {\n key: 'risk',\n title: 'Risk-Sensitive',\n matches: (filePath) =>\n /(^|\\/)(migrations?|migration|auth|security|billing|deploy|deployment)(\\/|\\.|-|_|$)/.test(\n filePath,\n ) ||\n /(^|\\/)\\.env(\\.|$)/.test(filePath) ||\n /(^|\\/)(package-lock\\.json|pnpm-lock\\.yaml|yarn\\.lock|bun\\.lockb?|Cargo\\.lock|poetry\\.lock)$/.test(\n filePath,\n ),\n },\n { key: 'source', title: 'Source', matches: (filePath) => /^src\\//.test(filePath) },\n {\n key: 'tests',\n title: 'Tests',\n matches: (filePath) =>\n /(^|\\/)(tests?|__tests__)\\//.test(filePath) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(filePath),\n },\n {\n key: 'agentloop',\n title: 'AgentLoop',\n matches: (filePath) =>\n /^\\.agentloop\\//.test(filePath) ||\n /(^|\\/)(AGENTS\\.md|AGENTLOOP\\.md|agentloop\\.config\\.json)$/.test(filePath),\n },\n {\n key: 'docs',\n title: 'Documentation',\n matches: (filePath) =>\n /(^|\\/)docs\\//.test(filePath) ||\n /(^|\\/)(README|CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|SECURITY|ROADMAP|DECISIONS)\\.md$/i.test(\n filePath,\n ) ||\n /\\.mdx?$/.test(filePath),\n },\n {\n key: 'ci',\n title: 'CI / Automation',\n matches: (filePath) =>\n /^\\.github\\//.test(filePath) ||\n /^scripts\\//.test(filePath) ||\n /(^|\\/)(Dockerfile|Makefile)$/.test(filePath),\n },\n {\n key: 'config',\n title: 'Config / Package',\n matches: (filePath) =>\n /(^|\\/)(package\\.json|tsconfig\\.json|tsup\\.config\\.ts|vitest\\.config\\.ts|eslint\\.config\\.js|prettier\\.config\\.[cm]?js|pnpm-workspace\\.yaml)$/.test(\n filePath,\n ) || /^schema\\//.test(filePath),\n },\n ];\n\nfunction extractLine(markdown: string | undefined, pattern: RegExp, fallback: string) {\n if (!markdown) return fallback;\n const match = markdown.match(pattern);\n return match?.[1]?.trim() || fallback;\n}\n\nfunction classifyChangedFiles(changedFiles: GitFileStatus[]) {\n const areas: ChangeArea[] = CHANGE_AREAS.map((area) => ({\n key: area.key,\n title: area.title,\n files: [],\n }));\n const other: ChangeArea = { key: 'other', title: 'Other', files: [] };\n\n for (const file of changedFiles) {\n const normalizedPath = file.path.replace(/\\\\/g, '/');\n const areaIndex = CHANGE_AREAS.findIndex((area) => area.matches(normalizedPath));\n if (areaIndex === -1) other.files.push(file);\n else areas[areaIndex]?.files.push(file);\n }\n\n return [...areas.filter((area) => area.files.length), ...(other.files.length ? [other] : [])];\n}\n\nfunction renderChangeAreas(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '- No changed files detected.';\n\n const areas = classifyChangedFiles(changedFiles);\n return areas\n .map((area) => {\n return `### ${area.title}\n${area.files.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')}`;\n })\n .join('\\n\\n');\n}\n\nfunction renderReviewFocus(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '- No changed files detected.';\n\n const keys = new Set(classifyChangedFiles(changedFiles).map((area) => area.key));\n const lines: string[] = [];\n\n if (keys.has('source')) lines.push('- Review source changes for behavior and public API impact.');\n if (keys.has('tests')) lines.push('- Check tests cover the changed behavior.');\n if (keys.has('docs')) lines.push('- Check docs match the implemented command behavior.');\n if (keys.has('ci'))\n lines.push('- Review CI or automation changes for permissions and secret handling.');\n if (keys.has('config'))\n lines.push('- Review package and config changes for install, build, and publish impact.');\n if (keys.has('agentloop'))\n lines.push(\n '- Review AgentLoop artifacts for accurate task, verification, and handoff evidence.',\n );\n if (keys.has('risk'))\n lines.push(\n '- Review risk-sensitive paths such as migrations, auth, security, billing, env, deployment, and lockfiles with extra care.',\n );\n if (keys.has('other')) lines.push('- Review uncategorized files for ownership and scope.');\n\n return lines.join('\\n');\n}\n\nexport function generatePrSummary(input: PrSummaryInput) {\n const taskTitle = extractLine(input.taskMarkdown, /^#\\s+(.+)$/m, 'No task contract found.');\n const verification = extractLine(\n input.verificationMarkdown,\n /Overall status:\\s*([a-z-]+)/i,\n 'No verification report found.',\n );\n const verificationLine =\n verification === 'No verification report found.'\n ? verification\n : `Overall status: ${verification}`;\n\n const markdown = `# PR Summary\n\n- Generated: ${input.timestamp}\n- Task context: ${taskTitle}\n- Verification status: ${verificationLine}\n\n## Summary\nThis summary was generated deterministically from git status, the latest task contract, and the latest verification report.\n\n## Changed Files\n${\n input.changedFiles.length\n ? input.changedFiles.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')\n : '- No changed files detected.'\n}\n\n## Change Areas\n${renderChangeAreas(input.changedFiles)}\n\n## Diff Stats\n${input.diffStat?.trim() || 'No diff stats available.'}\n\n## Behaviour Changed\n- Review changed files and task contract to confirm intended behavior.\n\n## Review Focus\n${renderReviewFocus(input.changedFiles)}\n\n## Verification Performed\n- ${verificationLine}\n\n## Verification Not Performed\n- Check the verification report for skipped commands.\n\n## Risks\n- Re-check protected files such as migrations, secrets, auth, billing, deployment, and public APIs before merge.\n\n## Rollback Notes\n- Revert the changed files or revert the merge commit if this lands as a PR.\n\n## Reviewer Checklist\n- [ ] Acceptance criteria match the task contract.\n- [ ] Verification evidence is adequate for the change.\n- [ ] Risk areas have been reviewed.\n- [ ] Rollback plan is clear.\n\n## Follow-Ups\n- Capture any deferred work in ROADMAP.md or a new task contract.\n`;\n\n return { markdown };\n}\n\nexport async function summarizeRepository(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath?: string;\n reportPath?: string;\n timestamp?: string;\n write?: boolean;\n}) {\n const timestamp = options.timestamp ?? formatTimestamp();\n const status = await getGitStatus(options.cwd);\n const changedFiles = await parseGitStatus(status);\n const diffStat = await getGitDiffStat(options.cwd);\n const taskPath =\n options.taskPath ??\n (await getActiveTaskPath({ cwd: options.cwd, config: options.config })) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const reportPath =\n options.reportPath ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n }));\n const taskMarkdown =\n taskPath && (await pathExists(taskPath)) ? await readFile(taskPath, 'utf8') : undefined;\n const verificationMarkdown =\n reportPath && (await pathExists(reportPath)) ? await readFile(reportPath, 'utf8') : undefined;\n const summary = generatePrSummary({\n timestamp,\n status,\n changedFiles,\n taskMarkdown,\n verificationMarkdown,\n diffStat,\n });\n const outPath = path.join(\n options.cwd,\n options.config.paths.handoffsDir,\n `${timestamp}-pr-summary.md`,\n );\n if (options.write) await writeTextFile(outPath, summary.markdown);\n return { ...summary, outPath, changedFiles };\n}\n","import path from 'node:path';\nimport { readdir, stat } from 'node:fs/promises';\nimport { pathExists } from './file-system.js';\n\nexport const verificationReportPattern =\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/;\nexport const prSummaryPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-pr-summary\\.md$/;\nexport const ciSummaryPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-ci-summary\\.md$/;\nexport const generatedMarkdownPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-.+\\.md$/;\n\nexport async function latestMarkdownFile(dir: string, options: { pattern?: RegExp } = {}) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (\n await readdir(dir, { withFileTypes: true })\n )\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md',\n )\n .filter((entry) => !options.pattern || options.pattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n return entries.at(-1)?.filePath;\n}\n","import path from 'node:path';\nimport { mkdir, readdir, readFile, rename, rm, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { AgentLoopError } from './errors.js';\nimport { pathExists, writeTextFile } from './file-system.js';\n\ntype TaskState = {\n version: 1;\n activeTaskPath?: string;\n};\n\nexport type ActiveTask = {\n path: string;\n title: string;\n status: string;\n};\n\nexport type ListedTask = ActiveTask & {\n active: boolean;\n modifiedAt: string;\n};\n\nexport type TaskContract = ActiveTask & {\n content: string;\n};\n\nexport type ArchivedTask = ActiveTask & {\n previousPath: string;\n};\n\nexport const TASK_STATUSES = ['proposed', 'in-progress', 'blocked', 'review', 'done'] as const;\n\nexport type TaskStatus = (typeof TASK_STATUSES)[number];\n\nfunction statePath(cwd: string, config: AgentLoopConfig) {\n return path.join(cwd, config.paths.agentloopDir, 'state.json');\n}\n\nfunction toStoredPath(cwd: string, absolutePath: string) {\n return path.relative(cwd, absolutePath).split(path.sep).join('/');\n}\n\nfunction isInside(parent: string, child: string) {\n const relative = path.relative(parent, child);\n return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));\n}\n\nfunction tasksRoot(cwd: string, config: AgentLoopConfig) {\n return path.resolve(cwd, config.paths.tasksDir);\n}\n\nasync function readState(cwd: string, config: AgentLoopConfig): Promise<TaskState> {\n const filePath = statePath(cwd, config);\n if (!(await pathExists(filePath))) return { version: 1 };\n const raw = await readFile(filePath, 'utf8');\n try {\n const parsed = JSON.parse(raw) as Partial<TaskState>;\n return {\n version: 1,\n activeTaskPath:\n typeof parsed.activeTaskPath === 'string' && parsed.activeTaskPath.trim()\n ? parsed.activeTaskPath\n : undefined,\n };\n } catch {\n return { version: 1 };\n }\n}\n\nasync function writeState(cwd: string, config: AgentLoopConfig, state: TaskState) {\n await writeTextFile(statePath(cwd, config), `${JSON.stringify(state, null, 2)}\\n`);\n}\n\nasync function resolveTaskPath(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n strict: boolean;\n}) {\n const absolutePath = path.isAbsolute(options.taskPath)\n ? path.resolve(options.taskPath)\n : path.resolve(options.cwd, options.taskPath);\n const root = tasksRoot(options.cwd, options.config);\n const displayRoot = options.config.paths.tasksDir;\n\n if (!isInside(root, absolutePath)) {\n if (!options.strict) return undefined;\n throw new AgentLoopError(`Active task must be inside ${displayRoot}.`);\n }\n if (!absolutePath.endsWith('.md')) {\n if (!options.strict) return undefined;\n throw new AgentLoopError('Active task must be a Markdown file.');\n }\n const fileStat = await stat(absolutePath).catch(() => undefined);\n if (!fileStat?.isFile()) {\n if (!options.strict) return undefined;\n throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n }\n return absolutePath;\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction parseTaskStatus(status: string): TaskStatus {\n const clean = status.trim().toLowerCase();\n if ((TASK_STATUSES as readonly string[]).includes(clean)) return clean as TaskStatus;\n throw new AgentLoopError(\n `Unsupported task status \"${status}\". Use one of: ${TASK_STATUSES.join(', ')}.`,\n );\n}\n\nexport async function readTaskMetadata(cwd: string, filePath: string): Promise<ActiveTask> {\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: toStoredPath(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nexport async function readTaskContract(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}): Promise<TaskContract> {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const content = await readFile(absolutePath, 'utf8');\n return {\n ...(await readTaskMetadata(options.cwd, absolutePath)),\n content,\n };\n}\n\nexport async function setActiveTask(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}) {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const activeTaskPath = toStoredPath(options.cwd, absolutePath);\n await writeState(options.cwd, options.config, { version: 1, activeTaskPath });\n return readTaskMetadata(options.cwd, absolutePath);\n}\n\nexport async function updateTaskStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n status: string;\n}) {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const status = parseTaskStatus(options.status);\n const content = await readFile(absolutePath, 'utf8');\n\n if (!/^- Status:\\s*.+$/im.test(content)) {\n throw new AgentLoopError(`Task contract does not contain a Status line: ${options.taskPath}`);\n }\n\n await writeTextFile(absolutePath, content.replace(/^(- Status:\\s*).+$/im, `$1${status}`));\n return readTaskMetadata(options.cwd, absolutePath);\n}\n\nexport async function archiveTask(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}): Promise<ArchivedTask> {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n\n const root = tasksRoot(options.cwd, options.config);\n const archiveRoot = path.join(root, 'archive');\n if (path.dirname(absolutePath) === archiveRoot) {\n throw new AgentLoopError(`Task contract is already archived: ${options.taskPath}`);\n }\n\n const destinationPath = path.join(archiveRoot, path.basename(absolutePath));\n if (await pathExists(destinationPath)) {\n throw new AgentLoopError(\n `Archived task already exists: ${toStoredPath(options.cwd, destinationPath)}`,\n );\n }\n\n const previousPath = toStoredPath(options.cwd, absolutePath);\n const activeTaskPath = await getActiveTaskPath(options);\n await mkdir(archiveRoot, { recursive: true });\n await rename(absolutePath, destinationPath);\n if (activeTaskPath === absolutePath) {\n await clearActiveTask(options);\n }\n\n return {\n ...(await readTaskMetadata(options.cwd, destinationPath)),\n previousPath,\n };\n}\n\nexport async function getActiveTaskPath(options: { cwd: string; config: AgentLoopConfig }) {\n const state = await readState(options.cwd, options.config);\n if (!state.activeTaskPath) return undefined;\n return resolveTaskPath({\n cwd: options.cwd,\n config: options.config,\n taskPath: state.activeTaskPath,\n strict: false,\n });\n}\n\nexport async function getActiveTask(options: { cwd: string; config: AgentLoopConfig }) {\n const activeTaskPath = await getActiveTaskPath(options);\n return activeTaskPath ? readTaskMetadata(options.cwd, activeTaskPath) : undefined;\n}\n\nexport async function clearActiveTask(options: { cwd: string; config: AgentLoopConfig }) {\n await rm(statePath(options.cwd, options.config), { force: true });\n}\n\nexport async function listTasks(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<ListedTask[]> {\n const root = tasksRoot(options.cwd, options.config);\n const entries = await readdir(root, { withFileTypes: true }).catch(() => []);\n const activeTaskPath = await getActiveTaskPath(options);\n\n const tasks = await Promise.all(\n entries\n .filter((entry) => entry.isFile())\n .filter((entry) => entry.name.endsWith('.md') && entry.name !== 'README.md')\n .map(async (entry) => {\n const filePath = path.join(root, entry.name);\n const [metadata, fileStat] = await Promise.all([\n readTaskMetadata(options.cwd, filePath),\n stat(filePath),\n ]);\n return {\n ...metadata,\n active: activeTaskPath === filePath,\n modifiedAt: fileStat.mtime.toISOString(),\n modifiedMs: fileStat.mtimeMs,\n };\n }),\n );\n\n return tasks\n .sort((left, right) => {\n if (left.active !== right.active) return left.active ? -1 : 1;\n if (left.modifiedMs !== right.modifiedMs) return right.modifiedMs - left.modifiedMs;\n return left.path.localeCompare(right.path);\n })\n .map((task) => ({\n path: task.path,\n title: task.title,\n status: task.status,\n active: task.active,\n modifiedAt: task.modifiedAt,\n }));\n}\n","import { Command } from 'commander';\nimport {\n installAgentInstructions,\n installAllAgentInstructions,\n isSupportedAgent,\n} from '../../core/agent-installation.js';\nimport { SUPPORTED_AGENTS } from '../../core/constants.js';\n\nexport function installAgentCommand() {\n return new Command('install-agent')\n .description('Install agent-specific instruction files')\n .argument('<agent>', `one of: ${SUPPORTED_AGENTS.join(', ')}, all`)\n .action(async (agent: string) => {\n if (agent === 'all') {\n const results = await installAllAgentInstructions({ cwd: process.cwd() });\n console.log(`Agent instructions written: ${results.length}`);\n console.log('AGENTS.md now references all bundled agent instructions.');\n return;\n }\n if (!isSupportedAgent(agent)) {\n throw new Error(\n `Unsupported agent \"${agent}\". Supported agents: ${SUPPORTED_AGENTS.join(', ')}, all`,\n );\n }\n const result = await installAgentInstructions({ cwd: process.cwd(), agent });\n console.log(`Agent instructions written: ${result.agentFilePath}`);\n console.log('AGENTS.md now references the agent instructions.');\n });\n}\n","import path from 'node:path';\nimport { SUPPORTED_AGENTS } from './constants.js';\nimport { readTextIfExists, writeTextFile } from './file-system.js';\nimport { readTemplate } from './template-renderer.js';\n\nexport type SupportedAgent = (typeof SUPPORTED_AGENTS)[number];\n\nexport function isSupportedAgent(value: string): value is SupportedAgent {\n return (SUPPORTED_AGENTS as readonly string[]).includes(value);\n}\n\nconst displayNames: Record<SupportedAgent, string> = {\n codex: 'Codex',\n 'claude-code': 'Claude Code',\n cursor: 'Cursor',\n opencode: 'OpenCode',\n 'gemini-cli': 'Gemini CLI',\n 'github-copilot-cli': 'GitHub Copilot CLI',\n generic: 'Generic Coding Agent',\n};\n\nexport async function installAgentInstructions(options: { cwd: string; agent: SupportedAgent }) {\n const agentFilePath = path.join(options.cwd, '.agentloop', 'agents', `${options.agent}.md`);\n const content = await readTemplate(`agents/${options.agent}.md`, {\n agentName: displayNames[options.agent],\n });\n await writeTextFile(agentFilePath, content);\n\n const agentsPath = path.join(options.cwd, 'AGENTS.md');\n const existing = await readTextIfExists(agentsPath);\n const marker = `<!-- agentloopkit-agent:${options.agent} -->`;\n if (!existing.includes(marker)) {\n const block = `\n\n${marker}\n## AgentLoopKit: ${displayNames[options.agent]}\n\n- Agent instructions: .agentloop/agents/${options.agent}.md\n- Read AGENTLOOP.md before changing code.\n- Use task contracts, verification reports, and handoff summaries.\n<!-- /agentloopkit-agent:${options.agent} -->\n`;\n await writeTextFile(\n agentsPath,\n existing ? `${existing.trimEnd()}\\n${block}` : block.trimStart(),\n );\n }\n\n return { agentFilePath, agentsPath };\n}\n\nexport async function installAllAgentInstructions(options: { cwd: string }) {\n const results = [];\n for (const agent of SUPPORTED_AGENTS) {\n results.push(await installAgentInstructions({ cwd: options.cwd, agent }));\n }\n return results;\n}\n","import { Command } from 'commander';\nimport { listTemplateFiles } from '../../core/template-renderer.js';\n\nexport function listTemplatesCommand() {\n return new Command('list-templates')\n .description('List available AgentLoopKit templates')\n .action(async () => {\n const templates = await listTemplateFiles();\n for (const [group, files] of Object.entries(templates)) {\n console.log(`${group}:`);\n for (const file of files) console.log(` - ${file}`);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getPackageVersion } from '../../core/version.js';\n\nexport function versionCommand() {\n return new Command('version').description('Print CLI version').action(() => {\n console.log(getPackageVersion());\n });\n}\n","import { readFileSync } from 'node:fs';\n\ntype PackageJson = {\n version: string;\n};\n\nexport function getPackageVersion() {\n const packageJsonUrl = new URL('../../package.json', import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, 'utf8')) as PackageJson;\n return packageJson.version;\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getAgentLoopStatus } from '../../core/status.js';\n\nexport function statusCommand() {\n return new Command('status')\n .description('Show active task, latest verification, dirty files, and next action')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await getAgentLoopStatus({ cwd: process.cwd(), config });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n });\n}\n","import path from 'node:path';\nimport { readFile, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { DEFAULT_COMMAND_KEYS } from './constants.js';\nimport {\n getGitBranch,\n getGitCommit,\n getGitStatus,\n isInsideGitRepo,\n parseGitStatus,\n GitFileStatus,\n} from './git.js';\nimport { latestMarkdownFile } from './artifacts.js';\nimport { verificationReportPattern } from './artifacts.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type StatusArtifact = {\n path: string;\n title: string;\n};\n\nexport type StatusTask = StatusArtifact & {\n status: string;\n};\n\nexport type StatusReport = StatusArtifact & {\n overallStatus: string;\n};\n\nexport type AgentLoopStatusResult = {\n project: AgentLoopConfig['project'];\n git: {\n isRepository: boolean;\n branch: string;\n commit: string;\n };\n workingTree: {\n dirty: boolean;\n changedFileCount: number;\n changedFiles: GitFileStatus[];\n };\n activeTask?: StatusTask;\n latestReport?: StatusReport;\n commands: {\n configured: string[];\n missing: string[];\n };\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n};\n\ntype Timestamped<T> = T & {\n modifiedAtMs: number;\n};\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nasync function readTask(\n cwd: string,\n filePath: string | undefined,\n): Promise<Timestamped<StatusTask> | undefined> {\n if (!filePath) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n const fileStat = await stat(filePath);\n return {\n path: path.relative(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n modifiedAtMs: fileStat.mtimeMs,\n };\n}\n\nasync function readReport(\n cwd: string,\n filePath: string | undefined,\n): Promise<Timestamped<StatusReport> | undefined> {\n if (!filePath) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n const fileStat = await stat(filePath);\n return {\n path: path.relative(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n overallStatus: extractOverallStatus(markdown),\n modifiedAtMs: fileStat.mtimeMs,\n };\n}\n\nfunction stripTaskTimestamp(task: Timestamped<StatusTask> | undefined): StatusTask | undefined {\n if (!task) return undefined;\n return {\n path: task.path,\n title: task.title,\n status: task.status,\n };\n}\n\nfunction stripReportTimestamp(\n report: Timestamped<StatusReport> | undefined,\n): StatusReport | undefined {\n if (!report) return undefined;\n return {\n path: report.path,\n title: report.title,\n overallStatus: report.overallStatus,\n };\n}\n\nfunction isPostVerificationTaskState(task: Timestamped<StatusTask> | undefined) {\n const status = task?.status.trim().toLowerCase();\n return status === 'review' || status === 'done';\n}\n\nfunction chooseNextAction(input: {\n activeTask?: StatusTask;\n latestReport?: StatusReport;\n dirty: boolean;\n}) {\n if (!input.activeTask) {\n return {\n command: 'agentloop create-task',\n reason: 'No task contract was found.',\n };\n }\n if (!input.latestReport) {\n return {\n command: 'agentloop verify',\n reason: 'A task exists, but no verification report was found.',\n };\n }\n if (input.latestReport.overallStatus === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'The latest verification report failed. Fix the failures and rerun verification.',\n };\n }\n if (input.dirty) {\n return {\n command: 'agentloop handoff',\n reason: 'Task and verification evidence exist, and the working tree has changes.',\n };\n }\n return {\n command: 'agentloop create-task',\n reason: 'The repo is clean. Start the next task contract when ready.',\n };\n}\n\nfunction formatList(values: string[]) {\n return values.length ? values.join(', ') : 'none';\n}\n\nfunction renderMarkdown(result: Omit<AgentLoopStatusResult, 'markdown'>) {\n const gitLine = result.git.isRepository\n ? `${result.git.branch || 'unknown branch'}${result.git.commit ? ` @ ${result.git.commit}` : ''}`\n : 'not inside a git repository';\n const workingTree = result.workingTree.dirty\n ? `dirty (${result.workingTree.changedFileCount} changed file(s))`\n : 'clean';\n const activeTask = result.activeTask\n ? `${result.activeTask.title} (${result.activeTask.status}) - ${result.activeTask.path}`\n : 'No task contract found.';\n const latestReport = result.latestReport\n ? `${result.latestReport.overallStatus} - ${result.latestReport.path}`\n : 'No verification report found.';\n\n return `# AgentLoopKit Status\n\n- Project: ${result.project.name || 'unnamed'} (${result.project.type})\n- Package manager: ${result.project.packageManager}\n- Git: ${gitLine}\n- Working tree: ${workingTree}\n- Active task: ${activeTask}\n- Latest verification: ${latestReport}\n- Configured commands: ${formatList(result.commands.configured)}\n- Missing commands: ${formatList(result.commands.missing)}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n`;\n}\n\nexport async function getAgentLoopStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<AgentLoopStatusResult> {\n const inGit = await isInsideGitRepo(options.cwd);\n const rawStatus = inGit ? await getGitStatus(options.cwd) : '';\n const changedFiles = await parseGitStatus(rawStatus);\n const timestampedTask = await readTask(\n options.cwd,\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir))),\n );\n const timestampedReport = await readReport(\n options.cwd,\n await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n }),\n );\n const currentReport =\n timestampedTask &&\n timestampedReport &&\n timestampedReport.modifiedAtMs < timestampedTask.modifiedAtMs &&\n !isPostVerificationTaskState(timestampedTask)\n ? undefined\n : timestampedReport;\n const activeTask = stripTaskTimestamp(timestampedTask);\n const latestReport = stripReportTimestamp(currentReport);\n const configured = DEFAULT_COMMAND_KEYS.filter((key) => options.config.commands[key]);\n const missing = DEFAULT_COMMAND_KEYS.filter((key) => !options.config.commands[key]);\n const nextAction = chooseNextAction({\n activeTask,\n latestReport,\n dirty: changedFiles.length > 0,\n });\n const withoutMarkdown = {\n project: options.config.project,\n git: {\n isRepository: inGit,\n branch: inGit ? await getGitBranch(options.cwd) : '',\n commit: inGit ? await getGitCommit(options.cwd) : '',\n },\n workingTree: {\n dirty: changedFiles.length > 0,\n changedFileCount: changedFiles.length,\n changedFiles,\n },\n activeTask,\n latestReport,\n commands: {\n configured,\n missing,\n },\n nextAction,\n };\n\n return {\n ...withoutMarkdown,\n markdown: renderMarkdown(withoutMarkdown),\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { AgentLoopStatusResult, getAgentLoopStatus } from '../../core/status.js';\n\ntype NextActionResult = {\n command: string;\n reason: string;\n activeTask: AgentLoopStatusResult['activeTask'] | null;\n latestReport: AgentLoopStatusResult['latestReport'] | null;\n workingTree: Pick<AgentLoopStatusResult['workingTree'], 'dirty' | 'changedFileCount'>;\n commands: AgentLoopStatusResult['commands'];\n};\n\nfunction formatTask(result: NextActionResult) {\n if (!result.activeTask) return 'none';\n return `${result.activeTask.title} (${result.activeTask.status}) - ${result.activeTask.path}`;\n}\n\nfunction formatReport(result: NextActionResult) {\n if (!result.latestReport) return 'none';\n return `${result.latestReport.overallStatus} - ${result.latestReport.path}`;\n}\n\nfunction toNextActionResult(status: AgentLoopStatusResult): NextActionResult {\n return {\n command: status.nextAction.command,\n reason: status.nextAction.reason,\n activeTask: status.activeTask ?? null,\n latestReport: status.latestReport ?? null,\n workingTree: {\n dirty: status.workingTree.dirty,\n changedFileCount: status.workingTree.changedFileCount,\n },\n commands: status.commands,\n };\n}\n\nfunction renderNextAction(result: NextActionResult) {\n const workingTree = result.workingTree.dirty\n ? `dirty (${result.workingTree.changedFileCount} changed file(s))`\n : 'clean';\n\n return `# AgentLoopKit Next Action\n\nRun \\`${result.command}\\`.\n\n${result.reason}\n\n- Active task: ${formatTask(result)}\n- Latest verification: ${formatReport(result)}\n- Working tree: ${workingTree}\n`;\n}\n\nexport function nextCommand() {\n return new Command('next')\n .description('Show the next recommended loop action')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const status = await getAgentLoopStatus({ cwd: process.cwd(), config });\n const result = toNextActionResult(status);\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(renderNextAction(result));\n }\n });\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport {\n archiveTask,\n clearActiveTask,\n getActiveTask,\n listTasks,\n readTaskContract,\n setActiveTask,\n updateTaskStatus,\n} from '../../core/task-state.js';\nimport type { ActiveTask, ArchivedTask, ListedTask, TaskContract } from '../../core/task-state.js';\n\nfunction printTask(\n task: Awaited<ReturnType<typeof getActiveTask>> | null,\n options: { json?: boolean },\n) {\n if (options.json) {\n console.log(JSON.stringify({ activeTask: task ?? null }, null, 2));\n return;\n }\n if (!task) {\n console.log('No active task set.');\n console.log('Run `agentloop task set <path>` to pin one.');\n return;\n }\n console.log(`Active task: ${task.title} (${task.status})`);\n console.log(task.path);\n}\n\nfunction printTasks(tasks: ListedTask[], options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ tasks }, null, 2));\n return;\n }\n if (tasks.length === 0) {\n console.log('No task contracts found.');\n console.log('Run `agentloop create-task --title \"Your task\"` to create one.');\n return;\n }\n console.log('Task contracts:');\n for (const task of tasks) {\n const marker = task.active ? '*' : '-';\n const activeLabel = task.active ? ' active' : '';\n console.log(`${marker} ${task.title} (${task.status})${activeLabel}`);\n console.log(` ${task.path}`);\n }\n}\n\nfunction printTaskContract(task: TaskContract, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n process.stdout.write(task.content);\n}\n\nfunction printUpdatedTask(task: ActiveTask, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n console.log(`Updated task status: ${task.title} (${task.status})`);\n console.log(task.path);\n}\n\nfunction printArchivedTask(task: ArchivedTask, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n console.log(`Archived task: ${task.title} (${task.status})`);\n console.log(`${task.previousPath} -> ${task.path}`);\n}\n\nexport function taskCommand() {\n const command = new Command('task').description(\n 'List, inspect, update, or archive task contracts',\n );\n\n command\n .command('list')\n .option('--json', 'print machine-readable output')\n .description('List task contracts')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const tasks = await listTasks({ cwd: process.cwd(), config });\n printTasks(tasks, options);\n });\n\n command\n .command('show')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Show a task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await readTaskContract({ cwd: process.cwd(), config, taskPath });\n printTaskContract(task, options);\n });\n\n command\n .command('set')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Set the active task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const activeTask = await setActiveTask({ cwd: process.cwd(), config, taskPath });\n printTask(activeTask, options);\n });\n\n command\n .command('status')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .argument('<status>', 'one of: proposed, in-progress, blocked, review, done')\n .option('--json', 'print machine-readable output')\n .description('Update a task contract status')\n .action(async (taskPath: string, status: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await updateTaskStatus({ cwd: process.cwd(), config, taskPath, status });\n printUpdatedTask(task, options);\n });\n\n command\n .command('archive')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Archive a task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await archiveTask({ cwd: process.cwd(), config, taskPath });\n printArchivedTask(task, options);\n });\n\n command\n .command('current')\n .option('--json', 'print machine-readable output')\n .description('Print the active task contract')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const activeTask = await getActiveTask({ cwd: process.cwd(), config });\n printTask(activeTask ?? null, options);\n });\n\n command\n .command('clear')\n .option('--json', 'print machine-readable output')\n .description('Clear the active task pointer')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n await clearActiveTask({ cwd: process.cwd(), config });\n printTask(null, options);\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { renderCompletionScript } from '../../core/completions.js';\n\nexport function completionCommand() {\n return new Command('completion')\n .description('Print shell completion scripts')\n .argument('<shell>', 'one of: bash, zsh, fish, powershell, pwsh')\n .action((shell: string) => {\n process.stdout.write(renderCompletionScript(shell));\n });\n}\n","import { AgentLoopError } from './errors.js';\n\nexport const COMPLETION_SHELLS = ['bash', 'zsh', 'fish', 'powershell', 'pwsh'] as const;\n\nexport type CompletionShell = (typeof COMPLETION_SHELLS)[number];\n\nconst topLevelCommands = [\n ['init', 'Generate the repo harness and config'],\n ['doctor', 'Check setup health'],\n ['create-task', 'Create a task contract'],\n ['verify', 'Run configured verification commands'],\n ['summarize', 'Preview a reviewer summary'],\n ['handoff', 'Write a reviewer handoff'],\n ['status', 'Show current loop state'],\n ['next', 'Show the next recommended loop action'],\n ['check-gates', 'Check review gate evidence'],\n ['report', 'Write a local HTML evidence report'],\n ['badge', 'Write a local SVG evidence badge'],\n ['ci-summary', 'Summarize CI context and AgentLoop evidence'],\n ['release-notes', 'Generate deterministic release notes'],\n ['npm-status', 'Check npm registry catch-up status'],\n ['policy', 'List or inspect local AgentLoopKit policies'],\n ['task', 'List, inspect, update, or archive task contracts'],\n ['install-agent', 'Install agent-specific instructions'],\n ['list-templates', 'List bundled templates'],\n ['completion', 'Print shell completion scripts'],\n ['version', 'Print the CLI version'],\n] as const;\n\nconst taskCommandSpecs = [\n ['list', 'List task contracts'],\n ['show', 'Show a task contract'],\n ['set', 'Set the active task contract'],\n ['status', 'Update a task contract status'],\n ['archive', 'Archive a task contract'],\n ['current', 'Print the active task contract'],\n ['clear', 'Clear the active task pointer'],\n] as const;\n\nconst taskCommands = taskCommandSpecs.map(([name]) => name);\nconst policyCommandSpecs = [\n ['list', 'List local policies'],\n ['show', 'Show a local policy'],\n ['status', 'Show local policy template status'],\n] as const;\nconst policyCommands = policyCommandSpecs.map(([name]) => name);\nconst taskStatuses = ['proposed', 'in-progress', 'blocked', 'review', 'done'] as const;\nconst agentNames = [\n 'codex',\n 'claude-code',\n 'cursor',\n 'opencode',\n 'gemini-cli',\n 'github-copilot-cli',\n 'generic',\n 'all',\n] as const;\n\nfunction parseShell(shell: string): CompletionShell {\n const clean = shell.trim().toLowerCase();\n if ((COMPLETION_SHELLS as readonly string[]).includes(clean)) return clean as CompletionShell;\n throw new AgentLoopError(\n `Unsupported shell \"${shell}\". Use one of: ${COMPLETION_SHELLS.join(', ')}.`,\n );\n}\n\nfunction renderBash() {\n const commands = topLevelCommands.map(([name]) => name).join(' ');\n return `# AgentLoopKit bash completion\n# Save with: agentloop completion bash > ~/.agentloop-completion.bash\n# Then source it from your shell profile.\n_agentloop_completion() {\n local current previous\n COMPREPLY=()\n current=\"\\${COMP_WORDS[COMP_CWORD]}\"\n previous=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n\n case \"\\${COMP_WORDS[1]}\" in\n task)\n case \"\\${COMP_WORDS[2]}\" in\n status)\n if [[ \\${COMP_CWORD} -eq 4 ]]; then\n COMPREPLY=( $(compgen -W \"${taskStatuses.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n *)\n if [[ \\${COMP_CWORD} -eq 2 ]]; then\n COMPREPLY=( $(compgen -W \"${taskCommands.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n esac\n ;;\n policy)\n if [[ \\${COMP_CWORD} -eq 2 ]]; then\n COMPREPLY=( $(compgen -W \"${policyCommands.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n install-agent)\n COMPREPLY=( $(compgen -W \"${agentNames.join(' ')}\" -- \"$current\") )\n return 0\n ;;\n completion)\n COMPREPLY=( $(compgen -W \"${COMPLETION_SHELLS.join(' ')}\" -- \"$current\") )\n return 0\n ;;\n esac\n\n if [[ \\${COMP_CWORD} -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"${commands}\" -- \"$current\") )\n fi\n}\n\ncomplete -F _agentloop_completion agentloop\ncomplete -F _agentloop_completion agentloopkit\n`;\n}\n\nfunction renderZsh() {\n const commandSpecs = topLevelCommands.map(([name, description]) => `${name}:${description}`);\n return `#compdef agentloop agentloopkit\n# AgentLoopKit zsh completion\n# Save with: agentloop completion zsh > ~/.zsh/completions/_agentloop\n\n_agentloop() {\n local context state line\n typeset -A opt_args\n\n _arguments -C \\\\\n '1:command:->commands' \\\\\n '*::arg:->args'\n\n case \"$state\" in\n commands)\n _describe 'agentloop command' commandSpecs\n ;;\n args)\n case \"$words[2]\" in\n task)\n if [[ \"$words[3]\" == \"status\" && CURRENT -eq 5 ]]; then\n _values 'task status' ${taskStatuses.map((status) => `\"${status}\"`).join(' ')}\n else\n _describe 'task command' taskCommandSpecs\n fi\n ;;\n policy)\n _describe 'policy command' policyCommandSpecs\n ;;\n install-agent)\n _values 'agent' ${agentNames.map((agent) => `\"${agent}\"`).join(' ')}\n ;;\n completion)\n _values 'shell' ${COMPLETION_SHELLS.map((shell) => `\"${shell}\"`).join(' ')}\n ;;\n esac\n ;;\n esac\n}\n\ncommandSpecs=(\n${commandSpecs.map((spec) => ` '${spec}'`).join('\\n')}\n)\n\ntaskCommandSpecs=(\n${taskCommandSpecs.map(([name, description]) => ` '${name}:${description}'`).join('\\n')}\n)\n\npolicyCommandSpecs=(\n${policyCommandSpecs.map(([name, description]) => ` '${name}:${description}'`).join('\\n')}\n)\n\n_agentloop \"$@\"\n`;\n}\n\nfunction fishLine(command: string, args: string[], description: string) {\n return `complete -c agentloop -n '${command}' -a '${args.join(' ')}' -d '${description}'`;\n}\n\nfunction renderFish() {\n const topCommands = topLevelCommands.map(([name]) => name);\n return `# AgentLoopKit fish completion\n# Save with: agentloop completion fish > ~/.config/fish/completions/agentloop.fish\n\ncomplete -c agentloop -f\ncomplete -c agentloopkit -f\n${fishLine('__fish_use_subcommand', topCommands, 'AgentLoopKit command')}\ncomplete -c agentloop -n '__fish_seen_subcommand_from task' -a '${taskCommands.join(' ')}' -d 'Task command'\ncomplete -c agentloop -n '__fish_seen_subcommand_from policy' -a '${policyCommands.join(' ')}' -d 'Policy command'\ncomplete -c agentloop -n '__fish_seen_subcommand_from status' -a '${taskStatuses.join(' ')}' -d 'Task status'\ncomplete -c agentloop -n '__fish_seen_subcommand_from install-agent' -a '${agentNames.join(' ')}' -d 'Agent name'\ncomplete -c agentloop -n '__fish_seen_subcommand_from completion' -a '${COMPLETION_SHELLS.join(' ')}' -d 'Shell'\ncomplete -c agentloopkit -n '__fish_use_subcommand' -a '${topCommands.join(' ')}' -d 'AgentLoopKit command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from task' -a '${taskCommands.join(' ')}' -d 'Task command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from policy' -a '${policyCommands.join(' ')}' -d 'Policy command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from status' -a '${taskStatuses.join(' ')}' -d 'Task status'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from install-agent' -a '${agentNames.join(' ')}' -d 'Agent name'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from completion' -a '${COMPLETION_SHELLS.join(' ')}' -d 'Shell'\n`;\n}\n\nfunction powerShellArray(values: readonly string[]) {\n return `@(${values.map((value) => `'${value}'`).join(', ')})`;\n}\n\nfunction renderPowerShell() {\n const topCommands = topLevelCommands.map(([name]) => name);\n return `# AgentLoopKit PowerShell completion\n# Save with: agentloop completion powershell > agentloop-completion.ps1\n# Review the script before dot-sourcing it from your PowerShell startup file.\n\n$AgentLoopCommands = ${powerShellArray(topCommands)}\n$AgentLoopTaskCommands = ${powerShellArray(taskCommands)}\n$AgentLoopPolicyCommands = ${powerShellArray(policyCommands)}\n$AgentLoopTaskStatuses = ${powerShellArray(taskStatuses)}\n$AgentLoopAgents = ${powerShellArray(agentNames)}\n$AgentLoopShells = ${powerShellArray(COMPLETION_SHELLS)}\n\nRegister-ArgumentCompleter -Native -CommandName agentloop, agentloopkit -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n\n $words = @($commandAst.CommandElements | ForEach-Object { $_.Extent.Text })\n $prefix = if ($null -eq $wordToComplete) { '' } else { $wordToComplete }\n $values = $AgentLoopCommands\n\n if ($words.Count -gt 1) {\n switch ($words[1]) {\n 'task' {\n if ($words.Count -gt 2 -and $words[2] -eq 'status') {\n $values = $AgentLoopTaskStatuses\n } else {\n $values = $AgentLoopTaskCommands\n }\n }\n 'policy' { $values = $AgentLoopPolicyCommands }\n 'install-agent' { $values = $AgentLoopAgents }\n 'completion' { $values = $AgentLoopShells }\n }\n }\n\n $values |\n Where-Object { $_.StartsWith($prefix, [System.StringComparison]::OrdinalIgnoreCase) } |\n ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) }\n}\n`;\n}\n\nexport function renderCompletionScript(shell: string) {\n switch (parseShell(shell)) {\n case 'bash':\n return renderBash();\n case 'zsh':\n return renderZsh();\n case 'fish':\n return renderFish();\n case 'powershell':\n case 'pwsh':\n return renderPowerShell();\n }\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { checkGates } from '../../core/check-gates.js';\n\nexport function checkGatesCommand() {\n return new Command('check-gates')\n .description('Check whether task, verification, handoff, harness, policy, and git gates pass')\n .option('--json', 'print machine-readable output')\n .option('--strict', 'treat warning gates as failures')\n .action(async (options: { json?: boolean; strict?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await checkGates({ cwd: process.cwd(), config, strict: options.strict });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n if (result.overallStatus === 'fail') process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { latestMarkdownFile, prSummaryPattern, verificationReportPattern } from './artifacts.js';\nimport { pathExists } from './file-system.js';\nimport { getGitBranch, getGitCommit, getGitStatus, isInsideGitRepo, parseGitStatus } from './git.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type GateStatus = 'pass' | 'warn' | 'fail';\n\nexport type GateCheck = {\n id: string;\n name: string;\n status: GateStatus;\n message: string;\n path?: string;\n};\n\nexport type CheckGatesResult = {\n strict: boolean;\n overallStatus: GateStatus;\n gates: GateCheck[];\n git: {\n isRepository: boolean;\n branch: string;\n commit: string;\n changedFileCount: number;\n };\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n};\n\nconst requiredRootFiles = ['AGENTS.md', 'AGENTLOOP.md', 'agentloop.config.json'];\nconst requiredHarnessFiles = [\n '.agentloop/harness/commands.md',\n '.agentloop/harness/definition-of-done.md',\n '.agentloop/harness/review-checklist.md',\n '.agentloop/harness/autonomous-work-rules.md',\n];\nconst requiredPolicyFiles = [\n '.agentloop/policies/no-destructive-actions.md',\n '.agentloop/policies/git-policy.md',\n '.agentloop/policies/secrets-policy.md',\n];\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nfunction relativePath(cwd: string, filePath: string) {\n return path.relative(cwd, filePath) || '.';\n}\n\nasync function missingFiles(cwd: string, files: string[]) {\n const missing: string[] = [];\n for (const file of files) {\n if (!(await pathExists(path.join(cwd, file)))) missing.push(file);\n }\n return missing;\n}\n\nfunction gate(id: string, name: string, status: GateStatus, message: string, filePath?: string) {\n return { id, name, status, message, ...(filePath ? { path: filePath } : {}) };\n}\n\nfunction overallStatus(gates: GateCheck[], strict: boolean): GateStatus {\n if (gates.some((item) => item.status === 'fail')) return 'fail';\n if (strict && gates.some((item) => item.status === 'warn')) return 'fail';\n if (gates.some((item) => item.status === 'warn')) return 'warn';\n return 'pass';\n}\n\nfunction chooseNextAction(gates: GateCheck[]) {\n const task = gates.find((item) => item.id === 'task-contract');\n const report = gates.find((item) => item.id === 'verification-report');\n const handoff = gates.find((item) => item.id === 'handoff-summary');\n if (task?.status === 'fail') {\n return {\n command: 'agentloop create-task',\n reason: 'Create a task contract before review gates can pass.',\n };\n }\n if (report?.status === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'Run verification and fix failures before review.',\n };\n }\n if (handoff?.status !== 'pass') {\n return {\n command: 'agentloop handoff',\n reason: 'Write a reviewer handoff after verification.',\n };\n }\n return {\n command: 'agentloop handoff',\n reason: 'Gate evidence is present. Refresh the reviewer handoff if the diff changed.',\n };\n}\n\nfunction renderMarkdown(result: Omit<CheckGatesResult, 'markdown'>) {\n const gateLines = result.gates\n .map((item) => {\n const suffix = item.path ? ` - ${item.path}` : '';\n return `- [${item.status}] ${item.name}: ${item.message}${suffix}`;\n })\n .join('\\n');\n const gitLine = result.git.isRepository\n ? `${result.git.branch || 'unknown branch'}${result.git.commit ? ` @ ${result.git.commit}` : ''}`\n : 'not inside a git repository';\n\n return `# AgentLoopKit Gates\n\n- Overall status: ${result.overallStatus}\n- Strict mode: ${result.strict ? 'enabled (warnings fail)' : 'disabled'}\n- Git: ${gitLine}\n- Changed files: ${result.git.changedFileCount}\n\n## Gates\n\n${gateLines}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n`;\n}\n\nexport async function checkGates(options: {\n cwd: string;\n config: AgentLoopConfig;\n strict?: boolean;\n}): Promise<CheckGatesResult> {\n const strict = options.strict ?? false;\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const reportPath = await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n });\n const handoffPath = await latestMarkdownFile(path.join(options.cwd, options.config.paths.handoffsDir), {\n pattern: prSummaryPattern,\n });\n const gates: GateCheck[] = [];\n\n if (taskPath) {\n const taskMarkdown = await readFile(taskPath, 'utf8');\n gates.push(\n gate(\n 'task-contract',\n 'Task contract',\n 'pass',\n extractHeading(taskMarkdown, path.basename(taskPath, '.md')),\n relativePath(options.cwd, taskPath),\n ),\n );\n } else {\n gates.push(gate('task-contract', 'Task contract', 'fail', 'No task contract found.'));\n }\n\n if (reportPath) {\n const reportMarkdown = await readFile(reportPath, 'utf8');\n const status = extractOverallStatus(reportMarkdown);\n gates.push(\n gate(\n 'verification-report',\n 'Verification report',\n status === 'pass' ? 'pass' : 'fail',\n `Overall status: ${status}`,\n relativePath(options.cwd, reportPath),\n ),\n );\n } else {\n gates.push(\n gate('verification-report', 'Verification report', 'fail', 'No verification report found.'),\n );\n }\n\n if (handoffPath) {\n gates.push(\n gate(\n 'handoff-summary',\n 'Handoff summary',\n 'pass',\n 'Reviewer handoff found.',\n relativePath(options.cwd, handoffPath),\n ),\n );\n } else {\n gates.push(gate('handoff-summary', 'Handoff summary', 'warn', 'No handoff summary found.'));\n }\n\n const missingHarness = await missingFiles(options.cwd, [\n ...requiredRootFiles,\n ...requiredHarnessFiles,\n ]);\n gates.push(\n gate(\n 'repo-harness',\n 'Repo harness',\n missingHarness.length ? 'warn' : 'pass',\n missingHarness.length\n ? `Missing harness files: ${missingHarness.join(', ')}.`\n : 'Required repo and harness files exist.',\n ),\n );\n\n const missingPolicies = await missingFiles(options.cwd, requiredPolicyFiles);\n gates.push(\n gate(\n 'safety-policies',\n 'Safety policies',\n missingPolicies.length ? 'warn' : 'pass',\n missingPolicies.length\n ? `Missing policy files: ${missingPolicies.join(', ')}.`\n : 'Core safety policy files exist.',\n ),\n );\n\n const inGit = await isInsideGitRepo(options.cwd);\n const changedFiles = inGit ? await parseGitStatus(await getGitStatus(options.cwd)) : [];\n gates.push(\n gate(\n 'git-context',\n 'Git context',\n !inGit || changedFiles.length === 0 ? 'warn' : 'pass',\n !inGit\n ? 'Not inside a git repository.'\n : changedFiles.length === 0\n ? 'No changed files detected.'\n : `${changedFiles.length} changed file(s) detected.`,\n ),\n );\n\n const withoutMarkdown = {\n strict,\n overallStatus: overallStatus(gates, strict),\n gates,\n git: {\n isRepository: inGit,\n branch: inGit ? await getGitBranch(options.cwd) : '',\n commit: inGit ? await getGitCommit(options.cwd) : '',\n changedFileCount: changedFiles.length,\n },\n nextAction: chooseNextAction(gates),\n };\n return { ...withoutMarkdown, markdown: renderMarkdown(withoutMarkdown) };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { writeHtmlReport } from '../../core/html-report.js';\n\nexport function reportCommand() {\n return new Command('report')\n .description('Generate a local static HTML evidence report')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--handoff <path>', 'handoff summary path')\n .option('--out <path>', 'output HTML path')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n task?: string;\n report?: string;\n handoff?: string;\n out?: string;\n json?: boolean;\n }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await writeHtmlReport({\n cwd: process.cwd(),\n config,\n taskPath: options.task,\n reportPath: options.report,\n handoffPath: options.handoff,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n outPath: result.outPath,\n metadata: result.metadata,\n sourcePaths: result.sourcePaths,\n },\n null,\n 2,\n ),\n );\n } else {\n console.log(`# AgentLoopKit HTML Report\n\nReport written: ${result.outPath}\nTask: ${result.metadata.taskTitle}\nVerification: ${result.metadata.verificationStatus}\nChanged files: ${result.metadata.changedFileCount}\n\nNext step: open the HTML file locally or attach it as a CI/PR artifact.`);\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile, readdir, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { latestMarkdownFile } from './artifacts.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport {\n getGitBranch,\n getGitCommit,\n getGitDiffStat,\n getGitStatus,\n GitFileStatus,\n parseGitStatus,\n} from './git.js';\nimport { summarizeRepository } from './pr-summary.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type HtmlReportInput = {\n timestamp: string;\n nowIso?: string;\n repoName: string;\n branch: string;\n commit: string;\n workingTreeStatus: string;\n taskPath?: string;\n verificationPath?: string;\n handoffPath?: string;\n changedFiles: GitFileStatus[];\n diffStat?: string;\n taskMarkdown?: string;\n verificationMarkdown?: string;\n handoffMarkdown?: string;\n summaryMarkdown?: string;\n};\n\nexport type HtmlReportMetadata = {\n timestamp: string;\n repoName: string;\n taskTitle: string;\n verificationStatus: string;\n changedFileCount: number;\n};\n\nexport type HtmlReportResult = {\n html: string;\n metadata: HtmlReportMetadata;\n};\n\nexport type WriteHtmlReportOptions = {\n cwd: string;\n config: AgentLoopConfig;\n timestamp?: string;\n nowIso?: string;\n taskPath?: string;\n reportPath?: string;\n handoffPath?: string;\n outPath?: string;\n};\n\nexport type WrittenHtmlReport = HtmlReportResult & {\n outPath: string;\n sourcePaths: {\n task?: string;\n verification?: string;\n handoff?: string;\n };\n};\n\nfunction escapeHtml(value: string) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction extractLine(markdown: string | undefined, pattern: RegExp, fallback: string) {\n if (!markdown) return fallback;\n return markdown.match(pattern)?.[1]?.trim() || fallback;\n}\n\nfunction extractTitle(markdown: string | undefined, fallback: string) {\n return extractLine(markdown, /^#\\s+(.+)$/m, fallback);\n}\n\nfunction extractVerificationStatus(markdown: string | undefined) {\n return extractLine(markdown, /Overall status:\\s*([a-z-]+)/i, 'not available');\n}\n\nfunction normalizeDisplayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);\n return path.relative(cwd, absolutePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function readMarkdownIfExists(filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n return readFile(filePath, 'utf8');\n}\n\nasync function latestMatchingMarkdownFile(dir: string, pattern: RegExp) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (await readdir(dir, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && pattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n\n return entries.at(-1)?.filePath;\n}\n\nfunction renderSourcePath(label: string, filePath: string | undefined) {\n return `<li><span>${escapeHtml(label)}</span><code>${escapeHtml(filePath ?? 'not found')}</code></li>`;\n}\n\nfunction renderChangedFiles(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '<p class=\"muted\">No changed files detected.</p>';\n return `<table>\n <thead><tr><th>Status</th><th>Path</th></tr></thead>\n <tbody>\n${changedFiles\n .map(\n (file) =>\n ` <tr><td><code>${escapeHtml(file.status)}</code></td><td><code>${escapeHtml(\n file.path,\n )}</code></td></tr>`,\n )\n .join('\\n')}\n </tbody>\n</table>`;\n}\n\nfunction renderMarkdownBlock(label: string, markdown: string | undefined, emptyText: string) {\n return `<section>\n <h2>${escapeHtml(label)}</h2>\n ${\n markdown?.trim()\n ? `<pre>${escapeHtml(markdown.trim())}</pre>`\n : `<p class=\"muted\">${escapeHtml(emptyText)}</p>`\n }\n</section>`;\n}\n\nexport function generateHtmlReport(input: HtmlReportInput): HtmlReportResult {\n const taskTitle = extractTitle(input.taskMarkdown, 'No task contract found');\n const verificationStatus = extractVerificationStatus(input.verificationMarkdown);\n const generatedAt = input.nowIso ?? new Date().toISOString();\n const metadata: HtmlReportMetadata = {\n timestamp: input.timestamp,\n repoName: input.repoName,\n taskTitle,\n verificationStatus,\n changedFileCount: input.changedFiles.length,\n };\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>AgentLoopKit Report - ${escapeHtml(input.repoName)}</title>\n <style>\n :root { color-scheme: light; --ink: oklch(22% 0.026 245); --muted: oklch(48% 0.023 245); --line: oklch(84% 0.018 245); --panel: oklch(97% 0.009 245); --paper: oklch(99% 0.006 245); --accent: oklch(49% 0.09 183); --warn-ink: oklch(42% 0.12 52); --warn-bg: oklch(96% 0.035 72); --terminal: oklch(19% 0.024 245); --terminal-ink: oklch(91% 0.014 245); }\n * { box-sizing: border-box; }\n body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; color: var(--ink); background: var(--paper); line-height: 1.55; }\n main { max-width: 1040px; margin: 0 auto; padding: 44px 24px 56px; }\n header { border-bottom: 1px solid var(--line); padding-bottom: 24px; margin-bottom: 28px; }\n .eyebrow { color: var(--accent); font-size: 13px; font-weight: 700; letter-spacing: 0; text-transform: uppercase; }\n h1 { margin: 8px 0 12px; font-size: clamp(32px, 5vw, 54px); line-height: 1.03; letter-spacing: 0; }\n h2 { margin: 0 0 12px; font-size: 21px; letter-spacing: 0; }\n section { border-top: 1px solid var(--line); padding: 24px 0; }\n .summary { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); margin-top: 18px; }\n .metric { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 14px; }\n .metric span { display: block; color: var(--muted); font-size: 13px; }\n .metric strong { display: block; margin-top: 5px; font-size: 16px; overflow-wrap: anywhere; }\n ul.sources { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }\n ul.sources li { display: grid; gap: 4px; }\n .muted { color: var(--muted); }\n .safety { border: 1px solid oklch(78% 0.08 62); color: var(--warn-ink); background: var(--warn-bg); padding: 14px 16px; border-radius: 6px; }\n table { width: 100%; border-collapse: collapse; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }\n th, td { text-align: left; border-bottom: 1px solid var(--line); padding: 10px 12px; vertical-align: top; }\n th { background: var(--panel); font-size: 13px; color: var(--muted); }\n tr:last-child td { border-bottom: 0; }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; font-size: 0.92em; overflow-wrap: anywhere; }\n pre { margin: 0; padding: 16px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; background: var(--terminal); color: var(--terminal-ink); font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; white-space: pre-wrap; overflow-wrap: anywhere; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"eyebrow\">AgentLoopKit local evidence report</div>\n <h1>${escapeHtml(taskTitle)}</h1>\n <p class=\"muted\">Generated ${escapeHtml(generatedAt)} from local repository artifacts. No LLM, network call, telemetry, or command execution is required to render this report.</p>\n <div class=\"summary\">\n <div class=\"metric\"><span>Repository</span><strong>${escapeHtml(input.repoName)}</strong></div>\n <div class=\"metric\"><span>Branch</span><strong>${escapeHtml(input.branch || 'not available')}</strong></div>\n <div class=\"metric\"><span>Commit</span><strong>${escapeHtml(input.commit || 'not available')}</strong></div>\n <div class=\"metric\"><span>Working tree</span><strong>${escapeHtml(input.workingTreeStatus)}</strong></div>\n <div class=\"metric\"><span>Verification</span><strong>${escapeHtml(verificationStatus)}</strong></div>\n <div class=\"metric\"><span>Changed files</span><strong>${input.changedFiles.length}</strong></div>\n </div>\n </header>\n\n <section>\n <h2>Source Artifacts</h2>\n <ul class=\"sources\">\n ${renderSourcePath('Task contract', input.taskPath)}\n ${renderSourcePath('Verification report', input.verificationPath)}\n ${renderSourcePath('Handoff summary', input.handoffPath)}\n </ul>\n </section>\n\n <section>\n <h2>Changed Files</h2>\n ${renderChangedFiles(input.changedFiles)}\n </section>\n\n ${renderMarkdownBlock('Task Contract', input.taskMarkdown, 'No task contract was found.')}\n ${renderMarkdownBlock('Verification Evidence', input.verificationMarkdown, 'No verification report was found.')}\n ${renderMarkdownBlock('Reviewer Handoff', input.handoffMarkdown, 'No handoff summary was found.')}\n ${renderMarkdownBlock('Current Deterministic Summary', input.summaryMarkdown, 'No deterministic summary was generated.')}\n\n <section>\n <h2>Diff Stats</h2>\n <pre>${escapeHtml(input.diffStat?.trim() || 'No diff stats available.')}</pre>\n </section>\n\n <section>\n <h2>Safety Notes</h2>\n <div class=\"safety\">This report is a local static artifact. It must not be treated as proof that verification passed unless the verification section says so. Review protected areas such as secrets, auth, billing, deployment, migrations, lockfiles, and public APIs before merge.</div>\n </section>\n </main>\n</body>\n</html>\n`;\n\n return { html, metadata };\n}\n\nexport async function writeHtmlReport(options: WriteHtmlReportOptions): Promise<WrittenHtmlReport> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const cwd = options.cwd;\n const taskPath =\n resolveUserPath(cwd, options.taskPath) ??\n (await getActiveTaskPath({ cwd, config: options.config })) ??\n (await latestMarkdownFile(path.join(cwd, options.config.paths.tasksDir)));\n const verificationPath =\n resolveUserPath(cwd, options.reportPath) ??\n (await latestMatchingMarkdownFile(\n path.join(cwd, options.config.paths.reportsDir),\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/,\n ));\n const handoffPath =\n resolveUserPath(cwd, options.handoffPath) ??\n (await latestMatchingMarkdownFile(\n path.join(cwd, options.config.paths.handoffsDir),\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-pr-summary\\.md$/,\n ));\n\n const [status, branch, commit, diffStat, taskMarkdown, verificationMarkdown, handoffMarkdown] =\n await Promise.all([\n getGitStatus(cwd),\n getGitBranch(cwd),\n getGitCommit(cwd),\n getGitDiffStat(cwd),\n readMarkdownIfExists(taskPath),\n readMarkdownIfExists(verificationPath),\n readMarkdownIfExists(handoffPath),\n ]);\n const changedFiles = await parseGitStatus(status);\n const summary = await summarizeRepository({\n cwd,\n config: options.config,\n taskPath,\n reportPath: verificationPath,\n timestamp,\n write: false,\n });\n const report = generateHtmlReport({\n timestamp,\n nowIso: options.nowIso,\n repoName: options.config.project.name || path.basename(cwd),\n branch,\n commit,\n workingTreeStatus: status.trim() ? 'dirty' : 'clean or unavailable',\n taskPath: normalizeDisplayPath(cwd, taskPath),\n verificationPath: normalizeDisplayPath(cwd, verificationPath),\n handoffPath: normalizeDisplayPath(cwd, handoffPath),\n changedFiles,\n diffStat,\n taskMarkdown,\n verificationMarkdown,\n handoffMarkdown,\n summaryMarkdown: summary.markdown,\n });\n const outPath =\n resolveUserPath(cwd, options.outPath) ??\n path.join(cwd, options.config.paths.reportsDir, `${timestamp}-agentloop-report.html`);\n\n await writeTextFile(outPath, report.html);\n\n return {\n ...report,\n outPath,\n sourcePaths: {\n task: normalizeDisplayPath(cwd, taskPath),\n verification: normalizeDisplayPath(cwd, verificationPath),\n handoff: normalizeDisplayPath(cwd, handoffPath),\n },\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { writeEvidenceBadge } from '../../core/badge.js';\n\nexport function badgeCommand() {\n return new Command('badge')\n .description('Generate a local SVG evidence badge')\n .option('--source <source>', 'badge source: verification or gates', 'verification')\n .option('--out <path>', 'output SVG path')\n .option('--strict', 'use strict gate status when source is gates')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: { source?: string; out?: string; strict?: boolean; json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await writeEvidenceBadge({\n cwd: process.cwd(),\n config,\n source: options.source,\n outPath: options.out,\n strict: options.strict,\n });\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n outPath: result.outPath,\n source: result.source,\n status: result.status,\n label: result.label,\n message: result.message,\n sourcePath: result.sourcePath,\n },\n null,\n 2,\n ),\n );\n } else {\n console.log(`# AgentLoopKit Badge\n\nBadge written: ${result.outPath}\nSource: ${result.source}\nStatus: ${result.status}\nMessage: ${result.message}`);\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile, readdir, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { checkGates, GateStatus } from './check-gates.js';\nimport { AgentLoopError } from './errors.js';\n\nexport type BadgeSource = 'verification' | 'gates';\nexport type BadgeStatus = GateStatus | 'missing' | 'not-run' | 'unknown';\n\nexport type SvgBadgeInput = {\n label: string;\n message: string;\n status: BadgeStatus;\n};\n\nexport type SvgBadgeResult = SvgBadgeInput & {\n svg: string;\n};\n\nexport type EvidenceBadgeResult = {\n outPath: string;\n source: BadgeSource;\n status: BadgeStatus;\n label: string;\n message: string;\n sourcePath?: string;\n svg: string;\n};\n\nconst verificationReportPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/;\n\nfunction escapeXml(value: string) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction statusColor(status: BadgeStatus) {\n switch (status) {\n case 'pass':\n return '#2f855a';\n case 'fail':\n return '#c2410c';\n case 'warn':\n case 'not-run':\n case 'missing':\n case 'unknown':\n return '#a16207';\n }\n}\n\nfunction textWidth(value: string) {\n return Math.max(44, value.length * 7 + 18);\n}\n\nfunction parseSource(source: string | undefined): BadgeSource {\n const clean = source?.trim().toLowerCase() || 'verification';\n if (clean === 'verification' || clean === 'gates') return clean;\n throw new AgentLoopError('Unsupported badge source. Use one of: verification, gates.');\n}\n\nasync function latestVerificationReport(dir: string) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (await readdir(dir, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && verificationReportPattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n return entries.at(-1)?.filePath;\n}\n\nfunction extractVerificationStatus(markdown: string): BadgeStatus {\n const status = markdown\n .match(/Overall status:\\s*([a-z-]+)/i)?.[1]\n ?.trim()\n .toLowerCase();\n if (status === 'pass' || status === 'fail' || status === 'not-run') return status;\n return 'unknown';\n}\n\nfunction normalizeDisplayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nexport function generateSvgBadge(input: SvgBadgeInput): SvgBadgeResult {\n const labelWidth = textWidth(input.label);\n const messageWidth = textWidth(input.message);\n const totalWidth = labelWidth + messageWidth;\n const color = statusColor(input.status);\n const label = escapeXml(input.label);\n const message = escapeXml(input.message);\n\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"20\" role=\"img\" aria-label=\"${label}: ${message}\">\n <title>${label}: ${message}</title>\n <linearGradient id=\"s\" x2=\"0\" y2=\"100%\">\n <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".08\"/>\n <stop offset=\"1\" stop-opacity=\".08\"/>\n </linearGradient>\n <clipPath id=\"r\"><rect width=\"${totalWidth}\" height=\"20\" rx=\"4\"/></clipPath>\n <g clip-path=\"url(#r)\">\n <rect width=\"${labelWidth}\" height=\"20\" fill=\"#334155\"/>\n <rect x=\"${labelWidth}\" width=\"${messageWidth}\" height=\"20\" fill=\"${color}\"/>\n <rect width=\"${totalWidth}\" height=\"20\" fill=\"url(#s)\"/>\n </g>\n <g fill=\"#fff\" text-anchor=\"middle\" font-family=\"Verdana,Geneva,DejaVu Sans,sans-serif\" font-size=\"11\">\n <text x=\"${Math.floor(labelWidth / 2)}\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">${label}</text>\n <text x=\"${Math.floor(labelWidth / 2)}\" y=\"14\">${label}</text>\n <text x=\"${labelWidth + Math.floor(messageWidth / 2)}\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">${message}</text>\n <text x=\"${labelWidth + Math.floor(messageWidth / 2)}\" y=\"14\">${message}</text>\n </g>\n</svg>\n`;\n\n return { ...input, svg };\n}\n\nexport async function writeEvidenceBadge(options: {\n cwd: string;\n config: AgentLoopConfig;\n source?: string;\n outPath?: string;\n strict?: boolean;\n}): Promise<EvidenceBadgeResult> {\n const source = parseSource(options.source);\n let status: BadgeStatus;\n let label: string;\n let message: string;\n let sourcePath: string | undefined;\n\n if (source === 'verification') {\n const reportPath = await latestVerificationReport(\n path.join(options.cwd, options.config.paths.reportsDir),\n );\n sourcePath = normalizeDisplayPath(options.cwd, reportPath);\n if (!reportPath) {\n status = 'missing';\n label = 'verification';\n message = 'missing';\n } else {\n const markdown = await readFile(reportPath, 'utf8');\n status = extractVerificationStatus(markdown);\n label = 'verification';\n message = status;\n }\n } else {\n const gates = await checkGates({\n cwd: options.cwd,\n config: options.config,\n strict: options.strict,\n });\n status = gates.overallStatus;\n label = 'gates';\n message = status;\n }\n\n const badge = generateSvgBadge({ label, message, status });\n const outPath =\n options.outPath ??\n path.join(options.cwd, options.config.paths.reportsDir, `agentloop-${source}.svg`);\n const absoluteOutPath = path.isAbsolute(outPath) ? outPath : path.resolve(options.cwd, outPath);\n\n await writeTextFile(absoluteOutPath, badge.svg);\n\n return {\n outPath: absoluteOutPath,\n source,\n status,\n label,\n message,\n sourcePath,\n svg: badge.svg,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getPolicyStatus, listPolicies, readPolicy } from '../../core/policy.js';\nimport type { ListedPolicy, PolicyDocument, PolicyStatusReport } from '../../core/policy.js';\n\nfunction printPolicyList(policies: ListedPolicy[], options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ policies }, null, 2));\n return;\n }\n\n if (policies.length === 0) {\n console.log('No AgentLoopKit policies found.');\n console.log('Run `agentloop init` to generate .agentloop/policies/.');\n return;\n }\n\n console.log('AgentLoopKit policies:');\n for (const policy of policies) {\n console.log(`- ${policy.title}`);\n console.log(` ${policy.path}`);\n }\n}\n\nfunction printPolicy(policy: PolicyDocument, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ policy }, null, 2));\n return;\n }\n\n process.stdout.write(policy.content);\n}\n\nfunction printPolicyStatus(report: PolicyStatusReport, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n console.log('AgentLoopKit policy status:');\n console.log(\n `Summary: ${report.summary.current} current, ${report.summary.modified} modified, ${report.summary.missing} missing, ${report.summary.extra} extra`,\n );\n\n for (const policy of report.policies) {\n console.log(`- ${policy.status}: ${policy.title}`);\n console.log(` ${policy.path}`);\n }\n\n const hasDrift =\n report.summary.modified > 0 || report.summary.missing > 0 || report.summary.extra > 0;\n if (hasDrift) {\n console.log('');\n console.log('Next step: review policy differences before changing repo rules.');\n }\n}\n\nexport function policyCommand() {\n const command = new Command('policy').description('List or inspect local AgentLoopKit policies');\n\n command\n .command('list')\n .description('List local policies under .agentloop/policies')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const policies = await listPolicies({ cwd: process.cwd(), config });\n printPolicyList(policies, options);\n });\n\n command\n .command('status')\n .description('Show local policy template status')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const status = await getPolicyStatus({ cwd: process.cwd(), config });\n printPolicyStatus(status, options);\n });\n\n command\n .command('show')\n .argument('<policy>', 'policy name, such as security or security-policy.md')\n .description('Show a local policy')\n .option('--json', 'print machine-readable output')\n .action(async (policyName: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const policy = await readPolicy({ cwd: process.cwd(), config, policyName });\n printPolicy(policy, options);\n });\n\n return command;\n}\n","import path from 'node:path';\nimport { readdir, readFile, stat } from 'node:fs/promises';\nimport type { AgentLoopConfig } from './config.js';\nimport { AgentLoopError } from './errors.js';\nimport { getTemplateRoot } from './template-renderer.js';\n\nexport type ListedPolicy = {\n name: string;\n title: string;\n path: string;\n};\n\nexport type PolicyDocument = ListedPolicy & {\n content: string;\n};\n\nexport type PolicyStatusValue = 'current' | 'modified' | 'missing' | 'extra';\n\nexport type PolicyStatusEntry = ListedPolicy & {\n status: PolicyStatusValue;\n templatePath: string | null;\n};\n\nexport type PolicyStatusSummary = Record<PolicyStatusValue, number>;\n\nexport type PolicyStatusReport = {\n policies: PolicyStatusEntry[];\n summary: PolicyStatusSummary;\n};\n\nfunction policyRoot(cwd: string, config: AgentLoopConfig) {\n return path.resolve(cwd, config.paths.agentloopDir, 'policies');\n}\n\nfunction toStoredPath(cwd: string, absolutePath: string) {\n return path.relative(cwd, absolutePath).split(path.sep).join('/');\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction normalizePolicyName(policyName: string) {\n return policyName\n .trim()\n .replace(/\\.md$/i, '')\n .replace(/-policy$/i, '')\n .toLowerCase();\n}\n\nfunction normalizeContent(content: string) {\n return content.replace(/\\r\\n/g, '\\n');\n}\n\nasync function ensurePolicyRoot(root: string) {\n const rootStat = await stat(root).catch(() => undefined);\n if (!rootStat?.isDirectory()) {\n throw new AgentLoopError(\n 'No AgentLoopKit policy files found. Run `agentloop init` to generate .agentloop/policies/.',\n );\n }\n}\n\nasync function readMarkdownFiles(root: string) {\n const entries = await readdir(root, { withFileTypes: true });\n const files = [];\n\n for (const entry of entries) {\n if (!entry.isFile() || !entry.name.endsWith('.md')) continue;\n const absolutePath = path.join(root, entry.name);\n const content = await readFile(absolutePath, 'utf8');\n files.push({\n name: path.basename(entry.name, '.md'),\n fileName: entry.name,\n absolutePath,\n content,\n title: extractHeading(content, path.basename(entry.name, '.md')),\n });\n }\n\n return files.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function listPolicies(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<ListedPolicy[]> {\n const root = policyRoot(options.cwd, options.config);\n await ensurePolicyRoot(root);\n const policies = await readMarkdownFiles(root);\n\n return policies.map((policy) => ({\n name: policy.name,\n title: policy.title,\n path: toStoredPath(options.cwd, policy.absolutePath),\n }));\n}\n\nexport async function readPolicy(options: {\n cwd: string;\n config: AgentLoopConfig;\n policyName: string;\n}): Promise<PolicyDocument> {\n const policies = await listPolicies(options);\n const requested = normalizePolicyName(options.policyName);\n const policy = policies.find((candidate) => normalizePolicyName(candidate.name) === requested);\n\n if (!policy) {\n throw new AgentLoopError(`Policy not found: ${options.policyName}`);\n }\n\n const root = policyRoot(options.cwd, options.config);\n const absolutePath = path.join(root, path.basename(policy.path));\n const content = await readFile(absolutePath, 'utf8');\n\n return {\n ...policy,\n content,\n };\n}\n\nexport async function getPolicyStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<PolicyStatusReport> {\n const root = policyRoot(options.cwd, options.config);\n await ensurePolicyRoot(root);\n\n const templateRoot = path.join(getTemplateRoot(), 'policies');\n const [localPolicies, templatePolicies] = await Promise.all([\n readMarkdownFiles(root),\n readMarkdownFiles(templateRoot),\n ]);\n\n const localByName = new Map(localPolicies.map((policy) => [policy.name, policy]));\n const templateByName = new Map(templatePolicies.map((policy) => [policy.name, policy]));\n const names = [...new Set([...templateByName.keys(), ...localByName.keys()])].sort((left, right) =>\n left.localeCompare(right),\n );\n const summary: PolicyStatusSummary = {\n current: 0,\n modified: 0,\n missing: 0,\n extra: 0,\n };\n const policies = names.map((name): PolicyStatusEntry => {\n const local = localByName.get(name);\n const template = templateByName.get(name);\n const status: PolicyStatusValue = !template\n ? 'extra'\n : !local\n ? 'missing'\n : normalizeContent(local.content) === normalizeContent(template.content)\n ? 'current'\n : 'modified';\n\n summary[status] += 1;\n\n return {\n name,\n title: local?.title ?? template?.title ?? name,\n path: toStoredPath(options.cwd, path.join(root, `${name}.md`)),\n status,\n templatePath: template ? `templates/policies/${template.fileName}` : null,\n };\n });\n\n return {\n policies,\n summary,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getCiSummary } from '../../core/ci-summary.js';\n\nexport function ciSummaryCommand() {\n return new Command('ci-summary')\n .description('Summarize CI context and AgentLoop evidence')\n .option('--write', 'write summary to .agentloop/reports')\n .option('--out <path>', 'output Markdown path when using --write')\n .option('--json', 'print machine-readable output')\n .action(async (options: { write?: boolean; out?: string; json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await getCiSummary({\n cwd: process.cwd(),\n config,\n write: options.write,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n if (result.writtenPath) console.log(`\\nCI summary written: ${result.writtenPath}`);\n }\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { writeTextFile, pathExists } from './file-system.js';\nimport {\n latestMarkdownFile,\n prSummaryPattern,\n verificationReportPattern,\n} from './artifacts.js';\nimport { checkGates, CheckGatesResult } from './check-gates.js';\nimport { getActiveTaskPath } from './task-state.js';\nimport { detectCiContext, VerificationCiContext } from './verification.js';\n\nexport type CiSummaryCiContext =\n | VerificationCiContext\n | {\n provider: 'none';\n providerName: 'No CI detected';\n };\n\nexport type CiSummaryArtifact = {\n path: string;\n title: string;\n};\n\nexport type CiSummaryTask = CiSummaryArtifact & {\n status: string;\n};\n\nexport type CiSummaryVerification = CiSummaryArtifact & {\n overallStatus: string;\n};\n\nexport type CiSummaryResult = {\n timestamp: string;\n ci: CiSummaryCiContext;\n evidence: {\n task?: CiSummaryTask;\n verification?: CiSummaryVerification;\n handoff?: CiSummaryArtifact;\n };\n gates: Pick<CheckGatesResult, 'overallStatus' | 'gates'>;\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n writtenPath?: string;\n};\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nfunction displayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function readTask(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryTask | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nasync function readVerification(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryVerification | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n overallStatus: extractOverallStatus(markdown),\n };\n}\n\nasync function readHandoff(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryArtifact | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n };\n}\n\nfunction chooseNextAction(input: {\n verification?: CiSummaryVerification;\n gates: CheckGatesResult;\n}) {\n if (!input.verification) {\n return {\n command: 'agentloop verify',\n reason: 'No verification report was found for this CI summary.',\n };\n }\n\n if (input.verification.overallStatus === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'The latest verification report failed. Fix failures and rerun verification.',\n };\n }\n\n return {\n command: 'agentloop check-gates --strict',\n reason: 'Use strict gates in CI after verification and handoff artifacts exist.',\n };\n}\n\nfunction renderCiLines(ci: CiSummaryCiContext) {\n const lines = [`- Provider: ${ci.providerName}`];\n if ('workflow' in ci && ci.workflow) lines.push(`- Workflow: ${ci.workflow}`);\n if ('event' in ci && ci.event) lines.push(`- Event: ${ci.event}`);\n if ('ref' in ci && ci.ref) lines.push(`- Ref: ${ci.ref}`);\n if ('commit' in ci && ci.commit) lines.push(`- Commit: ${ci.commit}`);\n if ('runUrl' in ci && ci.runUrl) lines.push(`- Run URL: ${ci.runUrl}`);\n if ('runAttempt' in ci && ci.runAttempt) lines.push(`- Run attempt: ${ci.runAttempt}`);\n return lines.join('\\n');\n}\n\nfunction renderArtifactLine(label: string, artifact: CiSummaryArtifact | undefined) {\n return artifact ? `- ${label}: ${artifact.title} - ${artifact.path}` : `- ${label}: not found`;\n}\n\nfunction renderMarkdown(result: Omit<CiSummaryResult, 'markdown' | 'writtenPath'>) {\n return `# AgentLoopKit CI Summary\n\n- Generated: ${result.timestamp}\n- Overall status: ${result.gates.overallStatus}\n\n## CI Context\n${renderCiLines(result.ci)}\n\n## AgentLoop Evidence\n${renderArtifactLine('Task', result.evidence.task)}\n- Verification: ${\n result.evidence.verification\n ? `${result.evidence.verification.overallStatus} - ${result.evidence.verification.path}`\n : 'not found'\n }\n${renderArtifactLine('Handoff', result.evidence.handoff)}\n- Gates: ${result.gates.overallStatus}\n\n## Gate Details\n${result.gates.gates\n .map((gate) => `- [${gate.status}] ${gate.name}: ${gate.message}`)\n .join('\\n')}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n\n## Safety\n\nThis command reads allowlisted CI metadata and local AgentLoop artifacts only. It does not call CI provider APIs, read secrets, upload files, run verification commands, or inspect environment variables beyond supported CI provenance fields.\n`;\n}\n\nexport async function getCiSummary(options: {\n cwd: string;\n config: AgentLoopConfig;\n env?: NodeJS.ProcessEnv;\n timestamp?: string;\n nowIso?: string;\n write?: boolean;\n outPath?: string;\n}): Promise<CiSummaryResult> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const nowIso = options.nowIso ?? new Date().toISOString();\n const reportsDir = path.join(options.cwd, options.config.paths.reportsDir);\n const handoffsDir = path.join(options.cwd, options.config.paths.handoffsDir);\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const verificationPath = await latestMarkdownFile(reportsDir, {\n pattern: verificationReportPattern,\n });\n const handoffPath = await latestMarkdownFile(handoffsDir, { pattern: prSummaryPattern });\n const [task, verification, handoff, gates] = await Promise.all([\n readTask(options.cwd, taskPath),\n readVerification(options.cwd, verificationPath),\n readHandoff(options.cwd, handoffPath),\n checkGates({ cwd: options.cwd, config: options.config }),\n ]);\n const ci: CiSummaryCiContext = detectCiContext(options.env ?? process.env) ?? {\n provider: 'none',\n providerName: 'No CI detected',\n };\n const withoutMarkdown = {\n timestamp: nowIso,\n ci,\n evidence: {\n task,\n verification,\n handoff,\n },\n gates: {\n overallStatus: gates.overallStatus,\n gates: gates.gates,\n },\n nextAction: chooseNextAction({ verification, gates }),\n };\n const markdown = renderMarkdown(withoutMarkdown);\n const writtenPath = options.write\n ? (resolveUserPath(options.cwd, options.outPath) ??\n path.join(options.cwd, options.config.paths.reportsDir, `${timestamp}-ci-summary.md`))\n : undefined;\n\n if (writtenPath) await writeTextFile(writtenPath, markdown);\n\n return {\n ...withoutMarkdown,\n markdown,\n writtenPath,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { generateReleaseNotes } from '../../core/release-notes.js';\n\nexport function releaseNotesCommand() {\n return new Command('release-notes')\n .description('Generate deterministic release notes')\n .option('--from <ref>', 'git ref to compare from')\n .option('--to <ref>', 'git ref to compare to', 'HEAD')\n .option('--release-version <version>', 'release version; defaults to package.json version')\n .option('--write', 'write notes to .agentloop/handoffs')\n .option('--out <path>', 'output Markdown path when using --write')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n from?: string;\n to?: string;\n releaseVersion?: string;\n write?: boolean;\n out?: string;\n json?: boolean;\n }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await generateReleaseNotes({\n cwd: process.cwd(),\n config,\n from: options.from,\n to: options.to,\n version: options.releaseVersion,\n write: options.write,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(result.markdown);\n if (result.writtenPath) {\n console.log(`\\nRelease notes written: ${result.writtenPath}`);\n } else {\n console.log('\\nNo release notes file was written. Use --write to create one.');\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopConfig } from './config.js';\nimport { ciSummaryPattern, latestMarkdownFile, verificationReportPattern } from './artifacts.js';\nimport { formatTimestamp } from './dates.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { getGitBranch, getGitCommit } from './git.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type ReleaseNotesResult = {\n timestamp: string;\n packageName: string;\n version: string;\n gitRange: {\n from?: string;\n to: string;\n label: string;\n fallbackReason?: string;\n };\n branch: string;\n commit: string;\n commits: string[];\n changedFiles: Array<{ status: string; path: string }>;\n workingTree: {\n clean: boolean;\n files: string[];\n };\n changelogSection: string;\n evidence: {\n task?: { path: string; title: string; status: string };\n verification?: { path: string; overallStatus: string };\n ciSummary?: { path: string; title: string };\n };\n markdown: string;\n writtenPath?: string;\n};\n\ntype PackageMetadata = {\n name: string;\n version: string;\n};\n\nfunction displayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function gitLines(cwd: string, args: string[]) {\n const result = await execa('git', args, { cwd, reject: false });\n if (result.exitCode !== 0) return [];\n return result.stdout\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nasync function gitRefExists(cwd: string, ref: string) {\n const result = await execa('git', ['rev-parse', '--verify', '--quiet', `${ref}^{commit}`], {\n cwd,\n reject: false,\n });\n return result.exitCode === 0;\n}\n\nasync function readPackageMetadata(cwd: string): Promise<PackageMetadata> {\n const packagePath = path.join(cwd, 'package.json');\n if (!(await pathExists(packagePath))) return { name: path.basename(cwd), version: '0.0.0' };\n const parsed = JSON.parse(await readFile(packagePath, 'utf8')) as Partial<PackageMetadata>;\n return {\n name: typeof parsed.name === 'string' && parsed.name ? parsed.name : path.basename(cwd),\n version: typeof parsed.version === 'string' && parsed.version ? parsed.version : '0.0.0',\n };\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nasync function readTask(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nasync function readVerification(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n overallStatus: extractOverallStatus(markdown),\n };\n}\n\nasync function readCiSummary(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n };\n}\n\nasync function readChangelogSection(cwd: string, version: string) {\n const changelogPath = path.join(cwd, 'CHANGELOG.md');\n if (!(await pathExists(changelogPath))) return '';\n const changelog = await readFile(changelogPath, 'utf8');\n const escapedVersion = version.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const heading = new RegExp(`^##\\\\s+\\\\[?${escapedVersion}\\\\]?\\\\s*$`, 'im');\n const match = heading.exec(changelog);\n if (!match || match.index === undefined) return '';\n const sectionStart = match.index + match[0].length;\n const rest = changelog.slice(sectionStart);\n const nextHeading = rest.search(/^##\\s+/m);\n return (nextHeading === -1 ? rest : rest.slice(0, nextHeading)).trim();\n}\n\nasync function findPreviousTag(cwd: string, version: string) {\n const currentTags = new Set([`v${version}`, version]);\n const tags = await gitLines(cwd, ['tag', '--list', '--sort=-creatordate']);\n return tags.find((tag) => !currentTags.has(tag));\n}\n\nfunction parseNameStatus(lines: string[]) {\n return lines.map((line) => {\n const [status = '?', ...rest] = line.split(/\\s+/);\n return { status, path: rest.join(' ') };\n });\n}\n\nfunction renderList(lines: string[], empty: string) {\n return lines.length ? lines.map((line) => `- ${line}`).join('\\n') : `- ${empty}`;\n}\n\nfunction renderChangedFiles(files: Array<{ status: string; path: string }>) {\n return files.length\n ? files.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')\n : '- No changed files detected for the selected range.';\n}\n\nfunction renderWorkingTree(files: string[]) {\n return files.length\n ? [\n '- Uncommitted changes detected. Commit or stash them before publishing a release.',\n ...files.map((file) => `- \\`${file}\\``),\n ].join('\\n')\n : '- No uncommitted changes detected.';\n}\n\nfunction renderEvidence(result: Omit<ReleaseNotesResult, 'markdown' | 'writtenPath'>) {\n const lines = [];\n lines.push(\n result.evidence.task\n ? `- Task: ${result.evidence.task.title} (${result.evidence.task.status}) - ${result.evidence.task.path}`\n : '- Task: not found',\n );\n lines.push(\n result.evidence.verification\n ? `- Verification: Overall status: ${result.evidence.verification.overallStatus} - ${result.evidence.verification.path}`\n : '- Verification: not found',\n );\n lines.push(\n result.evidence.ciSummary\n ? `- CI summary: ${result.evidence.ciSummary.title} - ${result.evidence.ciSummary.path}`\n : '- CI summary: not found',\n );\n return lines.join('\\n');\n}\n\nfunction renderMarkdown(result: Omit<ReleaseNotesResult, 'markdown' | 'writtenPath'>) {\n const changelogLines = [\n ...(result.gitRange.fallbackReason ? [`- ${result.gitRange.fallbackReason}`] : []),\n result.changelogSection || '- No matching CHANGELOG.md section found.',\n ];\n\n return `# Release Notes\n\n- Generated: ${result.timestamp}\n- Package: ${result.packageName}\n- Version: ${result.version}\n- Range: ${result.gitRange.label}\n- Branch: ${result.branch || 'unknown'}\n- Commit: ${result.commit || 'unknown'}\n\n## Changelog\n${changelogLines.join('\\n')}\n\n## Commits\n${renderList(result.commits, 'No commits found for the selected range.')}\n\n## Changed Files\n${renderChangedFiles(result.changedFiles)}\n\n## Working Tree\n${renderWorkingTree(result.workingTree.files)}\n\n## AgentLoop Evidence\n${renderEvidence(result)}\n\n## Release Checklist\n- Review these notes before publishing.\n- Confirm npm and GitHub release status from the registry or release page.\n- Attach verification evidence when creating a release.\n- Keep npm catch-up notes honest if the registry still serves an older version.\n\n## Safety\nThis command is local and deterministic. Does not create tags, publish packages, call external APIs, read tokens, upload files, or rewrite changelogs.\n`;\n}\n\nexport async function generateReleaseNotes(options: {\n cwd: string;\n config: AgentLoopConfig;\n version?: string;\n from?: string;\n to?: string;\n timestamp?: string;\n write?: boolean;\n outPath?: string;\n}): Promise<ReleaseNotesResult> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const packageMetadata = await readPackageMetadata(options.cwd);\n const version = options.version ?? packageMetadata.version;\n const to = options.to ?? 'HEAD';\n const requestedFrom = options.from ?? (await findPreviousTag(options.cwd, version));\n const from =\n requestedFrom && (await gitRefExists(options.cwd, requestedFrom)) ? requestedFrom : undefined;\n const fallbackReason = requestedFrom\n ? from\n ? undefined\n : `Git ref \"${requestedFrom}\" was not found; using available local context.`\n : 'No previous version tag was found; using available local context.';\n const gitRange = {\n from,\n to,\n label: from\n ? `${from}..${to}`\n : requestedFrom\n ? `${to} (missing from: ${requestedFrom})`\n : `${to} (no previous tag)`,\n fallbackReason,\n };\n const commitArgs = from\n ? ['log', '--pretty=format:%s', `${from}..${to}`]\n : ['log', '--pretty=format:%s', '-n', '10', to];\n const diffArgs = from ? ['diff', '--name-status', `${from}..${to}`] : [];\n const reportsDir = path.join(options.cwd, options.config.paths.reportsDir);\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const verificationPath = await latestMarkdownFile(reportsDir, {\n pattern: verificationReportPattern,\n });\n const ciSummaryPath = await latestMarkdownFile(reportsDir, {\n pattern: ciSummaryPattern,\n });\n const [\n branch,\n commit,\n commits,\n diffLines,\n statusLines,\n changelogSection,\n task,\n verification,\n ciSummary,\n ] = await Promise.all([\n getGitBranch(options.cwd),\n getGitCommit(options.cwd),\n gitLines(options.cwd, commitArgs),\n diffArgs.length ? gitLines(options.cwd, diffArgs) : Promise.resolve([]),\n gitLines(options.cwd, ['status', '--short']),\n readChangelogSection(options.cwd, version),\n readTask(options.cwd, taskPath),\n readVerification(options.cwd, verificationPath),\n readCiSummary(options.cwd, ciSummaryPath),\n ]);\n const withoutMarkdown = {\n timestamp,\n packageName: packageMetadata.name,\n version,\n gitRange,\n branch,\n commit,\n commits,\n changedFiles: parseNameStatus(diffLines),\n workingTree: {\n clean: statusLines.length === 0,\n files: statusLines,\n },\n changelogSection,\n evidence: {\n task,\n verification,\n ciSummary,\n },\n };\n const markdown = renderMarkdown(withoutMarkdown);\n const writtenPath = options.write\n ? (resolveUserPath(options.cwd, options.outPath) ??\n path.join(options.cwd, options.config.paths.handoffsDir, `${timestamp}-release-notes.md`))\n : undefined;\n if (writtenPath) await writeTextFile(writtenPath, markdown);\n\n return {\n ...withoutMarkdown,\n markdown,\n writtenPath,\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { Command } from 'commander';\nimport { checkNpmStatus, shouldFailNpmStatusExpectation } from '../../core/npm-status.js';\n\nfunction parseTimeout(value: string) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error('timeout must be a positive integer');\n }\n return parsed;\n}\n\nexport function npmStatusCommand() {\n return new Command('npm-status')\n .description('Check npm registry catch-up status')\n .option('--package-name <name>', 'package name; defaults to package.json name')\n .option('--local-version <version>', 'local version; defaults to package.json version')\n .option(\n '--registry-json <path>',\n 'read captured `npm view <package> version versions --json` output instead of running npm',\n )\n .option('--timeout-ms <ms>', 'npm view timeout in milliseconds', parseTimeout, 15000)\n .option('--expect-current', 'exit 1 unless npm latest matches the local version')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n packageName?: string;\n localVersion?: string;\n registryJson?: string;\n timeoutMs: number;\n expectCurrent?: boolean;\n json?: boolean;\n }) => {\n const registryJson = options.registryJson\n ? await readFile(options.registryJson, 'utf8')\n : undefined;\n const result = await checkNpmStatus({\n cwd: process.cwd(),\n packageName: options.packageName,\n localVersion: options.localVersion,\n registryJson,\n timeoutMs: options.timeoutMs,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n\n if (options.expectCurrent && shouldFailNpmStatusExpectation(result)) {\n process.exitCode = 1;\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopError } from './errors.js';\nimport { pathExists } from './file-system.js';\n\nexport type NpmCatchUpStatus = 'current' | 'catch-up-needed' | 'unknown';\n\nexport type NpmRegistryMetadata = {\n latest?: string;\n versions: string[];\n};\n\nexport type NpmStatusResult = {\n packageName: string;\n localVersion: string;\n status: NpmCatchUpStatus;\n registry: NpmRegistryMetadata & {\n hasLocalVersion: boolean;\n };\n source: {\n command: string;\n exitCode: number;\n error?: string;\n };\n recommendation: string;\n safety: {\n does: string[];\n doesNot: string[];\n };\n markdown: string;\n};\n\ntype PackageMetadata = {\n name: string;\n version: string;\n};\n\ntype NpmViewRunner = (packageName: string) => Promise<{\n exitCode: number;\n stdout: string;\n stderr: string;\n}>;\n\nfunction uniqueStrings(values: string[]) {\n return Array.from(new Set(values.filter(Boolean)));\n}\n\nfunction valueAsString(value: unknown) {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction isString(value: string | undefined): value is string {\n return typeof value === 'string';\n}\n\nfunction valueAsVersions(value: unknown) {\n if (Array.isArray(value)) return uniqueStrings(value.map(valueAsString).filter(isString));\n const single = valueAsString(value);\n return single ? [single] : [];\n}\n\nexport function parseNpmViewJson(json: string): NpmRegistryMetadata {\n const parsed = JSON.parse(json) as unknown;\n if (typeof parsed === 'string') return { latest: parsed, versions: [parsed] };\n if (!parsed || typeof parsed !== 'object') {\n throw new AgentLoopError('npm view JSON must be an object or string.');\n }\n\n const record = parsed as Record<string, unknown>;\n const versions = valueAsVersions(record.versions);\n const latest = valueAsString(record.version) ?? versions.at(-1);\n if (!latest) throw new AgentLoopError('npm view JSON did not include a version.');\n\n return {\n latest,\n versions: versions.includes(latest) ? versions : uniqueStrings([...versions, latest]),\n };\n}\n\nasync function readPackageMetadata(cwd: string): Promise<PackageMetadata> {\n const packagePath = path.join(cwd, 'package.json');\n if (!(await pathExists(packagePath))) {\n return { name: path.basename(cwd), version: '0.0.0' };\n }\n\n const parsed = JSON.parse(await readFile(packagePath, 'utf8')) as Partial<PackageMetadata>;\n return {\n name: typeof parsed.name === 'string' && parsed.name ? parsed.name : path.basename(cwd),\n version: typeof parsed.version === 'string' && parsed.version ? parsed.version : '0.0.0',\n };\n}\n\nfunction defaultNpmViewRunner(cwd: string, timeoutMs: number): NpmViewRunner {\n return async (packageName) => {\n const result = await execa('npm', ['view', packageName, 'version', 'versions', '--json'], {\n cwd,\n reject: false,\n timeout: timeoutMs,\n });\n return {\n exitCode: result.exitCode ?? 1,\n stdout: result.stdout,\n stderr: result.stderr,\n };\n };\n}\n\nfunction statusLabel(status: NpmCatchUpStatus) {\n switch (status) {\n case 'current':\n return 'npm latest matches local package version';\n case 'catch-up-needed':\n return 'npm latest differs from local package version';\n case 'unknown':\n return 'npm status could not be determined';\n }\n}\n\nfunction recommendation(status: NpmCatchUpStatus) {\n switch (status) {\n case 'current':\n return 'npm has caught up. Remove temporary GitHub tarball fallback docs if they are still present.';\n case 'catch-up-needed':\n return 'Publish the current source version after npm authentication or trusted publishing works. Do not backfill stale intermediate versions from the current checkout.';\n case 'unknown':\n return 'Fix the npm registry check and rerun this command before claiming npm availability.';\n }\n}\n\nfunction renderVersions(versions: string[]) {\n return versions.length ? versions.map((version) => `\\`${version}\\``).join(', ') : 'not available';\n}\n\nfunction renderMarkdown(result: Omit<NpmStatusResult, 'markdown'>) {\n const latest = result.registry.latest ? `\\`${result.registry.latest}\\`` : 'not available';\n const errorLine = result.source.error ? `\\n- Registry error: ${result.source.error}` : '';\n\n return `# npm Status\n\n- Package: \\`${result.packageName}\\`\n- Local version: \\`${result.localVersion}\\`\n- npm latest: ${latest}\n- Registry contains local version: ${result.registry.hasLocalVersion ? 'yes' : 'no'}\n- Registry versions: ${renderVersions(result.registry.versions)}\n- Status: ${statusLabel(result.status)}${errorLine}\n\n## Recommendation\n\n${result.recommendation}\n\n## Safety\n\nThis command only runs \\`npm view ${result.packageName} version versions --json\\` unless \\`--registry-json\\` is provided. It does not publish packages, create tags, create GitHub releases, read npm tokens, read .env files, upload files, or change package metadata.\n`;\n}\n\nexport async function checkNpmStatus(options: {\n cwd: string;\n packageName?: string;\n localVersion?: string;\n registryJson?: string;\n npmView?: NpmViewRunner;\n timeoutMs?: number;\n}): Promise<NpmStatusResult> {\n const packageMetadata = await readPackageMetadata(options.cwd);\n const packageName = options.packageName ?? packageMetadata.name;\n const localVersion = options.localVersion ?? packageMetadata.version;\n const source: NpmStatusResult['source'] = options.registryJson\n ? {\n command: 'captured npm view JSON',\n exitCode: 0,\n }\n : {\n command: `npm view ${packageName} version versions --json`,\n exitCode: 0,\n };\n const runner = options.npmView ?? defaultNpmViewRunner(options.cwd, options.timeoutMs ?? 15000);\n\n let registry: NpmRegistryMetadata = { versions: [] };\n let sourceResult: NpmStatusResult['source'] = source;\n try {\n if (options.registryJson) {\n registry = parseNpmViewJson(options.registryJson);\n } else {\n const result = await runner(packageName);\n sourceResult = {\n ...source,\n exitCode: result.exitCode,\n ...(result.exitCode === 0 ? {} : { error: result.stderr || result.stdout || 'npm view failed' }),\n };\n if (result.exitCode === 0) registry = parseNpmViewJson(result.stdout);\n }\n } catch (error) {\n sourceResult = {\n ...source,\n exitCode: source.exitCode || 1,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n\n const hasLocalVersion = registry.versions.includes(localVersion);\n const status: NpmCatchUpStatus = sourceResult.error\n ? 'unknown'\n : registry.latest === localVersion\n ? 'current'\n : 'catch-up-needed';\n const withoutMarkdown = {\n packageName,\n localVersion,\n status,\n registry: {\n ...registry,\n hasLocalVersion,\n },\n source: sourceResult,\n recommendation: recommendation(status),\n safety: {\n does: ['runs npm view when no captured registry JSON is provided'],\n doesNot: [\n 'publish packages',\n 'create tags',\n 'create GitHub releases',\n 'read npm tokens',\n 'read .env files',\n 'upload files',\n 'change package metadata',\n ],\n },\n };\n\n return {\n ...withoutMarkdown,\n markdown: renderMarkdown(withoutMarkdown),\n };\n}\n\nexport function shouldFailNpmStatusExpectation(result: NpmStatusResult) {\n return result.status !== 'current';\n}\n"],"mappings":"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","names":["Command","path","readdir","readFile","path","path","readFile","path","path","readFile","readFile","path","path","readFile","readFile","readdir","path","relativePath","readdir","path","path","readdir","relative","Command","path","path","path","path","Command","Command","path","relativePath","path","Command","Command","path","readFile","execa","lines","path","readFile","execa","overallStatus","Command","Command","path","readFile","path","readdir","stat","readdir","path","stat","path","mkdir","readdir","readFile","stat","path","relative","readFile","stat","mkdir","readdir","lines","path","readFile","Command","Command","path","path","Command","Command","Command","Command","Command","Command","path","readFile","stat","extractHeading","extractTaskStatus","readFile","stat","path","Command","Command","Command","Command","Command","Command","Command","Command","path","readFile","extractHeading","extractOverallStatus","path","chooseNextAction","renderMarkdown","readFile","Command","Command","path","readFile","readdir","stat","extractLine","path","readFile","readdir","stat","Command","Command","path","readFile","readdir","stat","verificationReportPattern","readdir","path","stat","extractVerificationStatus","normalizeDisplayPath","readFile","Command","Command","path","readdir","readFile","stat","path","toStoredPath","extractHeading","stat","readdir","readFile","Command","Command","path","readFile","extractHeading","extractTaskStatus","extractOverallStatus","path","resolveUserPath","readTask","readFile","chooseNextAction","lines","renderMarkdown","gate","Command","Command","path","readFile","execa","displayPath","path","resolveUserPath","execa","readFile","extractHeading","extractTaskStatus","extractOverallStatus","readTask","readVerification","lines","renderChangedFiles","renderMarkdown","Command","readFile","Command","path","readFile","execa","readPackageMetadata","path","readFile","execa","renderMarkdown","Command","readFile","Command"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/core/init.ts","../../src/core/constants.ts","../../src/core/config.ts","../../src/core/errors.ts","../../src/core/file-system.ts","../../src/core/package-manager.ts","../../src/core/project-detection.ts","../../src/core/template-renderer.ts","../../src/core/logger.ts","../../src/cli/commands/doctor.ts","../../src/core/doctor.ts","../../src/core/git.ts","../../src/core/safety.ts","../../src/cli/commands/create-task.ts","../../src/core/task-contract.ts","../../src/core/dates.ts","../../src/core/slug.ts","../../src/cli/commands/verify.ts","../../src/core/verification.ts","../../src/cli/commands/summarize.ts","../../src/core/pr-summary.ts","../../src/core/artifacts.ts","../../src/core/task-state.ts","../../src/cli/commands/install-agent.ts","../../src/core/agent-installation.ts","../../src/cli/commands/list-templates.ts","../../src/cli/commands/version.ts","../../src/core/version.ts","../../src/cli/commands/status.ts","../../src/core/status.ts","../../src/cli/commands/next.ts","../../src/cli/commands/task.ts","../../src/cli/commands/completion.ts","../../src/core/completions.ts","../../src/cli/commands/check-gates.ts","../../src/core/check-gates.ts","../../src/cli/commands/report.ts","../../src/core/html-report.ts","../../src/cli/commands/badge.ts","../../src/core/badge.ts","../../src/cli/commands/policy.ts","../../src/core/policy.ts","../../src/cli/commands/ci-summary.ts","../../src/core/ci-summary.ts","../../src/cli/commands/release-notes.ts","../../src/core/release-notes.ts","../../src/cli/commands/npm-status.ts","../../src/core/npm-status.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from './commands/init.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { createTaskCommand } from './commands/create-task.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { handoffCommand, summarizeCommand } from './commands/summarize.js';\nimport { installAgentCommand } from './commands/install-agent.js';\nimport { listTemplatesCommand } from './commands/list-templates.js';\nimport { versionCommand } from './commands/version.js';\nimport { statusCommand } from './commands/status.js';\nimport { nextCommand } from './commands/next.js';\nimport { taskCommand } from './commands/task.js';\nimport { completionCommand } from './commands/completion.js';\nimport { checkGatesCommand } from './commands/check-gates.js';\nimport { reportCommand } from './commands/report.js';\nimport { badgeCommand } from './commands/badge.js';\nimport { policyCommand } from './commands/policy.js';\nimport { ciSummaryCommand } from './commands/ci-summary.js';\nimport { releaseNotesCommand } from './commands/release-notes.js';\nimport { npmStatusCommand } from './commands/npm-status.js';\nimport { getPackageVersion } from '../core/version.js';\n\nconst program = new Command();\n\nprogram\n .name('agentloop')\n .description('A drop-in engineering loop for coding agents.')\n .version(getPackageVersion(), '-V, --version', 'print CLI version');\n\nprogram.addCommand(initCommand());\nprogram.addCommand(doctorCommand());\nprogram.addCommand(createTaskCommand());\nprogram.addCommand(verifyCommand());\nprogram.addCommand(summarizeCommand());\nprogram.addCommand(handoffCommand());\nprogram.addCommand(statusCommand());\nprogram.addCommand(nextCommand());\nprogram.addCommand(checkGatesCommand());\nprogram.addCommand(reportCommand());\nprogram.addCommand(badgeCommand());\nprogram.addCommand(ciSummaryCommand());\nprogram.addCommand(releaseNotesCommand());\nprogram.addCommand(npmStatusCommand());\nprogram.addCommand(policyCommand());\nprogram.addCommand(taskCommand());\nprogram.addCommand(installAgentCommand());\nprogram.addCommand(listTemplatesCommand());\nprogram.addCommand(completionCommand());\nprogram.addCommand(versionCommand());\n\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`agentloop: ${message}`);\n process.exitCode = 1;\n});\n","import { Command } from 'commander';\nimport { initializeAgentLoop } from '../../core/init.js';\nimport { consoleLogger as logger } from '../../core/logger.js';\n\nexport function initCommand() {\n return new Command('init')\n .description('Initialize AgentLoopKit in the current repository')\n .option('--dry-run', 'show planned changes without writing files')\n .option('--json', 'print machine-readable output')\n .option('--force', 'allow initialization when the current directory is your home directory')\n .action(async (options: { dryRun?: boolean; json?: boolean; force?: boolean }) => {\n const result = await initializeAgentLoop({\n cwd: process.cwd(),\n dryRun: options.dryRun,\n force: options.force,\n });\n if (options.json) {\n logger.info(JSON.stringify(result, null, 2));\n return;\n }\n logger.info(\n options.dryRun ? 'AgentLoopKit init dry run complete.' : 'AgentLoopKit initialized.',\n );\n logger.info(`Created: ${result.created.length}`);\n logger.info(`Updated: ${result.updated.length}`);\n logger.info(`Skipped: ${result.skipped.length}`);\n if (!options.dryRun) {\n logger.info('\\nNext steps:');\n logger.info('- Review AGENTS.md and AGENTLOOP.md');\n logger.info('- Run agentloop doctor');\n logger.info('- Create a task with agentloop create-task');\n }\n });\n}\n","import path from 'node:path';\nimport { readdir } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport {\n AGENTLOOP_DIR,\n AGENTLOOP_FILE,\n AGENTLOOP_MANIFEST_FILE,\n AGENTS_FILE,\n CONFIG_FILE,\n CURRENT_TEMPLATE_VERSION,\n PACKAGE_NAME,\n TEMPLATE_GROUPS,\n} from './constants.js';\nimport { createDefaultConfig } from './config.js';\nimport { pathExists, readTextIfExists, writeTextFile } from './file-system.js';\nimport { detectPackageManager } from './package-manager.js';\nimport { detectPackageScripts, detectProjectName, detectProjectType } from './project-detection.js';\nimport { getTemplateRoot, readTemplate, TemplateValues } from './template-renderer.js';\n\nexport type InitResult = {\n created: string[];\n updated: string[];\n skipped: string[];\n dryRun: boolean;\n};\n\nasync function writeGeneratedFile(filePath: string, content: string, result: InitResult) {\n if (await pathExists(filePath)) {\n result.skipped.push(filePath);\n return;\n }\n if (result.dryRun) {\n result.created.push(filePath);\n return;\n }\n await writeTextFile(filePath, content);\n result.created.push(filePath);\n}\n\nasync function writeRenderedTemplateGroup(\n cwd: string,\n group: string,\n values: TemplateValues,\n result: InitResult,\n) {\n const templateDir = path.join(getTemplateRoot(), group);\n const entries = await readdir(templateDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const relative = `${group}/${entry.name}`;\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, group, entry.name),\n await readTemplate(relative, values),\n result,\n );\n }\n}\n\nasync function upsertAgentsFile(cwd: string, content: string, result: InitResult) {\n const filePath = path.join(cwd, AGENTS_FILE);\n const existing = await readTextIfExists(filePath);\n const marker = '<!-- agentloopkit:start -->';\n if (!existing) {\n if (result.dryRun) {\n result.created.push(filePath);\n return;\n }\n await writeTextFile(filePath, content);\n result.created.push(filePath);\n return;\n }\n if (existing.includes(marker)) {\n result.skipped.push(filePath);\n return;\n }\n const section = content\n .replace(/^# AGENTS\\s*/i, '## AgentLoopKit\\n\\n')\n .replace('<!-- agentloopkit:start -->', marker);\n if (result.dryRun) {\n result.updated.push(filePath);\n return;\n }\n await writeTextFile(filePath, `${existing.trimEnd()}\\n\\n${section.trim()}\\n`);\n result.updated.push(filePath);\n}\n\nexport async function initializeAgentLoop(options: {\n cwd: string;\n dryRun?: boolean;\n force?: boolean;\n homeDirectory?: string;\n}): Promise<InitResult> {\n const result: InitResult = {\n created: [],\n updated: [],\n skipped: [],\n dryRun: Boolean(options.dryRun),\n };\n const cwd = options.cwd;\n const homeDirectory = options.homeDirectory ?? homedir();\n if (!options.dryRun && !options.force && path.resolve(cwd) === path.resolve(homeDirectory)) {\n throw new Error(\n 'Refusing to initialize your home directory. Run this inside a project repository, or pass --force if you intentionally want AgentLoopKit files in your home directory.',\n );\n }\n const packageManager = await detectPackageManager(cwd);\n const projectType = await detectProjectType(cwd);\n const projectName = await detectProjectName(cwd);\n const commands = await detectPackageScripts(cwd, packageManager);\n const config = createDefaultConfig({\n name: projectName,\n type: projectType,\n packageManager,\n commands,\n });\n const values = {\n projectName,\n projectType,\n packageManager,\n testCommand: commands.test || 'not configured',\n lintCommand: commands.lint || 'not configured',\n typecheckCommand: commands.typecheck || 'not configured',\n buildCommand: commands.build || 'not configured',\n formatCommand: commands.format || 'not configured',\n };\n\n for (const group of TEMPLATE_GROUPS) {\n if (group === 'tasks') continue;\n await writeRenderedTemplateGroup(cwd, group, values, result);\n }\n\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'README.md'),\n await readTemplate('root/agentloop-directory-readme.md', values),\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_MANIFEST_FILE),\n `${JSON.stringify(\n {\n version: 1,\n templateVersion: CURRENT_TEMPLATE_VERSION,\n generatedBy: PACKAGE_NAME,\n },\n null,\n 2,\n )}\\n`,\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'tasks', 'README.md'),\n await readTemplate('tasks/README.md', values),\n result,\n );\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_DIR, 'reports', 'README.md'),\n '# Verification Reports\\n\\nAgentLoopKit writes verification reports here when you run `agentloop verify`.\\n',\n result,\n );\n\n const agentsContent = await readTemplate('root/AGENTS.md', values);\n await upsertAgentsFile(cwd, agentsContent, result);\n await writeGeneratedFile(\n path.join(cwd, AGENTLOOP_FILE),\n await readTemplate('root/AGENTLOOP.md', values),\n result,\n );\n\n const configPath = path.join(cwd, CONFIG_FILE);\n if (await pathExists(configPath)) {\n result.skipped.push(configPath);\n } else if (result.dryRun) {\n result.created.push(configPath);\n } else {\n await writeTextFile(configPath, `${JSON.stringify(config, null, 2)}\\n`);\n result.created.push(configPath);\n }\n\n return result;\n}\n","export const PRODUCT_NAME = 'AgentLoopKit';\nexport const PACKAGE_NAME = 'agentloopkit';\nexport const CLI_NAME = 'agentloop';\nexport const TAGLINE = 'A drop-in engineering loop for coding agents.';\nexport const CONFIG_FILE = 'agentloop.config.json';\nexport const AGENTLOOP_DIR = '.agentloop';\nexport const AGENTLOOP_MANIFEST_FILE = '.agentloop/manifest.json';\nexport const CURRENT_TEMPLATE_VERSION = 1;\nexport const AGENTS_FILE = 'AGENTS.md';\nexport const AGENTLOOP_FILE = 'AGENTLOOP.md';\n\nexport const LOOP_STEPS = [\n 'Specify',\n 'Constrain',\n 'Plan',\n 'Implement',\n 'Verify',\n 'Review',\n 'Handoff',\n] as const;\n\nexport const TEMPLATE_GROUPS = [\n 'loops',\n 'gates',\n 'handoffs',\n 'agents',\n 'policies',\n 'tasks',\n 'harness',\n] as const;\n\nexport const SUPPORTED_AGENTS = [\n 'codex',\n 'claude-code',\n 'cursor',\n 'opencode',\n 'gemini-cli',\n 'github-copilot-cli',\n 'generic',\n] as const;\n\nexport const TASK_TYPES = [\n 'feature',\n 'bugfix',\n 'refactor',\n 'tests',\n 'docs',\n 'release',\n 'security-review',\n 'dependency-upgrade',\n 'migration',\n] as const;\n\nexport const DEFAULT_COMMAND_KEYS = ['test', 'lint', 'typecheck', 'build', 'format'] as const;\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport { CONFIG_FILE } from './constants.js';\nimport { ConfigError } from './errors.js';\n\nexport const ProjectTypeSchema = z.enum([\n 'nextjs',\n 'react-vite',\n 'node',\n 'typescript-package',\n 'python',\n 'docs-only',\n 'generic',\n]);\n\nexport const PackageManagerSchema = z.enum(['pnpm', 'npm', 'yarn', 'bun']);\n\nexport const CommandConfigSchema = z.object({\n test: z.string().default(''),\n lint: z.string().default(''),\n typecheck: z.string().default(''),\n build: z.string().default(''),\n format: z.string().default(''),\n});\n\nexport const AgentLoopConfigSchema = z.object({\n $schema: z.string().optional(),\n version: z.literal(1),\n project: z.object({\n name: z.string(),\n type: ProjectTypeSchema,\n packageManager: PackageManagerSchema,\n }),\n paths: z.object({\n root: z.string(),\n agentloopDir: z.string(),\n tasksDir: z.string(),\n reportsDir: z.string(),\n handoffsDir: z.string(),\n }),\n commands: CommandConfigSchema,\n safety: z.object({\n requireCleanWorkingTree: z.boolean(),\n warnOnDirtyWorkingTree: z.boolean(),\n protectEnvFiles: z.boolean(),\n protectMigrations: z.boolean(),\n protectLockfiles: z.boolean(),\n }),\n summary: z.object({\n includeDiffStats: z.boolean(),\n includeChangedFiles: z.boolean(),\n includeVerification: z.boolean(),\n includeRisks: z.boolean(),\n includeRollback: z.boolean(),\n }),\n});\n\nexport type ProjectType = z.infer<typeof ProjectTypeSchema>;\nexport type PackageManager = z.infer<typeof PackageManagerSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\nexport type AgentLoopConfig = z.infer<typeof AgentLoopConfigSchema>;\n\nexport type DefaultConfigInput = {\n name?: string;\n type?: ProjectType;\n packageManager?: PackageManager;\n commands?: Partial<CommandConfig>;\n};\n\nconst CONFIG_SCHEMA_URL =\n 'https://raw.githubusercontent.com/abhiyoheswaran1/AgentLoopKit/main/schema/agentloop.config.schema.json';\n\nexport function createDefaultConfig(input: DefaultConfigInput = {}): AgentLoopConfig {\n return {\n $schema: CONFIG_SCHEMA_URL,\n version: 1,\n project: {\n name: input.name ?? '',\n type: input.type ?? 'generic',\n packageManager: input.packageManager ?? 'npm',\n },\n paths: {\n root: '.',\n agentloopDir: '.agentloop',\n tasksDir: '.agentloop/tasks',\n reportsDir: '.agentloop/reports',\n handoffsDir: '.agentloop/handoffs',\n },\n commands: {\n test: input.commands?.test ?? '',\n lint: input.commands?.lint ?? '',\n typecheck: input.commands?.typecheck ?? '',\n build: input.commands?.build ?? '',\n format: input.commands?.format ?? '',\n },\n safety: {\n requireCleanWorkingTree: false,\n warnOnDirtyWorkingTree: true,\n protectEnvFiles: true,\n protectMigrations: true,\n protectLockfiles: false,\n },\n summary: {\n includeDiffStats: true,\n includeChangedFiles: true,\n includeVerification: true,\n includeRisks: true,\n includeRollback: true,\n },\n };\n}\n\nexport function parseAgentLoopConfig(value: unknown): AgentLoopConfig {\n const parsed = AgentLoopConfigSchema.safeParse(value);\n if (!parsed.success) {\n throw new ConfigError(`Invalid AgentLoopKit config: ${parsed.error.message}`);\n }\n return parsed.data;\n}\n\nexport async function loadAgentLoopConfig(cwd: string): Promise<AgentLoopConfig> {\n const filePath = path.join(cwd, CONFIG_FILE);\n const raw = await readFile(filePath, 'utf8');\n return parseAgentLoopConfig(JSON.parse(raw));\n}\n","export class AgentLoopError extends Error {\n constructor(\n message: string,\n public readonly code = 'AGENTLOOP_ERROR',\n ) {\n super(message);\n this.name = 'AgentLoopError';\n }\n}\n\nexport class ConfigError extends AgentLoopError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n","import { access, mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport async function pathExists(filePath: string) {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readTextIfExists(filePath: string) {\n if (!(await pathExists(filePath))) return '';\n return readFile(filePath, 'utf8');\n}\n\nexport async function writeFileIfMissing(filePath: string, content: string) {\n if (await pathExists(filePath)) return false;\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n return true;\n}\n\nexport async function writeTextFile(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n}\n\nexport async function listFilesRecursive(\n root: string,\n options: { ignore?: string[]; maxDepth?: number; maxEntries?: number } = {},\n) {\n const ignore = new Set(\n options.ignore ?? ['.git', '.agentloop', 'node_modules', 'dist', 'coverage'],\n );\n const files: string[] = [];\n let inspectedEntries = 0;\n\n async function walk(current: string, depth: number) {\n if (!(await pathExists(current))) return;\n if (options.maxEntries !== undefined && inspectedEntries >= options.maxEntries) return;\n const entries = await readdir(current, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n if (options.maxEntries !== undefined && inspectedEntries >= options.maxEntries) break;\n inspectedEntries += 1;\n if (ignore.has(entry.name)) continue;\n const absolute = path.join(current, entry.name);\n if (entry.isDirectory()) {\n if (options.maxDepth === undefined || depth < options.maxDepth) {\n await walk(absolute, depth + 1);\n }\n } else if (entry.isFile()) {\n files.push(absolute);\n }\n }\n }\n\n const rootStat = await stat(root).catch(() => undefined);\n if (!rootStat?.isDirectory()) return [];\n await walk(root, 0);\n return files;\n}\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { PackageManager, PackageManagerSchema } from './config.js';\nimport { pathExists } from './file-system.js';\n\nexport async function detectPackageManager(cwd: string): Promise<PackageManager> {\n if (await pathExists(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(cwd, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(cwd, 'bun.lock'))) return 'bun';\n if (await pathExists(path.join(cwd, 'yarn.lock'))) return 'yarn';\n if (await pathExists(path.join(cwd, 'package-lock.json'))) return 'npm';\n\n const packageJsonPath = path.join(cwd, 'package.json');\n if (await pathExists(packageJsonPath)) {\n const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8')) as {\n packageManager?: string;\n };\n const manager = packageJson.packageManager?.split('@')[0];\n const parsed = PackageManagerSchema.safeParse(manager);\n if (parsed.success) return parsed.data;\n }\n\n return 'npm';\n}\n\nexport function packageManagerRunCommand(manager: PackageManager, scriptName: string) {\n return `${manager} run ${scriptName}`;\n}\n","import { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { CommandConfig, PackageManager, ProjectType } from './config.js';\nimport { DEFAULT_COMMAND_KEYS } from './constants.js';\nimport { listFilesRecursive, pathExists } from './file-system.js';\nimport { packageManagerRunCommand } from './package-manager.js';\n\ntype PackageJson = {\n name?: string;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n workspaces?: string[] | { packages?: string[] };\n};\n\nexport type MonorepoInfo = {\n detected: boolean;\n markers: string[];\n};\n\nconst MONOREPO_FILE_MARKERS = [\n 'pnpm-workspace.yaml',\n 'turbo.json',\n 'nx.json',\n 'lerna.json',\n 'rush.json',\n] as const;\n\nconst FALLBACK_PROJECT_DETECTION_MAX_DEPTH = 2;\nconst FALLBACK_PROJECT_DETECTION_MAX_ENTRIES = 500;\n\nexport async function readPackageJson(cwd: string): Promise<PackageJson | undefined> {\n const filePath = path.join(cwd, 'package.json');\n if (!(await pathExists(filePath))) return undefined;\n return JSON.parse(await readFile(filePath, 'utf8')) as PackageJson;\n}\n\nexport async function detectProjectName(cwd: string) {\n const packageJson = await readPackageJson(cwd);\n if (packageJson?.name) return packageJson.name;\n return path.basename(cwd);\n}\n\nexport async function detectProjectType(cwd: string): Promise<ProjectType> {\n const packageJson = await readPackageJson(cwd);\n const deps = { ...packageJson?.dependencies, ...packageJson?.devDependencies };\n\n if (deps.next) return 'nextjs';\n if (deps.vite && deps.react) return 'react-vite';\n if (deps.typescript && packageJson) return 'typescript-package';\n if (packageJson) return 'node';\n if (\n (await pathExists(path.join(cwd, 'pyproject.toml'))) ||\n (await pathExists(path.join(cwd, 'requirements.txt')))\n ) {\n return 'python';\n }\n\n const files = await listFilesRecursive(cwd, {\n maxDepth: FALLBACK_PROJECT_DETECTION_MAX_DEPTH,\n maxEntries: FALLBACK_PROJECT_DETECTION_MAX_ENTRIES,\n });\n const relativeFiles = files.map((file) => path.relative(cwd, file));\n const hasCode = relativeFiles.some((file) =>\n /\\.(ts|tsx|js|jsx|py|go|rs|java|rb|php|cs)$/.test(file),\n );\n const hasDocs = relativeFiles.some((file) => file.endsWith('.md') || file.startsWith('docs/'));\n if (hasDocs && !hasCode) return 'docs-only';\n\n return 'generic';\n}\n\nexport async function detectMonorepo(cwd: string): Promise<MonorepoInfo> {\n const markers: string[] = [];\n const packageJson = await readPackageJson(cwd);\n if (packageJson?.workspaces) {\n markers.push('package.json workspaces');\n }\n\n for (const marker of MONOREPO_FILE_MARKERS) {\n if (await pathExists(path.join(cwd, marker))) {\n markers.push(marker);\n }\n }\n\n return { detected: markers.length > 0, markers };\n}\n\nexport async function detectPackageScripts(\n cwd: string,\n packageManager: PackageManager,\n): Promise<CommandConfig> {\n const packageJson = await readPackageJson(cwd);\n const commands: CommandConfig = { test: '', lint: '', typecheck: '', build: '', format: '' };\n for (const key of DEFAULT_COMMAND_KEYS) {\n if (packageJson?.scripts?.[key]) {\n commands[key] = packageManagerRunCommand(packageManager, key);\n }\n }\n return commands;\n}\n","import { cp, readFile, readdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport type TemplateValues = Record<string, string | number | boolean | undefined>;\n\nexport function renderTemplateString(template: string, values: TemplateValues) {\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (match, key: string) => {\n const value = values[key];\n return value === undefined ? match : String(value);\n });\n}\n\nexport function getTemplateRoot() {\n return fileURLToPath(new URL('../templates', import.meta.url));\n}\n\nexport async function readTemplate(relativePath: string, values: TemplateValues = {}) {\n const raw = await readFile(path.join(getTemplateRoot(), relativePath), 'utf8');\n return renderTemplateString(raw, values);\n}\n\nexport async function copyTemplateFile(\n relativePath: string,\n targetPath: string,\n values: TemplateValues = {},\n) {\n const content = await readTemplate(relativePath, values);\n await import('node:fs/promises').then(({ mkdir, writeFile }) =>\n mkdir(path.dirname(targetPath), { recursive: true }).then(() => writeFile(targetPath, content)),\n );\n}\n\nexport async function copyTemplateDirectory(sourceRelative: string, target: string) {\n await cp(path.join(getTemplateRoot(), sourceRelative), target, { recursive: true, force: true });\n}\n\nexport async function listTemplateFiles() {\n const root = getTemplateRoot();\n const groups = await readdir(root, { withFileTypes: true });\n const result: Record<string, string[]> = {};\n\n for (const group of groups) {\n if (!group.isDirectory()) continue;\n const entries = await readdir(path.join(root, group.name), { withFileTypes: true });\n result[group.name] = entries\n .filter((entry) => entry.isFile())\n .map((entry) => entry.name)\n .sort();\n }\n\n return result;\n}\n","type Logger = {\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n};\n\nexport const consoleLogger: Logger = {\n info: (message) => console.log(message),\n warn: (message) => console.warn(message),\n error: (message) => console.error(message),\n};\n","import { Command } from 'commander';\nimport { runDoctor } from '../../core/doctor.js';\n\nexport function doctorCommand() {\n return new Command('doctor')\n .description('Check whether this repo is ready for agentic engineering')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const result = await runDoctor({ cwd: process.cwd() });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n if (result.serious.length > 0) process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { AGENTLOOP_MANIFEST_FILE, CONFIG_FILE, CURRENT_TEMPLATE_VERSION } from './constants.js';\nimport { loadAgentLoopConfig } from './config.js';\nimport { pathExists, readTextIfExists } from './file-system.js';\nimport { commandExists, getGitStatus, isInsideGitRepo } from './git.js';\nimport { detectPackageManager } from './package-manager.js';\nimport { detectMonorepo, detectPackageScripts, detectProjectType } from './project-detection.js';\nimport { detectRiskFiles } from './safety.js';\n\nexport type DoctorCheck = {\n name: string;\n status: 'pass' | 'warn' | 'fail';\n message: string;\n};\n\nexport type DoctorResult = {\n checks: DoctorCheck[];\n warnings: DoctorCheck[];\n serious: DoctorCheck[];\n markdown: string;\n};\n\nconst MONOREPO_VERIFICATION_GUIDANCE =\n 'Root checks may not cover every package; add package-specific verification commands to the task contract, such as pnpm --filter <package> test, npm --workspace <package> test, or cd packages/<name> && npm test. AgentLoopKit does not run workspace commands automatically.';\n\nconst MISSING_MANIFEST_MESSAGE =\n 'missing .agentloop/manifest.json; run agentloop init with the current CLI to add missing files without overwriting existing harness files';\n\nconst INVALID_MANIFEST_MESSAGE =\n 'invalid .agentloop/manifest.json; review docs/template-migrations.md and recreate the manifest with agentloop init if needed';\n\nfunction check(name: string, status: DoctorCheck['status'], message: string): DoctorCheck {\n return { name, status, message };\n}\n\nconst RISK_CATEGORY_LABELS = {\n migrations: 'migrations',\n auth: 'auth',\n security: 'security',\n billing: 'billing',\n deployment: 'deployment',\n lockfiles: 'lockfiles',\n envFiles: 'env files',\n} as const;\n\nfunction formatRiskFiles(files: string[]) {\n const preview = files.slice(0, 3).join(', ');\n const remaining = files.length - 3;\n return `${files.length} detected: ${preview}${remaining > 0 ? ` (+${remaining} more)` : ''}`;\n}\n\nasync function checkTemplateManifest(cwd: string): Promise<DoctorCheck> {\n const manifest = await readTextIfExists(path.join(cwd, AGENTLOOP_MANIFEST_FILE));\n if (!manifest) return check('Template manifest', 'warn', MISSING_MANIFEST_MESSAGE);\n\n try {\n const parsed = JSON.parse(manifest) as {\n version?: unknown;\n templateVersion?: unknown;\n generatedBy?: unknown;\n };\n if (\n parsed.version !== 1 ||\n typeof parsed.templateVersion !== 'number' ||\n parsed.generatedBy !== 'agentloopkit'\n ) {\n return check('Template manifest', 'warn', INVALID_MANIFEST_MESSAGE);\n }\n\n if (parsed.templateVersion < CURRENT_TEMPLATE_VERSION) {\n return check(\n 'Template manifest',\n 'warn',\n `template version ${parsed.templateVersion} is older than current version ${CURRENT_TEMPLATE_VERSION}; review docs/template-migrations.md and rerun agentloop init to add missing files`,\n );\n }\n\n if (parsed.templateVersion > CURRENT_TEMPLATE_VERSION) {\n return check(\n 'Template manifest',\n 'warn',\n `template version ${parsed.templateVersion} is newer than this CLI supports; upgrade AgentLoopKit before changing generated harness files`,\n );\n }\n\n return check(\n 'Template manifest',\n 'pass',\n `template version ${CURRENT_TEMPLATE_VERSION} is current`,\n );\n } catch {\n return check('Template manifest', 'warn', INVALID_MANIFEST_MESSAGE);\n }\n}\n\nexport async function runDoctor(options: { cwd: string }): Promise<DoctorResult> {\n const cwd = options.cwd;\n const checks: DoctorCheck[] = [];\n\n checks.push(check('Current directory', 'pass', cwd));\n const gitInstalled = await commandExists('git');\n checks.push(\n check(\n 'Git installed',\n gitInstalled ? 'pass' : 'warn',\n gitInstalled ? 'git is available' : 'git not found',\n ),\n );\n const inGit = gitInstalled ? await isInsideGitRepo(cwd) : false;\n checks.push(\n check(\n 'Git repository',\n inGit ? 'pass' : 'warn',\n inGit ? 'inside a git repo' : 'not inside a git repo',\n ),\n );\n\n const status = inGit ? await getGitStatus(cwd) : '';\n checks.push(\n check(\n 'Working tree',\n status.trim() ? 'warn' : 'pass',\n status.trim() ? 'working tree has changes' : 'clean',\n ),\n );\n\n for (const file of ['AGENTS.md', 'AGENTLOOP.md', '.agentloop']) {\n const exists = await pathExists(path.join(cwd, file));\n checks.push(check(file, exists ? 'pass' : 'warn', exists ? 'found' : 'missing'));\n }\n checks.push(await checkTemplateManifest(cwd));\n\n try {\n await loadAgentLoopConfig(cwd);\n checks.push(check(CONFIG_FILE, 'pass', 'valid'));\n } catch (error) {\n checks.push(\n check(CONFIG_FILE, 'fail', error instanceof Error ? error.message : 'invalid config'),\n );\n }\n\n const agents = await readTextIfExists(path.join(cwd, 'AGENTS.md'));\n if (agents && !agents.includes('AgentLoopKit')) {\n checks.push(\n check('AGENTS.md AgentLoopKit section', 'warn', 'AGENTS.md does not mention AgentLoopKit'),\n );\n }\n\n const packageManager = await detectPackageManager(cwd);\n const projectType = await detectProjectType(cwd);\n const monorepo = await detectMonorepo(cwd);\n const commands = await detectPackageScripts(cwd, packageManager);\n checks.push(check('Package manager', 'pass', packageManager));\n checks.push(check('Project type', 'pass', projectType));\n checks.push(\n check(\n 'Monorepo',\n monorepo.detected ? 'warn' : 'pass',\n monorepo.detected\n ? `workspace markers detected: ${monorepo.markers.join(', ')}. ${MONOREPO_VERIFICATION_GUIDANCE}`\n : 'not detected',\n ),\n );\n\n for (const key of ['test', 'lint', 'typecheck', 'build'] as const) {\n checks.push(\n check(`${key} command`, commands[key] ? 'pass' : 'warn', commands[key] || 'not detected'),\n );\n }\n\n const risks = await detectRiskFiles(cwd);\n const riskCount = Object.values(risks).reduce((count, files) => count + files.length, 0);\n checks.push(\n check(\n 'Potential risk files',\n riskCount ? 'warn' : 'pass',\n riskCount ? `${riskCount} risk file(s) detected` : 'none detected',\n ),\n );\n for (const [category, files] of Object.entries(risks)) {\n if (files.length === 0) continue;\n checks.push(\n check(\n `Risk files: ${RISK_CATEGORY_LABELS[category as keyof typeof RISK_CATEGORY_LABELS]}`,\n 'warn',\n formatRiskFiles(files),\n ),\n );\n }\n if (!commands.test) {\n checks.push(check('Tests', 'warn', 'no test command detected'));\n }\n\n const warnings = checks.filter((item) => item.status === 'warn');\n const serious = checks.filter((item) => item.status === 'fail');\n const markdown = `# AgentLoopKit Doctor\n\n${checks\n .map((item) => {\n const icon = item.status === 'pass' ? '[pass]' : item.status === 'warn' ? '[warn]' : '[fail]';\n return `- ${icon} ${item.name}: ${item.message}`;\n })\n .join('\\n')}\n`;\n\n return { checks, warnings, serious, markdown };\n}\n","import { execa } from 'execa';\n\nexport type GitFileStatus = {\n status: string;\n path: string;\n};\n\nexport async function commandExists(command: string) {\n const result = await execa(command, ['--version'], { reject: false });\n return result.exitCode === 0;\n}\n\nexport async function isInsideGitRepo(cwd: string) {\n const result = await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd, reject: false });\n return result.exitCode === 0 && result.stdout.trim() === 'true';\n}\n\nexport async function getGitBranch(cwd: string) {\n const result = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout.trim() : '';\n}\n\nexport async function getGitCommit(cwd: string) {\n const result = await execa('git', ['rev-parse', '--short', 'HEAD'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout.trim() : '';\n}\n\nexport async function getGitStatus(cwd: string) {\n const result = await execa('git', ['status', '--short'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout : '';\n}\n\nexport async function getGitDiffStat(cwd: string) {\n const result = await execa('git', ['diff', '--stat'], { cwd, reject: false });\n return result.exitCode === 0 ? result.stdout : '';\n}\n\nexport async function parseGitStatus(status: string): Promise<GitFileStatus[]> {\n return status\n .split('\\n')\n .map((line) => line.trimEnd())\n .filter(Boolean)\n .map((line) => ({\n status: line.slice(0, 2).trim() || '?',\n path: line.slice(3).trim(),\n }));\n}\n","import path from 'node:path';\nimport { listFilesRecursive } from './file-system.js';\n\nexport type RiskFiles = {\n migrations: string[];\n auth: string[];\n security: string[];\n billing: string[];\n deployment: string[];\n lockfiles: string[];\n envFiles: string[];\n};\n\nfunction relative(cwd: string, file: string) {\n return path.relative(cwd, file).replaceAll(path.sep, '/');\n}\n\nfunction isSemanticRiskCandidate(file: string) {\n const extension = path.extname(file).toLowerCase();\n if (['.md', '.mdx', '.txt', '.rst', '.adoc'].includes(extension)) return false;\n return true;\n}\n\nexport async function detectRiskFiles(cwd: string): Promise<RiskFiles> {\n const files = (await listFilesRecursive(cwd)).map((file) => relative(cwd, file));\n const semanticIncludes = (needles: string[]) =>\n files.filter(\n (file) =>\n isSemanticRiskCandidate(file) &&\n needles.some((needle) => file.toLowerCase().includes(needle)),\n );\n const migrationFiles = files.filter((file) => {\n const normalized = file.toLowerCase();\n return (\n isSemanticRiskCandidate(file) &&\n (normalized.includes('migrations/') ||\n normalized.includes('/migration/') ||\n path.basename(normalized).includes('migration'))\n );\n });\n\n return {\n migrations: migrationFiles,\n auth: semanticIncludes(['auth', 'oauth', 'session', 'passport']),\n security: semanticIncludes(['security', 'crypto', 'secret', 'permission', 'policy']),\n billing: semanticIncludes(['billing', 'stripe', 'payment', 'invoice']),\n deployment: files.filter((file) =>\n /(^|\\/)(Dockerfile|docker-compose|vercel\\.json|netlify\\.toml|fly\\.toml|render\\.yaml|\\.github\\/workflows\\/)/i.test(\n file,\n ),\n ),\n lockfiles: files.filter((file) =>\n ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock', 'bun.lock', 'bun.lockb'].includes(\n path.basename(file),\n ),\n ),\n envFiles: files.filter((file) => /^\\.env($|\\.)|\\/\\.env($|\\.)/.test(file)),\n };\n}\n","import { Command } from 'commander';\nimport prompts from 'prompts';\nimport { TASK_TYPES } from '../../core/constants.js';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { createTaskContractFile, TaskType } from '../../core/task-contract.js';\n\nfunction lines(value: string | undefined, previous: string[]) {\n const current = value\n ? value\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean)\n : [];\n return [...previous, ...current];\n}\n\nfunction stringOption(options: Record<string, unknown>, ...keys: string[]) {\n for (const key of keys) {\n if (typeof options[key] === 'string') return options[key] as string;\n }\n return '';\n}\n\nfunction listOption(options: Record<string, unknown>, ...keys: string[]) {\n return keys.flatMap((key) => (Array.isArray(options[key]) ? (options[key] as string[]) : []));\n}\n\nasync function collectInteractive(initial: { title?: string; type?: TaskType }) {\n const answers = await prompts([\n {\n type: initial.title ? null : 'text',\n name: 'title',\n message: 'Task title',\n },\n {\n type: initial.type ? null : 'select',\n name: 'type',\n message: 'Task type',\n choices: TASK_TYPES.map((type) => ({ title: type, value: type })),\n },\n { type: 'text', name: 'problemStatement', message: 'Problem statement' },\n { type: 'text', name: 'desiredOutcome', message: 'Desired outcome' },\n { type: 'text', name: 'constraints', message: 'Constraints (separate with semicolons)' },\n { type: 'text', name: 'nonGoals', message: 'Non-goals (separate with semicolons)' },\n {\n type: 'text',\n name: 'likelyFiles',\n message: 'Likely files or areas (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'forbiddenFiles',\n message: 'Files or areas not to touch (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'acceptanceCriteria',\n message: 'Acceptance criteria (separate with semicolons)',\n },\n {\n type: 'text',\n name: 'verificationCommands',\n message: 'Verification commands (separate with semicolons)',\n },\n { type: 'text', name: 'rollbackNotes', message: 'Rollback notes' },\n ]);\n\n return {\n title: initial.title ?? answers.title,\n type: initial.type ?? answers.type,\n problemStatement: answers.problemStatement,\n desiredOutcome: answers.desiredOutcome,\n constraints: String(answers.constraints ?? '')\n .split(';')\n .filter(Boolean),\n nonGoals: String(answers.nonGoals ?? '')\n .split(';')\n .filter(Boolean),\n likelyFiles: String(answers.likelyFiles ?? '')\n .split(';')\n .filter(Boolean),\n forbiddenFiles: String(answers.forbiddenFiles ?? '')\n .split(';')\n .filter(Boolean),\n acceptanceCriteria: String(answers.acceptanceCriteria ?? '')\n .split(';')\n .filter(Boolean),\n verificationCommands: String(answers.verificationCommands ?? '')\n .split(';')\n .filter(Boolean),\n rollbackNotes: answers.rollbackNotes,\n };\n}\n\nexport function createTaskCommand() {\n return new Command('create-task')\n .description('Create a task contract for an agentic coding session')\n .option('--title <title>', 'task title')\n .option('--type <type>', 'task type')\n .option('--out <path>', 'output file path')\n .option('--problem <text>', 'problem statement')\n .option('--problem-statement <text>', 'problem statement')\n .option('--outcome <text>', 'desired outcome')\n .option('--desired-outcome <text>', 'desired outcome')\n .option('--constraint <text>', 'constraint; repeat or use newlines', lines, [])\n .option('--non-goal <text>', 'non-goal; repeat or use newlines', lines, [])\n .option('--assumption <text>', 'assumption; repeat or use newlines', lines, [])\n .option('--likely-file <path>', 'likely file or area; repeat or use newlines', lines, [])\n .option(\n '--forbidden-file <path>',\n 'file or area not to touch; repeat or use newlines',\n lines,\n [],\n )\n .option('--acceptance <text>', 'acceptance criterion; repeat or use newlines', lines, [])\n .option('--verify-command <command>', 'verification command; repeat or use newlines', lines, [])\n .option('--verification <command>', 'verification command; repeat or use newlines', lines, [])\n .option('--rollback <text>', 'rollback notes')\n .option('--json', 'print machine-readable output')\n .action(async (options: Record<string, unknown>) => {\n const type =\n typeof options.type === 'string' && TASK_TYPES.includes(options.type as TaskType)\n ? (options.type as TaskType)\n : undefined;\n const title = typeof options.title === 'string' ? options.title : undefined;\n const config = await loadAgentLoopConfig(process.cwd());\n const input =\n title && type\n ? {\n title,\n type,\n problemStatement: stringOption(options, 'problemStatement', 'problem'),\n desiredOutcome: stringOption(options, 'desiredOutcome', 'outcome'),\n constraints: listOption(options, 'constraint'),\n nonGoals: listOption(options, 'nonGoal'),\n assumptions: listOption(options, 'assumption'),\n likelyFiles: listOption(options, 'likelyFile'),\n forbiddenFiles: listOption(options, 'forbiddenFile'),\n acceptanceCriteria: listOption(options, 'acceptance'),\n verificationCommands: listOption(options, 'verifyCommand', 'verification'),\n rollbackNotes: stringOption(options, 'rollback'),\n }\n : await collectInteractive({ title, type });\n const result = await createTaskContractFile({\n cwd: process.cwd(),\n config,\n input,\n out: typeof options.out === 'string' ? options.out : undefined,\n });\n if (options.json) {\n console.log(JSON.stringify({ task: result }, null, 2));\n return;\n }\n console.log(`Task contract created: ${result.path}`);\n });\n}\n","import path from 'node:path';\nimport { AgentLoopConfig } from './config.js';\nimport { formatDate } from './dates.js';\nimport { writeTextFile } from './file-system.js';\nimport { slugify } from './slug.js';\n\nexport type TaskType =\n | 'feature'\n | 'bugfix'\n | 'refactor'\n | 'tests'\n | 'docs'\n | 'release'\n | 'security-review'\n | 'dependency-upgrade'\n | 'migration';\n\nexport type TaskContractInput = {\n title: string;\n type: TaskType;\n createdDate?: string;\n problemStatement?: string;\n desiredOutcome?: string;\n constraints?: string[];\n nonGoals?: string[];\n assumptions?: string[];\n likelyFiles?: string[];\n forbiddenFiles?: string[];\n acceptanceCriteria?: string[];\n verificationCommands?: string[];\n rollbackNotes?: string;\n};\n\nfunction list(values: string[] | undefined, fallback = 'None recorded yet.') {\n const clean = values?.map((value) => value.trim()).filter(Boolean) ?? [];\n if (clean.length === 0) return `- ${fallback}`;\n return clean.map((value) => `- ${value}`).join('\\n');\n}\n\nexport function generateTaskContract(input: TaskContractInput) {\n const createdDate = input.createdDate ?? formatDate();\n return `# ${input.title}\n\n- Created date: ${createdDate}\n- Task type: ${input.type}\n- Status: proposed\n\n## Problem Statement\n${input.problemStatement || 'Describe the problem this task should solve.'}\n\n## Desired Outcome\n${input.desiredOutcome || 'Describe the concrete result expected from this task.'}\n\n## Constraints\n${list(input.constraints)}\n\n## Non-Goals\n${list(input.nonGoals)}\n\n## Assumptions\n${list(input.assumptions)}\n\n## Likely Files or Areas\n${list(input.likelyFiles)}\n\n## Files or Areas Not to Touch\n${list(input.forbiddenFiles)}\n\n## Acceptance Criteria\n${list(input.acceptanceCriteria, 'Add acceptance criteria before implementation starts.')}\n\n## Verification Commands\n${list(input.verificationCommands, 'No verification command recorded.')}\n\n## Implementation Plan\n- Inspect relevant files before editing.\n- Keep changes focused on this contract.\n- Record any architecture decision in DECISIONS.md.\n\n## Risk Notes\n- Re-check protected areas before changing migrations, auth, secrets, billing, deployment, or public APIs.\n\n## Rollback Notes\n${input.rollbackNotes || 'Document how to revert or disable this change.'}\n\n## Handoff Requirements\n- Summarize files changed.\n- Include verification commands and results.\n- State unverified areas honestly.\n- Include risks, rollback notes, and reviewer checklist.\n`;\n}\n\nexport async function createTaskContractFile(options: {\n cwd: string;\n config: AgentLoopConfig;\n input: TaskContractInput;\n out?: string;\n}) {\n const createdDate = options.input.createdDate ?? formatDate();\n const relativePath =\n options.out ??\n path.join(options.config.paths.tasksDir, `${createdDate}-${slugify(options.input.title)}.md`);\n const absolutePath = path.isAbsolute(relativePath)\n ? relativePath\n : path.join(options.cwd, relativePath);\n const markdown = generateTaskContract({ ...options.input, createdDate });\n await writeTextFile(absolutePath, markdown);\n return { path: absolutePath, markdown };\n}\n","function pad(value: number) {\n return String(value).padStart(2, '0');\n}\n\nexport function formatDate(date = new Date()) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nexport function formatTimestamp(date = new Date()) {\n return `${formatDate(date)}-${pad(date.getHours())}-${pad(date.getMinutes())}`;\n}\n","export function slugify(value: string) {\n const slug = value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/-{2,}/g, '-');\n\n return slug || 'task';\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { runVerification } from '../../core/verification.js';\n\nfunction collect(value: string, previous: string[]) {\n previous.push(value);\n return previous;\n}\n\nexport function verifyCommand() {\n return new Command('verify')\n .description('Run configured verification commands and write a report')\n .option('--task <path>', 'task contract path for humans to cross-reference')\n .option('--json', 'print machine-readable output')\n .option('--no-build', 'skip build command')\n .option('--no-test', 'skip test command')\n .option('--no-lint', 'skip lint command')\n .option('--no-typecheck', 'skip typecheck command')\n .option('--command <command>', 'custom command to run', collect, [])\n .action(async (options: Record<string, unknown>) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await runVerification({\n cwd: process.cwd(),\n config,\n taskPath: typeof options.task === 'string' ? options.task : undefined,\n skip: {\n build: options.build === false,\n test: options.test === false,\n lint: options.lint === false,\n typecheck: options.typecheck === false,\n },\n customCommands: options.command as string[],\n });\n if (options.json) console.log(JSON.stringify(result, null, 2));\n else\n console.log(\n `Verification report written: ${result.reportPath}\\nOverall status: ${result.overallStatus}`,\n );\n if (result.overallStatus === 'fail') process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { getGitBranch, getGitCommit, getGitStatus } from './git.js';\nimport { writeTextFile } from './file-system.js';\n\nexport type VerificationCommandKey = 'test' | 'lint' | 'typecheck' | 'build' | 'custom';\n\nexport type VerificationCommandResult = {\n key: VerificationCommandKey;\n command: string;\n exitCode: number;\n passed: boolean;\n output: string;\n};\n\nexport type VerificationCiContext = {\n provider: 'github-actions' | 'gitlab-ci' | 'buildkite' | 'generic-ci';\n providerName: string;\n workflow?: string;\n event?: string;\n ref?: string;\n commit?: string;\n runUrl?: string;\n runAttempt?: string;\n};\n\nexport type VerificationOptions = {\n cwd: string;\n config: AgentLoopConfig;\n reportTimestamp?: string;\n nowIso?: string;\n env?: NodeJS.ProcessEnv;\n taskPath?: string;\n skip?: Partial<Record<'test' | 'lint' | 'typecheck' | 'build', boolean>>;\n customCommands?: string[];\n};\n\nexport type VerificationResult = {\n overallStatus: 'pass' | 'fail' | 'not-run';\n commands: VerificationCommandResult[];\n notRun: string[];\n ciContext?: VerificationCiContext;\n markdown: string;\n reportPath: string;\n};\n\nfunction excerpt(output: string, limit = 5000) {\n if (output.length <= limit) return output;\n const headLimit = Math.ceil(limit / 2);\n const tailLimit = Math.floor(limit / 2);\n return `${output.slice(0, headLimit)}\n\n[output truncated: showing first ${headLimit} and last ${tailLimit} characters of ${\n output.length\n } total]\n\n${output.slice(-tailLimit)}`;\n}\n\nfunction failureSnippet(output: string, maxLines = 12, maxChars = 2000) {\n const lines = output\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .filter((line) => line.trim());\n const tail = lines.slice(-maxLines).join('\\n') || '(no output)';\n if (tail.length <= maxChars) return tail;\n return `${tail.slice(0, maxChars)}\n[failure summary truncated]`;\n}\n\nfunction renderFailureSummary(results: VerificationCommandResult[]) {\n const failures = results.filter((result) => !result.passed);\n if (!failures.length) return '';\n\n return `## Failure Summary\n${failures\n .map(\n (result) => `### ${result.key}: \\`${result.command}\\`\n\n- Exit code: ${result.exitCode}\n\n\\`\\`\\`text\n${failureSnippet(result.output)}\n\\`\\`\\``,\n )\n .join('\\n\\n')}\n\n`;\n}\n\nfunction commandEntries(config: AgentLoopConfig, options: VerificationOptions) {\n const configured: Array<[VerificationCommandKey, string]> = [\n ['test', config.commands.test],\n ['lint', config.commands.lint],\n ['typecheck', config.commands.typecheck],\n ['build', config.commands.build],\n ];\n\n const active = configured.filter(([key, command]) => {\n if (key === 'custom') return false;\n return command && !options.skip?.[key as 'test' | 'lint' | 'typecheck' | 'build'];\n });\n\n for (const command of options.customCommands ?? []) {\n if (command.trim()) active.push(['custom', command.trim()]);\n }\n\n return active;\n}\n\nfunction singleLine(value: string | undefined, limit = 300) {\n const clean = value?.replace(/\\s+/g, ' ').trim();\n if (!clean) return undefined;\n return clean.length > limit ? `${clean.slice(0, limit)}...` : clean;\n}\n\nfunction withoutTrailingSlash(value: string) {\n return value.replace(/\\/+$/, '');\n}\n\nfunction isEnabledCi(value: string | undefined) {\n const clean = value?.trim().toLowerCase();\n return clean === 'true' || clean === '1';\n}\n\nexport function detectCiContext(env: NodeJS.ProcessEnv): VerificationCiContext | undefined {\n if (env.GITHUB_ACTIONS === 'true') {\n const serverUrl = withoutTrailingSlash(\n singleLine(env.GITHUB_SERVER_URL) ?? 'https://github.com',\n );\n const repository = singleLine(env.GITHUB_REPOSITORY);\n const runId = singleLine(env.GITHUB_RUN_ID);\n const runUrl =\n repository && runId ? `${serverUrl}/${repository}/actions/runs/${runId}` : undefined;\n\n return {\n provider: 'github-actions',\n providerName: 'GitHub Actions',\n workflow: singleLine(env.GITHUB_WORKFLOW),\n event: singleLine(env.GITHUB_EVENT_NAME),\n ref: singleLine(env.GITHUB_REF),\n commit: singleLine(env.GITHUB_SHA),\n runUrl,\n runAttempt: singleLine(env.GITHUB_RUN_ATTEMPT),\n };\n }\n\n if (env.GITLAB_CI === 'true') {\n return {\n provider: 'gitlab-ci',\n providerName: 'GitLab CI',\n workflow: singleLine(env.CI_PROJECT_PATH),\n event: singleLine(env.CI_PIPELINE_SOURCE),\n ref: singleLine(env.CI_COMMIT_REF_NAME),\n commit: singleLine(env.CI_COMMIT_SHA),\n runUrl: singleLine(env.CI_PIPELINE_URL),\n };\n }\n\n if (env.BUILDKITE === 'true') {\n return {\n provider: 'buildkite',\n providerName: 'Buildkite',\n workflow: singleLine(env.BUILDKITE_PIPELINE_SLUG),\n event: singleLine(env.BUILDKITE_SOURCE),\n ref: singleLine(env.BUILDKITE_BRANCH),\n commit: singleLine(env.BUILDKITE_COMMIT),\n runUrl: singleLine(env.BUILDKITE_BUILD_URL),\n };\n }\n\n if (isEnabledCi(env.CI)) {\n return {\n provider: 'generic-ci',\n providerName: 'Generic CI',\n };\n }\n\n return undefined;\n}\n\nfunction renderCiContext(ciContext: VerificationCiContext | undefined) {\n if (!ciContext) return '';\n\n const lines = [`- Provider: ${ciContext.providerName}`];\n if (ciContext.workflow) lines.push(`- Workflow: ${ciContext.workflow}`);\n if (ciContext.event) lines.push(`- Event: ${ciContext.event}`);\n if (ciContext.ref) lines.push(`- Ref: ${ciContext.ref}`);\n if (ciContext.commit) lines.push(`- Commit: ${ciContext.commit}`);\n if (ciContext.runUrl) lines.push(`- Run URL: ${ciContext.runUrl}`);\n if (ciContext.runAttempt) lines.push(`- Run attempt: ${ciContext.runAttempt}`);\n\n return `## CI Context\n${lines.join('\\n')}\n\n`;\n}\n\nfunction parseTaskMetadata(markdown: string) {\n const lines = markdown.split(/\\r?\\n/);\n return {\n title: lines.find((line) => line.startsWith('# '))?.replace(/^#\\s+/, '').trim(),\n type: lines.find((line) => line.startsWith('- Task type:'))?.replace('- Task type:', '').trim(),\n status: lines.find((line) => line.startsWith('- Status:'))?.replace('- Status:', '').trim(),\n };\n}\n\nfunction isMarkdownTaskPath(taskPath: string) {\n const normalized = taskPath.replace(/\\\\/g, '/').toLowerCase();\n const segments = normalized.split('/').filter(Boolean);\n return normalized.endsWith('.md') && !segments.some((segment) => segment === '.env' || segment.startsWith('.env.'));\n}\n\nasync function renderTaskContext(cwd: string, taskPath: string | undefined) {\n if (!taskPath?.trim()) return '';\n\n const cleanPath = taskPath.trim();\n if (!isMarkdownTaskPath(cleanPath)) {\n return `## Task Context\n- Path: ${cleanPath}\n- Status: unavailable\n- Note: Task path must point to a Markdown task contract.\n\n`;\n }\n\n const absolutePath = path.isAbsolute(cleanPath) ? cleanPath : path.join(cwd, cleanPath);\n\n try {\n const markdown = await readFile(absolutePath, 'utf8');\n const metadata = parseTaskMetadata(markdown);\n const lines = [`- Path: ${cleanPath}`];\n if (metadata.title) lines.push(`- Title: ${metadata.title}`);\n if (metadata.type) lines.push(`- Task type: ${metadata.type}`);\n if (metadata.status) lines.push(`- Status: ${metadata.status}`);\n\n return `## Task Context\n${lines.join('\\n')}\n\n`;\n } catch {\n return `## Task Context\n- Path: ${cleanPath}\n- Status: unavailable\n- Note: Task file could not be read.\n\n`;\n }\n}\n\nexport async function runVerification(options: VerificationOptions): Promise<VerificationResult> {\n const timestamp = options.reportTimestamp ?? formatTimestamp();\n const nowIso = options.nowIso ?? new Date().toISOString();\n const env = options.env ?? process.env;\n const ciContext = detectCiContext(env);\n const commands = commandEntries(options.config, options);\n const notRun = [\n ...(['test', 'lint', 'typecheck', 'build'] as const).filter((key) => {\n if (options.skip?.[key]) return true;\n return !options.config.commands[key];\n }),\n ];\n\n const results: VerificationCommandResult[] = [];\n for (const [key, command] of commands) {\n const result = await execa(command, {\n cwd: options.cwd,\n shell: true,\n all: true,\n reject: false,\n env: { ...env, FORCE_COLOR: '0' },\n });\n results.push({\n key,\n command,\n exitCode: result.exitCode ?? 1,\n passed: result.exitCode === 0,\n output: result.all ?? result.stdout ?? result.stderr ?? '',\n });\n }\n\n const overallStatus =\n results.length === 0 ? 'not-run' : results.every((result) => result.passed) ? 'pass' : 'fail';\n const reportPath = path.join(\n options.cwd,\n options.config.paths.reportsDir,\n `${timestamp}-verification-report.md`,\n );\n const branch = await getGitBranch(options.cwd);\n const commit = await getGitCommit(options.cwd);\n const status = await getGitStatus(options.cwd);\n const taskContext = await renderTaskContext(options.cwd, options.taskPath);\n\n const markdown = `# Verification Report\n\n- Timestamp: ${nowIso}\n- Repo: ${path.basename(options.cwd)}\n- Git branch: ${branch || 'not available'}\n- Git commit: ${commit || 'not available'}\n- Working tree: ${status.trim() ? 'dirty' : 'clean or unavailable'}\n- Overall status: ${overallStatus}\n\n${renderCiContext(ciContext)}\n${taskContext}\n${renderFailureSummary(results)}\n## Commands Run\n${\n results.length === 0\n ? 'No verification commands were configured or selected.'\n : results\n .map(\n (result) => `### ${result.key}: \\`${result.command}\\`\n\n- Exit code: ${result.exitCode}\n- Status: ${result.passed ? 'pass' : 'fail'}\n\n\\`\\`\\`text\n${excerpt(result.output || '(no output)')}\n\\`\\`\\``,\n )\n .join('\\n\\n')\n}\n\n## Not Run\n${notRun.length ? notRun.map((item) => `- ${item}`).join('\\n') : '- Nothing skipped.'}\n\n## Recommended Next Actions\n${\n overallStatus === 'pass'\n ? '- Review the diff and prepare a handoff summary.'\n : overallStatus === 'fail'\n ? '- Fix failing commands before claiming completion.'\n : '- Add test, lint, typecheck, or build commands to agentloop.config.json.'\n}\n`;\n\n await writeTextFile(reportPath, markdown);\n return { overallStatus, commands: results, notRun, ciContext, markdown, reportPath };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { summarizeRepository } from '../../core/pr-summary.js';\n\nasync function runSummaryCommand(options: Record<string, unknown>, defaultWrite: boolean) {\n const config = await loadAgentLoopConfig(process.cwd());\n const writeOption = typeof options.write === 'boolean' ? options.write : defaultWrite;\n const result = await summarizeRepository({\n cwd: process.cwd(),\n config,\n taskPath: typeof options.task === 'string' ? options.task : undefined,\n reportPath: typeof options.report === 'string' ? options.report : undefined,\n write: writeOption,\n });\n if (options.json || options.format === 'json') {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n if (writeOption) console.log(`\\nSummary written: ${result.outPath}`);\n }\n}\n\nexport function summarizeCommand() {\n return new Command('summarize')\n .description('Generate a deterministic PR/reviewer summary')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--format <format>', 'markdown or json', 'markdown')\n .option('--write', 'write summary to .agentloop/handoffs')\n .option('--json', 'print JSON output')\n .action((options: Record<string, unknown>) => runSummaryCommand(options, false));\n}\n\nexport function handoffCommand() {\n return new Command('handoff')\n .description('Generate and write a deterministic reviewer handoff')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--format <format>', 'markdown or json', 'markdown')\n .option('--no-write', 'print handoff without writing a file')\n .option('--json', 'print JSON output')\n .action((options: Record<string, unknown>) => runSummaryCommand(options, true));\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { getGitDiffStat, getGitStatus, parseGitStatus, GitFileStatus } from './git.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { latestMarkdownFile, verificationReportPattern } from './artifacts.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type PrSummaryInput = {\n timestamp: string;\n status: string;\n changedFiles: GitFileStatus[];\n taskMarkdown?: string;\n verificationMarkdown?: string;\n diffStat?: string;\n};\n\ntype ChangeArea = {\n key: string;\n title: string;\n files: GitFileStatus[];\n};\n\nconst CHANGE_AREAS: Array<{ key: string; title: string; matches: (filePath: string) => boolean }> =\n [\n {\n key: 'risk',\n title: 'Risk-Sensitive',\n matches: (filePath) =>\n /(^|\\/)(migrations?|migration|auth|security|billing|deploy|deployment)(\\/|\\.|-|_|$)/.test(\n filePath,\n ) ||\n /(^|\\/)\\.env(\\.|$)/.test(filePath) ||\n /(^|\\/)(package-lock\\.json|pnpm-lock\\.yaml|yarn\\.lock|bun\\.lockb?|Cargo\\.lock|poetry\\.lock)$/.test(\n filePath,\n ),\n },\n { key: 'source', title: 'Source', matches: (filePath) => /^src\\//.test(filePath) },\n {\n key: 'tests',\n title: 'Tests',\n matches: (filePath) =>\n /(^|\\/)(tests?|__tests__)\\//.test(filePath) ||\n /\\.(test|spec)\\.[cm]?[jt]sx?$/.test(filePath),\n },\n {\n key: 'agentloop',\n title: 'AgentLoop',\n matches: (filePath) =>\n /^\\.agentloop\\//.test(filePath) ||\n /(^|\\/)(AGENTS\\.md|AGENTLOOP\\.md|agentloop\\.config\\.json)$/.test(filePath),\n },\n {\n key: 'docs',\n title: 'Documentation',\n matches: (filePath) =>\n /(^|\\/)docs\\//.test(filePath) ||\n /(^|\\/)(README|CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|SECURITY|ROADMAP|DECISIONS)\\.md$/i.test(\n filePath,\n ) ||\n /\\.mdx?$/.test(filePath),\n },\n {\n key: 'ci',\n title: 'CI / Automation',\n matches: (filePath) =>\n /^\\.github\\//.test(filePath) ||\n /^scripts\\//.test(filePath) ||\n /(^|\\/)(Dockerfile|Makefile)$/.test(filePath),\n },\n {\n key: 'config',\n title: 'Config / Package',\n matches: (filePath) =>\n /(^|\\/)(package\\.json|tsconfig\\.json|tsup\\.config\\.ts|vitest\\.config\\.ts|eslint\\.config\\.js|prettier\\.config\\.[cm]?js|pnpm-workspace\\.yaml)$/.test(\n filePath,\n ) || /^schema\\//.test(filePath),\n },\n ];\n\nfunction extractLine(markdown: string | undefined, pattern: RegExp, fallback: string) {\n if (!markdown) return fallback;\n const match = markdown.match(pattern);\n return match?.[1]?.trim() || fallback;\n}\n\nfunction classifyChangedFiles(changedFiles: GitFileStatus[]) {\n const areas: ChangeArea[] = CHANGE_AREAS.map((area) => ({\n key: area.key,\n title: area.title,\n files: [],\n }));\n const other: ChangeArea = { key: 'other', title: 'Other', files: [] };\n\n for (const file of changedFiles) {\n const normalizedPath = file.path.replace(/\\\\/g, '/');\n const areaIndex = CHANGE_AREAS.findIndex((area) => area.matches(normalizedPath));\n if (areaIndex === -1) other.files.push(file);\n else areas[areaIndex]?.files.push(file);\n }\n\n return [...areas.filter((area) => area.files.length), ...(other.files.length ? [other] : [])];\n}\n\nfunction renderChangeAreas(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '- No changed files detected.';\n\n const areas = classifyChangedFiles(changedFiles);\n return areas\n .map((area) => {\n return `### ${area.title}\n${area.files.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')}`;\n })\n .join('\\n\\n');\n}\n\nfunction renderReviewFocus(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '- No changed files detected.';\n\n const keys = new Set(classifyChangedFiles(changedFiles).map((area) => area.key));\n const lines: string[] = [];\n\n if (keys.has('source')) lines.push('- Review source changes for behavior and public API impact.');\n if (keys.has('tests')) lines.push('- Check tests cover the changed behavior.');\n if (keys.has('docs')) lines.push('- Check docs match the implemented command behavior.');\n if (keys.has('ci'))\n lines.push('- Review CI or automation changes for permissions and secret handling.');\n if (keys.has('config'))\n lines.push('- Review package and config changes for install, build, and publish impact.');\n if (keys.has('agentloop'))\n lines.push(\n '- Review AgentLoop artifacts for accurate task, verification, and handoff evidence.',\n );\n if (keys.has('risk'))\n lines.push(\n '- Review risk-sensitive paths such as migrations, auth, security, billing, env, deployment, and lockfiles with extra care.',\n );\n if (keys.has('other')) lines.push('- Review uncategorized files for ownership and scope.');\n\n return lines.join('\\n');\n}\n\nexport function generatePrSummary(input: PrSummaryInput) {\n const taskTitle = extractLine(input.taskMarkdown, /^#\\s+(.+)$/m, 'No task contract found.');\n const verification = extractLine(\n input.verificationMarkdown,\n /Overall status:\\s*([a-z-]+)/i,\n 'No verification report found.',\n );\n const verificationLine =\n verification === 'No verification report found.'\n ? verification\n : `Overall status: ${verification}`;\n\n const markdown = `# PR Summary\n\n- Generated: ${input.timestamp}\n- Task context: ${taskTitle}\n- Verification status: ${verificationLine}\n\n## Summary\nThis summary was generated deterministically from git status, the latest task contract, and the latest verification report.\n\n## Changed Files\n${\n input.changedFiles.length\n ? input.changedFiles.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')\n : '- No changed files detected.'\n}\n\n## Change Areas\n${renderChangeAreas(input.changedFiles)}\n\n## Diff Stats\n${input.diffStat?.trim() || 'No diff stats available.'}\n\n## Behaviour Changed\n- Review changed files and task contract to confirm intended behavior.\n\n## Review Focus\n${renderReviewFocus(input.changedFiles)}\n\n## Verification Performed\n- ${verificationLine}\n\n## Verification Not Performed\n- Check the verification report for skipped commands.\n\n## Risks\n- Re-check protected files such as migrations, secrets, auth, billing, deployment, and public APIs before merge.\n\n## Rollback Notes\n- Revert the changed files or revert the merge commit if this lands as a PR.\n\n## Reviewer Checklist\n- [ ] Acceptance criteria match the task contract.\n- [ ] Verification evidence is adequate for the change.\n- [ ] Risk areas have been reviewed.\n- [ ] Rollback plan is clear.\n\n## Follow-Ups\n- Capture any deferred work in ROADMAP.md or a new task contract.\n`;\n\n return { markdown };\n}\n\nexport async function summarizeRepository(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath?: string;\n reportPath?: string;\n timestamp?: string;\n write?: boolean;\n}) {\n const timestamp = options.timestamp ?? formatTimestamp();\n const status = await getGitStatus(options.cwd);\n const changedFiles = await parseGitStatus(status);\n const diffStat = await getGitDiffStat(options.cwd);\n const taskPath =\n options.taskPath ??\n (await getActiveTaskPath({ cwd: options.cwd, config: options.config })) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const reportPath =\n options.reportPath ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n }));\n const taskMarkdown =\n taskPath && (await pathExists(taskPath)) ? await readFile(taskPath, 'utf8') : undefined;\n const verificationMarkdown =\n reportPath && (await pathExists(reportPath)) ? await readFile(reportPath, 'utf8') : undefined;\n const summary = generatePrSummary({\n timestamp,\n status,\n changedFiles,\n taskMarkdown,\n verificationMarkdown,\n diffStat,\n });\n const outPath = path.join(\n options.cwd,\n options.config.paths.handoffsDir,\n `${timestamp}-pr-summary.md`,\n );\n if (options.write) await writeTextFile(outPath, summary.markdown);\n return { ...summary, outPath, changedFiles };\n}\n","import path from 'node:path';\nimport { readdir, stat } from 'node:fs/promises';\nimport { pathExists } from './file-system.js';\n\nexport const verificationReportPattern =\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/;\nexport const prSummaryPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-pr-summary\\.md$/;\nexport const ciSummaryPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-ci-summary\\.md$/;\nexport const generatedMarkdownPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-.+\\.md$/;\n\nexport async function latestMarkdownFile(dir: string, options: { pattern?: RegExp } = {}) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (\n await readdir(dir, { withFileTypes: true })\n )\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md',\n )\n .filter((entry) => !options.pattern || options.pattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n return entries.at(-1)?.filePath;\n}\n","import path from 'node:path';\nimport { mkdir, readdir, readFile, rename, rm, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { AgentLoopError } from './errors.js';\nimport { pathExists, writeTextFile } from './file-system.js';\n\ntype TaskState = {\n version: 1;\n activeTaskPath?: string;\n};\n\nexport type ActiveTask = {\n path: string;\n title: string;\n status: string;\n};\n\nexport type ListedTask = ActiveTask & {\n active: boolean;\n modifiedAt: string;\n};\n\nexport type TaskContract = ActiveTask & {\n content: string;\n};\n\nexport type ArchivedTask = ActiveTask & {\n previousPath: string;\n};\n\nexport const TASK_STATUSES = ['proposed', 'in-progress', 'blocked', 'review', 'done'] as const;\n\nexport type TaskStatus = (typeof TASK_STATUSES)[number];\n\nfunction statePath(cwd: string, config: AgentLoopConfig) {\n return path.join(cwd, config.paths.agentloopDir, 'state.json');\n}\n\nfunction toStoredPath(cwd: string, absolutePath: string) {\n return path.relative(cwd, absolutePath).split(path.sep).join('/');\n}\n\nfunction isInside(parent: string, child: string) {\n const relative = path.relative(parent, child);\n return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));\n}\n\nfunction tasksRoot(cwd: string, config: AgentLoopConfig) {\n return path.resolve(cwd, config.paths.tasksDir);\n}\n\nasync function readState(cwd: string, config: AgentLoopConfig): Promise<TaskState> {\n const filePath = statePath(cwd, config);\n if (!(await pathExists(filePath))) return { version: 1 };\n const raw = await readFile(filePath, 'utf8');\n try {\n const parsed = JSON.parse(raw) as Partial<TaskState>;\n return {\n version: 1,\n activeTaskPath:\n typeof parsed.activeTaskPath === 'string' && parsed.activeTaskPath.trim()\n ? parsed.activeTaskPath\n : undefined,\n };\n } catch {\n return { version: 1 };\n }\n}\n\nasync function writeState(cwd: string, config: AgentLoopConfig, state: TaskState) {\n await writeTextFile(statePath(cwd, config), `${JSON.stringify(state, null, 2)}\\n`);\n}\n\nasync function resolveTaskPath(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n strict: boolean;\n}) {\n const absolutePath = path.isAbsolute(options.taskPath)\n ? path.resolve(options.taskPath)\n : path.resolve(options.cwd, options.taskPath);\n const root = tasksRoot(options.cwd, options.config);\n const displayRoot = options.config.paths.tasksDir;\n\n if (!isInside(root, absolutePath)) {\n if (!options.strict) return undefined;\n throw new AgentLoopError(`Active task must be inside ${displayRoot}.`);\n }\n if (!absolutePath.endsWith('.md')) {\n if (!options.strict) return undefined;\n throw new AgentLoopError('Active task must be a Markdown file.');\n }\n const fileStat = await stat(absolutePath).catch(() => undefined);\n if (!fileStat?.isFile()) {\n if (!options.strict) return undefined;\n throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n }\n return absolutePath;\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction parseTaskStatus(status: string): TaskStatus {\n const clean = status.trim().toLowerCase();\n if ((TASK_STATUSES as readonly string[]).includes(clean)) return clean as TaskStatus;\n throw new AgentLoopError(\n `Unsupported task status \"${status}\". Use one of: ${TASK_STATUSES.join(', ')}.`,\n );\n}\n\nexport async function readTaskMetadata(cwd: string, filePath: string): Promise<ActiveTask> {\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: toStoredPath(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nexport async function readTaskContract(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}): Promise<TaskContract> {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const content = await readFile(absolutePath, 'utf8');\n return {\n ...(await readTaskMetadata(options.cwd, absolutePath)),\n content,\n };\n}\n\nexport async function setActiveTask(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}) {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const activeTaskPath = toStoredPath(options.cwd, absolutePath);\n await writeState(options.cwd, options.config, { version: 1, activeTaskPath });\n return readTaskMetadata(options.cwd, absolutePath);\n}\n\nexport async function updateTaskStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n status: string;\n}) {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n const status = parseTaskStatus(options.status);\n const content = await readFile(absolutePath, 'utf8');\n\n if (!/^- Status:\\s*.+$/im.test(content)) {\n throw new AgentLoopError(`Task contract does not contain a Status line: ${options.taskPath}`);\n }\n\n await writeTextFile(absolutePath, content.replace(/^(- Status:\\s*).+$/im, `$1${status}`));\n return readTaskMetadata(options.cwd, absolutePath);\n}\n\nexport async function archiveTask(options: {\n cwd: string;\n config: AgentLoopConfig;\n taskPath: string;\n}): Promise<ArchivedTask> {\n const absolutePath = await resolveTaskPath({ ...options, strict: true });\n if (!absolutePath) throw new AgentLoopError(`Task contract not found: ${options.taskPath}`);\n\n const root = tasksRoot(options.cwd, options.config);\n const archiveRoot = path.join(root, 'archive');\n if (path.dirname(absolutePath) === archiveRoot) {\n throw new AgentLoopError(`Task contract is already archived: ${options.taskPath}`);\n }\n\n const destinationPath = path.join(archiveRoot, path.basename(absolutePath));\n if (await pathExists(destinationPath)) {\n throw new AgentLoopError(\n `Archived task already exists: ${toStoredPath(options.cwd, destinationPath)}`,\n );\n }\n\n const previousPath = toStoredPath(options.cwd, absolutePath);\n const activeTaskPath = await getActiveTaskPath(options);\n await mkdir(archiveRoot, { recursive: true });\n await rename(absolutePath, destinationPath);\n if (activeTaskPath === absolutePath) {\n await clearActiveTask(options);\n }\n\n return {\n ...(await readTaskMetadata(options.cwd, destinationPath)),\n previousPath,\n };\n}\n\nexport async function getActiveTaskPath(options: { cwd: string; config: AgentLoopConfig }) {\n const state = await readState(options.cwd, options.config);\n if (!state.activeTaskPath) return undefined;\n return resolveTaskPath({\n cwd: options.cwd,\n config: options.config,\n taskPath: state.activeTaskPath,\n strict: false,\n });\n}\n\nexport async function getActiveTask(options: { cwd: string; config: AgentLoopConfig }) {\n const activeTaskPath = await getActiveTaskPath(options);\n return activeTaskPath ? readTaskMetadata(options.cwd, activeTaskPath) : undefined;\n}\n\nexport async function clearActiveTask(options: { cwd: string; config: AgentLoopConfig }) {\n await rm(statePath(options.cwd, options.config), { force: true });\n}\n\nexport async function listTasks(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<ListedTask[]> {\n const root = tasksRoot(options.cwd, options.config);\n const entries = await readdir(root, { withFileTypes: true }).catch(() => []);\n const activeTaskPath = await getActiveTaskPath(options);\n\n const tasks = await Promise.all(\n entries\n .filter((entry) => entry.isFile())\n .filter((entry) => entry.name.endsWith('.md') && entry.name !== 'README.md')\n .map(async (entry) => {\n const filePath = path.join(root, entry.name);\n const [metadata, fileStat] = await Promise.all([\n readTaskMetadata(options.cwd, filePath),\n stat(filePath),\n ]);\n return {\n ...metadata,\n active: activeTaskPath === filePath,\n modifiedAt: fileStat.mtime.toISOString(),\n modifiedMs: fileStat.mtimeMs,\n };\n }),\n );\n\n return tasks\n .sort((left, right) => {\n if (left.active !== right.active) return left.active ? -1 : 1;\n if (left.modifiedMs !== right.modifiedMs) return right.modifiedMs - left.modifiedMs;\n return left.path.localeCompare(right.path);\n })\n .map((task) => ({\n path: task.path,\n title: task.title,\n status: task.status,\n active: task.active,\n modifiedAt: task.modifiedAt,\n }));\n}\n","import { Command } from 'commander';\nimport {\n installAgentInstructions,\n installAllAgentInstructions,\n isSupportedAgent,\n} from '../../core/agent-installation.js';\nimport { SUPPORTED_AGENTS } from '../../core/constants.js';\n\nexport function installAgentCommand() {\n return new Command('install-agent')\n .description('Install agent-specific instruction files')\n .argument('<agent>', `one of: ${SUPPORTED_AGENTS.join(', ')}, all`)\n .action(async (agent: string) => {\n if (agent === 'all') {\n const results = await installAllAgentInstructions({ cwd: process.cwd() });\n console.log(`Agent instructions written: ${results.length}`);\n console.log('AGENTS.md now references all bundled agent instructions.');\n return;\n }\n if (!isSupportedAgent(agent)) {\n throw new Error(\n `Unsupported agent \"${agent}\". Supported agents: ${SUPPORTED_AGENTS.join(', ')}, all`,\n );\n }\n const result = await installAgentInstructions({ cwd: process.cwd(), agent });\n console.log(`Agent instructions written: ${result.agentFilePath}`);\n console.log('AGENTS.md now references the agent instructions.');\n });\n}\n","import path from 'node:path';\nimport { SUPPORTED_AGENTS } from './constants.js';\nimport { readTextIfExists, writeTextFile } from './file-system.js';\nimport { readTemplate } from './template-renderer.js';\n\nexport type SupportedAgent = (typeof SUPPORTED_AGENTS)[number];\n\nexport function isSupportedAgent(value: string): value is SupportedAgent {\n return (SUPPORTED_AGENTS as readonly string[]).includes(value);\n}\n\nconst displayNames: Record<SupportedAgent, string> = {\n codex: 'Codex',\n 'claude-code': 'Claude Code',\n cursor: 'Cursor',\n opencode: 'OpenCode',\n 'gemini-cli': 'Gemini CLI',\n 'github-copilot-cli': 'GitHub Copilot CLI',\n generic: 'Generic Coding Agent',\n};\n\nexport async function installAgentInstructions(options: { cwd: string; agent: SupportedAgent }) {\n const agentFilePath = path.join(options.cwd, '.agentloop', 'agents', `${options.agent}.md`);\n const content = await readTemplate(`agents/${options.agent}.md`, {\n agentName: displayNames[options.agent],\n });\n await writeTextFile(agentFilePath, content);\n\n const agentsPath = path.join(options.cwd, 'AGENTS.md');\n const existing = await readTextIfExists(agentsPath);\n const marker = `<!-- agentloopkit-agent:${options.agent} -->`;\n if (!existing.includes(marker)) {\n const block = `\n\n${marker}\n## AgentLoopKit: ${displayNames[options.agent]}\n\n- Agent instructions: .agentloop/agents/${options.agent}.md\n- Read AGENTLOOP.md before changing code.\n- Use task contracts, verification reports, and handoff summaries.\n<!-- /agentloopkit-agent:${options.agent} -->\n`;\n await writeTextFile(\n agentsPath,\n existing ? `${existing.trimEnd()}\\n${block}` : block.trimStart(),\n );\n }\n\n return { agentFilePath, agentsPath };\n}\n\nexport async function installAllAgentInstructions(options: { cwd: string }) {\n const results = [];\n for (const agent of SUPPORTED_AGENTS) {\n results.push(await installAgentInstructions({ cwd: options.cwd, agent }));\n }\n return results;\n}\n","import { Command } from 'commander';\nimport { listTemplateFiles } from '../../core/template-renderer.js';\n\nexport function listTemplatesCommand() {\n return new Command('list-templates')\n .description('List available AgentLoopKit templates')\n .action(async () => {\n const templates = await listTemplateFiles();\n for (const [group, files] of Object.entries(templates)) {\n console.log(`${group}:`);\n for (const file of files) console.log(` - ${file}`);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getPackageVersion } from '../../core/version.js';\n\nexport function versionCommand() {\n return new Command('version').description('Print CLI version').action(() => {\n console.log(getPackageVersion());\n });\n}\n","import { readFileSync } from 'node:fs';\n\ntype PackageJson = {\n version: string;\n};\n\nexport function getPackageVersion() {\n const packageJsonUrl = new URL('../../package.json', import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, 'utf8')) as PackageJson;\n return packageJson.version;\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getAgentLoopStatus } from '../../core/status.js';\n\nexport function statusCommand() {\n return new Command('status')\n .description('Show active task, latest verification, dirty files, and next action')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await getAgentLoopStatus({ cwd: process.cwd(), config });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n });\n}\n","import path from 'node:path';\nimport { readFile, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { DEFAULT_COMMAND_KEYS } from './constants.js';\nimport {\n getGitBranch,\n getGitCommit,\n getGitStatus,\n isInsideGitRepo,\n parseGitStatus,\n GitFileStatus,\n} from './git.js';\nimport { latestMarkdownFile } from './artifacts.js';\nimport { verificationReportPattern } from './artifacts.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type StatusArtifact = {\n path: string;\n title: string;\n};\n\nexport type StatusTask = StatusArtifact & {\n status: string;\n};\n\nexport type StatusReport = StatusArtifact & {\n overallStatus: string;\n};\n\nexport type AgentLoopStatusResult = {\n project: AgentLoopConfig['project'];\n git: {\n isRepository: boolean;\n branch: string;\n commit: string;\n };\n workingTree: {\n dirty: boolean;\n changedFileCount: number;\n changedFiles: GitFileStatus[];\n };\n activeTask?: StatusTask;\n latestReport?: StatusReport;\n commands: {\n configured: string[];\n missing: string[];\n };\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n};\n\ntype Timestamped<T> = T & {\n modifiedAtMs: number;\n};\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nasync function readTask(\n cwd: string,\n filePath: string | undefined,\n): Promise<Timestamped<StatusTask> | undefined> {\n if (!filePath) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n const fileStat = await stat(filePath);\n return {\n path: path.relative(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n modifiedAtMs: fileStat.mtimeMs,\n };\n}\n\nasync function readReport(\n cwd: string,\n filePath: string | undefined,\n): Promise<Timestamped<StatusReport> | undefined> {\n if (!filePath) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n const fileStat = await stat(filePath);\n return {\n path: path.relative(cwd, filePath),\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n overallStatus: extractOverallStatus(markdown),\n modifiedAtMs: fileStat.mtimeMs,\n };\n}\n\nfunction stripTaskTimestamp(task: Timestamped<StatusTask> | undefined): StatusTask | undefined {\n if (!task) return undefined;\n return {\n path: task.path,\n title: task.title,\n status: task.status,\n };\n}\n\nfunction stripReportTimestamp(\n report: Timestamped<StatusReport> | undefined,\n): StatusReport | undefined {\n if (!report) return undefined;\n return {\n path: report.path,\n title: report.title,\n overallStatus: report.overallStatus,\n };\n}\n\nfunction isPostVerificationTaskState(task: Timestamped<StatusTask> | undefined) {\n const status = task?.status.trim().toLowerCase();\n return status === 'review' || status === 'done';\n}\n\nfunction chooseNextAction(input: {\n activeTask?: StatusTask;\n latestReport?: StatusReport;\n dirty: boolean;\n}) {\n if (!input.activeTask) {\n return {\n command: 'agentloop create-task',\n reason: 'No task contract was found.',\n };\n }\n if (!input.latestReport) {\n return {\n command: 'agentloop verify',\n reason: 'A task exists, but no verification report was found.',\n };\n }\n if (input.latestReport.overallStatus === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'The latest verification report failed. Fix the failures and rerun verification.',\n };\n }\n if (input.dirty) {\n return {\n command: 'agentloop handoff',\n reason: 'Task and verification evidence exist, and the working tree has changes.',\n };\n }\n return {\n command: 'agentloop create-task',\n reason: 'The repo is clean. Start the next task contract when ready.',\n };\n}\n\nfunction formatList(values: string[]) {\n return values.length ? values.join(', ') : 'none';\n}\n\nfunction renderMarkdown(result: Omit<AgentLoopStatusResult, 'markdown'>) {\n const gitLine = result.git.isRepository\n ? `${result.git.branch || 'unknown branch'}${result.git.commit ? ` @ ${result.git.commit}` : ''}`\n : 'not inside a git repository';\n const workingTree = result.workingTree.dirty\n ? `dirty (${result.workingTree.changedFileCount} changed file(s))`\n : 'clean';\n const activeTask = result.activeTask\n ? `${result.activeTask.title} (${result.activeTask.status}) - ${result.activeTask.path}`\n : 'No task contract found.';\n const latestReport = result.latestReport\n ? `${result.latestReport.overallStatus} - ${result.latestReport.path}`\n : 'No verification report found.';\n\n return `# AgentLoopKit Status\n\n- Project: ${result.project.name || 'unnamed'} (${result.project.type})\n- Package manager: ${result.project.packageManager}\n- Git: ${gitLine}\n- Working tree: ${workingTree}\n- Active task: ${activeTask}\n- Latest verification: ${latestReport}\n- Configured commands: ${formatList(result.commands.configured)}\n- Missing commands: ${formatList(result.commands.missing)}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n`;\n}\n\nexport async function getAgentLoopStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<AgentLoopStatusResult> {\n const inGit = await isInsideGitRepo(options.cwd);\n const rawStatus = inGit ? await getGitStatus(options.cwd) : '';\n const changedFiles = await parseGitStatus(rawStatus);\n const timestampedTask = await readTask(\n options.cwd,\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir))),\n );\n const timestampedReport = await readReport(\n options.cwd,\n await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n }),\n );\n const currentReport =\n timestampedTask &&\n timestampedReport &&\n timestampedReport.modifiedAtMs < timestampedTask.modifiedAtMs &&\n !isPostVerificationTaskState(timestampedTask)\n ? undefined\n : timestampedReport;\n const activeTask = stripTaskTimestamp(timestampedTask);\n const latestReport = stripReportTimestamp(currentReport);\n const configured = DEFAULT_COMMAND_KEYS.filter((key) => options.config.commands[key]);\n const missing = DEFAULT_COMMAND_KEYS.filter((key) => !options.config.commands[key]);\n const nextAction = chooseNextAction({\n activeTask,\n latestReport,\n dirty: changedFiles.length > 0,\n });\n const withoutMarkdown = {\n project: options.config.project,\n git: {\n isRepository: inGit,\n branch: inGit ? await getGitBranch(options.cwd) : '',\n commit: inGit ? await getGitCommit(options.cwd) : '',\n },\n workingTree: {\n dirty: changedFiles.length > 0,\n changedFileCount: changedFiles.length,\n changedFiles,\n },\n activeTask,\n latestReport,\n commands: {\n configured,\n missing,\n },\n nextAction,\n };\n\n return {\n ...withoutMarkdown,\n markdown: renderMarkdown(withoutMarkdown),\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { AgentLoopStatusResult, getAgentLoopStatus } from '../../core/status.js';\n\ntype NextActionResult = {\n command: string;\n reason: string;\n activeTask: AgentLoopStatusResult['activeTask'] | null;\n latestReport: AgentLoopStatusResult['latestReport'] | null;\n workingTree: Pick<AgentLoopStatusResult['workingTree'], 'dirty' | 'changedFileCount'>;\n commands: AgentLoopStatusResult['commands'];\n};\n\nfunction formatTask(result: NextActionResult) {\n if (!result.activeTask) return 'none';\n return `${result.activeTask.title} (${result.activeTask.status}) - ${result.activeTask.path}`;\n}\n\nfunction formatReport(result: NextActionResult) {\n if (!result.latestReport) return 'none';\n return `${result.latestReport.overallStatus} - ${result.latestReport.path}`;\n}\n\nfunction toNextActionResult(status: AgentLoopStatusResult): NextActionResult {\n return {\n command: status.nextAction.command,\n reason: status.nextAction.reason,\n activeTask: status.activeTask ?? null,\n latestReport: status.latestReport ?? null,\n workingTree: {\n dirty: status.workingTree.dirty,\n changedFileCount: status.workingTree.changedFileCount,\n },\n commands: status.commands,\n };\n}\n\nfunction renderNextAction(result: NextActionResult) {\n const workingTree = result.workingTree.dirty\n ? `dirty (${result.workingTree.changedFileCount} changed file(s))`\n : 'clean';\n\n return `# AgentLoopKit Next Action\n\nRun \\`${result.command}\\`.\n\n${result.reason}\n\n- Active task: ${formatTask(result)}\n- Latest verification: ${formatReport(result)}\n- Working tree: ${workingTree}\n`;\n}\n\nexport function nextCommand() {\n return new Command('next')\n .description('Show the next recommended loop action')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const status = await getAgentLoopStatus({ cwd: process.cwd(), config });\n const result = toNextActionResult(status);\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(renderNextAction(result));\n }\n });\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport {\n archiveTask,\n clearActiveTask,\n getActiveTask,\n listTasks,\n readTaskContract,\n setActiveTask,\n updateTaskStatus,\n} from '../../core/task-state.js';\nimport type { ActiveTask, ArchivedTask, ListedTask, TaskContract } from '../../core/task-state.js';\n\nfunction printTask(\n task: Awaited<ReturnType<typeof getActiveTask>> | null,\n options: { json?: boolean },\n) {\n if (options.json) {\n console.log(JSON.stringify({ activeTask: task ?? null }, null, 2));\n return;\n }\n if (!task) {\n console.log('No active task set.');\n console.log('Run `agentloop task set <path>` to pin one.');\n return;\n }\n console.log(`Active task: ${task.title} (${task.status})`);\n console.log(task.path);\n}\n\nfunction printTasks(tasks: ListedTask[], options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ tasks }, null, 2));\n return;\n }\n if (tasks.length === 0) {\n console.log('No task contracts found.');\n console.log('Run `agentloop create-task --title \"Your task\"` to create one.');\n return;\n }\n console.log('Task contracts:');\n for (const task of tasks) {\n const marker = task.active ? '*' : '-';\n const activeLabel = task.active ? ' active' : '';\n console.log(`${marker} ${task.title} (${task.status})${activeLabel}`);\n console.log(` ${task.path}`);\n }\n}\n\nfunction printTaskContract(task: TaskContract, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n process.stdout.write(task.content);\n}\n\nfunction printUpdatedTask(task: ActiveTask, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n console.log(`Updated task status: ${task.title} (${task.status})`);\n console.log(task.path);\n}\n\nfunction printArchivedTask(task: ArchivedTask, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ task }, null, 2));\n return;\n }\n console.log(`Archived task: ${task.title} (${task.status})`);\n console.log(`${task.previousPath} -> ${task.path}`);\n}\n\nexport function taskCommand() {\n const command = new Command('task').description(\n 'List, inspect, update, or archive task contracts',\n );\n\n command\n .command('list')\n .option('--json', 'print machine-readable output')\n .description('List task contracts')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const tasks = await listTasks({ cwd: process.cwd(), config });\n printTasks(tasks, options);\n });\n\n command\n .command('show')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Show a task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await readTaskContract({ cwd: process.cwd(), config, taskPath });\n printTaskContract(task, options);\n });\n\n command\n .command('set')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Set the active task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const activeTask = await setActiveTask({ cwd: process.cwd(), config, taskPath });\n printTask(activeTask, options);\n });\n\n command\n .command('status')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .argument('<status>', 'one of: proposed, in-progress, blocked, review, done')\n .option('--json', 'print machine-readable output')\n .description('Update a task contract status')\n .action(async (taskPath: string, status: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await updateTaskStatus({ cwd: process.cwd(), config, taskPath, status });\n printUpdatedTask(task, options);\n });\n\n command\n .command('archive')\n .argument('<path>', 'task contract path under .agentloop/tasks')\n .option('--json', 'print machine-readable output')\n .description('Archive a task contract')\n .action(async (taskPath: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const task = await archiveTask({ cwd: process.cwd(), config, taskPath });\n printArchivedTask(task, options);\n });\n\n command\n .command('current')\n .option('--json', 'print machine-readable output')\n .description('Print the active task contract')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const activeTask = await getActiveTask({ cwd: process.cwd(), config });\n printTask(activeTask ?? null, options);\n });\n\n command\n .command('clear')\n .option('--json', 'print machine-readable output')\n .description('Clear the active task pointer')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n await clearActiveTask({ cwd: process.cwd(), config });\n printTask(null, options);\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { renderCompletionScript } from '../../core/completions.js';\n\nexport function completionCommand() {\n return new Command('completion')\n .description('Print shell completion scripts')\n .argument('<shell>', 'one of: bash, zsh, fish, powershell, pwsh')\n .action((shell: string) => {\n process.stdout.write(renderCompletionScript(shell));\n });\n}\n","import { AgentLoopError } from './errors.js';\n\nexport const COMPLETION_SHELLS = ['bash', 'zsh', 'fish', 'powershell', 'pwsh'] as const;\n\nexport type CompletionShell = (typeof COMPLETION_SHELLS)[number];\n\nconst topLevelCommands = [\n ['init', 'Generate the repo harness and config'],\n ['doctor', 'Check setup health'],\n ['create-task', 'Create a task contract'],\n ['verify', 'Run configured verification commands'],\n ['summarize', 'Preview a reviewer summary'],\n ['handoff', 'Write a reviewer handoff'],\n ['status', 'Show current loop state'],\n ['next', 'Show the next recommended loop action'],\n ['check-gates', 'Check review gate evidence'],\n ['report', 'Write a local HTML evidence report'],\n ['badge', 'Write a local SVG evidence badge'],\n ['ci-summary', 'Summarize CI context and AgentLoop evidence'],\n ['release-notes', 'Generate deterministic release notes'],\n ['npm-status', 'Check npm registry catch-up status'],\n ['policy', 'List or inspect local AgentLoopKit policies'],\n ['task', 'List, inspect, update, or archive task contracts'],\n ['install-agent', 'Install agent-specific instructions'],\n ['list-templates', 'List bundled templates'],\n ['completion', 'Print shell completion scripts'],\n ['version', 'Print the CLI version'],\n] as const;\n\nconst taskCommandSpecs = [\n ['list', 'List task contracts'],\n ['show', 'Show a task contract'],\n ['set', 'Set the active task contract'],\n ['status', 'Update a task contract status'],\n ['archive', 'Archive a task contract'],\n ['current', 'Print the active task contract'],\n ['clear', 'Clear the active task pointer'],\n] as const;\n\nconst taskCommands = taskCommandSpecs.map(([name]) => name);\nconst policyCommandSpecs = [\n ['list', 'List local policies'],\n ['show', 'Show a local policy'],\n ['status', 'Show local policy template status'],\n] as const;\nconst policyCommands = policyCommandSpecs.map(([name]) => name);\nconst taskStatuses = ['proposed', 'in-progress', 'blocked', 'review', 'done'] as const;\nconst agentNames = [\n 'codex',\n 'claude-code',\n 'cursor',\n 'opencode',\n 'gemini-cli',\n 'github-copilot-cli',\n 'generic',\n 'all',\n] as const;\n\nfunction parseShell(shell: string): CompletionShell {\n const clean = shell.trim().toLowerCase();\n if ((COMPLETION_SHELLS as readonly string[]).includes(clean)) return clean as CompletionShell;\n throw new AgentLoopError(\n `Unsupported shell \"${shell}\". Use one of: ${COMPLETION_SHELLS.join(', ')}.`,\n );\n}\n\nfunction renderBash() {\n const commands = topLevelCommands.map(([name]) => name).join(' ');\n return `# AgentLoopKit bash completion\n# Save with: agentloop completion bash > ~/.agentloop-completion.bash\n# Then source it from your shell profile.\n_agentloop_completion() {\n local current previous\n COMPREPLY=()\n current=\"\\${COMP_WORDS[COMP_CWORD]}\"\n previous=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n\n case \"\\${COMP_WORDS[1]}\" in\n task)\n case \"\\${COMP_WORDS[2]}\" in\n status)\n if [[ \\${COMP_CWORD} -eq 4 ]]; then\n COMPREPLY=( $(compgen -W \"${taskStatuses.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n *)\n if [[ \\${COMP_CWORD} -eq 2 ]]; then\n COMPREPLY=( $(compgen -W \"${taskCommands.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n esac\n ;;\n policy)\n if [[ \\${COMP_CWORD} -eq 2 ]]; then\n COMPREPLY=( $(compgen -W \"${policyCommands.join(' ')}\" -- \"$current\") )\n return 0\n fi\n ;;\n install-agent)\n COMPREPLY=( $(compgen -W \"${agentNames.join(' ')}\" -- \"$current\") )\n return 0\n ;;\n completion)\n COMPREPLY=( $(compgen -W \"${COMPLETION_SHELLS.join(' ')}\" -- \"$current\") )\n return 0\n ;;\n esac\n\n if [[ \\${COMP_CWORD} -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"${commands}\" -- \"$current\") )\n fi\n}\n\ncomplete -F _agentloop_completion agentloop\ncomplete -F _agentloop_completion agentloopkit\n`;\n}\n\nfunction renderZsh() {\n const commandSpecs = topLevelCommands.map(([name, description]) => `${name}:${description}`);\n return `#compdef agentloop agentloopkit\n# AgentLoopKit zsh completion\n# Save with: agentloop completion zsh > ~/.zsh/completions/_agentloop\n\n_agentloop() {\n local context state line\n typeset -A opt_args\n\n _arguments -C \\\\\n '1:command:->commands' \\\\\n '*::arg:->args'\n\n case \"$state\" in\n commands)\n _describe 'agentloop command' commandSpecs\n ;;\n args)\n case \"$words[2]\" in\n task)\n if [[ \"$words[3]\" == \"status\" && CURRENT -eq 5 ]]; then\n _values 'task status' ${taskStatuses.map((status) => `\"${status}\"`).join(' ')}\n else\n _describe 'task command' taskCommandSpecs\n fi\n ;;\n policy)\n _describe 'policy command' policyCommandSpecs\n ;;\n install-agent)\n _values 'agent' ${agentNames.map((agent) => `\"${agent}\"`).join(' ')}\n ;;\n completion)\n _values 'shell' ${COMPLETION_SHELLS.map((shell) => `\"${shell}\"`).join(' ')}\n ;;\n esac\n ;;\n esac\n}\n\ncommandSpecs=(\n${commandSpecs.map((spec) => ` '${spec}'`).join('\\n')}\n)\n\ntaskCommandSpecs=(\n${taskCommandSpecs.map(([name, description]) => ` '${name}:${description}'`).join('\\n')}\n)\n\npolicyCommandSpecs=(\n${policyCommandSpecs.map(([name, description]) => ` '${name}:${description}'`).join('\\n')}\n)\n\n_agentloop \"$@\"\n`;\n}\n\nfunction fishLine(command: string, args: string[], description: string) {\n return `complete -c agentloop -n '${command}' -a '${args.join(' ')}' -d '${description}'`;\n}\n\nfunction renderFish() {\n const topCommands = topLevelCommands.map(([name]) => name);\n return `# AgentLoopKit fish completion\n# Save with: agentloop completion fish > ~/.config/fish/completions/agentloop.fish\n\ncomplete -c agentloop -f\ncomplete -c agentloopkit -f\n${fishLine('__fish_use_subcommand', topCommands, 'AgentLoopKit command')}\ncomplete -c agentloop -n '__fish_seen_subcommand_from task' -a '${taskCommands.join(' ')}' -d 'Task command'\ncomplete -c agentloop -n '__fish_seen_subcommand_from policy' -a '${policyCommands.join(' ')}' -d 'Policy command'\ncomplete -c agentloop -n '__fish_seen_subcommand_from status' -a '${taskStatuses.join(' ')}' -d 'Task status'\ncomplete -c agentloop -n '__fish_seen_subcommand_from install-agent' -a '${agentNames.join(' ')}' -d 'Agent name'\ncomplete -c agentloop -n '__fish_seen_subcommand_from completion' -a '${COMPLETION_SHELLS.join(' ')}' -d 'Shell'\ncomplete -c agentloopkit -n '__fish_use_subcommand' -a '${topCommands.join(' ')}' -d 'AgentLoopKit command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from task' -a '${taskCommands.join(' ')}' -d 'Task command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from policy' -a '${policyCommands.join(' ')}' -d 'Policy command'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from status' -a '${taskStatuses.join(' ')}' -d 'Task status'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from install-agent' -a '${agentNames.join(' ')}' -d 'Agent name'\ncomplete -c agentloopkit -n '__fish_seen_subcommand_from completion' -a '${COMPLETION_SHELLS.join(' ')}' -d 'Shell'\n`;\n}\n\nfunction powerShellArray(values: readonly string[]) {\n return `@(${values.map((value) => `'${value}'`).join(', ')})`;\n}\n\nfunction renderPowerShell() {\n const topCommands = topLevelCommands.map(([name]) => name);\n return `# AgentLoopKit PowerShell completion\n# Save with: agentloop completion powershell > agentloop-completion.ps1\n# Review the script before dot-sourcing it from your PowerShell startup file.\n\n$AgentLoopCommands = ${powerShellArray(topCommands)}\n$AgentLoopTaskCommands = ${powerShellArray(taskCommands)}\n$AgentLoopPolicyCommands = ${powerShellArray(policyCommands)}\n$AgentLoopTaskStatuses = ${powerShellArray(taskStatuses)}\n$AgentLoopAgents = ${powerShellArray(agentNames)}\n$AgentLoopShells = ${powerShellArray(COMPLETION_SHELLS)}\n\nRegister-ArgumentCompleter -Native -CommandName agentloop, agentloopkit -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n\n $words = @($commandAst.CommandElements | ForEach-Object { $_.Extent.Text })\n $prefix = if ($null -eq $wordToComplete) { '' } else { $wordToComplete }\n $values = $AgentLoopCommands\n\n if ($words.Count -gt 1) {\n switch ($words[1]) {\n 'task' {\n if ($words.Count -gt 2 -and $words[2] -eq 'status') {\n $values = $AgentLoopTaskStatuses\n } else {\n $values = $AgentLoopTaskCommands\n }\n }\n 'policy' { $values = $AgentLoopPolicyCommands }\n 'install-agent' { $values = $AgentLoopAgents }\n 'completion' { $values = $AgentLoopShells }\n }\n }\n\n $values |\n Where-Object { $_.StartsWith($prefix, [System.StringComparison]::OrdinalIgnoreCase) } |\n ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) }\n}\n`;\n}\n\nexport function renderCompletionScript(shell: string) {\n switch (parseShell(shell)) {\n case 'bash':\n return renderBash();\n case 'zsh':\n return renderZsh();\n case 'fish':\n return renderFish();\n case 'powershell':\n case 'pwsh':\n return renderPowerShell();\n }\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { checkGates } from '../../core/check-gates.js';\n\nexport function checkGatesCommand() {\n return new Command('check-gates')\n .description('Check whether task, verification, handoff, harness, policy, and git gates pass')\n .option('--json', 'print machine-readable output')\n .option('--strict', 'treat warning gates as failures')\n .action(async (options: { json?: boolean; strict?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await checkGates({ cwd: process.cwd(), config, strict: options.strict });\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n if (result.overallStatus === 'fail') process.exitCode = 1;\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { latestMarkdownFile, prSummaryPattern, verificationReportPattern } from './artifacts.js';\nimport { pathExists } from './file-system.js';\nimport { getGitBranch, getGitCommit, getGitStatus, isInsideGitRepo, parseGitStatus } from './git.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type GateStatus = 'pass' | 'warn' | 'fail';\n\nexport type GateCheck = {\n id: string;\n name: string;\n status: GateStatus;\n message: string;\n path?: string;\n};\n\nexport type CheckGatesResult = {\n strict: boolean;\n overallStatus: GateStatus;\n gates: GateCheck[];\n git: {\n isRepository: boolean;\n branch: string;\n commit: string;\n changedFileCount: number;\n };\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n};\n\nconst requiredRootFiles = ['AGENTS.md', 'AGENTLOOP.md', 'agentloop.config.json'];\nconst requiredHarnessFiles = [\n '.agentloop/harness/commands.md',\n '.agentloop/harness/definition-of-done.md',\n '.agentloop/harness/review-checklist.md',\n '.agentloop/harness/autonomous-work-rules.md',\n];\nconst requiredPolicyFiles = [\n '.agentloop/policies/no-destructive-actions.md',\n '.agentloop/policies/git-policy.md',\n '.agentloop/policies/secrets-policy.md',\n];\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nfunction relativePath(cwd: string, filePath: string) {\n return path.relative(cwd, filePath) || '.';\n}\n\nasync function missingFiles(cwd: string, files: string[]) {\n const missing: string[] = [];\n for (const file of files) {\n if (!(await pathExists(path.join(cwd, file)))) missing.push(file);\n }\n return missing;\n}\n\nfunction gate(id: string, name: string, status: GateStatus, message: string, filePath?: string) {\n return { id, name, status, message, ...(filePath ? { path: filePath } : {}) };\n}\n\nfunction overallStatus(gates: GateCheck[], strict: boolean): GateStatus {\n if (gates.some((item) => item.status === 'fail')) return 'fail';\n if (strict && gates.some((item) => item.status === 'warn')) return 'fail';\n if (gates.some((item) => item.status === 'warn')) return 'warn';\n return 'pass';\n}\n\nfunction chooseNextAction(gates: GateCheck[]) {\n const task = gates.find((item) => item.id === 'task-contract');\n const report = gates.find((item) => item.id === 'verification-report');\n const handoff = gates.find((item) => item.id === 'handoff-summary');\n if (task?.status === 'fail') {\n return {\n command: 'agentloop create-task',\n reason: 'Create a task contract before review gates can pass.',\n };\n }\n if (report?.status === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'Run verification and fix failures before review.',\n };\n }\n if (handoff?.status !== 'pass') {\n return {\n command: 'agentloop handoff',\n reason: 'Write a reviewer handoff after verification.',\n };\n }\n return {\n command: 'agentloop handoff',\n reason: 'Gate evidence is present. Refresh the reviewer handoff if the diff changed.',\n };\n}\n\nfunction renderMarkdown(result: Omit<CheckGatesResult, 'markdown'>) {\n const gateLines = result.gates\n .map((item) => {\n const suffix = item.path ? ` - ${item.path}` : '';\n return `- [${item.status}] ${item.name}: ${item.message}${suffix}`;\n })\n .join('\\n');\n const gitLine = result.git.isRepository\n ? `${result.git.branch || 'unknown branch'}${result.git.commit ? ` @ ${result.git.commit}` : ''}`\n : 'not inside a git repository';\n\n return `# AgentLoopKit Gates\n\n- Overall status: ${result.overallStatus}\n- Strict mode: ${result.strict ? 'enabled (warnings fail)' : 'disabled'}\n- Git: ${gitLine}\n- Changed files: ${result.git.changedFileCount}\n\n## Gates\n\n${gateLines}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n`;\n}\n\nexport async function checkGates(options: {\n cwd: string;\n config: AgentLoopConfig;\n strict?: boolean;\n}): Promise<CheckGatesResult> {\n const strict = options.strict ?? false;\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const reportPath = await latestMarkdownFile(path.join(options.cwd, options.config.paths.reportsDir), {\n pattern: verificationReportPattern,\n });\n const handoffPath = await latestMarkdownFile(path.join(options.cwd, options.config.paths.handoffsDir), {\n pattern: prSummaryPattern,\n });\n const gates: GateCheck[] = [];\n\n if (taskPath) {\n const taskMarkdown = await readFile(taskPath, 'utf8');\n gates.push(\n gate(\n 'task-contract',\n 'Task contract',\n 'pass',\n extractHeading(taskMarkdown, path.basename(taskPath, '.md')),\n relativePath(options.cwd, taskPath),\n ),\n );\n } else {\n gates.push(gate('task-contract', 'Task contract', 'fail', 'No task contract found.'));\n }\n\n if (reportPath) {\n const reportMarkdown = await readFile(reportPath, 'utf8');\n const status = extractOverallStatus(reportMarkdown);\n gates.push(\n gate(\n 'verification-report',\n 'Verification report',\n status === 'pass' ? 'pass' : 'fail',\n `Overall status: ${status}`,\n relativePath(options.cwd, reportPath),\n ),\n );\n } else {\n gates.push(\n gate('verification-report', 'Verification report', 'fail', 'No verification report found.'),\n );\n }\n\n if (handoffPath) {\n gates.push(\n gate(\n 'handoff-summary',\n 'Handoff summary',\n 'pass',\n 'Reviewer handoff found.',\n relativePath(options.cwd, handoffPath),\n ),\n );\n } else {\n gates.push(gate('handoff-summary', 'Handoff summary', 'warn', 'No handoff summary found.'));\n }\n\n const missingHarness = await missingFiles(options.cwd, [\n ...requiredRootFiles,\n ...requiredHarnessFiles,\n ]);\n gates.push(\n gate(\n 'repo-harness',\n 'Repo harness',\n missingHarness.length ? 'warn' : 'pass',\n missingHarness.length\n ? `Missing harness files: ${missingHarness.join(', ')}.`\n : 'Required repo and harness files exist.',\n ),\n );\n\n const missingPolicies = await missingFiles(options.cwd, requiredPolicyFiles);\n gates.push(\n gate(\n 'safety-policies',\n 'Safety policies',\n missingPolicies.length ? 'warn' : 'pass',\n missingPolicies.length\n ? `Missing policy files: ${missingPolicies.join(', ')}.`\n : 'Core safety policy files exist.',\n ),\n );\n\n const inGit = await isInsideGitRepo(options.cwd);\n const changedFiles = inGit ? await parseGitStatus(await getGitStatus(options.cwd)) : [];\n gates.push(\n gate(\n 'git-context',\n 'Git context',\n !inGit || changedFiles.length === 0 ? 'warn' : 'pass',\n !inGit\n ? 'Not inside a git repository.'\n : changedFiles.length === 0\n ? 'No changed files detected.'\n : `${changedFiles.length} changed file(s) detected.`,\n ),\n );\n\n const withoutMarkdown = {\n strict,\n overallStatus: overallStatus(gates, strict),\n gates,\n git: {\n isRepository: inGit,\n branch: inGit ? await getGitBranch(options.cwd) : '',\n commit: inGit ? await getGitCommit(options.cwd) : '',\n changedFileCount: changedFiles.length,\n },\n nextAction: chooseNextAction(gates),\n };\n return { ...withoutMarkdown, markdown: renderMarkdown(withoutMarkdown) };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { writeHtmlReport } from '../../core/html-report.js';\n\nexport function reportCommand() {\n return new Command('report')\n .description('Generate a local static HTML evidence report')\n .option('--task <path>', 'task contract path')\n .option('--report <path>', 'verification report path')\n .option('--handoff <path>', 'handoff summary path')\n .option('--out <path>', 'output HTML path')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n task?: string;\n report?: string;\n handoff?: string;\n out?: string;\n json?: boolean;\n }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await writeHtmlReport({\n cwd: process.cwd(),\n config,\n taskPath: options.task,\n reportPath: options.report,\n handoffPath: options.handoff,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n outPath: result.outPath,\n metadata: result.metadata,\n sourcePaths: result.sourcePaths,\n },\n null,\n 2,\n ),\n );\n } else {\n console.log(`# AgentLoopKit HTML Report\n\nReport written: ${result.outPath}\nTask: ${result.metadata.taskTitle}\nVerification: ${result.metadata.verificationStatus}\nChanged files: ${result.metadata.changedFileCount}\n\nNext step: open the HTML file locally or attach it as a CI/PR artifact.`);\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile, readdir, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { latestMarkdownFile } from './artifacts.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport {\n getGitBranch,\n getGitCommit,\n getGitDiffStat,\n getGitStatus,\n GitFileStatus,\n parseGitStatus,\n} from './git.js';\nimport { summarizeRepository } from './pr-summary.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type HtmlReportInput = {\n timestamp: string;\n nowIso?: string;\n repoName: string;\n branch: string;\n commit: string;\n workingTreeStatus: string;\n taskPath?: string;\n verificationPath?: string;\n handoffPath?: string;\n changedFiles: GitFileStatus[];\n diffStat?: string;\n taskMarkdown?: string;\n verificationMarkdown?: string;\n handoffMarkdown?: string;\n summaryMarkdown?: string;\n};\n\nexport type HtmlReportMetadata = {\n timestamp: string;\n repoName: string;\n taskTitle: string;\n verificationStatus: string;\n changedFileCount: number;\n};\n\nexport type HtmlReportResult = {\n html: string;\n metadata: HtmlReportMetadata;\n};\n\nexport type WriteHtmlReportOptions = {\n cwd: string;\n config: AgentLoopConfig;\n timestamp?: string;\n nowIso?: string;\n taskPath?: string;\n reportPath?: string;\n handoffPath?: string;\n outPath?: string;\n};\n\nexport type WrittenHtmlReport = HtmlReportResult & {\n outPath: string;\n sourcePaths: {\n task?: string;\n verification?: string;\n handoff?: string;\n };\n};\n\nfunction escapeHtml(value: string) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction extractLine(markdown: string | undefined, pattern: RegExp, fallback: string) {\n if (!markdown) return fallback;\n return markdown.match(pattern)?.[1]?.trim() || fallback;\n}\n\nfunction extractTitle(markdown: string | undefined, fallback: string) {\n return extractLine(markdown, /^#\\s+(.+)$/m, fallback);\n}\n\nfunction extractVerificationStatus(markdown: string | undefined) {\n return extractLine(markdown, /Overall status:\\s*([a-z-]+)/i, 'not available');\n}\n\nfunction normalizeDisplayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);\n return path.relative(cwd, absolutePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function readMarkdownIfExists(filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n return readFile(filePath, 'utf8');\n}\n\nasync function latestMatchingMarkdownFile(dir: string, pattern: RegExp) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (await readdir(dir, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && pattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n\n return entries.at(-1)?.filePath;\n}\n\nfunction renderSourcePath(label: string, filePath: string | undefined) {\n return `<li><span>${escapeHtml(label)}</span><code>${escapeHtml(filePath ?? 'not found')}</code></li>`;\n}\n\nfunction renderChangedFiles(changedFiles: GitFileStatus[]) {\n if (!changedFiles.length) return '<p class=\"muted\">No changed files detected.</p>';\n return `<table>\n <thead><tr><th>Status</th><th>Path</th></tr></thead>\n <tbody>\n${changedFiles\n .map(\n (file) =>\n ` <tr><td><code>${escapeHtml(file.status)}</code></td><td><code>${escapeHtml(\n file.path,\n )}</code></td></tr>`,\n )\n .join('\\n')}\n </tbody>\n</table>`;\n}\n\nfunction renderMarkdownBlock(label: string, markdown: string | undefined, emptyText: string) {\n return `<section>\n <h2>${escapeHtml(label)}</h2>\n ${\n markdown?.trim()\n ? `<pre>${escapeHtml(markdown.trim())}</pre>`\n : `<p class=\"muted\">${escapeHtml(emptyText)}</p>`\n }\n</section>`;\n}\n\nexport function generateHtmlReport(input: HtmlReportInput): HtmlReportResult {\n const taskTitle = extractTitle(input.taskMarkdown, 'No task contract found');\n const verificationStatus = extractVerificationStatus(input.verificationMarkdown);\n const generatedAt = input.nowIso ?? new Date().toISOString();\n const metadata: HtmlReportMetadata = {\n timestamp: input.timestamp,\n repoName: input.repoName,\n taskTitle,\n verificationStatus,\n changedFileCount: input.changedFiles.length,\n };\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>AgentLoopKit Report - ${escapeHtml(input.repoName)}</title>\n <style>\n :root { color-scheme: light; --ink: oklch(22% 0.026 245); --muted: oklch(48% 0.023 245); --line: oklch(84% 0.018 245); --panel: oklch(97% 0.009 245); --paper: oklch(99% 0.006 245); --accent: oklch(49% 0.09 183); --warn-ink: oklch(42% 0.12 52); --warn-bg: oklch(96% 0.035 72); --terminal: oklch(19% 0.024 245); --terminal-ink: oklch(91% 0.014 245); }\n * { box-sizing: border-box; }\n body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; color: var(--ink); background: var(--paper); line-height: 1.55; }\n main { max-width: 1040px; margin: 0 auto; padding: 44px 24px 56px; }\n header { border-bottom: 1px solid var(--line); padding-bottom: 24px; margin-bottom: 28px; }\n .eyebrow { color: var(--accent); font-size: 13px; font-weight: 700; letter-spacing: 0; text-transform: uppercase; }\n h1 { margin: 8px 0 12px; font-size: clamp(32px, 5vw, 54px); line-height: 1.03; letter-spacing: 0; }\n h2 { margin: 0 0 12px; font-size: 21px; letter-spacing: 0; }\n section { border-top: 1px solid var(--line); padding: 24px 0; }\n .summary { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); margin-top: 18px; }\n .metric { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 14px; }\n .metric span { display: block; color: var(--muted); font-size: 13px; }\n .metric strong { display: block; margin-top: 5px; font-size: 16px; overflow-wrap: anywhere; }\n ul.sources { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }\n ul.sources li { display: grid; gap: 4px; }\n .muted { color: var(--muted); }\n .safety { border: 1px solid oklch(78% 0.08 62); color: var(--warn-ink); background: var(--warn-bg); padding: 14px 16px; border-radius: 6px; }\n table { width: 100%; border-collapse: collapse; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }\n th, td { text-align: left; border-bottom: 1px solid var(--line); padding: 10px 12px; vertical-align: top; }\n th { background: var(--panel); font-size: 13px; color: var(--muted); }\n tr:last-child td { border-bottom: 0; }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; font-size: 0.92em; overflow-wrap: anywhere; }\n pre { margin: 0; padding: 16px; overflow: auto; border: 1px solid var(--line); border-radius: 8px; background: var(--terminal); color: var(--terminal-ink); font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace; white-space: pre-wrap; overflow-wrap: anywhere; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"eyebrow\">AgentLoopKit local evidence report</div>\n <h1>${escapeHtml(taskTitle)}</h1>\n <p class=\"muted\">Generated ${escapeHtml(generatedAt)} from local repository artifacts. No LLM, network call, telemetry, or command execution is required to render this report.</p>\n <div class=\"summary\">\n <div class=\"metric\"><span>Repository</span><strong>${escapeHtml(input.repoName)}</strong></div>\n <div class=\"metric\"><span>Branch</span><strong>${escapeHtml(input.branch || 'not available')}</strong></div>\n <div class=\"metric\"><span>Commit</span><strong>${escapeHtml(input.commit || 'not available')}</strong></div>\n <div class=\"metric\"><span>Working tree</span><strong>${escapeHtml(input.workingTreeStatus)}</strong></div>\n <div class=\"metric\"><span>Verification</span><strong>${escapeHtml(verificationStatus)}</strong></div>\n <div class=\"metric\"><span>Changed files</span><strong>${input.changedFiles.length}</strong></div>\n </div>\n </header>\n\n <section>\n <h2>Source Artifacts</h2>\n <ul class=\"sources\">\n ${renderSourcePath('Task contract', input.taskPath)}\n ${renderSourcePath('Verification report', input.verificationPath)}\n ${renderSourcePath('Handoff summary', input.handoffPath)}\n </ul>\n </section>\n\n <section>\n <h2>Changed Files</h2>\n ${renderChangedFiles(input.changedFiles)}\n </section>\n\n ${renderMarkdownBlock('Task Contract', input.taskMarkdown, 'No task contract was found.')}\n ${renderMarkdownBlock('Verification Evidence', input.verificationMarkdown, 'No verification report was found.')}\n ${renderMarkdownBlock('Reviewer Handoff', input.handoffMarkdown, 'No handoff summary was found.')}\n ${renderMarkdownBlock('Current Deterministic Summary', input.summaryMarkdown, 'No deterministic summary was generated.')}\n\n <section>\n <h2>Diff Stats</h2>\n <pre>${escapeHtml(input.diffStat?.trim() || 'No diff stats available.')}</pre>\n </section>\n\n <section>\n <h2>Safety Notes</h2>\n <div class=\"safety\">This report is a local static artifact. It must not be treated as proof that verification passed unless the verification section says so. Review protected areas such as secrets, auth, billing, deployment, migrations, lockfiles, and public APIs before merge.</div>\n </section>\n </main>\n</body>\n</html>\n`;\n\n return { html, metadata };\n}\n\nexport async function writeHtmlReport(options: WriteHtmlReportOptions): Promise<WrittenHtmlReport> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const cwd = options.cwd;\n const taskPath =\n resolveUserPath(cwd, options.taskPath) ??\n (await getActiveTaskPath({ cwd, config: options.config })) ??\n (await latestMarkdownFile(path.join(cwd, options.config.paths.tasksDir)));\n const verificationPath =\n resolveUserPath(cwd, options.reportPath) ??\n (await latestMatchingMarkdownFile(\n path.join(cwd, options.config.paths.reportsDir),\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/,\n ));\n const handoffPath =\n resolveUserPath(cwd, options.handoffPath) ??\n (await latestMatchingMarkdownFile(\n path.join(cwd, options.config.paths.handoffsDir),\n /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-pr-summary\\.md$/,\n ));\n\n const [status, branch, commit, diffStat, taskMarkdown, verificationMarkdown, handoffMarkdown] =\n await Promise.all([\n getGitStatus(cwd),\n getGitBranch(cwd),\n getGitCommit(cwd),\n getGitDiffStat(cwd),\n readMarkdownIfExists(taskPath),\n readMarkdownIfExists(verificationPath),\n readMarkdownIfExists(handoffPath),\n ]);\n const changedFiles = await parseGitStatus(status);\n const summary = await summarizeRepository({\n cwd,\n config: options.config,\n taskPath,\n reportPath: verificationPath,\n timestamp,\n write: false,\n });\n const report = generateHtmlReport({\n timestamp,\n nowIso: options.nowIso,\n repoName: options.config.project.name || path.basename(cwd),\n branch,\n commit,\n workingTreeStatus: status.trim() ? 'dirty' : 'clean or unavailable',\n taskPath: normalizeDisplayPath(cwd, taskPath),\n verificationPath: normalizeDisplayPath(cwd, verificationPath),\n handoffPath: normalizeDisplayPath(cwd, handoffPath),\n changedFiles,\n diffStat,\n taskMarkdown,\n verificationMarkdown,\n handoffMarkdown,\n summaryMarkdown: summary.markdown,\n });\n const outPath =\n resolveUserPath(cwd, options.outPath) ??\n path.join(cwd, options.config.paths.reportsDir, `${timestamp}-agentloop-report.html`);\n\n await writeTextFile(outPath, report.html);\n\n return {\n ...report,\n outPath,\n sourcePaths: {\n task: normalizeDisplayPath(cwd, taskPath),\n verification: normalizeDisplayPath(cwd, verificationPath),\n handoff: normalizeDisplayPath(cwd, handoffPath),\n },\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { writeEvidenceBadge } from '../../core/badge.js';\n\nexport function badgeCommand() {\n return new Command('badge')\n .description('Generate a local SVG evidence badge')\n .option('--source <source>', 'badge source: verification or gates', 'verification')\n .option('--out <path>', 'output SVG path')\n .option('--strict', 'use strict gate status when source is gates')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: { source?: string; out?: string; strict?: boolean; json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await writeEvidenceBadge({\n cwd: process.cwd(),\n config,\n source: options.source,\n outPath: options.out,\n strict: options.strict,\n });\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n outPath: result.outPath,\n source: result.source,\n status: result.status,\n label: result.label,\n message: result.message,\n sourcePath: result.sourcePath,\n },\n null,\n 2,\n ),\n );\n } else {\n console.log(`# AgentLoopKit Badge\n\nBadge written: ${result.outPath}\nSource: ${result.source}\nStatus: ${result.status}\nMessage: ${result.message}`);\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile, readdir, stat } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { checkGates, GateStatus } from './check-gates.js';\nimport { AgentLoopError } from './errors.js';\n\nexport type BadgeSource = 'verification' | 'gates';\nexport type BadgeStatus = GateStatus | 'missing' | 'not-run' | 'unknown';\n\nexport type SvgBadgeInput = {\n label: string;\n message: string;\n status: BadgeStatus;\n};\n\nexport type SvgBadgeResult = SvgBadgeInput & {\n svg: string;\n};\n\nexport type EvidenceBadgeResult = {\n outPath: string;\n source: BadgeSource;\n status: BadgeStatus;\n label: string;\n message: string;\n sourcePath?: string;\n svg: string;\n};\n\nconst verificationReportPattern = /^\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-verification-report\\.md$/;\n\nfunction escapeXml(value: string) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction statusColor(status: BadgeStatus) {\n switch (status) {\n case 'pass':\n return '#2f855a';\n case 'fail':\n return '#c2410c';\n case 'warn':\n case 'not-run':\n case 'missing':\n case 'unknown':\n return '#a16207';\n }\n}\n\nfunction textWidth(value: string) {\n return Math.max(44, value.length * 7 + 18);\n}\n\nfunction parseSource(source: string | undefined): BadgeSource {\n const clean = source?.trim().toLowerCase() || 'verification';\n if (clean === 'verification' || clean === 'gates') return clean;\n throw new AgentLoopError('Unsupported badge source. Use one of: verification, gates.');\n}\n\nasync function latestVerificationReport(dir: string) {\n if (!(await pathExists(dir))) return undefined;\n const entries = await Promise.all(\n (await readdir(dir, { withFileTypes: true }))\n .filter((entry) => entry.isFile() && verificationReportPattern.test(entry.name))\n .map(async (entry) => {\n const filePath = path.join(dir, entry.name);\n const fileStat = await stat(filePath);\n return { filePath, name: entry.name, mtimeMs: fileStat.mtimeMs };\n }),\n );\n entries.sort((left, right) => {\n if (left.mtimeMs !== right.mtimeMs) return left.mtimeMs - right.mtimeMs;\n return left.name.localeCompare(right.name);\n });\n return entries.at(-1)?.filePath;\n}\n\nfunction extractVerificationStatus(markdown: string): BadgeStatus {\n const status = markdown\n .match(/Overall status:\\s*([a-z-]+)/i)?.[1]\n ?.trim()\n .toLowerCase();\n if (status === 'pass' || status === 'fail' || status === 'not-run') return status;\n return 'unknown';\n}\n\nfunction normalizeDisplayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nexport function generateSvgBadge(input: SvgBadgeInput): SvgBadgeResult {\n const labelWidth = textWidth(input.label);\n const messageWidth = textWidth(input.message);\n const totalWidth = labelWidth + messageWidth;\n const color = statusColor(input.status);\n const label = escapeXml(input.label);\n const message = escapeXml(input.message);\n\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalWidth}\" height=\"20\" role=\"img\" aria-label=\"${label}: ${message}\">\n <title>${label}: ${message}</title>\n <linearGradient id=\"s\" x2=\"0\" y2=\"100%\">\n <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".08\"/>\n <stop offset=\"1\" stop-opacity=\".08\"/>\n </linearGradient>\n <clipPath id=\"r\"><rect width=\"${totalWidth}\" height=\"20\" rx=\"4\"/></clipPath>\n <g clip-path=\"url(#r)\">\n <rect width=\"${labelWidth}\" height=\"20\" fill=\"#334155\"/>\n <rect x=\"${labelWidth}\" width=\"${messageWidth}\" height=\"20\" fill=\"${color}\"/>\n <rect width=\"${totalWidth}\" height=\"20\" fill=\"url(#s)\"/>\n </g>\n <g fill=\"#fff\" text-anchor=\"middle\" font-family=\"Verdana,Geneva,DejaVu Sans,sans-serif\" font-size=\"11\">\n <text x=\"${Math.floor(labelWidth / 2)}\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">${label}</text>\n <text x=\"${Math.floor(labelWidth / 2)}\" y=\"14\">${label}</text>\n <text x=\"${labelWidth + Math.floor(messageWidth / 2)}\" y=\"15\" fill=\"#010101\" fill-opacity=\".3\">${message}</text>\n <text x=\"${labelWidth + Math.floor(messageWidth / 2)}\" y=\"14\">${message}</text>\n </g>\n</svg>\n`;\n\n return { ...input, svg };\n}\n\nexport async function writeEvidenceBadge(options: {\n cwd: string;\n config: AgentLoopConfig;\n source?: string;\n outPath?: string;\n strict?: boolean;\n}): Promise<EvidenceBadgeResult> {\n const source = parseSource(options.source);\n let status: BadgeStatus;\n let label: string;\n let message: string;\n let sourcePath: string | undefined;\n\n if (source === 'verification') {\n const reportPath = await latestVerificationReport(\n path.join(options.cwd, options.config.paths.reportsDir),\n );\n sourcePath = normalizeDisplayPath(options.cwd, reportPath);\n if (!reportPath) {\n status = 'missing';\n label = 'verification';\n message = 'missing';\n } else {\n const markdown = await readFile(reportPath, 'utf8');\n status = extractVerificationStatus(markdown);\n label = 'verification';\n message = status;\n }\n } else {\n const gates = await checkGates({\n cwd: options.cwd,\n config: options.config,\n strict: options.strict,\n });\n status = gates.overallStatus;\n label = 'gates';\n message = status;\n }\n\n const badge = generateSvgBadge({ label, message, status });\n const outPath =\n options.outPath ??\n path.join(options.cwd, options.config.paths.reportsDir, `agentloop-${source}.svg`);\n const absoluteOutPath = path.isAbsolute(outPath) ? outPath : path.resolve(options.cwd, outPath);\n\n await writeTextFile(absoluteOutPath, badge.svg);\n\n return {\n outPath: absoluteOutPath,\n source,\n status,\n label,\n message,\n sourcePath,\n svg: badge.svg,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getPolicyStatus, listPolicies, readPolicy } from '../../core/policy.js';\nimport type { ListedPolicy, PolicyDocument, PolicyStatusReport } from '../../core/policy.js';\n\nfunction printPolicyList(policies: ListedPolicy[], options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ policies }, null, 2));\n return;\n }\n\n if (policies.length === 0) {\n console.log('No AgentLoopKit policies found.');\n console.log('Run `agentloop init` to generate .agentloop/policies/.');\n return;\n }\n\n console.log('AgentLoopKit policies:');\n for (const policy of policies) {\n console.log(`- ${policy.title}`);\n console.log(` ${policy.path}`);\n }\n}\n\nfunction printPolicy(policy: PolicyDocument, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify({ policy }, null, 2));\n return;\n }\n\n process.stdout.write(policy.content);\n}\n\nfunction printPolicyStatus(report: PolicyStatusReport, options: { json?: boolean }) {\n if (options.json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n console.log('AgentLoopKit policy status:');\n console.log(\n `Summary: ${report.summary.current} current, ${report.summary.modified} modified, ${report.summary.missing} missing, ${report.summary.extra} extra`,\n );\n\n for (const policy of report.policies) {\n console.log(`- ${policy.status}: ${policy.title}`);\n console.log(` ${policy.path}`);\n }\n\n const hasDrift =\n report.summary.modified > 0 || report.summary.missing > 0 || report.summary.extra > 0;\n if (hasDrift) {\n console.log('');\n console.log('Next step: review policy differences before changing repo rules.');\n }\n}\n\nexport function policyCommand() {\n const command = new Command('policy').description('List or inspect local AgentLoopKit policies');\n\n command\n .command('list')\n .description('List local policies under .agentloop/policies')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const policies = await listPolicies({ cwd: process.cwd(), config });\n printPolicyList(policies, options);\n });\n\n command\n .command('status')\n .description('Show local policy template status')\n .option('--json', 'print machine-readable output')\n .action(async (options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const status = await getPolicyStatus({ cwd: process.cwd(), config });\n printPolicyStatus(status, options);\n });\n\n command\n .command('show')\n .argument('<policy>', 'policy name, such as security or security-policy.md')\n .description('Show a local policy')\n .option('--json', 'print machine-readable output')\n .action(async (policyName: string, options: { json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const policy = await readPolicy({ cwd: process.cwd(), config, policyName });\n printPolicy(policy, options);\n });\n\n return command;\n}\n","import path from 'node:path';\nimport { readdir, readFile, stat } from 'node:fs/promises';\nimport type { AgentLoopConfig } from './config.js';\nimport { AgentLoopError } from './errors.js';\nimport { getTemplateRoot } from './template-renderer.js';\n\nexport type ListedPolicy = {\n name: string;\n title: string;\n path: string;\n};\n\nexport type PolicyDocument = ListedPolicy & {\n content: string;\n};\n\nexport type PolicyStatusValue = 'current' | 'modified' | 'missing' | 'extra';\n\nexport type PolicyStatusEntry = ListedPolicy & {\n status: PolicyStatusValue;\n templatePath: string | null;\n};\n\nexport type PolicyStatusSummary = Record<PolicyStatusValue, number>;\n\nexport type PolicyStatusReport = {\n policies: PolicyStatusEntry[];\n summary: PolicyStatusSummary;\n};\n\nfunction policyRoot(cwd: string, config: AgentLoopConfig) {\n return path.resolve(cwd, config.paths.agentloopDir, 'policies');\n}\n\nfunction toStoredPath(cwd: string, absolutePath: string) {\n return path.relative(cwd, absolutePath).split(path.sep).join('/');\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction normalizePolicyName(policyName: string) {\n return policyName\n .trim()\n .replace(/\\.md$/i, '')\n .replace(/-policy$/i, '')\n .toLowerCase();\n}\n\nfunction normalizeContent(content: string) {\n return content.replace(/\\r\\n/g, '\\n');\n}\n\nasync function ensurePolicyRoot(root: string) {\n const rootStat = await stat(root).catch(() => undefined);\n if (!rootStat?.isDirectory()) {\n throw new AgentLoopError(\n 'No AgentLoopKit policy files found. Run `agentloop init` to generate .agentloop/policies/.',\n );\n }\n}\n\nasync function readMarkdownFiles(root: string) {\n const entries = await readdir(root, { withFileTypes: true });\n const files = [];\n\n for (const entry of entries) {\n if (!entry.isFile() || !entry.name.endsWith('.md')) continue;\n const absolutePath = path.join(root, entry.name);\n const content = await readFile(absolutePath, 'utf8');\n files.push({\n name: path.basename(entry.name, '.md'),\n fileName: entry.name,\n absolutePath,\n content,\n title: extractHeading(content, path.basename(entry.name, '.md')),\n });\n }\n\n return files.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function listPolicies(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<ListedPolicy[]> {\n const root = policyRoot(options.cwd, options.config);\n await ensurePolicyRoot(root);\n const policies = await readMarkdownFiles(root);\n\n return policies.map((policy) => ({\n name: policy.name,\n title: policy.title,\n path: toStoredPath(options.cwd, policy.absolutePath),\n }));\n}\n\nexport async function readPolicy(options: {\n cwd: string;\n config: AgentLoopConfig;\n policyName: string;\n}): Promise<PolicyDocument> {\n const policies = await listPolicies(options);\n const requested = normalizePolicyName(options.policyName);\n const policy = policies.find((candidate) => normalizePolicyName(candidate.name) === requested);\n\n if (!policy) {\n throw new AgentLoopError(`Policy not found: ${options.policyName}`);\n }\n\n const root = policyRoot(options.cwd, options.config);\n const absolutePath = path.join(root, path.basename(policy.path));\n const content = await readFile(absolutePath, 'utf8');\n\n return {\n ...policy,\n content,\n };\n}\n\nexport async function getPolicyStatus(options: {\n cwd: string;\n config: AgentLoopConfig;\n}): Promise<PolicyStatusReport> {\n const root = policyRoot(options.cwd, options.config);\n await ensurePolicyRoot(root);\n\n const templateRoot = path.join(getTemplateRoot(), 'policies');\n const [localPolicies, templatePolicies] = await Promise.all([\n readMarkdownFiles(root),\n readMarkdownFiles(templateRoot),\n ]);\n\n const localByName = new Map(localPolicies.map((policy) => [policy.name, policy]));\n const templateByName = new Map(templatePolicies.map((policy) => [policy.name, policy]));\n const names = [...new Set([...templateByName.keys(), ...localByName.keys()])].sort((left, right) =>\n left.localeCompare(right),\n );\n const summary: PolicyStatusSummary = {\n current: 0,\n modified: 0,\n missing: 0,\n extra: 0,\n };\n const policies = names.map((name): PolicyStatusEntry => {\n const local = localByName.get(name);\n const template = templateByName.get(name);\n const status: PolicyStatusValue = !template\n ? 'extra'\n : !local\n ? 'missing'\n : normalizeContent(local.content) === normalizeContent(template.content)\n ? 'current'\n : 'modified';\n\n summary[status] += 1;\n\n return {\n name,\n title: local?.title ?? template?.title ?? name,\n path: toStoredPath(options.cwd, path.join(root, `${name}.md`)),\n status,\n templatePath: template ? `templates/policies/${template.fileName}` : null,\n };\n });\n\n return {\n policies,\n summary,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { getCiSummary } from '../../core/ci-summary.js';\n\nexport function ciSummaryCommand() {\n return new Command('ci-summary')\n .description('Summarize CI context and AgentLoop evidence')\n .option('--write', 'write summary to .agentloop/reports')\n .option('--out <path>', 'output Markdown path when using --write')\n .option('--json', 'print machine-readable output')\n .action(async (options: { write?: boolean; out?: string; json?: boolean }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await getCiSummary({\n cwd: process.cwd(),\n config,\n write: options.write,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n if (result.writtenPath) console.log(`\\nCI summary written: ${result.writtenPath}`);\n }\n });\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { AgentLoopConfig } from './config.js';\nimport { formatTimestamp } from './dates.js';\nimport { writeTextFile, pathExists } from './file-system.js';\nimport {\n latestMarkdownFile,\n prSummaryPattern,\n verificationReportPattern,\n} from './artifacts.js';\nimport { checkGates, CheckGatesResult } from './check-gates.js';\nimport { getActiveTaskPath } from './task-state.js';\nimport { detectCiContext, VerificationCiContext } from './verification.js';\n\nexport type CiSummaryCiContext =\n | VerificationCiContext\n | {\n provider: 'none';\n providerName: 'No CI detected';\n };\n\nexport type CiSummaryArtifact = {\n path: string;\n title: string;\n};\n\nexport type CiSummaryTask = CiSummaryArtifact & {\n status: string;\n};\n\nexport type CiSummaryVerification = CiSummaryArtifact & {\n overallStatus: string;\n};\n\nexport type CiSummaryResult = {\n timestamp: string;\n ci: CiSummaryCiContext;\n evidence: {\n task?: CiSummaryTask;\n verification?: CiSummaryVerification;\n handoff?: CiSummaryArtifact;\n };\n gates: Pick<CheckGatesResult, 'overallStatus' | 'gates'>;\n nextAction: {\n command: string;\n reason: string;\n };\n markdown: string;\n writtenPath?: string;\n};\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nfunction displayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function readTask(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryTask | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nasync function readVerification(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryVerification | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n overallStatus: extractOverallStatus(markdown),\n };\n}\n\nasync function readHandoff(\n cwd: string,\n filePath: string | undefined,\n): Promise<CiSummaryArtifact | undefined> {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n };\n}\n\nfunction chooseNextAction(input: {\n verification?: CiSummaryVerification;\n gates: CheckGatesResult;\n}) {\n if (!input.verification) {\n return {\n command: 'agentloop verify',\n reason: 'No verification report was found for this CI summary.',\n };\n }\n\n if (input.verification.overallStatus === 'fail') {\n return {\n command: 'agentloop verify',\n reason: 'The latest verification report failed. Fix failures and rerun verification.',\n };\n }\n\n return {\n command: 'agentloop check-gates --strict',\n reason: 'Use strict gates in CI after verification and handoff artifacts exist.',\n };\n}\n\nfunction renderCiLines(ci: CiSummaryCiContext) {\n const lines = [`- Provider: ${ci.providerName}`];\n if ('workflow' in ci && ci.workflow) lines.push(`- Workflow: ${ci.workflow}`);\n if ('event' in ci && ci.event) lines.push(`- Event: ${ci.event}`);\n if ('ref' in ci && ci.ref) lines.push(`- Ref: ${ci.ref}`);\n if ('commit' in ci && ci.commit) lines.push(`- Commit: ${ci.commit}`);\n if ('runUrl' in ci && ci.runUrl) lines.push(`- Run URL: ${ci.runUrl}`);\n if ('runAttempt' in ci && ci.runAttempt) lines.push(`- Run attempt: ${ci.runAttempt}`);\n return lines.join('\\n');\n}\n\nfunction renderArtifactLine(label: string, artifact: CiSummaryArtifact | undefined) {\n return artifact ? `- ${label}: ${artifact.title} - ${artifact.path}` : `- ${label}: not found`;\n}\n\nfunction renderMarkdown(result: Omit<CiSummaryResult, 'markdown' | 'writtenPath'>) {\n return `# AgentLoopKit CI Summary\n\n- Generated: ${result.timestamp}\n- Overall status: ${result.gates.overallStatus}\n\n## CI Context\n${renderCiLines(result.ci)}\n\n## AgentLoop Evidence\n${renderArtifactLine('Task', result.evidence.task)}\n- Verification: ${\n result.evidence.verification\n ? `${result.evidence.verification.overallStatus} - ${result.evidence.verification.path}`\n : 'not found'\n }\n${renderArtifactLine('Handoff', result.evidence.handoff)}\n- Gates: ${result.gates.overallStatus}\n\n## Gate Details\n${result.gates.gates\n .map((gate) => `- [${gate.status}] ${gate.name}: ${gate.message}`)\n .join('\\n')}\n\n## Next Action\n\nRun \\`${result.nextAction.command}\\`.\n\n${result.nextAction.reason}\n\n## Safety\n\nThis command reads allowlisted CI metadata and local AgentLoop artifacts only. It does not call CI provider APIs, read secrets, upload files, run verification commands, or inspect environment variables beyond supported CI provenance fields.\n`;\n}\n\nexport async function getCiSummary(options: {\n cwd: string;\n config: AgentLoopConfig;\n env?: NodeJS.ProcessEnv;\n timestamp?: string;\n nowIso?: string;\n write?: boolean;\n outPath?: string;\n}): Promise<CiSummaryResult> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const nowIso = options.nowIso ?? new Date().toISOString();\n const reportsDir = path.join(options.cwd, options.config.paths.reportsDir);\n const handoffsDir = path.join(options.cwd, options.config.paths.handoffsDir);\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const verificationPath = await latestMarkdownFile(reportsDir, {\n pattern: verificationReportPattern,\n });\n const handoffPath = await latestMarkdownFile(handoffsDir, { pattern: prSummaryPattern });\n const [task, verification, handoff, gates] = await Promise.all([\n readTask(options.cwd, taskPath),\n readVerification(options.cwd, verificationPath),\n readHandoff(options.cwd, handoffPath),\n checkGates({ cwd: options.cwd, config: options.config }),\n ]);\n const ci: CiSummaryCiContext = detectCiContext(options.env ?? process.env) ?? {\n provider: 'none',\n providerName: 'No CI detected',\n };\n const withoutMarkdown = {\n timestamp: nowIso,\n ci,\n evidence: {\n task,\n verification,\n handoff,\n },\n gates: {\n overallStatus: gates.overallStatus,\n gates: gates.gates,\n },\n nextAction: chooseNextAction({ verification, gates }),\n };\n const markdown = renderMarkdown(withoutMarkdown);\n const writtenPath = options.write\n ? (resolveUserPath(options.cwd, options.outPath) ??\n path.join(options.cwd, options.config.paths.reportsDir, `${timestamp}-ci-summary.md`))\n : undefined;\n\n if (writtenPath) await writeTextFile(writtenPath, markdown);\n\n return {\n ...withoutMarkdown,\n markdown,\n writtenPath,\n };\n}\n","import { Command } from 'commander';\nimport { loadAgentLoopConfig } from '../../core/config.js';\nimport { generateReleaseNotes } from '../../core/release-notes.js';\n\nexport function releaseNotesCommand() {\n return new Command('release-notes')\n .description('Generate deterministic release notes')\n .option('--from <ref>', 'git ref to compare from')\n .option('--to <ref>', 'git ref to compare to', 'HEAD')\n .option('--release-version <version>', 'release version; defaults to package.json version')\n .option('--write', 'write notes to .agentloop/handoffs')\n .option('--out <path>', 'output Markdown path when using --write')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n from?: string;\n to?: string;\n releaseVersion?: string;\n write?: boolean;\n out?: string;\n json?: boolean;\n }) => {\n const config = await loadAgentLoopConfig(process.cwd());\n const result = await generateReleaseNotes({\n cwd: process.cwd(),\n config,\n from: options.from,\n to: options.to,\n version: options.releaseVersion,\n write: options.write,\n outPath: options.out,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(result.markdown);\n if (result.writtenPath) {\n console.log(`\\nRelease notes written: ${result.writtenPath}`);\n } else {\n console.log('\\nNo release notes file was written. Use --write to create one.');\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopConfig } from './config.js';\nimport { ciSummaryPattern, latestMarkdownFile, verificationReportPattern } from './artifacts.js';\nimport { formatTimestamp } from './dates.js';\nimport { pathExists, writeTextFile } from './file-system.js';\nimport { getGitBranch, getGitCommit } from './git.js';\nimport { getActiveTaskPath } from './task-state.js';\n\nexport type ReleaseNotesResult = {\n timestamp: string;\n packageName: string;\n version: string;\n gitRange: {\n from?: string;\n to: string;\n label: string;\n fallbackReason?: string;\n };\n branch: string;\n commit: string;\n commits: string[];\n changedFiles: Array<{ status: string; path: string }>;\n workingTree: {\n clean: boolean;\n files: string[];\n };\n changelogSection: string;\n evidence: {\n task?: { path: string; title: string; status: string };\n verification?: { path: string; overallStatus: string };\n ciSummary?: { path: string; title: string };\n };\n markdown: string;\n writtenPath?: string;\n};\n\ntype PackageMetadata = {\n name: string;\n version: string;\n};\n\nfunction displayPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.relative(cwd, filePath).split(path.sep).join('/') || '.';\n}\n\nfunction resolveUserPath(cwd: string, filePath: string | undefined) {\n if (!filePath) return undefined;\n return path.isAbsolute(filePath) ? path.resolve(filePath) : path.resolve(cwd, filePath);\n}\n\nasync function gitLines(cwd: string, args: string[]) {\n const result = await execa('git', args, { cwd, reject: false });\n if (result.exitCode !== 0) return [];\n return result.stdout\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nasync function gitRefExists(cwd: string, ref: string) {\n const result = await execa('git', ['rev-parse', '--verify', '--quiet', `${ref}^{commit}`], {\n cwd,\n reject: false,\n });\n return result.exitCode === 0;\n}\n\nasync function readPackageMetadata(cwd: string): Promise<PackageMetadata> {\n const packagePath = path.join(cwd, 'package.json');\n if (!(await pathExists(packagePath))) return { name: path.basename(cwd), version: '0.0.0' };\n const parsed = JSON.parse(await readFile(packagePath, 'utf8')) as Partial<PackageMetadata>;\n return {\n name: typeof parsed.name === 'string' && parsed.name ? parsed.name : path.basename(cwd),\n version: typeof parsed.version === 'string' && parsed.version ? parsed.version : '0.0.0',\n };\n}\n\nfunction extractHeading(markdown: string, fallback: string) {\n return markdown.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nfunction extractTaskStatus(markdown: string) {\n return markdown.match(/^- Status:\\s*(.+)$/im)?.[1]?.trim() || 'unknown';\n}\n\nfunction extractOverallStatus(markdown: string) {\n return markdown.match(/Overall status:\\s*([a-z-]+)/i)?.[1]?.trim() || 'unknown';\n}\n\nasync function readTask(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n status: extractTaskStatus(markdown),\n };\n}\n\nasync function readVerification(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n overallStatus: extractOverallStatus(markdown),\n };\n}\n\nasync function readCiSummary(cwd: string, filePath: string | undefined) {\n if (!filePath || !(await pathExists(filePath))) return undefined;\n const markdown = await readFile(filePath, 'utf8');\n return {\n path: displayPath(cwd, filePath) ?? filePath,\n title: extractHeading(markdown, path.basename(filePath, '.md')),\n };\n}\n\nasync function readChangelogSection(cwd: string, version: string) {\n const changelogPath = path.join(cwd, 'CHANGELOG.md');\n if (!(await pathExists(changelogPath))) return '';\n const changelog = await readFile(changelogPath, 'utf8');\n const escapedVersion = version.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const heading = new RegExp(`^##\\\\s+\\\\[?${escapedVersion}\\\\]?\\\\s*$`, 'im');\n const match = heading.exec(changelog);\n if (!match || match.index === undefined) return '';\n const sectionStart = match.index + match[0].length;\n const rest = changelog.slice(sectionStart);\n const nextHeading = rest.search(/^##\\s+/m);\n return (nextHeading === -1 ? rest : rest.slice(0, nextHeading)).trim();\n}\n\nasync function findPreviousTag(cwd: string, version: string) {\n const currentTags = new Set([`v${version}`, version]);\n const tags = await gitLines(cwd, ['tag', '--list', '--sort=-creatordate']);\n return tags.find((tag) => !currentTags.has(tag));\n}\n\nfunction parseNameStatus(lines: string[]) {\n return lines.map((line) => {\n const [status = '?', ...rest] = line.split(/\\s+/);\n return { status, path: rest.join(' ') };\n });\n}\n\nfunction renderList(lines: string[], empty: string) {\n return lines.length ? lines.map((line) => `- ${line}`).join('\\n') : `- ${empty}`;\n}\n\nfunction renderChangedFiles(files: Array<{ status: string; path: string }>) {\n return files.length\n ? files.map((file) => `- ${file.status} \\`${file.path}\\``).join('\\n')\n : '- No changed files detected for the selected range.';\n}\n\nfunction renderWorkingTree(files: string[]) {\n return files.length\n ? [\n '- Uncommitted changes detected. Commit or stash them before publishing a release.',\n ...files.map((file) => `- \\`${file}\\``),\n ].join('\\n')\n : '- No uncommitted changes detected.';\n}\n\nfunction renderEvidence(result: Omit<ReleaseNotesResult, 'markdown' | 'writtenPath'>) {\n const lines = [];\n lines.push(\n result.evidence.task\n ? `- Task: ${result.evidence.task.title} (${result.evidence.task.status}) - ${result.evidence.task.path}`\n : '- Task: not found',\n );\n lines.push(\n result.evidence.verification\n ? `- Verification: Overall status: ${result.evidence.verification.overallStatus} - ${result.evidence.verification.path}`\n : '- Verification: not found',\n );\n lines.push(\n result.evidence.ciSummary\n ? `- CI summary: ${result.evidence.ciSummary.title} - ${result.evidence.ciSummary.path}`\n : '- CI summary: not found',\n );\n return lines.join('\\n');\n}\n\nfunction renderMarkdown(result: Omit<ReleaseNotesResult, 'markdown' | 'writtenPath'>) {\n const changelogLines = [\n ...(result.gitRange.fallbackReason ? [`- ${result.gitRange.fallbackReason}`] : []),\n result.changelogSection || '- No matching CHANGELOG.md section found.',\n ];\n\n return `# Release Notes\n\n- Generated: ${result.timestamp}\n- Package: ${result.packageName}\n- Version: ${result.version}\n- Range: ${result.gitRange.label}\n- Branch: ${result.branch || 'unknown'}\n- Commit: ${result.commit || 'unknown'}\n\n## Changelog\n${changelogLines.join('\\n')}\n\n## Commits\n${renderList(result.commits, 'No commits found for the selected range.')}\n\n## Changed Files\n${renderChangedFiles(result.changedFiles)}\n\n## Working Tree\n${renderWorkingTree(result.workingTree.files)}\n\n## AgentLoop Evidence\n${renderEvidence(result)}\n\n## Release Checklist\n- Review these notes before publishing.\n- Confirm npm and GitHub release status from the registry or release page.\n- Attach verification evidence when creating a release.\n- Keep npm catch-up notes honest if the registry still serves an older version.\n\n## Safety\nThis command is local and deterministic. Does not create tags, publish packages, call external APIs, read tokens, upload files, or rewrite changelogs.\n`;\n}\n\nexport async function generateReleaseNotes(options: {\n cwd: string;\n config: AgentLoopConfig;\n version?: string;\n from?: string;\n to?: string;\n timestamp?: string;\n write?: boolean;\n outPath?: string;\n}): Promise<ReleaseNotesResult> {\n const timestamp = options.timestamp ?? formatTimestamp();\n const packageMetadata = await readPackageMetadata(options.cwd);\n const version = options.version ?? packageMetadata.version;\n const to = options.to ?? 'HEAD';\n const requestedFrom = options.from ?? (await findPreviousTag(options.cwd, version));\n const from =\n requestedFrom && (await gitRefExists(options.cwd, requestedFrom)) ? requestedFrom : undefined;\n const fallbackReason = requestedFrom\n ? from\n ? undefined\n : `Git ref \"${requestedFrom}\" was not found; using available local context.`\n : 'No previous version tag was found; using available local context.';\n const gitRange = {\n from,\n to,\n label: from\n ? `${from}..${to}`\n : requestedFrom\n ? `${to} (missing from: ${requestedFrom})`\n : `${to} (no previous tag)`,\n fallbackReason,\n };\n const commitArgs = from\n ? ['log', '--pretty=format:%s', `${from}..${to}`]\n : ['log', '--pretty=format:%s', '-n', '10', to];\n const diffArgs = from ? ['diff', '--name-status', `${from}..${to}`] : [];\n const reportsDir = path.join(options.cwd, options.config.paths.reportsDir);\n const taskPath =\n (await getActiveTaskPath(options)) ??\n (await latestMarkdownFile(path.join(options.cwd, options.config.paths.tasksDir)));\n const verificationPath = await latestMarkdownFile(reportsDir, {\n pattern: verificationReportPattern,\n });\n const ciSummaryPath = await latestMarkdownFile(reportsDir, {\n pattern: ciSummaryPattern,\n });\n const [\n branch,\n commit,\n commits,\n diffLines,\n statusLines,\n changelogSection,\n task,\n verification,\n ciSummary,\n ] = await Promise.all([\n getGitBranch(options.cwd),\n getGitCommit(options.cwd),\n gitLines(options.cwd, commitArgs),\n diffArgs.length ? gitLines(options.cwd, diffArgs) : Promise.resolve([]),\n gitLines(options.cwd, ['status', '--short']),\n readChangelogSection(options.cwd, version),\n readTask(options.cwd, taskPath),\n readVerification(options.cwd, verificationPath),\n readCiSummary(options.cwd, ciSummaryPath),\n ]);\n const withoutMarkdown = {\n timestamp,\n packageName: packageMetadata.name,\n version,\n gitRange,\n branch,\n commit,\n commits,\n changedFiles: parseNameStatus(diffLines),\n workingTree: {\n clean: statusLines.length === 0,\n files: statusLines,\n },\n changelogSection,\n evidence: {\n task,\n verification,\n ciSummary,\n },\n };\n const markdown = renderMarkdown(withoutMarkdown);\n const writtenPath = options.write\n ? (resolveUserPath(options.cwd, options.outPath) ??\n path.join(options.cwd, options.config.paths.handoffsDir, `${timestamp}-release-notes.md`))\n : undefined;\n if (writtenPath) await writeTextFile(writtenPath, markdown);\n\n return {\n ...withoutMarkdown,\n markdown,\n writtenPath,\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { Command } from 'commander';\nimport { checkNpmStatus, shouldFailNpmStatusExpectation } from '../../core/npm-status.js';\n\nfunction parseTimeout(value: string) {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error('timeout must be a positive integer');\n }\n return parsed;\n}\n\nexport function npmStatusCommand() {\n return new Command('npm-status')\n .description('Check npm registry catch-up status')\n .option('--package-name <name>', 'package name; defaults to package.json name')\n .option('--local-version <version>', 'local version; defaults to package.json version')\n .option(\n '--registry-json <path>',\n 'read captured `npm view <package> version versions --json` output instead of running npm',\n )\n .option('--timeout-ms <ms>', 'npm view timeout in milliseconds', parseTimeout, 15000)\n .option('--expect-current', 'exit 1 unless npm latest matches the local version')\n .option('--json', 'print machine-readable output')\n .action(\n async (options: {\n packageName?: string;\n localVersion?: string;\n registryJson?: string;\n timeoutMs: number;\n expectCurrent?: boolean;\n json?: boolean;\n }) => {\n const registryJson = options.registryJson\n ? await readFile(options.registryJson, 'utf8')\n : undefined;\n const result = await checkNpmStatus({\n cwd: process.cwd(),\n packageName: options.packageName,\n localVersion: options.localVersion,\n registryJson,\n timeoutMs: options.timeoutMs,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(result.markdown);\n }\n\n if (options.expectCurrent && shouldFailNpmStatusExpectation(result)) {\n process.exitCode = 1;\n }\n },\n );\n}\n","import path from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { execa } from 'execa';\nimport { AgentLoopError } from './errors.js';\nimport { pathExists } from './file-system.js';\n\nexport type NpmCatchUpStatus = 'current' | 'catch-up-needed' | 'unknown';\n\nexport type NpmRegistryMetadata = {\n latest?: string;\n versions: string[];\n};\n\nexport type NpmStatusResult = {\n packageName: string;\n localVersion: string;\n status: NpmCatchUpStatus;\n registry: NpmRegistryMetadata & {\n hasLocalVersion: boolean;\n };\n source: {\n command: string;\n exitCode: number;\n error?: string;\n };\n recommendation: string;\n safety: {\n does: string[];\n doesNot: string[];\n };\n markdown: string;\n};\n\ntype PackageMetadata = {\n name: string;\n version: string;\n};\n\ntype NpmViewRunner = (packageName: string) => Promise<{\n exitCode: number;\n stdout: string;\n stderr: string;\n}>;\n\nfunction uniqueStrings(values: string[]) {\n return Array.from(new Set(values.filter(Boolean)));\n}\n\nfunction valueAsString(value: unknown) {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction isString(value: string | undefined): value is string {\n return typeof value === 'string';\n}\n\nfunction valueAsVersions(value: unknown) {\n if (Array.isArray(value)) return uniqueStrings(value.map(valueAsString).filter(isString));\n const single = valueAsString(value);\n return single ? [single] : [];\n}\n\nexport function parseNpmViewJson(json: string): NpmRegistryMetadata {\n const parsed = JSON.parse(json) as unknown;\n if (typeof parsed === 'string') return { latest: parsed, versions: [parsed] };\n if (!parsed || typeof parsed !== 'object') {\n throw new AgentLoopError('npm view JSON must be an object or string.');\n }\n\n const record = parsed as Record<string, unknown>;\n const versions = valueAsVersions(record.versions);\n const latest = valueAsString(record.version) ?? versions.at(-1);\n if (!latest) throw new AgentLoopError('npm view JSON did not include a version.');\n\n return {\n latest,\n versions: versions.includes(latest) ? versions : uniqueStrings([...versions, latest]),\n };\n}\n\nasync function readPackageMetadata(cwd: string): Promise<PackageMetadata> {\n const packagePath = path.join(cwd, 'package.json');\n if (!(await pathExists(packagePath))) {\n return { name: path.basename(cwd), version: '0.0.0' };\n }\n\n const parsed = JSON.parse(await readFile(packagePath, 'utf8')) as Partial<PackageMetadata>;\n return {\n name: typeof parsed.name === 'string' && parsed.name ? parsed.name : path.basename(cwd),\n version: typeof parsed.version === 'string' && parsed.version ? parsed.version : '0.0.0',\n };\n}\n\nfunction defaultNpmViewRunner(cwd: string, timeoutMs: number): NpmViewRunner {\n return async (packageName) => {\n const result = await execa('npm', ['view', packageName, 'version', 'versions', '--json'], {\n cwd,\n reject: false,\n timeout: timeoutMs,\n });\n return {\n exitCode: result.exitCode ?? 1,\n stdout: result.stdout,\n stderr: result.stderr,\n };\n };\n}\n\nfunction statusLabel(status: NpmCatchUpStatus) {\n switch (status) {\n case 'current':\n return 'npm latest matches local package version';\n case 'catch-up-needed':\n return 'npm latest differs from local package version';\n case 'unknown':\n return 'npm status could not be determined';\n }\n}\n\nfunction recommendation(status: NpmCatchUpStatus) {\n switch (status) {\n case 'current':\n return 'npm has caught up. Remove temporary GitHub tarball fallback docs if they are still present.';\n case 'catch-up-needed':\n return 'Publish the current source version after npm authentication or trusted publishing works. Do not backfill stale intermediate versions from the current checkout.';\n case 'unknown':\n return 'Fix the npm registry check and rerun this command before claiming npm availability.';\n }\n}\n\nfunction renderVersions(versions: string[]) {\n return versions.length ? versions.map((version) => `\\`${version}\\``).join(', ') : 'not available';\n}\n\nfunction renderMarkdown(result: Omit<NpmStatusResult, 'markdown'>) {\n const latest = result.registry.latest ? `\\`${result.registry.latest}\\`` : 'not available';\n const errorLine = result.source.error ? `\\n- Registry error: ${result.source.error}` : '';\n\n return `# npm Status\n\n- Package: \\`${result.packageName}\\`\n- Local version: \\`${result.localVersion}\\`\n- npm latest: ${latest}\n- Registry contains local version: ${result.registry.hasLocalVersion ? 'yes' : 'no'}\n- Registry versions: ${renderVersions(result.registry.versions)}\n- Status: ${statusLabel(result.status)}${errorLine}\n\n## Recommendation\n\n${result.recommendation}\n\n## Safety\n\nThis command only runs \\`npm view ${result.packageName} version versions --json\\` unless \\`--registry-json\\` is provided. It does not publish packages, create tags, create GitHub releases, read npm tokens, read .env files, upload files, or change package metadata.\n`;\n}\n\nexport async function checkNpmStatus(options: {\n cwd: string;\n packageName?: string;\n localVersion?: string;\n registryJson?: string;\n npmView?: NpmViewRunner;\n timeoutMs?: number;\n}): Promise<NpmStatusResult> {\n const packageMetadata = await readPackageMetadata(options.cwd);\n const packageName = options.packageName ?? packageMetadata.name;\n const localVersion = options.localVersion ?? packageMetadata.version;\n const source: NpmStatusResult['source'] = options.registryJson\n ? {\n command: 'captured npm view JSON',\n exitCode: 0,\n }\n : {\n command: `npm view ${packageName} version versions --json`,\n exitCode: 0,\n };\n const runner = options.npmView ?? defaultNpmViewRunner(options.cwd, options.timeoutMs ?? 15000);\n\n let registry: NpmRegistryMetadata = { versions: [] };\n let sourceResult: NpmStatusResult['source'] = source;\n try {\n if (options.registryJson) {\n registry = parseNpmViewJson(options.registryJson);\n } else {\n const result = await runner(packageName);\n sourceResult = {\n ...source,\n exitCode: result.exitCode,\n ...(result.exitCode === 0 ? {} : { error: result.stderr || result.stdout || 'npm view failed' }),\n };\n if (result.exitCode === 0) registry = parseNpmViewJson(result.stdout);\n }\n } catch (error) {\n sourceResult = {\n ...source,\n exitCode: source.exitCode || 1,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n\n const hasLocalVersion = registry.versions.includes(localVersion);\n const status: NpmCatchUpStatus = sourceResult.error\n ? 'unknown'\n : registry.latest === localVersion\n ? 'current'\n : 'catch-up-needed';\n const withoutMarkdown = {\n packageName,\n localVersion,\n status,\n registry: {\n ...registry,\n hasLocalVersion,\n },\n source: sourceResult,\n recommendation: recommendation(status),\n safety: {\n does: ['runs npm view when no captured registry JSON is provided'],\n doesNot: [\n 'publish packages',\n 'create tags',\n 'create GitHub releases',\n 'read npm tokens',\n 'read .env files',\n 'upload files',\n 'change package metadata',\n ],\n },\n };\n\n return {\n ...withoutMarkdown,\n markdown: renderMarkdown(withoutMarkdown),\n };\n}\n\nexport function shouldFailNpmStatusExpectation(result: NpmStatusResult) {\n return result.status !== 'current';\n}\n"],"mappings":"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","names":["Command","path","readdir","readFile","path","path","readFile","path","path","readFile","readFile","path","path","readFile","readFile","readdir","path","relativePath","readdir","path","path","readdir","relative","Command","path","path","path","path","Command","Command","path","relativePath","path","Command","Command","path","readFile","execa","lines","path","readFile","execa","overallStatus","Command","Command","path","readFile","path","readdir","stat","readdir","path","stat","path","mkdir","readdir","readFile","stat","path","relative","readFile","stat","mkdir","readdir","lines","path","readFile","Command","Command","path","path","Command","Command","Command","Command","Command","Command","path","readFile","stat","extractHeading","extractTaskStatus","readFile","stat","path","Command","Command","Command","Command","Command","Command","Command","Command","path","readFile","extractHeading","extractOverallStatus","path","chooseNextAction","renderMarkdown","readFile","Command","Command","path","readFile","readdir","stat","extractLine","path","readFile","readdir","stat","Command","Command","path","readFile","readdir","stat","verificationReportPattern","readdir","path","stat","extractVerificationStatus","normalizeDisplayPath","readFile","Command","Command","path","readdir","readFile","stat","path","toStoredPath","extractHeading","stat","readdir","readFile","Command","Command","path","readFile","extractHeading","extractTaskStatus","extractOverallStatus","path","resolveUserPath","readTask","readFile","chooseNextAction","lines","renderMarkdown","gate","Command","Command","path","readFile","execa","displayPath","path","resolveUserPath","execa","readFile","extractHeading","extractTaskStatus","extractOverallStatus","readTask","readVerification","lines","renderChangedFiles","renderMarkdown","Command","readFile","Command","path","readFile","execa","readPackageMetadata","path","readFile","execa","renderMarkdown","Command","readFile","Command"]}