@metasession.co/devaudit-cli 0.1.41 → 0.1.42

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/logger.ts","../package.json","../src/lib/version.ts","../src/lib/paths.ts","../src/lib/plugin/load.ts","../src/lib/plugin/discover.ts","../src/lib/sdlc-config.ts","../src/lib/plugin/context.ts","../src/lib/plugin/hooks.ts","../src/lib/plugin/commands.ts","../src/commands/doctor.ts","../src/lib/auth.ts","../src/lib/devaudit-api.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/status.ts","../src/lib/ci-upload.ts","../src/commands/push.ts","../src/lib/installer-root.ts","../src/lib/fs-utils.ts","../src/lib/git-provider/github.ts","../src/lib/git-provider/detect.ts","../src/lib/git-provider/index.ts","../src/install/auth-probe.ts","../src/install/detect-stack.ts","../src/install/prompts.ts","../src/install/write-config.ts","../src/install/project.ts","../src/install/api-key.ts","../src/install/github.ts","../src/install/hooks-bootstrap.ts","../src/install/branch-protection.ts","../src/lib/adapter.ts","../src/update/resolve-adapters.ts","../src/update/stage-docs.ts","../src/update/ai-rules.ts","../src/update/stack-hooks.ts","../src/update/stack-deps.ts","../src/update/scripts.ts","../src/update/issue-templates.ts","../src/update/skills.ts","../src/update/evidence-helper.ts","../src/lib/templates.ts","../src/update/ci-templates.ts","../src/update/validation.ts","../src/update/index.ts","../src/install/sync-templates.ts","../src/install/done-report.ts","../src/install/index.ts","../src/commands/install.ts","../src/commands/join.ts","../src/commands/update.ts","../src/install/bootstrap-governance.ts","../src/commands/bootstrap-governance.ts","../src/commands/stub.ts","../src/commands/plugin/list.ts","../src/commands/plugin/install.ts","../src/commands/plugin/remove.ts","../src/commands/plugin/update.ts","../src/index.ts"],"names":["record","join","fs","resolve","group","ok","text","DEFAULT_BASE_URL","clack","dirname","basename","execa","res","meta","uploadEvidence","lines","pathExists","paths"],"mappings":"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","file":"index.js","sourcesContent":["import { createConsola, type ConsolaInstance } from 'consola';\n\ninterface LoggerOptions {\n readonly json: boolean;\n readonly verbose: boolean;\n readonly noColor: boolean;\n}\n\nconst DEFAULT_OPTIONS: LoggerOptions = { json: false, verbose: false, noColor: false };\n\nlet currentLogger: ConsolaInstance = build(DEFAULT_OPTIONS);\nlet jsonModeActive = false;\n\nfunction build(opts: LoggerOptions): ConsolaInstance {\n const level = opts.verbose ? 5 : 3;\n if (opts.json) {\n return createConsola({\n level,\n reporters: [\n {\n log: (logObj) => {\n const record = {\n level: logObj.type,\n tag: logObj.tag ?? null,\n args: logObj.args,\n date: logObj.date,\n };\n process.stdout.write(JSON.stringify(record) + '\\n');\n },\n },\n ],\n });\n }\n if (opts.noColor) {\n process.env['NO_COLOR'] = '1';\n }\n return createConsola({ level });\n}\n\nexport function configureLogger(opts: Partial<LoggerOptions>): void {\n const merged = { ...DEFAULT_OPTIONS, ...opts };\n jsonModeActive = merged.json;\n currentLogger = build(merged);\n}\n\nexport function logger(): ConsolaInstance {\n return currentLogger;\n}\n\nexport function isJsonMode(): boolean {\n return jsonModeActive;\n}\n\nexport function emitJsonResult(payload: unknown): void {\n process.stdout.write(JSON.stringify(payload) + '\\n');\n}\n","{\n \"name\": \"@metasession.co/devaudit-cli\",\n \"version\": \"0.1.41\",\n \"description\": \"DevAudit CLI — installs, syncs, and operates the Metasession SDLC across consumer projects.\",\n \"type\": \"module\",\n \"bin\": {\n \"devaudit\": \"./bin/devaudit.js\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"sdlc\",\n \"scripts\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=22\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle:templates\": \"node tools/bundle-templates.mjs\",\n \"prepack\": \"npm run build && npm run bundle:templates\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"node ./bin/devaudit.js\"\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^0.8.2\",\n \"@metasession.co/devaudit-plugin-sdk\": \"^0.1.41\",\n \"commander\": \"^12.1.0\",\n \"consola\": \"^3.2.3\",\n \"env-paths\": \"^3.0.0\",\n \"execa\": \"^9.5.1\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.9.0\",\n \"msw\": \"^2.7.0\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^4.1.6\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/metasession-dev/DevAudit-Installer\",\n \"directory\": \"cli\"\n },\n \"license\": \"Apache-2.0\"\n}\n","import pkg from '../../package.json' with { type: 'json' };\n\nexport const CLI_VERSION: string = pkg.version;\n","import envPaths from 'env-paths';\nimport { join } from 'node:path';\n\nconst paths = envPaths('devaudit', { suffix: '' });\n\nexport const CONFIG_DIR = paths.config;\nexport const AUTH_FILE = join(CONFIG_DIR, 'auth.json');\nexport const CONFIG_FILE = join(CONFIG_DIR, 'config.json');\nexport const PLUGINS_DIR = join(CONFIG_DIR, 'plugins');\n","import { promises as fs } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { validateManifest } from '@metasession.co/devaudit-plugin-sdk';\nimport type { Plugin } from '@metasession.co/devaudit-plugin-sdk';\nimport type { LoadedPlugin } from './types.js';\n\nfunction toFileUrl(absPath: string): string {\n // pathToFileURL is the canonical API but it percent-encodes `~` to `%7E`,\n // which breaks dynamic import resolution on Windows GitHub Actions runners\n // (`os.tmpdir()` returns 8.3 short names like `RUNNER~1`). `~` is a valid\n // URL character — decoding it back is safe and well-defined.\n return pathToFileURL(absPath).href.replace(/%7E/g, '~');\n}\n\nexport async function loadPluginFromDir(dir: string): Promise<LoadedPlugin> {\n const pkgPath = join(dir, 'package.json');\n const raw = await fs.readFile(pkgPath, 'utf-8');\n const parsed = JSON.parse(raw) as unknown;\n const result = validateManifest(parsed);\n if (!result.valid) {\n throw new Error(`Invalid manifest in ${pkgPath}: ${result.errors.join('; ')}`);\n }\n const mainPath = resolve(dir, result.main);\n const mod = (await import(toFileUrl(mainPath))) as { default?: Plugin };\n if (!mod.default || typeof mod.default !== 'object') {\n throw new Error(`Plugin main module ${mainPath} did not default-export a Plugin object.`);\n }\n if (mod.default.apiVersion !== '1') {\n throw new Error(\n `Plugin ${result.packageName} declares apiVersion '${mod.default.apiVersion}' at runtime, expected '1'.`,\n );\n }\n if (typeof mod.default.name !== 'string' || mod.default.name.length === 0) {\n throw new Error(`Plugin main module ${mainPath} did not export a non-empty 'name'.`);\n }\n return {\n dir,\n packageName: result.packageName,\n packageVersion: result.packageVersion,\n manifest: result.manifest,\n plugin: mod.default,\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { PLUGINS_DIR } from '../paths.js';\nimport { loadPluginFromDir } from './load.js';\nimport type { DiscoveryResult, LoadedPlugin, PluginLoadFailure } from './types.js';\n\nasync function listSubdirs(root: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(root, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory()).map((e) => join(root, e.name));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw err;\n }\n}\n\nexport async function discoverPlugins(root: string = PLUGINS_DIR): Promise<DiscoveryResult> {\n const dirs = await listSubdirs(root);\n const loaded: LoadedPlugin[] = [];\n const failures: PluginLoadFailure[] = [];\n for (const dir of dirs) {\n try {\n // eslint-disable-next-line no-await-in-loop\n loaded.push(await loadPluginFromDir(dir));\n } catch (err) {\n failures.push({ dir, reason: (err as Error).message });\n }\n }\n return { loaded, failures };\n}\n","import { promises as fs } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nexport interface SdlcConfig {\n readonly project_slug: string;\n readonly stack?: string;\n readonly host?: string;\n readonly node_version?: string | number;\n readonly python_version?: string | number;\n readonly working_directory?: string;\n readonly source_dirs?: string;\n readonly integration_branch?: string;\n readonly release_branch?: string;\n readonly devaudit?: {\n readonly base_url?: string;\n readonly project_slug?: string;\n readonly api_key_secret?: string;\n };\n readonly uat?: { readonly enabled?: boolean };\n readonly approval?: { readonly mode?: string };\n}\n\nexport async function readSdlcConfig(projectPath: string): Promise<SdlcConfig | null> {\n const configPath = join(resolve(projectPath), 'sdlc-config.json');\n try {\n const raw = await fs.readFile(configPath, 'utf-8');\n return JSON.parse(raw) as SdlcConfig;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\nexport interface FrameworkFileStatus {\n readonly path: string;\n readonly present: boolean;\n}\n\nexport async function checkFrameworkFiles(\n projectPath: string,\n files: readonly string[],\n): Promise<readonly FrameworkFileStatus[]> {\n const checks = await Promise.all(\n files.map(async (rel) => {\n try {\n await fs.access(join(projectPath, rel));\n return { path: rel, present: true };\n } catch {\n return { path: rel, present: false };\n }\n }),\n );\n return checks;\n}\n","import type {\n PluginContext,\n PluginEvent,\n PluginLogger,\n PluginSdlcConfigView,\n} from '@metasession.co/devaudit-plugin-sdk';\nimport { readSdlcConfig } from '../sdlc-config.js';\nimport { logger } from '../logger.js';\n\nexport interface BuildPluginContextOptions {\n readonly projectPath: string;\n readonly events?: PluginEvent[];\n}\n\nexport async function buildPluginContext(opts: BuildPluginContextOptions): Promise<PluginContext> {\n const cfg = await readSdlcConfig(opts.projectPath);\n const sdlcConfig: PluginSdlcConfigView = (cfg as unknown as PluginSdlcConfigView) ?? {\n project_slug: '',\n };\n return {\n projectPath: opts.projectPath,\n sdlcConfig,\n logger: pluginLogger(),\n apiVersion: '1',\n emit: (event) => {\n opts.events?.push(event);\n },\n };\n}\n\nfunction pluginLogger(): PluginLogger {\n const log = logger();\n return {\n info: (m) => log.info(`[plugin] ${m}`),\n warn: (m) => log.warn(`[plugin] ${m}`),\n error: (m) => log.error(`[plugin] ${m}`),\n debug: (m) => log.debug(`[plugin] ${m}`),\n };\n}\n","import type { LifecycleHookName, PluginContext } from '@metasession.co/devaudit-plugin-sdk';\nimport { logger } from '../logger.js';\nimport type { LoadedPlugin } from './types.js';\n\nexport interface HookRunResult {\n readonly plugin: string;\n readonly hook: LifecycleHookName;\n readonly status: 'ok' | 'error' | 'skipped';\n readonly message?: string;\n}\n\nexport async function runHook(\n plugins: readonly LoadedPlugin[],\n hook: LifecycleHookName,\n ctx: PluginContext,\n): Promise<readonly HookRunResult[]> {\n const log = logger();\n const results: HookRunResult[] = [];\n for (const p of plugins) {\n const fn = p.plugin.hooks?.[hook];\n if (!fn) {\n results.push({ plugin: p.packageName, hook, status: 'skipped' });\n continue;\n }\n try {\n // eslint-disable-next-line no-await-in-loop\n await fn(ctx);\n results.push({ plugin: p.packageName, hook, status: 'ok' });\n } catch (err) {\n const message = (err as Error).message;\n log.warn(`Plugin '${p.packageName}' hook '${hook}' threw: ${message}`);\n results.push({ plugin: p.packageName, hook, status: 'error', message });\n }\n }\n return results;\n}\n","import type { Command } from 'commander';\nimport { resolve } from 'node:path';\nimport { logger } from '../logger.js';\nimport { buildPluginContext } from './context.js';\nimport type { LoadedPlugin } from './types.js';\n\nexport function registerPluginCommands(program: Command, plugins: readonly LoadedPlugin[]): void {\n for (const p of plugins) {\n const namespace = pluginNamespace(p.packageName);\n const manifestCommands = p.manifest.commands ?? [];\n if (manifestCommands.length === 0) continue;\n const group = program.command(namespace).description(p.manifest.displayName ?? p.packageName);\n for (const c of manifestCommands) {\n const impl = p.plugin.commands?.[c.name];\n if (!impl) continue;\n group\n .command(`${c.name} [args...]`)\n .description(c.description)\n .action(async (args: string[]) => {\n const log = logger();\n const projectPath = resolve(process.cwd());\n const ctx = await buildPluginContext({ projectPath });\n try {\n await impl(ctx, args);\n } catch (err) {\n log.error(`Plugin '${p.packageName}' command '${c.name}' failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n }\n }\n}\n\nfunction pluginNamespace(packageName: string): string {\n return packageName.replace(/^@[^/]+\\//, '').replace(/^devaudit-plugin-/, '');\n}\n","import { execa } from 'execa';\nimport { resolve } from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { logger } from '../lib/logger.js';\nimport { discoverPlugins, buildPluginContext, runHook, type LoadedPlugin } from '../lib/plugin/index.js';\n\nexport interface DoctorOptions {\n readonly plugins?: readonly LoadedPlugin[];\n}\n\ninterface CheckResult {\n readonly name: string;\n readonly ok: boolean;\n readonly detail: string;\n}\n\nasync function checkCommand(name: string, args: readonly string[]): Promise<CheckResult> {\n try {\n const result = await execa(name, args, { reject: false });\n const ok = result.exitCode === 0;\n const firstLine = result.stdout.split('\\n')[0] ?? '';\n return { name, ok, detail: ok ? firstLine : `exited ${result.exitCode}` };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return { name, ok: false, detail: message };\n }\n}\n\nasync function checkNodeVersion(): Promise<CheckResult> {\n const version = process.versions.node;\n const major = Number.parseInt(version.split('.')[0] ?? '0', 10);\n const ok = major >= 22;\n return { name: 'node', ok, detail: `v${version} (require >=22)` };\n}\n\n/**\n * Reconciliation safety-net (DevAudit-Installer#60): flag any release ticket\n * still in compliance/pending-releases/ whose portal release is already\n * `released` — i.e. a close-out that was missed (e.g. a dropped dispatch).\n * Non-fatal: a warning, not a tool-gate failure. Skips gracefully when not in\n * a consumer project or when no portal credentials are available.\n */\nasync function checkReleaseCloseoutDrift(): Promise<CheckResult> {\n const name = 'releases';\n let cfg: { project_slug?: string; devaudit?: { project_slug?: string; base_url?: string } };\n try {\n cfg = JSON.parse(await fs.readFile('sdlc-config.json', 'utf-8'));\n } catch {\n return { name, ok: true, detail: 'skipped (not a consumer project)' };\n }\n let entries: string[];\n try {\n entries = await fs.readdir('compliance/pending-releases');\n } catch {\n return { name, ok: true, detail: 'no pending-releases/' };\n }\n const reqs = entries\n .filter((f) => /^RELEASE-TICKET-REQ-\\d+\\.md$/.test(f))\n .map((f) => f.replace(/^RELEASE-TICKET-/, '').replace(/\\.md$/, ''));\n if (reqs.length === 0) return { name, ok: true, detail: 'no pending release tickets' };\n\n const slug = cfg.devaudit?.project_slug ?? cfg.project_slug;\n const base = (cfg.devaudit?.base_url ?? '').replace(/\\/$/, '');\n const apiKey = process.env['DEVAUDIT_API_KEY'];\n if (!slug || !base || !apiKey) {\n return {\n name,\n ok: true,\n detail: `${reqs.length} pending ticket(s); portal drift check skipped (set DEVAUDIT_API_KEY + devaudit.base_url)`,\n };\n }\n\n const drifted: string[] = [];\n for (const req of reqs) {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), 10000);\n const res = await fetch(\n `${base}/api/ci/releases/resolve?projectSlug=${encodeURIComponent(slug)}&versionPrefix=${encodeURIComponent(req)}`,\n { headers: { Authorization: `Bearer ${apiKey}` }, signal: ctrl.signal },\n );\n clearTimeout(timer);\n if (!res.ok) continue;\n const body = (await res.json()) as { latest?: { status?: string } };\n if (body.latest?.status === 'released') drifted.push(req);\n } catch {\n // network/timeout — leave as a skip for this REQ\n }\n }\n if (drifted.length > 0) {\n return {\n name,\n ok: false,\n detail: `released on the portal but still in pending-releases/: ${drifted.join(', ')} — run ./scripts/close-out-release.sh <REQ>`,\n };\n }\n return { name, ok: true, detail: `${reqs.length} pending ticket(s); none released on the portal` };\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<void> {\n const log = logger();\n log.info('Running devaudit doctor — checking required tools...\\n');\n const checks: readonly CheckResult[] = [\n await checkNodeVersion(),\n await checkCommand('git', ['--version']),\n await checkCommand('gh', ['--version']),\n await checkCommand('jq', ['--version']),\n await checkCommand('curl', ['--version']),\n ];\n let allOk = true;\n for (const check of checks) {\n const marker = check.ok ? '✓' : '✗';\n if (!check.ok) allOk = false;\n log.log(` ${marker} ${check.name.padEnd(8)} ${check.detail}`);\n }\n // Reconciliation safety-net — reported but does not gate the tool check (#60).\n const closeout = await checkReleaseCloseoutDrift();\n const closeoutMarker = closeout.ok ? '✓' : '⚠';\n log.log(` ${closeoutMarker} ${closeout.name.padEnd(8)} ${closeout.detail}`);\n log.log('');\n if (!closeout.ok) {\n log.warn('Release close-out drift detected — see above. (Does not affect the tool check.)');\n }\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath: resolve(process.cwd()) });\n await runHook(plugins, 'onDoctor', ctx);\n }\n if (allOk) {\n log.success('All required tools present.');\n process.exit(0);\n } else {\n log.error('One or more required tools are missing. Install them and re-run `devaudit doctor`.');\n process.exit(6);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { AUTH_FILE } from './paths.js';\n\ninterface AuthRecord {\n readonly version: 1;\n readonly token: string;\n readonly base_url: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nexport async function readAuth(): Promise<AuthRecord | null> {\n try {\n const raw = await fs.readFile(AUTH_FILE, 'utf-8');\n const parsed = JSON.parse(raw) as AuthRecord;\n if (parsed.version !== 1 || typeof parsed.token !== 'string') {\n return null;\n }\n return parsed;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\nexport async function writeAuth(token: string, baseUrl: string = DEFAULT_BASE_URL): Promise<void> {\n await fs.mkdir(dirname(AUTH_FILE), { recursive: true, mode: 0o700 });\n const record: AuthRecord = { version: 1, token, base_url: baseUrl };\n await fs.writeFile(AUTH_FILE, JSON.stringify(record, null, 2) + '\\n', { mode: 0o600 });\n}\n\nexport async function deleteAuth(): Promise<boolean> {\n try {\n await fs.unlink(AUTH_FILE);\n return true;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return false;\n throw err;\n }\n}\n\nexport async function resolveToken(): Promise<{ token: string; baseUrl: string; source: 'env' | 'file' } | null> {\n const envToken = process.env['DEVAUDIT_USER_TOKEN'];\n if (envToken) {\n const envBase = process.env['DEVAUDIT_BASE_URL'] ?? DEFAULT_BASE_URL;\n return { token: envToken, baseUrl: envBase, source: 'env' };\n }\n const record = await readAuth();\n if (record) return { token: record.token, baseUrl: record.base_url, source: 'file' };\n return null;\n}\n","interface DevAuditClientOptions {\n readonly token: string;\n readonly baseUrl: string;\n}\n\nexport interface DevAuditProject {\n readonly id: string;\n readonly slug: string;\n readonly name: string;\n}\n\nexport interface ApiKeyIssued {\n readonly id: string;\n readonly name: string;\n readonly plainTextKey: string;\n}\n\nexport interface ApiKeySummary {\n readonly id: string;\n readonly name: string;\n readonly revoked_at: string | null;\n}\n\nexport class DevAuditApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: string,\n ) {\n super(message);\n this.name = 'DevAuditApiError';\n }\n}\n\nexport class DevAuditClient {\n private readonly token: string;\n private readonly baseUrl: string;\n\n constructor(opts: DevAuditClientOptions) {\n this.token = opts.token;\n this.baseUrl = opts.baseUrl.replace(/\\/$/, '');\n }\n\n async listProjects(): Promise<readonly DevAuditProject[]> {\n const res = await this.request('GET', '/api/projects');\n const json = (await res.json()) as { projects?: DevAuditProject[] } | DevAuditProject[];\n if (Array.isArray(json)) return json;\n return json.projects ?? [];\n }\n\n async getProjectBySlug(slug: string): Promise<DevAuditProject | null> {\n const list = await this.listProjects();\n return list.find((p) => p.slug === slug) ?? null;\n }\n\n async createProject(slug: string, name: string): Promise<DevAuditProject> {\n const res = await this.request('POST', '/api/projects', { slug, name });\n return (await res.json()) as DevAuditProject;\n }\n\n async listApiKeys(projectId: string): Promise<readonly ApiKeySummary[]> {\n const res = await this.request('GET', `/api/projects/${projectId}/api-keys`);\n const json = (await res.json()) as ApiKeySummary[] | { keys?: ApiKeySummary[] };\n if (Array.isArray(json)) return json;\n return json.keys ?? [];\n }\n\n async issueApiKey(projectId: string, name: string): Promise<ApiKeyIssued> {\n const res = await this.request('POST', `/api/projects/${projectId}/api-keys`, {\n name,\n role: 'uploader',\n });\n return (await res.json()) as ApiKeyIssued;\n }\n\n private async request(method: string, path: string, body?: unknown): Promise<Response> {\n const url = `${this.baseUrl}${path}`;\n const headers: Record<string, string> = { 'x-devaudit-token': this.token };\n let payload: string | undefined;\n if (body !== undefined) {\n headers['content-type'] = 'application/json';\n payload = JSON.stringify(body);\n }\n const res = await fetch(url, { method, headers, body: payload });\n if (!res.ok) {\n const text = await res.text();\n throw new DevAuditApiError(`${method} ${path} → HTTP ${res.status}`, res.status, text);\n }\n return res;\n }\n}\n","import * as clack from '@clack/prompts';\nimport { writeAuth } from '../../lib/auth.js';\nimport { DevAuditClient, DevAuditApiError } from '../../lib/devaudit-api.js';\nimport { logger } from '../../lib/logger.js';\n\ninterface LoginOptions {\n readonly token?: string;\n readonly baseUrl?: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nexport async function runAuthLogin(options: LoginOptions): Promise<void> {\n const log = logger();\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n let token = options.token ?? process.env['DEVAUDIT_USER_TOKEN'];\n if (!token) {\n log.info(`Open ${baseUrl}/settings/tokens in your browser and issue a Personal Access Token.`);\n log.info('Paste the `mctok_...` value below; it never leaves this machine.');\n const result = await clack.password({\n message: 'Paste your DevAudit Personal Access Token (mctok_...):',\n validate: (val) => {\n if (!val) return 'Token is required.';\n if (!val.startsWith('mctok_')) return \"Token should start with 'mctok_'.\";\n return undefined;\n },\n });\n if (clack.isCancel(result)) {\n log.warn('Cancelled.');\n process.exit(0);\n }\n token = result;\n }\n log.info('Validating token against portal...');\n try {\n const client = new DevAuditClient({ token, baseUrl });\n await client.listProjects();\n } catch (err) {\n if (err instanceof DevAuditApiError && (err.status === 401 || err.status === 403)) {\n log.error('Token rejected by portal (HTTP ' + err.status + '). Check it was copied correctly + is not revoked.');\n process.exit(3);\n }\n throw err;\n }\n await writeAuth(token, baseUrl);\n log.success('Logged in. Token cached at ~/.config/devaudit/auth.json (mode 0600).');\n}\n","import { deleteAuth } from '../../lib/auth.js';\nimport { AUTH_FILE } from '../../lib/paths.js';\nimport { logger } from '../../lib/logger.js';\n\nexport async function runAuthLogout(): Promise<void> {\n const log = logger();\n const existed = await deleteAuth();\n if (existed) {\n log.success(`Removed cached token at ${AUTH_FILE}.`);\n } else {\n log.info('No cached token to remove.');\n }\n}\n","import { resolveToken } from '../../lib/auth.js';\nimport { DevAuditClient, DevAuditApiError } from '../../lib/devaudit-api.js';\nimport { emitJsonResult, isJsonMode, logger } from '../../lib/logger.js';\n\nexport async function runAuthStatus(): Promise<void> {\n const log = logger();\n const resolved = await resolveToken();\n if (!resolved) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'not_logged_in' });\n else log.warn('Not logged in. Run `devaudit auth login` or set DEVAUDIT_USER_TOKEN.');\n process.exit(3);\n return;\n }\n if (!isJsonMode()) {\n log.info(`Token source: ${resolved.source === 'env' ? 'DEVAUDIT_USER_TOKEN env var' : '~/.config/devaudit/auth.json'}`);\n log.info(`Portal: ${resolved.baseUrl}`);\n log.info('Verifying token against portal...');\n }\n try {\n const client = new DevAuditClient({ token: resolved.token, baseUrl: resolved.baseUrl });\n const projects = await client.listProjects();\n if (isJsonMode()) {\n emitJsonResult({\n ok: true,\n source: resolved.source,\n baseUrl: resolved.baseUrl,\n projects: projects.map((p) => p.slug),\n });\n return;\n }\n log.success(`Token is valid. Accessible projects: ${projects.length}`);\n for (const p of projects.slice(0, 10)) {\n log.log(` • ${p.slug}`);\n }\n if (projects.length > 10) log.log(` ... and ${projects.length - 10} more`);\n } catch (err) {\n if (err instanceof DevAuditApiError) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'portal_rejected', status: err.status });\n else log.error(`Portal rejected the token (HTTP ${err.status}). Re-run \\`devaudit auth login\\`.`);\n process.exit(3);\n return;\n }\n if (isJsonMode())\n emitJsonResult({ ok: false, reason: 'unexpected', message: err instanceof Error ? err.message : String(err) });\n else log.error(`Unexpected error: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n","import { resolve } from 'node:path';\nimport { readSdlcConfig, checkFrameworkFiles } from '../lib/sdlc-config.js';\nimport { emitJsonResult, isJsonMode, logger } from '../lib/logger.js';\n\nconst FRAMEWORK_FILES = [\n 'INSTRUCTIONS.md',\n 'CLAUDE.md',\n '.cursorrules',\n '.windsurfrules',\n 'GEMINI.md',\n 'SDLC/0-project-setup.md',\n 'SDLC/5-deploy-main.md',\n 'scripts/upload-evidence.sh',\n 'compliance/RTM.md',\n '.github/workflows/ci.yml',\n];\n\ninterface StatusOptions {\n readonly path?: string;\n}\n\nexport async function runStatus(options: StatusOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n const config = await readSdlcConfig(projectPath);\n if (!config) {\n if (isJsonMode()) {\n emitJsonResult({ ok: false, reason: 'not_onboarded', projectPath });\n } else {\n log.info(`Inspecting ${projectPath}`);\n log.warn('No sdlc-config.json found here. This project is not onboarded to DevAudit.');\n log.info('Run `devaudit install` to onboard.');\n }\n process.exit(7);\n return;\n }\n const files = await checkFrameworkFiles(projectPath, FRAMEWORK_FILES);\n const presentFiles = files.filter((f) => f.present).map((f) => f.path);\n const missingFiles = files.filter((f) => !f.present).map((f) => f.path);\n if (isJsonMode()) {\n emitJsonResult({\n ok: true,\n projectPath,\n project_slug: config.project_slug,\n stack: config.stack ?? null,\n host: config.host ?? null,\n node_version: config.node_version ?? null,\n python_version: config.python_version ?? null,\n working_directory: config.working_directory ?? null,\n source_dirs: config.source_dirs ?? null,\n devaudit_base_url: config.devaudit?.base_url ?? null,\n uat_enabled: config.uat?.enabled ?? false,\n approval_mode: config.approval?.mode ?? null,\n files_present: presentFiles,\n files_missing: missingFiles,\n });\n return;\n }\n log.info(`Inspecting ${projectPath}`);\n log.success('sdlc-config.json found.');\n log.log('');\n log.log(` Project slug: ${config.project_slug}`);\n log.log(` Stack: ${config.stack ?? '(unset)'}`);\n log.log(` Host: ${config.host ?? '(unset)'}`);\n if (config.node_version) log.log(` Node version: ${config.node_version}`);\n if (config.python_version) log.log(` Python version: ${config.python_version}`);\n if (config.working_directory) log.log(` Working dir: ${config.working_directory}`);\n if (config.source_dirs) log.log(` Source dirs: ${config.source_dirs}`);\n log.log(` DevAudit URL: ${config.devaudit?.base_url ?? '(unset)'}`);\n log.log(` UAT enabled: ${config.uat?.enabled ?? false}`);\n log.log(` Approval mode: ${config.approval?.mode ?? '(unset)'}`);\n log.log('');\n log.info('Framework files present?');\n for (const f of files) {\n const marker = f.present ? '✓' : '✗';\n log.log(` ${marker} ${f.path}`);\n }\n log.log('');\n if (missingFiles.length === 0) {\n log.success('All checked framework files are present.');\n } else {\n log.warn(`${missingFiles.length} framework file(s) missing. Re-sync with \\`devaudit update <version> <path>\\` to refresh.`);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { DevAuditApiError } from './devaudit-api.js';\n\nexport interface UploadOptions {\n readonly projectSlug: string;\n readonly requirementId: string;\n readonly evidenceType: string;\n readonly filePath: string;\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly releaseVersion?: string;\n readonly createReleaseIfMissing?: boolean;\n readonly environment?: string;\n readonly evidenceCategory?: string;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface UploadResult {\n readonly file: string;\n readonly ok: boolean;\n readonly status: number;\n readonly body?: unknown;\n readonly error?: string;\n}\n\nconst RETRYABLE_STATUSES = new Set([429, 500, 502, 503, 504]);\nconst MAX_ATTEMPTS = 3;\nconst INITIAL_BACKOFF_MS = 1000;\n\nexport async function collectFiles(filePath: string): Promise<readonly string[]> {\n const stat = await fs.stat(filePath);\n if (stat.isFile()) return [filePath];\n if (stat.isDirectory()) {\n const entries = await fs.readdir(filePath, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isFile()) files.push(join(filePath, entry.name));\n }\n return files;\n }\n throw new Error(`${filePath} is neither a file nor a directory.`);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((res) => setTimeout(res, ms));\n}\n\nasync function uploadOne(file: string, opts: UploadOptions): Promise<UploadResult> {\n const form = new FormData();\n const buf = await fs.readFile(file);\n const blob = new Blob([new Uint8Array(buf)]);\n form.set('file', blob, basename(file));\n form.set('projectSlug', opts.projectSlug);\n form.set('requirementId', opts.requirementId);\n form.set('evidenceType', opts.evidenceType);\n form.set('metadata', JSON.stringify(opts.metadata ?? {}));\n if (opts.releaseVersion) form.set('releaseVersion', opts.releaseVersion);\n if (opts.createReleaseIfMissing) form.set('createReleaseIfMissing', 'true');\n if (opts.environment) form.set('environment', opts.environment);\n if (opts.evidenceCategory) form.set('evidenceCategory', opts.evidenceCategory);\n const url = `${opts.baseUrl.replace(/\\/$/, '')}/api/evidence/upload`;\n let attempt = 1;\n let backoff = INITIAL_BACKOFF_MS;\n while (attempt <= MAX_ATTEMPTS) {\n const res = await fetch(url, {\n method: 'POST',\n headers: { authorization: `Bearer ${opts.apiKey}` },\n body: form,\n });\n if (res.ok) {\n const body = await res.json().catch(() => null);\n return { file, ok: true, status: res.status, body };\n }\n if (RETRYABLE_STATUSES.has(res.status) && attempt < MAX_ATTEMPTS) {\n const retryAfter = Number.parseInt(res.headers.get('retry-after') ?? '', 10);\n const wait = Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter * 1000 : backoff;\n await delay(wait);\n backoff *= 2;\n attempt += 1;\n continue;\n }\n const errText = await res.text().catch(() => '(no body)');\n return { file, ok: false, status: res.status, error: errText };\n }\n return { file, ok: false, status: 0, error: 'max retries exhausted' };\n}\n\nexport async function uploadEvidence(opts: UploadOptions): Promise<readonly UploadResult[]> {\n const files = await collectFiles(opts.filePath);\n if (files.length === 0) {\n throw new DevAuditApiError(`No files at ${opts.filePath}`, 0, '');\n }\n const results: UploadResult[] = [];\n for (const file of files) {\n // eslint-disable-next-line no-await-in-loop\n results.push(await uploadOne(file, opts));\n }\n return results;\n}\n","import { resolve } from 'node:path';\nimport { collectFiles, uploadEvidence } from '../lib/ci-upload.js';\nimport { logger, isJsonMode, emitJsonResult } from '../lib/logger.js';\nimport { discoverPlugins, buildPluginContext, runHook, type LoadedPlugin } from '../lib/plugin/index.js';\n\nexport interface PushOptions {\n readonly projectSlug: string;\n readonly requirementId: string;\n readonly evidenceType: string;\n readonly filePath: string;\n readonly release?: string;\n readonly createReleaseIfMissing?: boolean;\n readonly environment?: string;\n readonly category?: string;\n readonly gitSha?: string;\n readonly ciRunId?: string;\n readonly branch?: string;\n readonly baseUrl?: string;\n readonly apiKey?: string;\n readonly dryRun?: boolean;\n readonly plugins?: readonly LoadedPlugin[];\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nfunction buildMetadata(options: PushOptions): Record<string, unknown> {\n const metadata: Record<string, unknown> = {};\n if (options.gitSha) metadata['gitSha'] = options.gitSha;\n if (options.ciRunId) metadata['ciRunId'] = options.ciRunId;\n if (options.branch) metadata['branch'] = options.branch;\n return metadata;\n}\n\nasync function runDryRun(options: PushOptions, baseUrl: string): Promise<void> {\n const log = logger();\n const files = await collectFiles(options.filePath);\n const planned = {\n dryRun: true,\n projectSlug: options.projectSlug,\n requirementId: options.requirementId,\n evidenceType: options.evidenceType,\n baseUrl,\n files: files.map((f) => ({ path: f })),\n metadata: buildMetadata(options),\n ...(options.release !== undefined ? { release: options.release } : {}),\n ...(options.environment !== undefined ? { environment: options.environment } : {}),\n ...(options.category !== undefined ? { category: options.category } : {}),\n };\n if (isJsonMode()) {\n emitJsonResult(planned);\n return;\n }\n log.info(\n `[dry-run] Would upload ${files.length} file(s) for ${options.projectSlug}/${options.requirementId} (${options.evidenceType}) → ${baseUrl}`,\n );\n for (const f of files) log.log(` · ${f}`);\n}\n\nexport async function runPush(options: PushOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(process.cwd());\n const baseUrl = options.baseUrl ?? process.env['DEVAUDIT_BASE_URL'] ?? DEFAULT_BASE_URL;\n if (options.dryRun) {\n await runDryRun(options, baseUrl);\n return;\n }\n const apiKey = options.apiKey ?? process.env['DEVAUDIT_API_KEY'];\n if (!apiKey) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'missing_api_key' });\n else {\n log.error('DEVAUDIT_API_KEY env var is required (or pass --api-key).');\n log.info('Issue a project API key at: <portal>/projects/<slug>/settings → API Key Management.');\n }\n process.exit(3);\n }\n log.info(\n `Uploading ${options.filePath} (project=${options.projectSlug} req=${options.requirementId} type=${options.evidenceType}) → ${baseUrl}`,\n );\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'beforePush', ctx);\n }\n const metadata = buildMetadata(options);\n const results = await uploadEvidence({\n projectSlug: options.projectSlug,\n requirementId: options.requirementId,\n evidenceType: options.evidenceType,\n filePath: options.filePath,\n apiKey: apiKey as string,\n baseUrl,\n ...(options.release !== undefined ? { releaseVersion: options.release } : {}),\n ...(options.createReleaseIfMissing !== undefined\n ? { createReleaseIfMissing: options.createReleaseIfMissing }\n : {}),\n ...(options.environment !== undefined ? { environment: options.environment } : {}),\n ...(options.category !== undefined ? { evidenceCategory: options.category } : {}),\n metadata,\n });\n let okCount = 0;\n let failCount = 0;\n for (const result of results) {\n if (result.ok) {\n okCount++;\n log.success(` ✓ ${result.file} (HTTP ${result.status})`);\n } else {\n failCount++;\n log.error(` ✗ ${result.file} (HTTP ${result.status}): ${result.error ?? '(no detail)'}`);\n }\n }\n log.log('');\n log.info(`Uploaded: ${okCount} succeeded, ${failCount} failed.`);\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'afterPush', ctx);\n }\n if (isJsonMode()) {\n emitJsonResult({\n ok: failCount === 0,\n uploaded: okCount,\n failed: failCount,\n results: results.map((r) => ({ file: r.file, ok: r.ok, status: r.status, error: r.error ?? null })),\n });\n }\n if (failCount > 0) process.exit(4);\n}\n","import { fileURLToPath } from 'node:url';\nimport { dirname, resolve } from 'node:path';\nimport { promises as fs } from 'node:fs';\n\n/**\n * Resolve the directory that holds the SDLC framework templates (`sdlc/files/`).\n *\n * Three sources, in priority order:\n * 1. `DEVAUDIT_INSTALLER_ROOT` — explicit override (e.g. developing against a\n * checkout that isn't the bundled snapshot).\n * 2. The package's own bundled snapshot — when installed from npm, the\n * published tarball ships `sdlc/` (and `scripts/upload-evidence.sh`)\n * alongside `dist/`. See `tools/bundle-templates.mjs`, run on `prepack`.\n * `dist/index.js` → `..` is the package root.\n * 3. The DevAudit-Installer repo root — running from a source checkout\n * (`cli/dist/index.js` → `../..`), where the canonical `sdlc/` lives.\n *\n * The sentinel is the presence of `sdlc/files` — not any bash script. The CLI\n * is the onboarding tool; it no longer depends on `scripts/sdlc-onboard.sh`.\n */\nexport async function resolveInstallerRoot(): Promise<string> {\n const override = process.env['DEVAUDIT_INSTALLER_ROOT'];\n if (override) return resolve(override);\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [resolve(here, '..'), resolve(here, '..', '..')];\n for (const candidate of candidates) {\n if (await hasTemplates(candidate)) return candidate;\n }\n throw new Error(\n 'Could not locate the SDLC templates (sdlc/files). Reinstall @metasession.co/devaudit-cli, ' +\n 'or set DEVAUDIT_INSTALLER_ROOT to a DevAudit-Installer checkout.',\n );\n}\n\nasync function hasTemplates(root: string): Promise<boolean> {\n try {\n await fs.access(resolve(root, 'sdlc', 'files'));\n return true;\n } catch {\n return false;\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { dirname, join, basename } from 'node:path';\n\nexport async function ensureDir(dir: string, mode = 0o755): Promise<void> {\n await fs.mkdir(dir, { recursive: true, mode });\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isFile(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nexport async function isDir(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function copyFile(src: string, dst: string, mode?: number): Promise<void> {\n await ensureDir(dirname(dst));\n await fs.copyFile(src, dst);\n if (mode !== undefined) await fs.chmod(dst, mode);\n}\n\n/**\n * Recursive copy preserving directory structure. Roughly equivalent to\n * `cp -r src/. dst/`. If `clean` is true the destination is removed first\n * (rsync-style --delete semantics).\n */\nexport async function copyDir(src: string, dst: string, clean = false): Promise<number> {\n if (clean && (await exists(dst))) {\n await fs.rm(dst, { recursive: true, force: true });\n }\n await ensureDir(dst);\n let count = 0;\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = join(src, entry.name);\n const dstPath = join(dst, entry.name);\n if (entry.isDirectory()) {\n count += await copyDir(srcPath, dstPath, false);\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, dstPath);\n count += 1;\n }\n }\n return count;\n}\n\nexport async function listFiles(dir: string, predicate?: (name: string) => boolean): Promise<readonly string[]> {\n if (!(await isDir(dir))) return [];\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries\n .filter((e) => e.isFile())\n .map((e) => e.name)\n .filter((name) => (predicate ? predicate(name) : true))\n .map((name) => join(dir, name));\n}\n\nexport function fileBasename(path: string): string {\n return basename(path);\n}\n","import { execa } from 'execa';\nimport type {\n BranchProtectionResult,\n GitProvider,\n PullRequestCreateOptions,\n PullRequestCreated,\n RepoMeta,\n} from './types.js';\n\ninterface GithubProviderOptions {\n readonly preferGhCli?: boolean;\n readonly token?: string;\n}\n\ninterface GhCheckResult {\n readonly available: boolean;\n}\n\nlet ghAvailabilityCache: GhCheckResult | null = null;\n\nasync function ghAvailable(): Promise<boolean> {\n if (ghAvailabilityCache !== null) return ghAvailabilityCache.available;\n try {\n await execa('gh', ['--version']);\n ghAvailabilityCache = { available: true };\n return true;\n } catch {\n ghAvailabilityCache = { available: false };\n return false;\n }\n}\n\nexport class GitHubProvider implements GitProvider {\n readonly name = 'github' as const;\n private readonly preferGhCli: boolean;\n private readonly token: string | undefined;\n\n constructor(opts: GithubProviderOptions = {}) {\n this.preferGhCli = opts.preferGhCli ?? true;\n this.token = opts.token ?? process.env['GH_TOKEN'] ?? process.env['GITHUB_TOKEN'];\n }\n\n async getRepoMeta(cwd: string): Promise<RepoMeta> {\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa(\n 'gh',\n ['repo', 'view', '--json', 'owner,name,defaultBranchRef', '--jq', '{owner: .owner.login, name: .name, defaultBranch: .defaultBranchRef.name}'],\n { cwd, reject: false },\n );\n if (res.exitCode === 0 && res.stdout.trim().length > 0) {\n const parsed = JSON.parse(res.stdout) as RepoMeta;\n return parsed;\n }\n }\n const { owner, name } = await parseOriginRemote(cwd);\n if (!this.token) {\n throw new Error(\n 'No `gh` CLI on PATH and no GH_TOKEN env var — cannot resolve repo metadata for GitHub.',\n );\n }\n const res = await fetch(`https://api.github.com/repos/${owner}/${name}`, {\n headers: this.authHeaders(),\n });\n if (!res.ok) {\n throw new Error(`GitHub REST repo lookup failed: HTTP ${res.status}`);\n }\n const json = (await res.json()) as { default_branch: string };\n return { owner, name, defaultBranch: json.default_branch };\n }\n\n async setSecret(cwd: string, name: string, value: string): Promise<void> {\n if (this.preferGhCli && (await ghAvailable())) {\n await execa('gh', ['secret', 'set', name], { cwd, input: value });\n return;\n }\n throw new Error(\n 'Setting a GitHub repo secret without `gh` CLI requires sodium encryption (libsodium) — not implemented. Install `gh` CLI to use this command.',\n );\n }\n\n async hasSecret(cwd: string, name: string): Promise<boolean> {\n // Best-effort probe used by install's dev-mode detection (#NN). Returns\n // false on any read failure — the safe default routes to operator mode,\n // which preserves today's behaviour for first-dev installs.\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa('gh', ['secret', 'list', '--json', 'name'], { cwd, reject: false });\n if (res.exitCode !== 0) return false;\n try {\n const rows = JSON.parse(res.stdout) as Array<{ name: string }>;\n return rows.some((r) => r.name === name);\n } catch {\n return false;\n }\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) return false;\n const res = await fetch(\n `https://api.github.com/repos/${meta.owner}/${meta.name}/actions/secrets/${name}`,\n { headers: this.authHeaders() },\n );\n return res.ok;\n }\n\n async setVariable(cwd: string, name: string, value: string): Promise<void> {\n if (this.preferGhCli && (await ghAvailable())) {\n await execa('gh', ['variable', 'set', name, '--body', value], { cwd });\n return;\n }\n const { owner, name: repoName } = await this.getRepoMeta(cwd);\n if (!this.token) {\n throw new Error('No `gh` CLI and no GH_TOKEN — cannot set repo variable.');\n }\n const res = await fetch(`https://api.github.com/repos/${owner}/${repoName}/actions/variables`, {\n method: 'POST',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify({ name, value }),\n });\n if (res.status === 409) {\n const update = await fetch(\n `https://api.github.com/repos/${owner}/${repoName}/actions/variables/${name}`,\n {\n method: 'PATCH',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify({ value }),\n },\n );\n if (!update.ok) throw new Error(`GitHub REST variable update failed: HTTP ${update.status}`);\n return;\n }\n if (!res.ok) throw new Error(`GitHub REST variable create failed: HTTP ${res.status}`);\n }\n\n async applyBranchProtection(\n cwd: string,\n branch: string,\n requiredChecks: readonly string[],\n ): Promise<BranchProtectionResult> {\n const body = {\n required_status_checks: { strict: false, contexts: requiredChecks },\n enforce_admins: false,\n required_pull_request_reviews: { dismiss_stale_reviews: true, required_approving_review_count: 0 },\n restrictions: null,\n };\n if (this.preferGhCli && (await ghAvailable())) {\n const meta = await this.getRepoMeta(cwd);\n const res = await execa(\n 'gh',\n ['api', '-X', 'PUT', `/repos/${meta.owner}/${meta.name}/branches/${branch}/protection`, '--input', '-'],\n { cwd, input: JSON.stringify(body), reject: false },\n );\n if (res.exitCode === 0) return { applied: true };\n return { applied: false, message: res.stderr.split('\\n')[0] || 'gh api call failed' };\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) {\n return { applied: false, message: 'No `gh` CLI and no GH_TOKEN — cannot apply branch protection.' };\n }\n const res = await fetch(\n `https://api.github.com/repos/${meta.owner}/${meta.name}/branches/${branch}/protection`,\n {\n method: 'PUT',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify(body),\n },\n );\n if (res.ok) return { applied: true };\n return { applied: false, message: `GitHub REST branch-protection PUT failed: HTTP ${res.status}` };\n }\n\n async createPullRequest(cwd: string, opts: PullRequestCreateOptions): Promise<PullRequestCreated> {\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa(\n 'gh',\n ['pr', 'create', '--base', opts.base, '--head', opts.head, '--title', opts.title, '--body', opts.body],\n { cwd },\n );\n return { url: res.stdout.trim() };\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) {\n throw new Error('No `gh` CLI and no GH_TOKEN — cannot create pull request.');\n }\n const res = await fetch(`https://api.github.com/repos/${meta.owner}/${meta.name}/pulls`, {\n method: 'POST',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`GitHub REST PR create failed: HTTP ${res.status}`);\n const json = (await res.json()) as { html_url: string };\n return { url: json.html_url };\n }\n\n private authHeaders(): Record<string, string> {\n if (!this.token) return { accept: 'application/vnd.github+json' };\n return { accept: 'application/vnd.github+json', authorization: `Bearer ${this.token}` };\n }\n}\n\nasync function parseOriginRemote(cwd: string): Promise<{ owner: string; name: string }> {\n const res = await execa('git', ['remote', 'get-url', 'origin'], { cwd, reject: false });\n if (res.exitCode !== 0) {\n throw new Error('No `origin` git remote configured; cannot determine GitHub repo.');\n }\n const url = res.stdout.trim();\n const match = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)(?:\\.git)?$/);\n if (!match) {\n throw new Error(`Could not parse GitHub owner/name from remote URL: ${url}`);\n }\n return { owner: match[1] ?? '', name: match[2] ?? '' };\n}\n\nexport function resetGhAvailabilityCache(): void {\n ghAvailabilityCache = null;\n}\n","import { execa } from 'execa';\nimport type { GitProviderName } from './types.js';\n\ninterface DetectResult {\n readonly provider: GitProviderName;\n readonly host: string;\n}\n\nexport async function detectProvider(cwd: string): Promise<DetectResult> {\n const res = await execa('git', ['remote', 'get-url', 'origin'], { cwd, reject: false });\n if (res.exitCode !== 0) {\n throw new Error(\n 'No `origin` git remote configured. Initialise the repo and add a remote before running this command.',\n );\n }\n const url = res.stdout.trim();\n return classifyRemoteUrl(url);\n}\n\nexport function classifyRemoteUrl(url: string): DetectResult {\n if (/github\\.com[/:]/.test(url)) return { provider: 'github', host: 'github.com' };\n if (/gitlab\\.com[/:]/.test(url)) return { provider: 'gitlab', host: 'gitlab.com' };\n if (/bitbucket\\.org[/:]/.test(url)) return { provider: 'bitbucket', host: 'bitbucket.org' };\n const hostMatch = url.match(/^(?:https?:\\/\\/|git@)([^:/]+)/);\n return { provider: 'self-hosted', host: hostMatch?.[1] ?? 'unknown' };\n}\n","import { GitHubProvider } from './github.js';\nimport { detectProvider } from './detect.js';\nimport type { GitProvider } from './types.js';\n\nexport { GitHubProvider } from './github.js';\nexport { detectProvider, classifyRemoteUrl } from './detect.js';\nexport type {\n GitProvider,\n GitProviderName,\n RepoMeta,\n BranchProtectionResult,\n PullRequestCreateOptions,\n PullRequestCreated,\n} from './types.js';\n\nexport async function getGitProvider(cwd: string): Promise<GitProvider> {\n const { provider, host } = await detectProvider(cwd);\n if (provider === 'github') return new GitHubProvider();\n throw new Error(\n `Git provider '${provider}' (host: ${host}) is not yet supported. Only GitHub is implemented in workstream C; GitLab/Bitbucket/self-hosted are planned.`,\n );\n}\n","import { DevAuditApiError, DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nexport async function runAuthProbe(ctx: InstallContext): Promise<StepResult> {\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n try {\n await client.listProjects();\n return { step: '1/11 Authenticate', status: 'ok', message: `PAT accepted at ${ctx.baseUrl}` };\n } catch (err) {\n if (err instanceof DevAuditApiError && (err.status === 401 || err.status === 403)) {\n throw new Error(\n `PAT rejected (HTTP ${err.status}). Issue a fresh token at ${ctx.baseUrl}/settings/tokens and retry.`,\n );\n }\n throw err;\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport type { DetectedStack, InstallContext, StepResult } from './types.js';\n\nconst MAX_DEPTH = 3;\nconst SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.turbo']);\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function findPyproject(root: string, depth: number, current: string): Promise<string | null> {\n if (depth > MAX_DEPTH) return null;\n const entries = await fs.readdir(current, { withFileTypes: true });\n for (const e of entries) {\n if (e.isFile() && e.name === 'pyproject.toml') {\n return join(current, e.name);\n }\n }\n for (const e of entries) {\n if (e.isDirectory() && !SKIP_DIRS.has(e.name)) {\n const found = await findPyproject(root, depth + 1, join(current, e.name));\n if (found) return found;\n }\n }\n return null;\n}\n\nexport async function detectStack(ctx: InstallContext): Promise<{ result: StepResult; detected: DetectedStack }> {\n const root = ctx.projectPath;\n if (await fileExists(join(root, 'pyproject.toml'))) {\n return { result: ok('python', '.'), detected: { stack: 'python', workingDirectory: '.' } };\n }\n const nested = await findPyproject(root, 1, root);\n if (nested) {\n const wd = relative(root, nested).split('/').slice(0, -1).join('/') || '.';\n return { result: ok('python', wd), detected: { stack: 'python', workingDirectory: wd } };\n }\n if (await fileExists(join(root, 'package.json'))) {\n return { result: ok('node', '.'), detected: { stack: 'node', workingDirectory: '.' } };\n }\n throw new Error(\n 'Could not detect stack — no pyproject.toml or package.json found within 3 directory levels.',\n );\n}\n\nfunction ok(stack: 'node' | 'python', wd: string): StepResult {\n return {\n step: '2/11 Detect stack',\n status: 'ok',\n message: `stack=${stack} working_directory=${wd} host=railway`,\n data: { stack, workingDirectory: wd, host: 'railway' },\n };\n}\n","import * as clack from '@clack/prompts';\nimport type { DetectedStack, InstallContext, InstallPlan } from './types.js';\nimport { readSdlcConfig } from '../lib/sdlc-config.js';\n\nconst NODE_DEFAULTS = { runtimeVersion: '20', sourceDirs: 'app/ lib/' };\nconst PYTHON_DEFAULTS = { runtimeVersion: '3.11', sourceDirs: 'src/ tests/' };\n\nfunction defaultSlug(projectName: string): string {\n return projectName\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nfunction prodUrlSecretDefault(slug: string): string {\n return slug.toUpperCase().replace(/-/g, '_') + '_PROD_URL';\n}\n\nexport async function collectPlan(\n ctx: InstallContext,\n detected: DetectedStack,\n): Promise<InstallPlan> {\n const defaults = detected.stack === 'node' ? NODE_DEFAULTS : PYTHON_DEFAULTS;\n if (ctx.nonInteractive) {\n return planFromConfig(ctx, detected, defaults);\n }\n return planFromPrompts(ctx, detected, defaults);\n}\n\nasync function planFromConfig(\n ctx: InstallContext,\n detected: DetectedStack,\n defaults: { runtimeVersion: string; sourceDirs: string },\n): Promise<InstallPlan> {\n const cfg = await readSdlcConfig(ctx.projectPath);\n if (!cfg && !ctx.dryRun) {\n throw new Error(\n '--yes requires an existing sdlc-config.json in the project directory. Run without --yes to create one interactively.',\n );\n }\n const slug = cfg?.project_slug ?? defaultSlug(ctx.projectName);\n const runtimeKey = detected.stack === 'node' ? cfg?.node_version : cfg?.python_version;\n const cfgRaw = cfg as Record<string, unknown> | null;\n const existingProdUrlSecret =\n typeof cfgRaw?.['production_url_secret'] === 'string'\n ? (cfgRaw['production_url_secret'] as string)\n : undefined;\n return {\n stack: detected.stack,\n host: 'railway',\n projectSlug: slug,\n runtimeVersion: String(runtimeKey ?? defaults.runtimeVersion),\n sourceDirs: cfg?.source_dirs ?? defaults.sourceDirs,\n workingDirectory: cfg?.working_directory ?? detected.workingDirectory,\n prodUrlSecretName: existingProdUrlSecret ?? prodUrlSecretDefault(slug),\n prodUrlValue: '',\n };\n}\n\nasync function planFromPrompts(\n ctx: InstallContext,\n detected: DetectedStack,\n defaults: { runtimeVersion: string; sourceDirs: string },\n): Promise<InstallPlan> {\n const slugDefault = defaultSlug(ctx.projectName);\n const wdInitialDefault = detected.workingDirectory;\n const answers = await clack.group(\n {\n projectSlug: () => clack.text({ message: 'Project slug', initialValue: slugDefault }),\n runtimeVersion: () =>\n clack.text({\n message: detected.stack === 'node' ? 'Node version' : 'Python version',\n initialValue: defaults.runtimeVersion,\n }),\n sourceDirs: () => clack.text({ message: 'Source dirs (space-sep)', initialValue: defaults.sourceDirs }),\n workingDirectory: () =>\n clack.text({\n message: wdInitialDefault === '.' ? 'Working directory (blank = root)' : 'Working directory',\n initialValue: wdInitialDefault,\n }),\n prodUrlSecretName: ({ results }) =>\n clack.text({\n message: 'Production URL secret name',\n initialValue: prodUrlSecretDefault(String(results.projectSlug ?? slugDefault)),\n }),\n prodUrlValue: () =>\n clack.text({ message: 'Production URL (https://...) — blank to set later', initialValue: '' }),\n },\n {\n onCancel: () => {\n process.stderr.write('Cancelled.\\n');\n process.exit(0);\n },\n },\n );\n const projectSlug = String(answers.projectSlug);\n const workingDirectory = String(answers.workingDirectory) || '.';\n return {\n stack: detected.stack,\n host: 'railway',\n projectSlug,\n runtimeVersion: String(answers.runtimeVersion),\n sourceDirs: String(answers.sourceDirs),\n workingDirectory,\n prodUrlSecretName: String(answers.prodUrlSecretName),\n prodUrlValue: String(answers.prodUrlValue ?? ''),\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { readSdlcConfig } from '../lib/sdlc-config.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nconst NODE_PATHS_IGNORE: readonly string[] = [\n 'SDLC/**',\n 'compliance/**',\n '*.md',\n '.cursorrules',\n '.windsurfrules',\n 'sdlc-config.json',\n 'scripts/upload-evidence.sh',\n 'scripts/validate-compliance-artifacts.sh',\n 'scripts/validate-commits.sh',\n 'scripts/check-requirement-jsdoc.sh',\n];\n\nconst PYTHON_PATHS_IGNORE: readonly string[] = [\n 'SDLC/**',\n 'compliance/**',\n '*.md',\n '.cursorrules',\n '.windsurfrules',\n 'sdlc-config.json',\n];\n\nexport async function writeSdlcConfig(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '4/11 Write sdlc-config.json',\n status: 'skipped',\n message:\n 'developer mode — leaving sdlc-config.json untouched (the team config is already on disk from the project operator). Use --force-team-config if you need to refresh wizard-owned fields.',\n };\n }\n const runtimeKey = plan.stack === 'node' ? 'node_version' : 'python_version';\n const pathsIgnore = plan.stack === 'node' ? NODE_PATHS_IGNORE : PYTHON_PATHS_IGNORE;\n const existing = ((await readSdlcConfig(ctx.projectPath)) as Record<string, unknown> | null) ?? null;\n const defaultedIfNew: Record<string, unknown> = {\n runner: 'ubuntu-latest',\n integration_branch: 'develop',\n release_branch: 'main',\n sast_baseline: 0,\n accepted_dep_risks: '',\n database_service: '',\n database_image: '',\n database_port: '',\n database_env: {},\n app_env: {},\n build_env: {},\n e2e_project: '',\n e2e_start_command: '',\n e2e_setup_command: '',\n e2e_seed_command: '',\n e2e_projects: [],\n e2e_env: {},\n paths_ignore: pathsIgnore,\n uat: { enabled: false, url: '', required_risk_classes: ['payment', 'destructive_migration', 'realtime'] },\n approval: { mode: 'dual_actor', auto_low_risk_threshold: 'LOW' },\n production_review: { enabled: true, terminal_status: 'prod_review' },\n };\n const wizardOwned: Record<string, unknown> = {\n stack: plan.stack,\n host: plan.host,\n project_slug: plan.projectSlug,\n production_url_secret: plan.prodUrlSecretName,\n [runtimeKey]: plan.runtimeVersion,\n working_directory: plan.workingDirectory,\n source_dirs: plan.sourceDirs,\n devaudit: {\n base_url: ctx.baseUrl,\n project_slug: plan.projectSlug,\n api_key_secret: 'DEVAUDIT_API_KEY',\n },\n };\n // Existing values override the \"defaultedIfNew\" defaults (preserves customizations\n // like sast_baseline, accepted_dep_risks, database_*, app_env, build_env, etc.);\n // wizardOwned always wins (stack/host/slug/runtime/source_dirs/working_directory/\n // production_url_secret/devaudit block come from the current install plan).\n const config: Record<string, unknown> = {\n ...defaultedIfNew,\n ...(existing ?? {}),\n ...wizardOwned,\n };\n const outPath = join(ctx.projectPath, 'sdlc-config.json');\n if (ctx.dryRun) {\n const preserved = existing\n ? `preserves existing customizations (${Object.keys(existing).filter((k) => !(k in wizardOwned)).length} non-wizard fields)`\n : 'fresh config';\n return {\n step: '4/11 Write sdlc-config.json',\n status: 'planned',\n message: `would write ${outPath} (stack=${plan.stack}, slug=${plan.projectSlug}) — ${preserved}`,\n };\n }\n await fs.writeFile(outPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n return { step: '4/11 Write sdlc-config.json', status: 'ok', message: `wrote ${outPath}` };\n}\n","import { DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nexport async function findOrCreateProject(\n ctx: InstallContext,\n plan: InstallPlan,\n): Promise<StepResult> {\n if (ctx.dryRun) {\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'planned',\n message: `would create or find project slug='${plan.projectSlug}' on ${ctx.baseUrl}`,\n };\n }\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.getProjectBySlug(plan.projectSlug);\n if (existing) {\n plan.projectId = existing.id;\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'ok',\n message: `project '${plan.projectSlug}' already exists (id ${existing.id.slice(0, 8)}…) — skipping creation`,\n data: { projectId: existing.id, created: false },\n };\n }\n const created = await client.createProject(plan.projectSlug, plan.projectSlug);\n plan.projectId = created.id;\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'ok',\n message: `project '${plan.projectSlug}' created (id ${created.id.slice(0, 8)}…)`,\n data: { projectId: created.id, created: true },\n };\n}\n","import { DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nconst KEY_NAME = 'Onboarding-issued';\n\nexport async function issueApiKey(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '6/11 Issue project API key',\n status: 'skipped',\n message:\n \"developer mode — leaving the project's 'Onboarding-issued' API key untouched (the team key is already configured by the project operator).\",\n };\n }\n if (ctx.dryRun) {\n return {\n step: '6/11 Issue project API key',\n status: 'planned',\n message: `would issue API key named '${KEY_NAME}' on project '${plan.projectSlug}' (if not already present)`,\n };\n }\n if (!plan.projectId) {\n throw new Error('projectId missing from plan — step 5 must run before step 6.');\n }\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.listApiKeys(plan.projectId);\n const live = existing.find((k) => k.name === KEY_NAME && k.revoked_at === null);\n if (live) {\n return {\n step: '6/11 Issue project API key',\n status: 'warn',\n message: `'${KEY_NAME}' API key already exists — revoke it in the portal and re-run, or set DEVAUDIT_API_KEY manually`,\n };\n }\n const issued = await client.issueApiKey(plan.projectId, KEY_NAME);\n plan.apiKey = issued.plainTextKey;\n return {\n step: '6/11 Issue project API key',\n status: 'ok',\n message: `issued (will be stored as repo secret DEVAUDIT_API_KEY)`,\n };\n}\n","import type { GitProvider } from '../lib/git-provider/index.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\ninterface SecretOperation {\n readonly kind: 'secret' | 'variable';\n readonly name: string;\n readonly value: string;\n}\n\nfunction buildOperations(ctx: InstallContext, plan: InstallPlan): SecretOperation[] {\n const operations: SecretOperation[] = [];\n if (plan.apiKey) operations.push({ kind: 'secret', name: 'DEVAUDIT_API_KEY', value: plan.apiKey });\n operations.push({ kind: 'secret', name: 'DEVAUDIT_USER_TOKEN', value: ctx.token });\n if (plan.prodUrlValue) {\n operations.push({ kind: 'secret', name: plan.prodUrlSecretName, value: plan.prodUrlValue });\n }\n operations.push({ kind: 'variable', name: 'DEVAUDIT_BASE_URL', value: ctx.baseUrl });\n return operations;\n}\n\nfunction buildSkipped(plan: InstallPlan): string[] {\n const skipped: string[] = [];\n if (!plan.apiKey) skipped.push('DEVAUDIT_API_KEY (no new key issued)');\n if (!plan.prodUrlValue) skipped.push(`${plan.prodUrlSecretName} (no value provided)`);\n return skipped;\n}\n\nexport async function setGithubSecrets(\n ctx: InstallContext,\n plan: InstallPlan,\n provider: GitProvider,\n): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '7/11 Set GitHub secrets and variables',\n status: 'skipped',\n message:\n 'developer mode — leaving DEVAUDIT_USER_TOKEN, DEVAUDIT_API_KEY, DEVAUDIT_BASE_URL, and the production-URL secret unchanged. Use --force-team-config to rotate them as the project operator.',\n };\n }\n const operations = buildOperations(ctx, plan);\n if (ctx.dryRun) {\n const summary = operations.map((op) => `${op.kind}:${op.name}`).join(', ');\n return {\n step: '7/11 Set GitHub secrets and variables',\n status: 'planned',\n message: `would set ${summary} via ${provider.name} provider`,\n };\n }\n for (const op of operations) {\n if (op.kind === 'secret') {\n // eslint-disable-next-line no-await-in-loop\n await provider.setSecret(ctx.projectPath, op.name, op.value);\n } else {\n // eslint-disable-next-line no-await-in-loop\n await provider.setVariable(ctx.projectPath, op.name, op.value);\n }\n }\n const skipped = buildSkipped(plan);\n const detail = `${operations.length} item(s) set${skipped.length > 0 ? ` (skipped: ${skipped.join('; ')})` : ''}`;\n return { step: '7/11 Set GitHub secrets and variables', status: 'ok', message: detail };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nasync function commandExists(cmd: string): Promise<boolean> {\n try {\n await execa(process.platform === 'win32' ? 'where' : 'which', [cmd]);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const s = await fs.stat(path);\n return s.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function bootstrapHooks(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.dryRun) {\n const action = plan.stack === 'python' ? 'pre-commit install' : 'npx husky init';\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'planned',\n message: `would run \\`${action}\\` in ${ctx.projectPath}`,\n };\n }\n if (plan.stack === 'python') return bootstrapPython(ctx);\n return bootstrapNode(ctx);\n}\n\nasync function bootstrapPython(ctx: InstallContext): Promise<StepResult> {\n if (!(await commandExists('pre-commit'))) {\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'warn',\n message: 'pre-commit not on PATH — run `pip install pre-commit && pre-commit install` manually',\n };\n }\n await execa('pre-commit', ['install'], { cwd: ctx.projectPath, stdio: 'inherit' });\n await execa('pre-commit', ['install', '--hook-type', 'commit-msg'], { cwd: ctx.projectPath, stdio: 'inherit' });\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: 'pre-commit hooks installed' };\n}\n\nasync function bootstrapNode(ctx: InstallContext): Promise<StepResult> {\n const huskyDir = join(ctx.projectPath, '.husky');\n if (await dirExists(huskyDir)) {\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: '.husky/ already exists' };\n }\n if (!(await commandExists('npx'))) {\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'warn',\n message: 'npx not on PATH — run `npx husky init` manually',\n };\n }\n await execa('npx', ['husky', 'init'], { cwd: ctx.projectPath, stdio: 'inherit' });\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: '.husky/ bootstrapped' };\n}\n","import type { GitProvider } from '../lib/git-provider/index.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nconst REQUIRED_CHECKS: readonly string[] = [\n 'Compliance Validation',\n 'DevAudit Release Approval',\n 'Quality Gates',\n];\n\nexport async function configureBranchProtection(\n ctx: InstallContext,\n provider: GitProvider,\n): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '9/11 Configure branch protection',\n status: 'skipped',\n message:\n 'developer mode — leaving branch protection unchanged. Use --force-team-config to re-apply as the project operator.',\n };\n }\n let meta;\n try {\n meta = await provider.getRepoMeta(ctx.projectPath);\n } catch (err) {\n return {\n step: '9/11 Configure branch protection',\n status: 'warn',\n message: `could not resolve git repo (${(err as Error).message}) — configure manually`,\n };\n }\n const repo = `${meta.owner}/${meta.name}`;\n if (ctx.dryRun) {\n return {\n step: '9/11 Configure branch protection',\n status: 'planned',\n message: `would apply branch protection on ${repo}:${meta.defaultBranch} with checks=${JSON.stringify(REQUIRED_CHECKS)}`,\n };\n }\n const result = await provider.applyBranchProtection(ctx.projectPath, meta.defaultBranch, REQUIRED_CHECKS);\n if (result.applied) {\n return {\n step: '9/11 Configure branch protection',\n status: 'ok',\n message: `required checks on ${meta.defaultBranch}: ${REQUIRED_CHECKS.join(', ')}`,\n };\n }\n return {\n step: '9/11 Configure branch protection',\n status: 'warn',\n message: `${result.message ?? 'branch-protection apply failed'} — configure manually`,\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\n\nexport interface StackAdapter {\n readonly name: string;\n readonly hook_install_dir?: string;\n readonly hooks?: readonly string[];\n readonly hook_config_files?: readonly string[];\n readonly stack_scripts?: readonly string[];\n readonly required_dev_dependencies?: readonly string[];\n readonly manifest_file?: string;\n}\n\nexport interface HostAdapter {\n readonly name: string;\n}\n\nexport async function loadStackAdapter(installerRoot: string, stack: string): Promise<StackAdapter> {\n const path = join(installerRoot, 'sdlc', 'files', 'stacks', stack, 'adapter.json');\n const raw = await fs.readFile(path, 'utf-8');\n return JSON.parse(raw) as StackAdapter;\n}\n\nexport async function loadHostAdapter(installerRoot: string, host: string): Promise<HostAdapter> {\n const path = join(installerRoot, 'sdlc', 'files', 'hosts', host, 'adapter.json');\n const raw = await fs.readFile(path, 'utf-8');\n return JSON.parse(raw) as HostAdapter;\n}\n\nexport async function listStacks(installerRoot: string): Promise<readonly string[]> {\n const dir = join(installerRoot, 'sdlc', 'files', 'stacks');\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('_')).map((e) => e.name);\n}\n\nexport async function listHosts(installerRoot: string): Promise<readonly string[]> {\n const dir = join(installerRoot, 'sdlc', 'files', 'hosts');\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('_')).map((e) => e.name);\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists } from '../lib/fs-utils.js';\nimport { listStacks, listHosts } from '../lib/adapter.js';\n\nexport interface AdapterResolution {\n readonly stack: string;\n readonly host: string;\n readonly deprecatedDefaults: boolean;\n}\n\ninterface PartialConfig {\n readonly stack?: string;\n readonly host?: string;\n}\n\nexport async function resolveAdapters(projectPath: string, installerRoot: string): Promise<AdapterResolution> {\n const configPath = join(projectPath, 'sdlc-config.json');\n let stack = 'node';\n let host = 'railway';\n let deprecatedDefaults = false;\n if (await exists(configPath)) {\n const raw = await fs.readFile(configPath, 'utf-8');\n const cfg = JSON.parse(raw) as PartialConfig;\n if (cfg.stack) {\n stack = cfg.stack;\n } else {\n deprecatedDefaults = true;\n }\n if (cfg.host) {\n host = cfg.host;\n } else {\n deprecatedDefaults = true;\n }\n } else {\n deprecatedDefaults = true;\n }\n const stackPath = join(installerRoot, 'sdlc', 'files', 'stacks', stack, 'adapter.json');\n if (!(await exists(stackPath))) {\n const available = await listStacks(installerRoot);\n throw new Error(`stack adapter not found: stacks/${stack}/adapter.json. Available: ${available.join(', ')}`);\n }\n const hostPath = join(installerRoot, 'sdlc', 'files', 'hosts', host, 'adapter.json');\n if (!(await exists(hostPath))) {\n const available = await listHosts(installerRoot);\n throw new Error(`host adapter not found: hosts/${host}/adapter.json. Available: ${available.join(', ')}`);\n }\n return { stack, host, deprecatedDefaults };\n}\n","import { join } from 'node:path';\nimport { copyFile, ensureDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2a: Sync _common/*.md stage docs into the consumer's SDLC/.\n */\nexport async function syncStageDocs(ctx: SyncContext): Promise<SectionResult> {\n const sdlcTarget = join(ctx.projectPath, 'SDLC');\n await ensureDir(sdlcTarget);\n const commonDir = join(ctx.installerRoot, 'sdlc', 'files', '_common');\n const mdFiles = await listFiles(commonDir, (n) => n.endsWith('.md'));\n for (const src of mdFiles) {\n await copyFile(src, join(sdlcTarget, fileBasename(src)));\n }\n return {\n name: '_common docs',\n filesSynced: mdFiles.length,\n message: 'synced to SDLC/',\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nconst CURSOR_POINTER = `# Cursor Rules\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for all development standards in this repository.\n`;\n\nconst WINDSURF_POINTER = `# Windsurf Rules\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for all development standards in this repository.\n`;\n\nconst GEMINI_POINTER = `# GEMINI.md\n\nThis file provides guidance to Gemini CLI when working in this repository.\n\n## Context\n\n**Project Standards:** See **[./INSTRUCTIONS.md](./INSTRUCTIONS.md)** for project rules, architecture, and development standards.\n\nPlease adhere to the instructions in \\`INSTRUCTIONS.md\\` as the **Single Source of Truth**.\n`;\n\nconst CLAUDE_POINTER_TAIL = `\n## Project Standards\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for:\n- Tech Stack & Architecture\n- Code Style & Formatting\n- Security & Compliance\n- SDLC Development Process & Quality Gates\n`;\n\nconst CLAUDE_NEW = `# CLAUDE.md\n\nThis file provides guidance to Claude Code when working in this repository.\n${CLAUDE_POINTER_TAIL}`;\n\nconst SDLC_HEADER = '## SDLC Compliance Process (MANDATORY)';\n\nasync function writePointerFile(path: string, content: string): Promise<void> {\n await fs.writeFile(path, content);\n}\n\nasync function updateClaudeFile(target: string): Promise<void> {\n if (!(await exists(target))) {\n await fs.writeFile(target, CLAUDE_NEW);\n return;\n }\n let body = await fs.readFile(target, 'utf-8');\n const sdlcIdx = body.indexOf(SDLC_HEADER);\n if (sdlcIdx >= 0) {\n body = body.slice(0, sdlcIdx).trimEnd() + '\\n';\n }\n if (!body.includes('INSTRUCTIONS.md')) {\n body = body.trimEnd() + '\\n' + CLAUDE_POINTER_TAIL;\n }\n await fs.writeFile(target, body);\n}\n\nasync function updateInstructionsFile(target: string, sdlcContent: string): Promise<void> {\n if (!(await exists(target))) {\n const body =\n '# Project Instructions & Standards (Single Source of Truth)\\n' +\n '\\n' +\n 'This document serves as the primary reference for all development in this repository.\\n' +\n '\\n' +\n sdlcContent;\n await fs.writeFile(target, body);\n return;\n }\n let existing = await fs.readFile(target, 'utf-8');\n const sdlcIdx = existing.indexOf(SDLC_HEADER);\n if (sdlcIdx >= 0) {\n existing = existing.slice(0, sdlcIdx).replace(/\\n*$/u, '\\n');\n } else {\n existing = existing.replace(/\\n*$/u, '\\n');\n }\n const next = existing + '\\n' + sdlcContent;\n await fs.writeFile(target, next);\n}\n\n/**\n * Section 2b: AI rule files (single source of truth pattern).\n * - .cursorrules / .windsurfrules / GEMINI.md → pointer files (overwritten)\n * - CLAUDE.md → preserve project header, append pointer if missing,\n * strip any prior SDLC section\n * - INSTRUCTIONS.md → preserve project section, append/replace SDLC section\n * from sdlc/ai-rules/INSTRUCTIONS-SDLC.md\n */\nexport async function syncAiRules(ctx: SyncContext): Promise<SectionResult> {\n const sdlcSource = join(ctx.installerRoot, 'sdlc', 'ai-rules', 'INSTRUCTIONS-SDLC.md');\n if (!(await exists(sdlcSource))) {\n return { name: 'AI rule pointers + INSTRUCTIONS.md', filesSynced: 0, skipped: true, message: 'INSTRUCTIONS-SDLC.md not found' };\n }\n const sdlcContent = await fs.readFile(sdlcSource, 'utf-8');\n await writePointerFile(join(ctx.projectPath, '.cursorrules'), CURSOR_POINTER);\n await writePointerFile(join(ctx.projectPath, '.windsurfrules'), WINDSURF_POINTER);\n await writePointerFile(join(ctx.projectPath, 'GEMINI.md'), GEMINI_POINTER);\n await updateClaudeFile(join(ctx.projectPath, 'CLAUDE.md'));\n await updateInstructionsFile(join(ctx.projectPath, 'INSTRUCTIONS.md'), sdlcContent);\n return { name: 'AI rule pointers + INSTRUCTIONS.md', filesSynced: 5, message: 'synced' };\n}\n","import { join } from 'node:path';\nimport { copyFile, exists, isDir } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2c: Stack hooks (e.g. husky for node).\n *\n * Copies hooks listed in the adapter's `hooks` array into the consumer's\n * `<hook_install_dir>/` (e.g. .husky/). Also copies `hook_config_files`\n * (e.g. commitlint.config.mjs, lint-staged.config.mjs, .prettierrc.json)\n * to the consumer's repo root.\n *\n * Skipped if the consumer hasn't bootstrapped the hook framework yet\n * (the install dir doesn't exist).\n */\nexport async function syncStackHooks(ctx: SyncContext): Promise<SectionResult> {\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const hookInstallDir = adapter.hook_install_dir ?? '';\n if (!hookInstallDir) {\n return { name: `${ctx.stack} hooks`, filesSynced: 0, skipped: true, message: 'no hook_install_dir declared' };\n }\n const targetDir = join(ctx.projectPath, hookInstallDir);\n if (!(await isDir(targetDir))) {\n return {\n name: `${ctx.stack} hooks`,\n filesSynced: 0,\n skipped: true,\n message: `${hookInstallDir}/ not found — bootstrap hook framework first`,\n };\n }\n const stackHooksDir = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'hooks');\n if (!(await isDir(stackHooksDir))) {\n return { name: `${ctx.stack} hooks`, filesSynced: 0, skipped: true, message: 'stack has no hooks/' };\n }\n let count = 0;\n for (const hook of adapter.hooks ?? []) {\n const src = join(stackHooksDir, hook);\n if (await exists(src)) {\n const dst = join(targetDir, hook);\n await copyFile(src, dst, 0o755);\n count += 1;\n }\n }\n for (const cfg of adapter.hook_config_files ?? []) {\n const src = join(stackHooksDir, cfg);\n if (await exists(src)) {\n const dst = join(ctx.projectPath, cfg);\n await copyFile(src, dst);\n count += 1;\n }\n }\n return { name: `${ctx.stack} hooks`, filesSynced: count, message: `synced to ${hookInstallDir}/` };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { exists } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\ninterface PartialPackageJson {\n readonly devDependencies?: Readonly<Record<string, string>>;\n}\n\n/**\n * Section 2c-ii: Install missing stack devDependencies (node only for now).\n *\n * Preserves the fix from META-COMPLY #313 / #314: surface npm install\n * failures (no `2>/dev/null`) and retry with `--legacy-peer-deps` if the\n * first attempt fails. Abort the sync if both attempts fail.\n */\nexport async function syncStackDeps(ctx: SyncContext): Promise<SectionResult> {\n if (ctx.stack !== 'node') {\n return { name: `${ctx.stack} deps`, filesSynced: 0, skipped: true };\n }\n const pkgPath = join(ctx.projectPath, 'package.json');\n if (!(await exists(pkgPath))) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, skipped: true, message: 'no package.json' };\n }\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const required = adapter.required_dev_dependencies ?? [];\n if (required.length === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, message: 'no required_dev_dependencies declared' };\n }\n const raw = await fs.readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as PartialPackageJson;\n const installed = new Set(Object.keys(pkg.devDependencies ?? {}));\n const missing = required.filter((dep) => !installed.has(dep));\n if (missing.length === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, message: 'all present' };\n }\n const args = ['install', '--save-dev', ...missing];\n const first = await execa('npm', args, { cwd: ctx.projectPath, reject: false, stdio: 'inherit' });\n if (first.exitCode === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: missing.length, message: `installed ${missing.join(' ')}` };\n }\n const legacyArgs = ['install', '--save-dev', '--legacy-peer-deps', ...missing];\n const second = await execa('npm', legacyArgs, { cwd: ctx.projectPath, reject: false, stdio: 'inherit' });\n if (second.exitCode === 0) {\n return {\n name: `${ctx.stack} deps`,\n filesSynced: missing.length,\n message: `installed ${missing.join(' ')} (with --legacy-peer-deps)`,\n };\n }\n throw new Error(\n `Failed to install ${ctx.stack} deps. Fix manually: cd ${ctx.projectPath} && npm install --save-dev ${missing.join(' ')}`,\n );\n}\n","import { join } from 'node:path';\nimport { copyFile, exists, isDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nfunction isTestScript(name: string): boolean {\n return name.endsWith('.test.sh');\n}\n\n/**\n * Section 2d: Scripts. Three sources merged into the consumer's scripts/:\n * - _common/scripts/*.sh (excluding *.test.sh)\n * - stacks/<stack>/scripts/* (per adapter's stack_scripts list)\n * - the top-level scripts/upload-evidence.sh from this repo\n *\n * Skipped if the consumer has no scripts/ directory.\n */\nexport async function syncScripts(ctx: SyncContext): Promise<SectionResult> {\n const scriptsDst = join(ctx.projectPath, 'scripts');\n if (!(await isDir(scriptsDst))) {\n return { name: 'scripts', filesSynced: 0, skipped: true, message: 'scripts/ not found' };\n }\n let count = 0;\n const commonScriptsSrc = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'scripts');\n if (await isDir(commonScriptsSrc)) {\n const candidates = await listFiles(commonScriptsSrc, (n) => n.endsWith('.sh') && !isTestScript(n));\n for (const src of candidates) {\n await copyFile(src, join(scriptsDst, fileBasename(src)), 0o755);\n count += 1;\n }\n }\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const stackScriptsSrc = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'scripts');\n if ((await isDir(stackScriptsSrc)) && adapter.stack_scripts) {\n for (const scriptName of adapter.stack_scripts) {\n const src = join(stackScriptsSrc, scriptName);\n if (await exists(src)) {\n await copyFile(src, join(scriptsDst, scriptName), 0o755);\n count += 1;\n }\n }\n }\n const uploadEvidence = join(ctx.installerRoot, 'scripts', 'upload-evidence.sh');\n if (await exists(uploadEvidence)) {\n await copyFile(uploadEvidence, join(scriptsDst, 'upload-evidence.sh'), 0o755);\n count += 1;\n }\n return { name: 'scripts', filesSynced: count, message: 'synced to scripts/' };\n}\n","import { join } from 'node:path';\nimport { copyFile, ensureDir, isDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e (issue templates subset): GitHub issue templates.\n */\nexport async function syncIssueTemplates(ctx: SyncContext): Promise<SectionResult> {\n const src = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'github', 'ISSUE_TEMPLATE');\n if (!(await isDir(src))) {\n return { name: 'Issue templates', filesSynced: 0, skipped: true };\n }\n const dst = join(ctx.projectPath, '.github', 'ISSUE_TEMPLATE');\n await ensureDir(dst);\n const files = await listFiles(src, (n) => n.endsWith('.yml'));\n for (const file of files) {\n await copyFile(file, join(dst, fileBasename(file)));\n }\n return { name: 'Issue templates', filesSynced: files.length, message: 'synced to .github/ISSUE_TEMPLATE/' };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { copyDir, isDir, ensureDir } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e-ii: Claude Code skills.\n *\n * Skills live under sdlc/files/_common/skills/<name>/ (universal) and\n * sdlc/files/stacks/<stack>/skills/<name>/ (stack-specific). Each is a\n * directory with SKILL.md + optional references/ assets/ scripts/.\n * They sync to the consumer's .claude/skills/<name>/.\n *\n * Behaviour: replace each skill destination dir wholesale (matches bash\n * rsync --delete) so stale skill artifacts don't accumulate.\n */\nexport async function syncSkills(ctx: SyncContext): Promise<SectionResult> {\n const skillDst = join(ctx.projectPath, '.claude', 'skills');\n const commonSkills = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'skills');\n const stackSkills = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'skills');\n await ensureDir(skillDst);\n let count = 0;\n for (const src of [commonSkills, stackSkills]) {\n if (!(await isDir(src))) continue;\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name.startsWith('_')) continue;\n const skillSrc = join(src, entry.name);\n const skillDstDir = join(skillDst, entry.name);\n await copyDir(skillSrc, skillDstDir, true);\n count += 1;\n }\n }\n if (count === 0) {\n return { name: 'Claude Code skills', filesSynced: 0, skipped: true };\n }\n return { name: 'Claude Code skills', filesSynced: count, message: `${count} synced to .claude/skills/` };\n}\n","import { join } from 'node:path';\nimport { copyFile, exists } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e-iii: E2E evidence helper (node stack only).\n *\n * The e2e-test-engineer skill prescribes an evidenceShot() helper for\n * per-AC screenshot evidence. Emit the canonical helper from the skill's\n * references/ into the consumer's e2e/helpers/ so tests can import it\n * as `./helpers/evidence`. Python-stack projects don't use Playwright.\n *\n * v0.1.35: also syncs `evidence-shot-core.ts` — the helper imports the\n * pure validation + filename composition + origin auto-detect from\n * that sibling file. Pre-0.1.35 sync omitted it and broke tsc on the\n * consumer side.\n */\nconst HELPER_FILES = ['evidence.ts', 'evidence-shot-core.ts'] as const;\n\nexport async function syncEvidenceHelper(ctx: SyncContext): Promise<SectionResult> {\n if (ctx.stack !== 'node') {\n return { name: 'E2E evidence helper', filesSynced: 0, skipped: true };\n }\n const srcDir = join(\n ctx.installerRoot,\n 'sdlc',\n 'files',\n '_common',\n 'skills',\n 'e2e-test-engineer',\n 'references',\n );\n let copied = 0;\n const missing: string[] = [];\n for (const fname of HELPER_FILES) {\n const src = join(srcDir, fname);\n if (!(await exists(src))) {\n missing.push(fname);\n continue;\n }\n const dst = join(ctx.projectPath, 'e2e', 'helpers', fname);\n await copyFile(src, dst);\n copied += 1;\n }\n if (copied === 0) {\n return { name: 'E2E evidence helper', filesSynced: 0, skipped: true, message: 'no sources found' };\n }\n const message =\n missing.length > 0\n ? `synced ${copied} to e2e/helpers/ (missing: ${missing.join(', ')})`\n : `synced to e2e/helpers/ (${HELPER_FILES.join(' + ')})`;\n return { name: 'E2E evidence helper', filesSynced: copied, message };\n}\n","/**\n * Token substitution for CI workflow templates. The bash version uses sed for\n * scalar tokens and awk for block tokens (multi-line replacements). We do both\n * with plain string operations.\n */\n\nexport type TokenMap = Readonly<Record<string, string>>;\n\n/**\n * Replace `{{TOKEN}}` occurrences with `tokens[TOKEN]`. Performs simple text\n * replacement (not regex), so tokens with reserved regex characters are safe.\n */\nexport function substituteTokens(content: string, tokens: TokenMap): string {\n let out = content;\n for (const [key, value] of Object.entries(tokens)) {\n const needle = `{{${key}}}`;\n out = out.split(needle).join(value);\n }\n return out;\n}\n\n/**\n * Replace lines that contain `{{TOKEN}}` with the given block (multi-line).\n * Matches the bash `replace_block` awk helper: a line containing the token\n * is replaced wholesale with the block content (the original line is dropped).\n *\n * When the replacement is the empty string, the line is dropped entirely\n * rather than leaving a blank line. Otherwise an empty `{{DATABASE_ENV}}`\n * substitution leaves a stray newline inside `env:` blocks that YAML\n * parsers reject (prettier flagged this on WGB v0.1.34 update).\n */\nexport function substituteBlocks(content: string, blocks: TokenMap): string {\n if (Object.keys(blocks).length === 0) return content;\n const out: string[] = [];\n for (const line of content.split('\\n')) {\n let matched = false;\n for (const [key, replacement] of Object.entries(blocks)) {\n const needle = `{{${key}}}`;\n if (line.includes(needle)) {\n matched = true;\n if (replacement.length > 0) out.push(replacement);\n // empty replacement → drop the line entirely\n break;\n }\n }\n if (!matched) out.push(line);\n }\n return out.join('\\n');\n}\n\n/**\n * Strip the `services:` block from a workflow file. Used when the consumer\n * project has no database service configured — the template ships with a\n * `services:` block that would otherwise reference an empty service name.\n *\n * Matches bash: `sed -i '/^ services:/,/^$/d' \"$OUTPUT_PATH\"`.\n */\nexport function stripServicesBlock(content: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let inServices = false;\n for (const line of lines) {\n if (!inServices && /^ {4}services:\\s*$/.test(line)) {\n inServices = true;\n continue;\n }\n if (inServices) {\n if (line.trim() === '') {\n inServices = false;\n continue;\n }\n continue;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists, isDir, ensureDir } from '../lib/fs-utils.js';\nimport { substituteTokens, substituteBlocks, stripServicesBlock } from '../lib/templates.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nconst CI_TEMPLATES = [\n 'ci.yml.template',\n 'ci-status-fallback.yml.template',\n 'compliance-validation.yml.template',\n 'check-release-approval.yml.template',\n 'post-deploy-prod.yml.template',\n 'compliance-evidence.yml.template',\n 'close-out-release.yml.template',\n // DevAudit-Installer#98 WS3: quarterly cron → auto-PR with the\n // periodic-review.md regenerated from local stats.\n 'periodic-review.yml.template',\n // DevAudit-Installer#98 WS4: fires on `label:incident` issue close →\n // auto-PR with the issue exported to compliance/governance/.\n 'incident-export.yml.template',\n];\n\nconst OLD_WORKFLOWS_TO_REMOVE = ['test-on-pr.yml', 'check-uat-approval.yml'];\n\ninterface SdlcConfig {\n readonly project_slug: string;\n readonly production_url_secret: string;\n readonly node_version?: string | number;\n readonly python_version?: string | number;\n readonly working_directory?: string;\n readonly runner: string;\n readonly source_dirs: string;\n readonly sast_baseline: number | string;\n readonly accepted_dep_risks: string;\n readonly database_service: string;\n readonly database_image: string;\n readonly database_port: string;\n readonly database_env?: Readonly<Record<string, string>>;\n readonly app_env?: Readonly<Record<string, string>>;\n readonly build_env?: Readonly<Record<string, string>>;\n readonly e2e_project: string;\n readonly e2e_start_command: string;\n // Optional pre-E2E setup command (foreground, blocking) run before the dev\n // server starts — e.g. `supabase start` + load schema + seed for a disposable\n // local database. Multi-line allowed. Absent → no setup step rendered.\n readonly e2e_setup_command?: string;\n // Authenticated e2e (report-only). Optional; absent → no extra step rendered.\n readonly e2e_seed_command?: string;\n readonly e2e_projects?: readonly string[];\n // Env applied to the E2E setup step, the (blocking) dev-server step, and the\n // blocking + report-only E2E test steps. Use it to point E2E at a local stack\n // (e.g. E2E_LOCAL=1 + local Supabase coords + a dummy email key), overriding\n // the job-level remote secrets so tests never touch production.\n readonly e2e_env?: Readonly<Record<string, string>>;\n readonly paths_ignore?: readonly string[];\n}\n\nfunction indentEnvBlock(env: Record<string, string>, indent: number): string {\n const pad = ' '.repeat(indent);\n return Object.entries(env)\n .map(([k, v]) => `${pad}${k}: ${v}`)\n .join('\\n');\n}\n\n/**\n * Build the optional pre-E2E setup step (foreground, blocking) injected before\n * the dev server starts. Renders only when e2e_setup_command is set, so existing\n * projects regenerate an identical ci.yml. Carries e2e_env so the setup command\n * (e.g. `supabase start` + schema load + seed) sees the local-stack coords.\n * A multi-line command is emitted as a `run: |` block scalar.\n */\nfunction buildE2eSetupStep(cfg: SdlcConfig): string {\n const cmd = (cfg.e2e_setup_command ?? '').trim();\n if (!cmd) return '';\n const env = cfg.e2e_env ?? {};\n const lines = [' - name: E2E setup'];\n if (Object.keys(env).length > 0) lines.push(' env:', indentEnvBlock({ ...env }, 10));\n if (cmd.includes('\\n')) {\n lines.push(' run: |');\n for (const l of cmd.split('\\n')) lines.push(` ${l}`);\n } else {\n lines.push(` run: ${cmd}`);\n }\n lines.push('');\n return lines.join('\\n');\n}\n\n/**\n * Build the blocking \"Start dev server\" step. Rebuilt in code (rather than left\n * inline in the template) so e2e_env can be threaded onto the dev-server process\n * — overriding the job-level remote secrets so the server talks to the local\n * stack. With no e2e_env the output is identical to the previous inline step.\n */\nfunction buildE2eDevServerStep(cfg: SdlcConfig): string {\n const env = cfg.e2e_env ?? {};\n const lines = [' - name: Start dev server'];\n if (Object.keys(env).length > 0) lines.push(' env:', indentEnvBlock({ ...env }, 10));\n lines.push(` run: ${cfg.e2e_start_command} &`);\n return lines.join('\\n');\n}\n\n/**\n * Build the blocking \"E2E Tests\" step. Rebuilt in code so e2e_env can be threaded\n * onto the Playwright process (specs read it to reach the local stack directly).\n * With no e2e_env the output is identical to the previous inline step, comment\n * and all.\n */\nfunction buildE2eTestStep(cfg: SdlcConfig): string {\n const env = cfg.e2e_env ?? {};\n const lines = [\n ' - name: E2E Tests',\n ' env:',\n ' # PLAYWRIGHT_JSON_OUTPUT_NAME makes the json reporter write straight',\n ' # to the file. Capturing stdout (`> e2e-results.json`) instead mixed',\n ' # the html reporter\\'s \"To open report\" line in after the JSON blob',\n ' # and produced an unparseable file (DevAudit #48). html report still',\n ' # lands in playwright-report/.',\n ' PLAYWRIGHT_HTML_REPORTER_OPEN: never',\n ' PLAYWRIGHT_JSON_OUTPUT_NAME: e2e-results.json',\n ];\n if (Object.keys(env).length > 0) lines.push(indentEnvBlock({ ...env }, 10));\n lines.push(` run: npx playwright test --project=${cfg.e2e_project} --reporter=json,html`);\n return lines.join('\\n');\n}\n\n/**\n * Build the optional \"authenticated e2e\" steps injected after the blocking\n * smoke e2e gate. Report-only by design (continue-on-error): authenticated\n * flows (auth-setup + seeded fixtures) are flakier than smoke, so failures\n * surface as evidence without blocking the merge until proven stable. Renders\n * empty (no step) unless the consumer configures e2e_projects and/or\n * e2e_seed_command — so existing projects regenerate to an identical ci.yml.\n */\nfunction buildAuthenticatedE2eStep(cfg: SdlcConfig): string {\n const projects = cfg.e2e_projects ?? [];\n const seed = (cfg.e2e_seed_command ?? '').trim();\n if (projects.length === 0 && !seed) return '';\n const env = cfg.e2e_env ?? {};\n const envBlock = Object.keys(env).length > 0 ? indentEnvBlock({ ...env }, 10) : '';\n const lines: string[] = [];\n if (seed) {\n lines.push(\n '',\n ' - name: Seed E2E test data (report-only)',\n ' if: always()',\n ' continue-on-error: true',\n );\n if (envBlock) lines.push(' env:', envBlock);\n lines.push(` run: ${seed}`);\n }\n if (projects.length > 0) {\n const flags = projects.map((p) => `--project=${p}`).join(' ');\n lines.push(\n '',\n ' - name: Authenticated E2E (report-only)',\n ' if: always()',\n ' continue-on-error: true',\n ' env:',\n ' PLAYWRIGHT_HTML_REPORTER_OPEN: never',\n ' PLAYWRIGHT_JSON_OUTPUT_NAME: e2e-auth-results.json',\n );\n if (envBlock) lines.push(envBlock);\n lines.push(` run: npx playwright test ${flags} --reporter=json,html`);\n }\n return lines.join('\\n');\n}\n\nfunction buildDbUriStep(dbService: string, dbPort: string): string {\n if (dbService !== 'mongodb') return '';\n return [\n ' - name: Set database URI from dynamic port',\n ' run: |',\n ` DB_PORT=\"\\${{ job.services.${dbService}.ports['${dbPort}'] }}\"`,\n ' echo \"MONGODB_WAWAGARDENBAR_APP_URI=mongodb://localhost:${DB_PORT}\" >> \"$GITHUB_ENV\"',\n ' echo \"Database on port: ${DB_PORT}\"',\n ].join('\\n');\n}\n\n/**\n * Section 2f: Generate CI workflows from templates + sdlc-config.json.\n *\n * Skipped if the consumer has no sdlc-config.json or no .github/workflows/.\n */\nexport async function syncCiTemplates(ctx: SyncContext): Promise<SectionResult> {\n const configPath = join(ctx.projectPath, 'sdlc-config.json');\n const workflowsDir = join(ctx.projectPath, '.github', 'workflows');\n if (!(await exists(configPath))) {\n return { name: 'CI workflows', filesSynced: 0, skipped: true, message: 'no sdlc-config.json' };\n }\n if (!(await isDir(workflowsDir))) {\n return { name: 'CI workflows', filesSynced: 0, skipped: true, message: '.github/workflows/ not found' };\n }\n await ensureDir(workflowsDir);\n const cfg = JSON.parse(await fs.readFile(configPath, 'utf-8')) as SdlcConfig;\n for (const oldName of OLD_WORKFLOWS_TO_REMOVE) {\n const oldPath = join(workflowsDir, oldName);\n if (await exists(oldPath)) await fs.rm(oldPath);\n }\n const workingDirectory = cfg.working_directory && cfg.working_directory !== '.' ? cfg.working_directory : '';\n const workingDirPrefix = workingDirectory ? `${workingDirectory.replace(/\\/$/, '')}/` : '';\n const tokens: Record<string, string> = {\n PROJECT_SLUG: cfg.project_slug,\n PRODUCTION_URL_SECRET: cfg.production_url_secret,\n NODE_VERSION: String(cfg.node_version ?? ''),\n PYTHON_VERSION: String(cfg.python_version ?? ''),\n WORKING_DIRECTORY: workingDirectory || '.',\n WORKING_DIR_PREFIX: workingDirPrefix,\n RUNNER: cfg.runner,\n SOURCE_DIRS: cfg.source_dirs,\n SAST_BASELINE: String(cfg.sast_baseline),\n ACCEPTED_DEP_RISKS: cfg.accepted_dep_risks,\n DATABASE_SERVICE: cfg.database_service,\n DATABASE_IMAGE: cfg.database_image,\n DATABASE_PORT: cfg.database_port,\n E2E_PROJECT: cfg.e2e_project,\n E2E_START_COMMAND: cfg.e2e_start_command,\n };\n const pathsIgnoreBlock = (cfg.paths_ignore ?? []).map((p) => ` - '${p}'`).join('\\n');\n const blocks: Record<string, string> = {\n PATHS_IGNORE: pathsIgnoreBlock,\n DATABASE_ENV: cfg.database_env ? indentEnvBlock({ ...cfg.database_env }, 6) : '',\n APP_ENV: cfg.app_env ? indentEnvBlock({ ...cfg.app_env }, 6) : '',\n BUILD_ENV: cfg.build_env ? indentEnvBlock({ ...cfg.build_env }, 10) : '',\n DATABASE_URI_STEP: buildDbUriStep(cfg.database_service, cfg.database_port),\n E2E_SETUP_STEP: buildE2eSetupStep(cfg),\n E2E_DEV_SERVER_STEP: buildE2eDevServerStep(cfg),\n E2E_TEST_STEP: buildE2eTestStep(cfg),\n E2E_AUTHENTICATED_STEP: buildAuthenticatedE2eStep(cfg),\n };\n let count = 0;\n for (const tmpl of CI_TEMPLATES) {\n const stackTmpl = join(ctx.installerRoot, 'sdlc', 'files', 'ci', ctx.stack, tmpl);\n const defaultTmpl = join(ctx.installerRoot, 'sdlc', 'files', 'ci', tmpl);\n let tmplPath: string;\n if (await exists(stackTmpl)) {\n tmplPath = stackTmpl;\n } else if (await exists(defaultTmpl)) {\n tmplPath = defaultTmpl;\n } else {\n continue;\n }\n const outputName = tmpl.replace(/\\.template$/, '');\n const outputPath = join(workflowsDir, outputName);\n let content = await fs.readFile(tmplPath, 'utf-8');\n content = substituteTokens(content, tokens);\n content = substituteBlocks(content, blocks);\n if (!cfg.database_service) {\n content = stripServicesBlock(content);\n }\n await fs.writeFile(outputPath, content);\n count += 1;\n }\n return { name: 'CI workflows', filesSynced: count, message: `${count} generated` };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { isDir, listFiles, fileBasename, exists } from '../lib/fs-utils.js';\n\nconst TIER_1_DOCS = ['Test_Policy.md', 'Test_Strategy.md', 'Test_Architecture.md'];\n\n/**\n * Post-sync validation. Surfaces warnings that don't fail the sync but the\n * operator should see before committing.\n */\nexport async function runValidation(projectPath: string): Promise<readonly string[]> {\n const warnings: string[] = [];\n const workflowsDir = join(projectPath, '.github', 'workflows');\n if (await isDir(workflowsDir)) {\n const ymls = await listFiles(workflowsDir, (n) => n.endsWith('.yml'));\n for (const wf of ymls) {\n const content = await fs.readFile(wf, 'utf-8');\n const name = fileBasename(wf);\n if (content.includes('push:') && !content.includes('pull_request:')) {\n const dead = (content.match(/event_name.*pull_request/g) ?? []).length;\n if (dead > 0) {\n warnings.push(`${name} has ${dead} dead 'event_name == pull_request' condition(s) (push-only trigger)`);\n }\n }\n if (/require.*package\\.json.*version/i.test(content)) {\n warnings.push(`${name} uses package.json for version (should be date-based)`);\n }\n if (content.includes('raw.githubusercontent.com/metasession-dev/devaudit')) {\n warnings.push(`${name} downloads from DevAudit at runtime (should use local scripts)`);\n }\n }\n }\n const sdlcDir = join(projectPath, 'SDLC');\n if (await isDir(sdlcDir)) {\n for (const doc of TIER_1_DOCS) {\n if (!(await exists(join(sdlcDir, doc)))) {\n warnings.push(`Missing Tier 1 doc: SDLC/${doc}`);\n }\n }\n }\n return warnings;\n}\n","import { basename, resolve } from 'node:path';\nimport { isDir } from '../lib/fs-utils.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { resolveAdapters } from './resolve-adapters.js';\nimport { syncStageDocs } from './stage-docs.js';\nimport { syncAiRules } from './ai-rules.js';\nimport { syncStackHooks } from './stack-hooks.js';\nimport { syncStackDeps } from './stack-deps.js';\nimport { syncScripts } from './scripts.js';\nimport { syncIssueTemplates } from './issue-templates.js';\nimport { syncSkills } from './skills.js';\nimport { syncEvidenceHelper } from './evidence-helper.js';\nimport { syncCiTemplates } from './ci-templates.js';\nimport { runValidation } from './validation.js';\nimport { logger } from '../lib/logger.js';\nimport type { SyncContext, SectionResult, SyncReport } from './types.js';\n\nconst SECTION_RUNNERS: ReadonlyArray<{\n readonly key: string;\n readonly run: (ctx: SyncContext) => Promise<SectionResult>;\n}> = [\n { key: '2a', run: syncStageDocs },\n { key: '2b', run: syncAiRules },\n { key: '2c', run: syncStackHooks },\n { key: '2c-ii', run: syncStackDeps },\n { key: '2d', run: syncScripts },\n { key: '2e', run: syncIssueTemplates },\n { key: '2e-ii', run: syncSkills },\n { key: '2e-iii', run: syncEvidenceHelper },\n { key: '2f', run: syncCiTemplates },\n];\n\nexport async function syncProject(projectPath: string): Promise<SyncReport> {\n const absPath = resolve(projectPath);\n if (!(await isDir(absPath))) {\n throw new Error(`Project path not found: ${absPath}`);\n }\n const installerRoot = await resolveInstallerRoot();\n const log = logger();\n const projectName = basename(absPath);\n log.info(`--- Syncing to: ${projectName} (${absPath}) ---`);\n const { stack, host, deprecatedDefaults } = await resolveAdapters(absPath, installerRoot);\n log.info(` Stack: ${stack} | Host: ${host}`);\n if (deprecatedDefaults) {\n log.warn(` DEPRECATED: stack/host keys missing from sdlc-config.json — defaulted to ${stack}+${host}.`);\n }\n const ctx: SyncContext = { installerRoot, projectPath: absPath, projectName, stack, host };\n const sections: SectionResult[] = [];\n let total = 0;\n for (const { key, run } of SECTION_RUNNERS) {\n const result = await run(ctx);\n sections.push(result);\n total += result.filesSynced;\n if (result.skipped) {\n log.log(` [${key}] ${result.name}: SKIPPED${result.message ? ` (${result.message})` : ''}`);\n } else {\n log.log(` [${key}] ${result.name}: ${result.filesSynced} file(s)${result.message ? ` — ${result.message}` : ''}`);\n }\n }\n log.log('');\n log.info(` Total: ${total} files synced`);\n log.log('');\n log.log(' --- Validation ---');\n const warnings = await runValidation(absPath);\n if (warnings.length === 0) {\n log.success(' All validation checks passed');\n } else {\n for (const w of warnings) log.warn(` ${w}`);\n }\n log.log('');\n return { project: projectName, stack, host, sections, totalFilesSynced: total, warnings };\n}\n\nexport async function syncAll(projectPaths: readonly string[]): Promise<readonly SyncReport[]> {\n const reports: SyncReport[] = [];\n for (const p of projectPaths) {\n try {\n // eslint-disable-next-line no-await-in-loop\n reports.push(await syncProject(p));\n } catch (err) {\n const log = logger();\n log.error(`ERROR syncing ${p}: ${err instanceof Error ? err.message : String(err)}`);\n throw err;\n }\n }\n return reports;\n}\n","import { syncProject } from '../update/index.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nexport async function syncTemplates(ctx: InstallContext): Promise<StepResult> {\n if (ctx.dryRun) {\n return {\n step: '10/11 Sync SDLC templates',\n status: 'planned',\n message: `would run native syncProject() against ${ctx.projectPath}`,\n };\n }\n const report = await syncProject(ctx.projectPath);\n return {\n step: '10/11 Sync SDLC templates',\n status: 'ok',\n message: `synced ${report.totalFilesSynced} files across ${report.sections.length} sections`,\n data: { totalFilesSynced: report.totalFilesSynced },\n };\n}\n","import type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nexport function doneReport(ctx: InstallContext, plan: InstallPlan): StepResult {\n if (ctx.installMode === 'developer') {\n const lines = [\n '',\n ` ${ctx.projectName} — local developer setup complete.`,\n '',\n ' What ran:',\n ' - Templates re-synced from DevAudit-Installer (SDLC/, scripts/, .husky/, …).',\n ' - Git hooks bootstrapped.',\n '',\n ' What was deliberately skipped (developer mode):',\n ' - sdlc-config.json (team config — already on disk).',\n \" - 'Onboarding-issued' API key (team-owned by the project operator).\",\n ' - GitHub repo secrets (DEVAUDIT_USER_TOKEN, DEVAUDIT_API_KEY, DEVAUDIT_BASE_URL).',\n ' - Branch protection rules.',\n '',\n ' Verify your local install:',\n ' devaudit auth status # confirm your personal mctok_… is valid',\n ' devaudit status . # check framework files are present',\n ' devaudit doctor # node ≥22, git, gh, jq, curl',\n '',\n ' See SDLC/joining-an-existing-project.md for the full second-developer guide.',\n ' Rotate team secrets only as the project operator: `devaudit install --force-team-config`.',\n '',\n ];\n return {\n step: '11/11 Done (developer mode)',\n status: 'ok',\n message: lines.join('\\n'),\n data: { mode: 'developer' },\n };\n }\n const branch = 'feat/sdlc-onboarding';\n const lines = [\n '',\n ` ${ctx.projectName} is onboarded.`,\n '',\n ' Next steps:',\n ` cd ${ctx.projectPath}`,\n ' git status # review the diff',\n ` git checkout -b ${branch}`,\n ' git add -A',\n ` git commit -m \"feat: onboard ${plan.projectSlug} to Metasession SDLC\"`,\n ` git push -u origin ${branch}`,\n ' gh pr create --base main',\n '',\n ' After the PR merges:',\n ' - Push a compliance/ doc to develop so compliance-evidence.yml',\n ' registers the first release in DevAudit.',\n ' - Then walk REQ-001 through SDLC/0-project-setup.md → SDLC/5-deploy-main.md.',\n '',\n ];\n return {\n step: '11/11 Done',\n status: 'ok',\n message: lines.join('\\n'),\n data: { nextBranch: branch, mode: 'operator' },\n };\n}\n","import { basename, resolve } from 'node:path';\nimport { resolveToken } from '../lib/auth.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { isDir, isFile } from '../lib/fs-utils.js';\nimport { logger } from '../lib/logger.js';\nimport { getGitProvider, type GitProvider } from '../lib/git-provider/index.js';\nimport { DevAuditClient } from '../lib/devaudit-api.js';\nimport {\n discoverPlugins,\n buildPluginContext,\n runHook,\n type LoadedPlugin,\n} from '../lib/plugin/index.js';\nimport { runAuthProbe } from './auth-probe.js';\nimport { detectStack } from './detect-stack.js';\nimport { collectPlan } from './prompts.js';\nimport { writeSdlcConfig } from './write-config.js';\nimport { findOrCreateProject } from './project.js';\nimport { issueApiKey } from './api-key.js';\nimport { setGithubSecrets } from './github.js';\nimport { bootstrapHooks } from './hooks-bootstrap.js';\nimport { configureBranchProtection } from './branch-protection.js';\nimport { syncTemplates } from './sync-templates.js';\n// `bootstrapGovernanceDocs` is no longer called from the default install\n// flow; consumers invoke `devaudit bootstrap-governance` on demand. Kept\n// importable so the standalone command can still use it.\nimport { doneReport } from './done-report.js';\nimport type { InstallContext, InstallMode, InstallPlan, StepResult } from './types.js';\n\nexport interface RunInstallOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly nonInteractive?: boolean;\n readonly provider?: GitProvider;\n readonly plugins?: readonly LoadedPlugin[];\n /**\n * Pin the install mode explicitly. `'auto'` (default) lets `detectInstallMode`\n * decide based on probes. `'developer'` is set by the `devaudit join`\n * subcommand to force the lighter flow.\n */\n readonly mode?: 'auto' | InstallMode;\n /**\n * Re-enables the destructive steps (write sdlc-config, issue API key, set\n * GH secrets, apply branch protection) even when dev-mode detection would\n * have skipped them. The operator's rotation lane.\n */\n readonly forceTeamConfig?: boolean;\n}\n\nexport interface InstallReport {\n readonly project: string;\n readonly projectPath: string;\n readonly dryRun: boolean;\n readonly steps: readonly StepResult[];\n}\n\nexport async function runInstall(options: RunInstallOptions): Promise<InstallReport> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n if (!(await isDir(projectPath))) {\n throw new Error(`Project path not found: ${projectPath}`);\n }\n const projectName = basename(projectPath);\n const auth = await resolveTokenForInstall(options);\n const installerRoot = await resolveInstallerRoot();\n\n // Pre-flight mode detection runs after step 3 (plan), because it needs the\n // project slug. We build a tentative ctx for steps 1–3 here with mode set to\n // 'operator' (safe default — those steps don't consult installMode anyway).\n const tentativeCtx: InstallContext = {\n projectPath,\n projectName,\n installerRoot,\n token: auth.token,\n baseUrl: auth.baseUrl,\n dryRun: Boolean(options.dryRun),\n nonInteractive: Boolean(options.nonInteractive),\n installMode: 'operator',\n };\n banner(tentativeCtx);\n const steps: StepResult[] = [];\n steps.push(await record(log, runAuthProbe(tentativeCtx)));\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0 && !tentativeCtx.dryRun) {\n const pluginCtx = await buildPluginContext({ projectPath: tentativeCtx.projectPath });\n await runHook(plugins, 'beforeInstall', pluginCtx);\n }\n const { result: detectResult, detected } = await detectStack(tentativeCtx);\n steps.push(await record(log, Promise.resolve(detectResult)));\n const plan: InstallPlan = await collectPlan(tentativeCtx, detected);\n const planStep = planSummary(plan);\n steps.push(planStep);\n log.success(`[${planStep.step}] ${planStep.message ?? ''}`);\n\n const providerResolution = await resolveProvider(options, tentativeCtx);\n // Resolve install mode now that we have plan.projectSlug + (maybe) a\n // provider — see detectInstallMode for the four-bit decision rule.\n const detection = await detectInstallMode(tentativeCtx, plan, providerResolution.provider, options);\n if (detection.notice) log.info(detection.notice);\n const ctx: InstallContext = { ...tentativeCtx, installMode: detection.mode };\n\n steps.push(await record(log, writeSdlcConfig(ctx, plan)));\n steps.push(await record(log, findOrCreateProject(ctx, plan)));\n steps.push(await record(log, issueApiKey(ctx, plan)));\n if (providerResolution.provider) {\n steps.push(await record(log, setGithubSecrets(ctx, plan, providerResolution.provider)));\n } else {\n const skipped: StepResult = {\n step: '7/11 Set GitHub secrets and variables',\n status: 'skipped',\n message: providerResolution.reason ?? 'no git provider available',\n };\n steps.push(skipped);\n log.warn(`[${skipped.step}] SKIPPED ${skipped.message}`);\n }\n steps.push(await record(log, bootstrapHooks(ctx, plan)));\n if (providerResolution.provider) {\n steps.push(await record(log, configureBranchProtection(ctx, providerResolution.provider)));\n } else {\n const skipped: StepResult = {\n step: '9/11 Configure branch protection',\n status: 'skipped',\n message: providerResolution.reason ?? 'no git provider available',\n };\n steps.push(skipped);\n log.warn(`[${skipped.step}] SKIPPED ${skipped.message}`);\n }\n steps.push(await record(log, syncTemplates(ctx)));\n // Governance-doc auto-seed (v0.1.30 → v0.1.35) is now OPT-IN ONLY.\n // Operators ran `devaudit install` and the next CI push uploaded five\n // placeholder governance docs (ropa.md / dpia.md / etc.) as compliance\n // evidence on day one — the portal then read those starters as the\n // canonical answer, which they aren't. Run `devaudit bootstrap-governance`\n // explicitly when you actually want the starters on disk.\n const done = doneReport(ctx, plan);\n steps.push(done);\n log.success(`[${done.step}]`);\n log.log(done.message ?? '');\n if (plugins.length > 0 && !ctx.dryRun) {\n const pluginCtx = await buildPluginContext({ projectPath: ctx.projectPath });\n await runHook(plugins, 'afterInstall', pluginCtx);\n }\n return { project: projectName, projectPath, dryRun: ctx.dryRun, steps };\n}\n\ninterface ModeDetection {\n readonly mode: InstallMode;\n readonly notice?: string;\n /** True iff all four detection bits resolved to \"developer-mode\". */\n readonly allBitsMatched: boolean;\n}\n\n/**\n * Decide whether this install is the operator setting up / rotating a project\n * (`'operator'`) or a developer joining an already-onboarded one (`'developer'`).\n *\n * Developer mode requires **all four** bits to hold (any failure → operator,\n * the safe default that matches today's behaviour); `RunInstallOptions.mode`\n * overrides the auto-detection (used by `devaudit join`); `forceTeamConfig`\n * pins back to operator (the operator's rotation lane).\n *\n * 1. `sdlc-config.json` exists at projectPath — already-onboarded marker\n * 2. portal returns a project for `plan.projectSlug` — project lives on the portal\n * 3. an `'Onboarding-issued'` API key already exists — first install already ran\n * 4. the repo has a `DEVAUDIT_USER_TOKEN` secret — CI is already wired up\n */\nasync function detectInstallMode(\n ctx: InstallContext,\n plan: InstallPlan,\n provider: GitProvider | null,\n options: RunInstallOptions,\n): Promise<ModeDetection> {\n if (options.forceTeamConfig) {\n return {\n mode: 'operator',\n allBitsMatched: false,\n notice: '--force-team-config: running operator-mode (will rewrite repo secrets + branch protection).',\n };\n }\n if (options.mode === 'developer') {\n return {\n mode: 'developer',\n allBitsMatched: true,\n notice:\n \"mode=developer (pinned): destructive steps will skip — use `devaudit install --force-team-config` from the project's onboarding operator if you need to rotate team secrets.\",\n };\n }\n if (options.mode === 'operator') {\n return { mode: 'operator', allBitsMatched: false };\n }\n // auto-detect ('auto' or undefined)\n if (ctx.dryRun) {\n // In dry-run we don't probe; default to operator semantics so the report\n // shows the maximum possible step set. (The new --force-team-config and\n // mode=developer cases above still take effect in dry-run.)\n return { mode: 'operator', allBitsMatched: false };\n }\n const sdlcConfigExisted = await isFile(`${ctx.projectPath}/sdlc-config.json`);\n if (!sdlcConfigExisted) return { mode: 'operator', allBitsMatched: false };\n let projectExists = false;\n let keyExists = false;\n try {\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.getProjectBySlug(plan.projectSlug);\n if (existing) {\n projectExists = true;\n const keys = await client.listApiKeys(existing.id);\n keyExists = keys.some((k) => k.name === 'Onboarding-issued' && k.revoked_at === null);\n }\n } catch {\n // Any portal error → fall back to operator (safe default).\n return { mode: 'operator', allBitsMatched: false };\n }\n if (!projectExists || !keyExists) return { mode: 'operator', allBitsMatched: false };\n let hasUserTokenSecret = false;\n if (provider) {\n try {\n hasUserTokenSecret = await provider.hasSecret(ctx.projectPath, 'DEVAUDIT_USER_TOKEN');\n } catch {\n hasUserTokenSecret = false;\n }\n }\n if (!hasUserTokenSecret) return { mode: 'operator', allBitsMatched: false };\n return {\n mode: 'developer',\n allBitsMatched: true,\n notice:\n 'developer mode auto-detected (project + Onboarding-issued key + DEVAUDIT_USER_TOKEN secret all present): destructive steps (4, 6, 7, 9) will skip. Use --force-team-config to rotate team secrets.',\n };\n}\n\nasync function resolveProvider(\n options: RunInstallOptions,\n ctx: InstallContext,\n): Promise<{ provider: GitProvider | null; reason?: string }> {\n if (options.provider) return { provider: options.provider };\n try {\n return { provider: await getGitProvider(ctx.projectPath) };\n } catch (err) {\n return { provider: null, reason: (err as Error).message };\n }\n}\n\nasync function resolveTokenForInstall(options: RunInstallOptions): Promise<{ token: string; baseUrl: string }> {\n if (options.token) {\n return { token: options.token, baseUrl: options.baseUrl ?? 'https://devaudit.metasession.co' };\n }\n const resolved = await resolveToken();\n if (!resolved) {\n throw new Error(\n 'No DevAudit token found. Set DEVAUDIT_USER_TOKEN, pass --token, or run `devaudit auth login` first.',\n );\n }\n return { token: resolved.token, baseUrl: options.baseUrl ?? resolved.baseUrl };\n}\n\nasync function record(log: ReturnType<typeof logger>, p: Promise<StepResult>): Promise<StepResult> {\n const result = await p;\n const tag = `[${result.step}]`;\n const msg = result.message ?? '';\n if (result.status === 'ok') log.success(`${tag} ${msg}`);\n else if (result.status === 'warn') log.warn(`${tag} ${msg}`);\n else if (result.status === 'skipped') log.info(`${tag} SKIPPED ${msg}`);\n else if (result.status === 'planned') log.info(`${tag} [dry-run] ${msg}`);\n else log.error(`${tag} ${msg}`);\n return result;\n}\n\nfunction planSummary(plan: InstallPlan): StepResult {\n return {\n step: '3/11 Configure',\n status: 'ok',\n message: `slug=${plan.projectSlug} runtime=${plan.runtimeVersion}`,\n data: { ...plan },\n };\n}\n\nfunction banner(ctx: InstallContext): void {\n const log = logger();\n log.log('');\n log.info(`Metasession SDLC Onboarding`);\n log.log(` Consumer: ${ctx.projectName}`);\n log.log(` Path: ${ctx.projectPath}`);\n log.log(` DevAudit: ${ctx.baseUrl}`);\n if (ctx.dryRun) log.warn(' DRY RUN — no mutations will be performed');\n log.log('');\n}\n","import { runInstall } from '../install/index.js';\nimport { logger } from '../lib/logger.js';\n\nexport interface InstallOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly yes?: boolean;\n /**\n * Re-enables the destructive steps even when dev-mode detection would have\n * skipped them — the project operator's rotation lane. Without this flag a\n * second-dev re-run on an onboarded project auto-routes to developer mode.\n */\n readonly forceTeamConfig?: boolean;\n}\n\nexport async function runInstallCommand(options: InstallOptions): Promise<void> {\n const log = logger();\n try {\n await runInstall({\n ...(options.path !== undefined ? { path: options.path } : {}),\n ...(options.token !== undefined ? { token: options.token } : {}),\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.dryRun !== undefined ? { dryRun: options.dryRun } : {}),\n ...(options.yes !== undefined ? { nonInteractive: options.yes } : {}),\n ...(options.forceTeamConfig !== undefined\n ? { forceTeamConfig: options.forceTeamConfig }\n : {}),\n });\n } catch (err) {\n log.error((err as Error).message);\n process.exit(1);\n }\n}\n","import { resolve } from 'node:path';\nimport { runInstall } from '../install/index.js';\nimport { isFile } from '../lib/fs-utils.js';\nimport { logger } from '../lib/logger.js';\n\nexport interface JoinOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly yes?: boolean;\n}\n\n/**\n * `devaudit join` — the second-developer entry point. Runs the install flow\n * with `mode: 'developer'` pinned, so the destructive steps (write\n * sdlc-config, issue API key, set GitHub secrets, apply branch protection)\n * skip themselves and the team's CI token is left alone. See\n * `sdlc/files/_common/joining-an-existing-project.md` for the full guide.\n *\n * Pre-flight refuses to run when:\n * - `sdlc-config.json` is absent (the project hasn't been onboarded yet —\n * the operator should run `devaudit install`).\n *\n * Anything else (missing portal project, missing API key, missing repo\n * secret) is caught inside the install flow's mode detection — it'll log\n * a clear notice and routes back to operator mode if the detection fails;\n * if you really wanted developer mode, that's a signal the project is in\n * a half-onboarded state and the operator needs to finish it first.\n */\nexport async function runJoinCommand(options: JoinOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n const sdlcConfigExists = await isFile(`${projectPath}/sdlc-config.json`);\n if (!sdlcConfigExists) {\n log.error(\n `No sdlc-config.json at ${projectPath}. This project hasn't been onboarded yet — the project operator should run \\`devaudit install\\`. See SDLC/joining-an-existing-project.md (synced into onboarded repos) for the second-developer guide.`,\n );\n process.exit(7);\n }\n try {\n await runInstall({\n mode: 'developer',\n ...(options.path !== undefined ? { path: options.path } : {}),\n ...(options.token !== undefined ? { token: options.token } : {}),\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.dryRun !== undefined ? { dryRun: options.dryRun } : {}),\n ...(options.yes !== undefined ? { nonInteractive: options.yes } : {}),\n });\n } catch (err) {\n log.error((err as Error).message);\n process.exit(1);\n }\n}\n","import { syncAll } from '../update/index.js';\nimport { logger } from '../lib/logger.js';\nimport {\n discoverPlugins,\n buildPluginContext,\n runHook,\n type LoadedPlugin,\n} from '../lib/plugin/index.js';\n\nexport interface UpdateOptions {\n readonly version?: string;\n readonly paths: readonly string[];\n readonly plugins?: readonly LoadedPlugin[];\n}\n\n/**\n * Native TypeScript implementation of the SDLC template sync — the canonical\n * sync path (the former `scripts/sync-sdlc.sh` has been removed).\n *\n * Tagging DevAudit-Installer before sync is intentionally out of scope here;\n * `devaudit release tag` will own that concern in a future command. The version\n * argument is accepted for summary output and forward compatibility.\n */\nexport async function runUpdate(options: UpdateOptions): Promise<void> {\n const log = logger();\n if (options.version) {\n log.info(`Version (informational, no tag created): ${options.version}`);\n }\n if (options.paths.length === 0) {\n log.error('No project paths provided. Usage: devaudit update <version> <path> [path...]');\n process.exit(2);\n }\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n for (const projectPath of options.paths) {\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'beforeSync', ctx);\n }\n }\n await syncAll(options.paths);\n for (const projectPath of options.paths) {\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'afterSync', ctx);\n }\n }\n log.success('=== Sync Complete ===');\n log.log('');\n log.log('Next steps for each consuming project:');\n log.log(' 1. Review the diff: git diff');\n log.log(\" 2. Commit: git add -A && git commit -m 'chore: sync SDLC templates from DevAudit'\");\n log.log(' 3. Push to develop');\n log.log('');\n log.warn('Do NOT auto-commit — review the changes first.');\n}\n","import { readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { ensureDir, isFile } from '../lib/fs-utils.js';\nimport type { InstallContext, StepResult } from './types.js';\n\n/**\n * Tightened view of `InstallContext` — only the fields this function\n * actually reads. Lets the standalone `devaudit bootstrap-governance`\n * command construct a minimal context without faking auth tokens or\n * install-mode state it doesn't have.\n */\ntype BootstrapCtx = Pick<InstallContext, 'projectPath' | 'installerRoot' | 'dryRun'>;\n\nconst STEP = 'Bootstrap governance docs';\nconst SOURCE_REL = 'sdlc/files/_common/governance';\nconst TARGET_REL = 'compliance/governance';\n\n/**\n * One-time copy of governance-doc starter templates into the consumer's\n * `compliance/governance/` directory.\n *\n * - Runs on `devaudit install` only — NOT re-run by `devaudit update`. Once\n * the operator edits a file, our starter is gone; we never overwrite.\n * - Idempotent: each target is skipped if it already exists on disk.\n * - Source files end in `.md.template`; the target drops the `.template`\n * suffix (e.g. `ropa.md.template` → `compliance/governance/ropa.md`).\n *\n * Templates begin with a prominent \"STARTER TEMPLATE — REPLACE BEFORE GOING\n * TO PRODUCTION\" banner so the placeholder status is unambiguous on disk\n * and in the portal's rendered evidence view.\n *\n * Closes framework clauses: GDPR.Art-30 (ropa), GDPR.Art-35 (dpia),\n * EUAIA.Art-13 (ai_disclosure), ISO29119.3.5.4 / GDPR.Art-33 / GDPR.Art-34 /\n * SOC2.CC7.2 (incident_report), SOC2.CC4.1 / ISO27001.A.12.1 (periodic_review).\n * The upload path is already wired by v0.1.26's `upload_governance` helper\n * in `sdlc/files/ci/compliance-evidence.yml.template`.\n *\n * See `docs/governance-templates.md` for the per-framework mapping the\n * operator needs to honour when replacing the starter content.\n */\nexport async function bootstrapGovernanceDocs(ctx: BootstrapCtx): Promise<StepResult> {\n const sourceDir = resolve(ctx.installerRoot, SOURCE_REL);\n const targetDir = resolve(ctx.projectPath, TARGET_REL);\n let templates: readonly string[] = [];\n try {\n templates = (await readdir(sourceDir))\n .filter((name) => name.endsWith('.md.template'))\n .sort();\n } catch (err) {\n return {\n step: STEP,\n status: 'warn',\n message: `source directory not found: ${sourceDir} (${(err as Error).message})`,\n };\n }\n if (templates.length === 0) {\n return { step: STEP, status: 'warn', message: `no .md.template files in ${sourceDir}` };\n }\n if (ctx.dryRun) {\n return {\n step: STEP,\n status: 'planned',\n message: `would copy ${templates.length} starter(s) to ${TARGET_REL}/ (skip-if-exists)`,\n data: { templates: [...templates] },\n };\n }\n await ensureDir(targetDir);\n const copied: string[] = [];\n const skipped: string[] = [];\n for (const template of templates) {\n const targetName = template.replace(/\\.template$/, '');\n const targetPath = join(targetDir, targetName);\n if (await isFile(targetPath)) {\n skipped.push(targetName);\n continue;\n }\n const body = await readFile(join(sourceDir, template), 'utf8');\n await writeFile(targetPath, body, 'utf8');\n copied.push(targetName);\n }\n const detail =\n skipped.length === 0\n ? `${copied.length} starter(s) copied to ${TARGET_REL}/`\n : `${copied.length} copied, ${skipped.length} kept (already on disk)`;\n return {\n step: STEP,\n status: 'ok',\n message: `${detail} — STARTERS, edit before production (see docs/governance-templates.md)`,\n data: { copied, skipped, targetDir: TARGET_REL },\n };\n}\n","/**\n * `devaudit bootstrap-governance` — explicit, opt-in copy of governance\n * starter templates into the consumer's `compliance/governance/`.\n *\n * Pre-v0.1.36 this ran automatically as install step 11/12. Operators\n * shipped `devaudit install`, the next CI push then uploaded five\n * placeholder governance docs as compliance evidence on day one — the\n * portal then read those starters as the canonical RoPA / DPIA /\n * AI-disclosure / etc. for the project, which they aren't (they're\n * pure placeholders with the literal text \"STARTER TEMPLATE — REPLACE\n * BEFORE GOING TO PRODUCTION\" at the top).\n *\n * v0.1.36 removes the auto-seed. Operators who genuinely want the\n * starters on disk run this command explicitly. Each target is skipped\n * if a file already exists at that path — non-destructive.\n */\nimport { resolve } from 'node:path';\nimport { bootstrapGovernanceDocs } from '../install/bootstrap-governance.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { logger, emitJsonResult, isJsonMode } from '../lib/logger.js';\n\nexport interface BootstrapGovernanceOpts {\n readonly path?: string;\n readonly dryRun?: boolean;\n}\n\nexport async function runBootstrapGovernance(opts: BootstrapGovernanceOpts): Promise<void> {\n const projectPath = resolve(opts.path ?? process.cwd());\n const installerRoot = await resolveInstallerRoot();\n const log = logger();\n\n const result = await bootstrapGovernanceDocs({\n projectPath,\n installerRoot,\n dryRun: Boolean(opts.dryRun),\n });\n\n if (isJsonMode()) {\n emitJsonResult(result);\n return;\n }\n if (result.status === 'ok') {\n log.success(`[${result.step}] ${result.message ?? ''}`);\n } else if (result.status === 'warn') {\n log.warn(`[${result.step}] ${result.message ?? ''}`);\n } else if (result.status === 'planned') {\n log.info(`[${result.step}] (dry-run) ${result.message ?? ''}`);\n } else {\n log.log(`[${result.step}] ${result.message ?? ''}`);\n }\n}\n","import { logger } from '../lib/logger.js';\n\ninterface StubInfo {\n readonly command: string;\n readonly summary: string;\n readonly trackedIn?: string;\n}\n\nexport function makeStub(info: StubInfo): () => Promise<never> {\n return async () => {\n const log = logger();\n log.warn(`\\`devaudit ${info.command}\\` is not implemented yet.`);\n log.info(info.summary);\n if (info.trackedIn) {\n log.info(`Tracked in: ${info.trackedIn}`);\n }\n log.info('See ./docs/devaudit-cli/build-plan.md for the full implementation plan.');\n process.exit(1);\n };\n}\n","import { discoverPlugins } from '../../lib/plugin/index.js';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\n\nexport interface PluginListOptions {\n readonly root?: string;\n}\n\nexport async function runPluginList(opts: PluginListOptions = {}): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const result = await discoverPlugins(root);\n log.info(`Plugin directory: ${root}`);\n if (result.loaded.length === 0 && result.failures.length === 0) {\n log.log(' (no plugins installed)');\n return;\n }\n if (result.loaded.length > 0) {\n log.log('');\n log.log('Loaded:');\n for (const p of result.loaded) {\n const hooks = Object.keys(p.plugin.hooks ?? {});\n const commands = Object.keys(p.plugin.commands ?? {});\n const detail = [\n `${p.packageName}@${p.packageVersion}`,\n hooks.length > 0 ? `hooks=[${hooks.join(',')}]` : 'hooks=[]',\n commands.length > 0 ? `commands=[${commands.join(',')}]` : 'commands=[]',\n ].join(' ');\n log.log(` ✓ ${detail}`);\n }\n }\n if (result.failures.length > 0) {\n log.log('');\n log.warn('Failed to load:');\n for (const f of result.failures) {\n log.log(` ✗ ${f.dir} — ${f.reason}`);\n }\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { loadPluginFromDir } from '../../lib/plugin/index.js';\n\nexport interface PluginInstallOptions {\n readonly source: string;\n readonly root?: string;\n}\n\nfunction deriveDirName(source: string): string {\n const last = source.split('/').pop() ?? source;\n return last.replace(/\\.git$/, '');\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function runPluginInstall(opts: PluginInstallOptions): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const dirName = deriveDirName(opts.source);\n if (!dirName) {\n log.error(`Could not derive a directory name from source: ${opts.source}`);\n process.exit(2);\n }\n await fs.mkdir(root, { recursive: true });\n const target = join(root, dirName);\n if (await pathExists(target)) {\n log.error(`Plugin directory already exists: ${target}. Run \\`devaudit plugin remove ${dirName}\\` first.`);\n process.exit(2);\n }\n log.info(`Cloning ${opts.source} → ${target}`);\n try {\n await execa('git', ['clone', '--depth', '1', opts.source, target], { stdio: 'inherit' });\n } catch (err) {\n log.error(`git clone failed: ${(err as Error).message}`);\n process.exit(6);\n }\n if (await pathExists(join(target, 'package.json'))) {\n log.info('Installing plugin dependencies...');\n const install = await execa('npm', ['install', '--legacy-peer-deps'], {\n cwd: target,\n stdio: 'inherit',\n reject: false,\n });\n if (install.exitCode !== 0) {\n log.error('npm install failed — leaving the plugin dir in place for inspection.');\n process.exit(5);\n }\n }\n log.info('Validating plugin manifest...');\n try {\n const loaded = await loadPluginFromDir(target);\n log.success(`Installed: ${loaded.packageName}@${loaded.packageVersion} at ${target}`);\n } catch (err) {\n log.error(`Plugin validation failed: ${(err as Error).message}`);\n log.warn(`Removing ${target}`);\n await fs.rm(target, { recursive: true, force: true });\n process.exit(9);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { basename } from 'node:path';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { discoverPlugins } from '../../lib/plugin/index.js';\n\nexport interface PluginRemoveOptions {\n readonly name: string;\n readonly root?: string;\n}\n\nexport async function runPluginRemove(opts: PluginRemoveOptions): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const discovery = await discoverPlugins(root);\n const candidates = [\n ...discovery.loaded.map((p) => ({ packageName: p.packageName, dir: p.dir })),\n ...discovery.failures.map((f) => ({ packageName: basename(f.dir), dir: f.dir })),\n ];\n const match = candidates.find((c) => c.packageName === opts.name || basename(c.dir) === opts.name);\n if (!match) {\n log.error(`No plugin found matching '${opts.name}'.`);\n log.info('Run `devaudit plugin list` to see installed plugins.');\n process.exit(2);\n return;\n }\n await fs.rm(match.dir, { recursive: true, force: true });\n log.success(`Removed plugin at ${match.dir}`);\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { discoverPlugins } from '../../lib/plugin/index.js';\n\nexport interface PluginUpdateOptions {\n readonly root?: string;\n}\n\ntype UpdateStatus = 'updated' | 'no-changes' | 'not-git' | 'failed';\n\ninterface UpdateResult {\n readonly plugin: string;\n readonly status: UpdateStatus;\n readonly detail?: string;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function updateOne(dir: string, packageName: string): Promise<UpdateResult> {\n if (!(await pathExists(join(dir, '.git')))) {\n return { plugin: packageName, status: 'not-git' };\n }\n const pull = await execa('git', ['pull', '--ff-only'], { cwd: dir, reject: false });\n if (pull.exitCode !== 0) {\n return { plugin: packageName, status: 'failed', detail: pull.stderr.split('\\n')[0] };\n }\n const noChanges = /Already up to date/i.test(pull.stdout);\n if (await pathExists(join(dir, 'package.json'))) {\n const install = await execa('npm', ['install', '--legacy-peer-deps'], {\n cwd: dir,\n reject: false,\n });\n if (install.exitCode !== 0) {\n return { plugin: packageName, status: 'failed', detail: 'npm install failed after pull' };\n }\n }\n return { plugin: packageName, status: noChanges ? 'no-changes' : 'updated' };\n}\n\nexport async function runPluginUpdate(opts: PluginUpdateOptions = {}): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const discovery = await discoverPlugins(root);\n if (discovery.loaded.length === 0) {\n log.info('No plugins installed.');\n return;\n }\n log.info(`Updating ${discovery.loaded.length} plugin(s)...`);\n const results: UpdateResult[] = [];\n for (const p of discovery.loaded) {\n // eslint-disable-next-line no-await-in-loop\n results.push(await updateOne(p.dir, p.packageName));\n }\n for (const r of results) {\n if (r.status === 'updated') log.success(` ✓ ${r.plugin} — updated`);\n else if (r.status === 'no-changes') log.log(` · ${r.plugin} — already up to date`);\n else if (r.status === 'not-git') log.warn(` ⚠ ${r.plugin} — not a git checkout, skipped`);\n else log.error(` ✗ ${r.plugin} — ${r.detail ?? 'failed'}`);\n }\n}\n","import { Command, Option } from 'commander';\nimport { configureLogger } from './lib/logger.js';\nimport { CLI_VERSION } from './lib/version.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runAuthLogin } from './commands/auth/login.js';\nimport { runAuthLogout } from './commands/auth/logout.js';\nimport { runAuthStatus } from './commands/auth/status.js';\nimport { runStatus } from './commands/status.js';\nimport { runPush } from './commands/push.js';\nimport { runInstallCommand } from './commands/install.js';\nimport { runJoinCommand } from './commands/join.js';\nimport { runUpdate } from './commands/update.js';\nimport { runBootstrapGovernance } from './commands/bootstrap-governance.js';\nimport { makeStub } from './commands/stub.js';\nimport { discoverPlugins, registerPluginCommands } from './lib/plugin/index.js';\nimport { runPluginList } from './commands/plugin/list.js';\nimport { runPluginInstall } from './commands/plugin/install.js';\nimport { runPluginRemove } from './commands/plugin/remove.js';\nimport { runPluginUpdate } from './commands/plugin/update.js';\nimport { logger } from './lib/logger.js';\n\nconst TRACKING_ISSUE = 'https://github.com/metasession-dev/DevAudit-Installer/issues/1';\n\nfunction applyCommonFlags(program: Command): void {\n program.addOption(new Option('--json', 'machine-readable output'));\n program.addOption(new Option('-y, --yes', 'accept all interactive defaults (CI-friendly)'));\n program.addOption(new Option('--dry-run', \"preview, don't mutate\"));\n program.addOption(new Option('-v, --verbose', 'extra detail'));\n program.addOption(new Option('--no-color', 'strip ANSI'));\n program.addOption(new Option('--org <slug>', 'override active org context for this invocation'));\n program.hook('preAction', (cmd) => {\n const opts = cmd.optsWithGlobals();\n configureLogger({\n json: Boolean(opts.json),\n verbose: Boolean(opts.verbose),\n noColor: opts.color === false,\n });\n });\n}\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name('devaudit')\n .description(\n 'DevAudit CLI — installs, syncs, and operates the Metasession SDLC across consumer projects.',\n )\n .version(CLI_VERSION, '-V, --version');\n applyCommonFlags(program);\n program\n .command('install [path]')\n .description('Interactive onboarding for a consumer project (operator flow). On an already-onboarded project a second dev auto-routes to developer mode; use `devaudit join` for the explicit second-dev entry point.')\n .option('--token <token>', 'PAT to use (otherwise reads DEVAUDIT_USER_TOKEN env or ~/.config/devaudit/auth.json)')\n .option('--base-url <url>', 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)')\n .option('--force-team-config', 'Re-run the destructive steps (write sdlc-config, issue API key, set GH secrets, apply branch protection) even when dev-mode detection would have skipped them. The operator-only rotation lane.')\n .action(\n async (\n path: string | undefined,\n cmdOpts: { token?: string; baseUrl?: string; forceTeamConfig?: boolean },\n cmd,\n ) => {\n const globals = cmd.optsWithGlobals();\n await runInstallCommand({\n ...(path !== undefined ? { path } : {}),\n ...(cmdOpts.token !== undefined ? { token: cmdOpts.token } : {}),\n ...(cmdOpts.baseUrl !== undefined ? { baseUrl: cmdOpts.baseUrl } : {}),\n ...(cmdOpts.forceTeamConfig !== undefined\n ? { forceTeamConfig: Boolean(cmdOpts.forceTeamConfig) }\n : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n ...(globals.yes !== undefined ? { yes: Boolean(globals.yes) } : {}),\n });\n },\n );\n program\n .command('join [path]')\n .description(\n 'Second-developer entry point: re-sync framework templates + run hook bootstrap locally on an already-onboarded project. Skips the operator-only steps (sdlc-config write, API key issuance, GitHub secret writes, branch protection) so the team CI token is never rotated. See SDLC/joining-an-existing-project.md.',\n )\n .option(\n '--token <token>',\n 'PAT to use (otherwise reads DEVAUDIT_USER_TOKEN env or ~/.config/devaudit/auth.json)',\n )\n .option(\n '--base-url <url>',\n 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)',\n )\n .action(async (path: string | undefined, cmdOpts: { token?: string; baseUrl?: string }, cmd) => {\n const globals = cmd.optsWithGlobals();\n await runJoinCommand({\n ...(path !== undefined ? { path } : {}),\n ...(cmdOpts.token !== undefined ? { token: cmdOpts.token } : {}),\n ...(cmdOpts.baseUrl !== undefined ? { baseUrl: cmdOpts.baseUrl } : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n ...(globals.yes !== undefined ? { yes: Boolean(globals.yes) } : {}),\n });\n });\n program\n .command('update [version] [paths...]')\n .description(\n 'Sync framework templates into existing consumer(s). Both args are optional: ' +\n 'paths default to the current directory, and version is a cosmetic label ' +\n '(defaults to the running CLI version). So a bare `devaudit update` syncs ' +\n 'the current project.',\n )\n .action(async (version: string | undefined, paths: string[] | undefined) => {\n // `version` is purely informational. Disambiguate the single-arg case so\n // `devaudit update <path>` treats a path-like token as a path, not a label.\n let resolvedVersion = version;\n let resolvedPaths = paths ?? [];\n const looksLikeVersion = (s: string): boolean => /^v?\\d+(\\.\\d+)/.test(s);\n if (resolvedVersion && resolvedPaths.length === 0 && !looksLikeVersion(resolvedVersion)) {\n resolvedPaths = [resolvedVersion];\n resolvedVersion = undefined;\n }\n if (resolvedPaths.length === 0) resolvedPaths = ['.'];\n await runUpdate({ version: resolvedVersion ?? CLI_VERSION, paths: resolvedPaths });\n });\n program\n .command('push <project-slug> <requirement-id> <evidence-type> <file>')\n .description('Upload evidence file(s) to DevAudit (port of scripts/upload-evidence.sh)')\n .option('--release <version>', 'release version (e.g. v1.0.0)')\n .option('--create-release-if-missing', \"auto-create the release as 'draft' if absent\")\n .option('--environment <env>', 'uat | production')\n .option('--category <cat>', 'ci_pipeline | local_dev | planning | test_report | security_scan | release_artifact')\n .option('--git-sha <sha>', 'attached to metadata.gitSha')\n .option('--ci-run-id <id>', 'attached to metadata.ciRunId')\n .option('--branch <name>', 'attached to metadata.branch')\n .option('--base-url <url>', 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)')\n .option('--api-key <key>', 'override DEVAUDIT_API_KEY env var')\n .action(\n async (\n projectSlug: string,\n requirementId: string,\n evidenceType: string,\n file: string,\n opts: {\n release?: string;\n createReleaseIfMissing?: boolean;\n environment?: string;\n category?: string;\n gitSha?: string;\n ciRunId?: string;\n branch?: string;\n baseUrl?: string;\n apiKey?: string;\n },\n cmd,\n ) => {\n const globals = cmd.optsWithGlobals();\n await runPush({\n projectSlug,\n requirementId,\n evidenceType,\n filePath: file,\n ...(opts.release !== undefined ? { release: opts.release } : {}),\n ...(opts.createReleaseIfMissing !== undefined\n ? { createReleaseIfMissing: opts.createReleaseIfMissing }\n : {}),\n ...(opts.environment !== undefined ? { environment: opts.environment } : {}),\n ...(opts.category !== undefined ? { category: opts.category } : {}),\n ...(opts.gitSha !== undefined ? { gitSha: opts.gitSha } : {}),\n ...(opts.ciRunId !== undefined ? { ciRunId: opts.ciRunId } : {}),\n ...(opts.branch !== undefined ? { branch: opts.branch } : {}),\n ...(opts.baseUrl !== undefined ? { baseUrl: opts.baseUrl } : {}),\n ...(opts.apiKey !== undefined ? { apiKey: opts.apiKey } : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n });\n },\n );\n program\n .command('bootstrap-governance [path]')\n .description(\n 'Copy governance starter templates (ropa, dpia, ai-disclosure, periodic-review, incident-report) into compliance/governance/. Opt-in since v0.1.36 — auto-seed during install was removed because the placeholders auto-uploaded as evidence on first CI push.',\n )\n .action(async (path?: string, _opts?: unknown, cmd?: Command) => {\n const opts = (cmd?.optsWithGlobals() ?? {}) as { dryRun?: boolean };\n await runBootstrapGovernance({ path, dryRun: opts.dryRun });\n });\n program\n .command('doctor')\n .description('Verify the local install: required tools on PATH, auth state, config validity')\n .action(runDoctor);\n program\n .command('status [path]')\n .description(\"Show the consumer project's framework state\")\n .action(async (path?: string) => {\n await runStatus({ path });\n });\n program\n .command('upgrade')\n .description('Update the devaudit CLI itself to the latest release')\n .action(\n makeStub({\n command: 'upgrade',\n summary: 'Self-update via npm or the platform package manager. Workstream A milestone 8.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const authCmd = program.command('auth').description('Authentication management');\n authCmd\n .command('login')\n .option('--token <token>', 'PAT to use (skips the interactive prompt)')\n .option('--base-url <url>', 'override portal base URL', 'https://devaudit.metasession.co')\n .description('Sign in via PAT paste; stores token in ~/.config/devaudit/auth.json')\n .action(async (opts: { token?: string; baseUrl?: string }) => {\n await runAuthLogin({ token: opts.token, baseUrl: opts.baseUrl });\n });\n authCmd\n .command('logout')\n .description('Delete the cached token at ~/.config/devaudit/auth.json')\n .action(runAuthLogout);\n authCmd\n .command('status')\n .description('Show current auth state and verify the cached token')\n .action(runAuthStatus);\n const orgCmd = program.command('org').description('Organisation management (workstream B prereq)');\n orgCmd\n .command('list')\n .description('List orgs the user belongs to')\n .action(makeStub({ command: 'org list', summary: 'Needs portal RBAC + org endpoints.', trackedIn: TRACKING_ISSUE }));\n orgCmd\n .command('switch <slug>')\n .description('Switch active org context')\n .action(\n makeStub({ command: 'org switch', summary: 'Updates ~/.config/devaudit/config.json.', trackedIn: TRACKING_ISSUE }),\n );\n const orgPolicyCmd = orgCmd.command('policy').description('Org policy management');\n orgPolicyCmd\n .command('list')\n .description(\"Show the active org's policy baselines\")\n .action(\n makeStub({\n command: 'org policy list',\n summary: 'Reads from the portal policy engine (workstream B).',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n orgPolicyCmd\n .command('apply [path]')\n .description('Apply org policy to a project (or all org projects)')\n .action(\n makeStub({\n command: 'org policy apply',\n summary: 'Evaluates sdlc-config.json + CI evidence against org policy bundle.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n orgCmd\n .command('report')\n .option('--format <fmt>', 'html | json | csv', 'html')\n .description('Generate an org-wide compliance report')\n .action(\n makeStub({\n command: 'org report',\n summary: 'Aggregates per-project compliance state across the org.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const pluginCmd = program.command('plugin').description('Plugin management');\n pluginCmd\n .command('list')\n .description('List installed plugins in ~/.config/devaudit/plugins/')\n .action(runPluginList);\n pluginCmd\n .command('install <source>')\n .description('Install a plugin from a Git URL (portal registry resolution is pending)')\n .action(async (source: string) => {\n await runPluginInstall({ source });\n });\n pluginCmd\n .command('remove <name>')\n .description('Remove a locally installed plugin by package or directory name')\n .action(async (name: string) => {\n await runPluginRemove({ name });\n });\n pluginCmd\n .command('update')\n .description('Update all installed plugins (git pull + npm install)')\n .action(runPluginUpdate);\n const configCmd = program.command('config').description('CLI configuration (telemetry, default org, etc.)');\n configCmd\n .command('get <key>')\n .description('Read a CLI config value')\n .action(\n makeStub({ command: 'config get', summary: 'Reads ~/.config/devaudit/config.json.', trackedIn: TRACKING_ISSUE }),\n );\n configCmd\n .command('set <key> <value>')\n .description('Write a CLI config value')\n .action(\n makeStub({\n command: 'config set',\n summary: 'Writes to ~/.config/devaudit/config.json (mode 0600).',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n configCmd\n .command('list')\n .description('Print all CLI config values')\n .action(\n makeStub({\n command: 'config list',\n summary: 'Lists all CLI config keys with their current values.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const discovery = await discoverPlugins();\n if (discovery.failures.length > 0) {\n const log = logger();\n for (const f of discovery.failures) {\n log.warn(`Plugin at ${f.dir} failed to load: ${f.reason}`);\n }\n }\n registerPluginCommands(program, discovery.loaded);\n program.parse(argv);\n}\n\nmain(process.argv).catch((err: unknown) => {\n const log = logger();\n log.error((err as Error).message);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../src/lib/logger.ts","../package.json","../src/lib/version.ts","../src/lib/paths.ts","../src/lib/plugin/load.ts","../src/lib/plugin/discover.ts","../src/lib/sdlc-config.ts","../src/lib/plugin/context.ts","../src/lib/plugin/hooks.ts","../src/lib/plugin/commands.ts","../src/commands/doctor.ts","../src/lib/auth.ts","../src/lib/devaudit-api.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/status.ts","../src/lib/ci-upload.ts","../src/commands/push.ts","../src/lib/installer-root.ts","../src/lib/fs-utils.ts","../src/lib/git-provider/github.ts","../src/lib/git-provider/detect.ts","../src/lib/git-provider/index.ts","../src/install/auth-probe.ts","../src/install/detect-stack.ts","../src/install/prompts.ts","../src/install/write-config.ts","../src/install/project.ts","../src/install/api-key.ts","../src/install/github.ts","../src/install/hooks-bootstrap.ts","../src/install/branch-protection.ts","../src/lib/adapter.ts","../src/update/resolve-adapters.ts","../src/update/stage-docs.ts","../src/update/ai-rules.ts","../src/update/stack-hooks.ts","../src/update/stack-deps.ts","../src/update/scripts.ts","../src/update/issue-templates.ts","../src/update/skills.ts","../src/update/evidence-helper.ts","../src/lib/templates.ts","../src/update/ci-templates.ts","../src/update/validation.ts","../src/update/index.ts","../src/install/sync-templates.ts","../src/install/done-report.ts","../src/install/index.ts","../src/commands/install.ts","../src/commands/join.ts","../src/commands/update.ts","../src/install/bootstrap-governance.ts","../src/commands/bootstrap-governance.ts","../src/commands/stub.ts","../src/commands/plugin/list.ts","../src/commands/plugin/install.ts","../src/commands/plugin/remove.ts","../src/commands/plugin/update.ts","../src/index.ts"],"names":["record","join","fs","resolve","group","ok","text","DEFAULT_BASE_URL","clack","dirname","basename","execa","res","meta","uploadEvidence","lines","pathExists","paths"],"mappings":"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","file":"index.js","sourcesContent":["import { createConsola, type ConsolaInstance } from 'consola';\n\ninterface LoggerOptions {\n readonly json: boolean;\n readonly verbose: boolean;\n readonly noColor: boolean;\n}\n\nconst DEFAULT_OPTIONS: LoggerOptions = { json: false, verbose: false, noColor: false };\n\nlet currentLogger: ConsolaInstance = build(DEFAULT_OPTIONS);\nlet jsonModeActive = false;\n\nfunction build(opts: LoggerOptions): ConsolaInstance {\n const level = opts.verbose ? 5 : 3;\n if (opts.json) {\n return createConsola({\n level,\n reporters: [\n {\n log: (logObj) => {\n const record = {\n level: logObj.type,\n tag: logObj.tag ?? null,\n args: logObj.args,\n date: logObj.date,\n };\n process.stdout.write(JSON.stringify(record) + '\\n');\n },\n },\n ],\n });\n }\n if (opts.noColor) {\n process.env['NO_COLOR'] = '1';\n }\n return createConsola({ level });\n}\n\nexport function configureLogger(opts: Partial<LoggerOptions>): void {\n const merged = { ...DEFAULT_OPTIONS, ...opts };\n jsonModeActive = merged.json;\n currentLogger = build(merged);\n}\n\nexport function logger(): ConsolaInstance {\n return currentLogger;\n}\n\nexport function isJsonMode(): boolean {\n return jsonModeActive;\n}\n\nexport function emitJsonResult(payload: unknown): void {\n process.stdout.write(JSON.stringify(payload) + '\\n');\n}\n","{\n \"name\": \"@metasession.co/devaudit-cli\",\n \"version\": \"0.1.42\",\n \"description\": \"DevAudit CLI — installs, syncs, and operates the Metasession SDLC across consumer projects.\",\n \"type\": \"module\",\n \"bin\": {\n \"devaudit\": \"./bin/devaudit.js\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"sdlc\",\n \"scripts\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=22\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"bundle:templates\": \"node tools/bundle-templates.mjs\",\n \"prepack\": \"npm run build && npm run bundle:templates\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"node ./bin/devaudit.js\"\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^0.8.2\",\n \"@metasession.co/devaudit-plugin-sdk\": \"^0.1.42\",\n \"commander\": \"^12.1.0\",\n \"consola\": \"^3.2.3\",\n \"env-paths\": \"^3.0.0\",\n \"execa\": \"^9.5.1\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.9.0\",\n \"msw\": \"^2.7.0\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^4.1.6\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/metasession-dev/DevAudit-Installer\",\n \"directory\": \"cli\"\n },\n \"license\": \"Apache-2.0\"\n}\n","import pkg from '../../package.json' with { type: 'json' };\n\nexport const CLI_VERSION: string = pkg.version;\n","import envPaths from 'env-paths';\nimport { join } from 'node:path';\n\nconst paths = envPaths('devaudit', { suffix: '' });\n\nexport const CONFIG_DIR = paths.config;\nexport const AUTH_FILE = join(CONFIG_DIR, 'auth.json');\nexport const CONFIG_FILE = join(CONFIG_DIR, 'config.json');\nexport const PLUGINS_DIR = join(CONFIG_DIR, 'plugins');\n","import { promises as fs } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { validateManifest } from '@metasession.co/devaudit-plugin-sdk';\nimport type { Plugin } from '@metasession.co/devaudit-plugin-sdk';\nimport type { LoadedPlugin } from './types.js';\n\nfunction toFileUrl(absPath: string): string {\n // pathToFileURL is the canonical API but it percent-encodes `~` to `%7E`,\n // which breaks dynamic import resolution on Windows GitHub Actions runners\n // (`os.tmpdir()` returns 8.3 short names like `RUNNER~1`). `~` is a valid\n // URL character — decoding it back is safe and well-defined.\n return pathToFileURL(absPath).href.replace(/%7E/g, '~');\n}\n\nexport async function loadPluginFromDir(dir: string): Promise<LoadedPlugin> {\n const pkgPath = join(dir, 'package.json');\n const raw = await fs.readFile(pkgPath, 'utf-8');\n const parsed = JSON.parse(raw) as unknown;\n const result = validateManifest(parsed);\n if (!result.valid) {\n throw new Error(`Invalid manifest in ${pkgPath}: ${result.errors.join('; ')}`);\n }\n const mainPath = resolve(dir, result.main);\n const mod = (await import(toFileUrl(mainPath))) as { default?: Plugin };\n if (!mod.default || typeof mod.default !== 'object') {\n throw new Error(`Plugin main module ${mainPath} did not default-export a Plugin object.`);\n }\n if (mod.default.apiVersion !== '1') {\n throw new Error(\n `Plugin ${result.packageName} declares apiVersion '${mod.default.apiVersion}' at runtime, expected '1'.`,\n );\n }\n if (typeof mod.default.name !== 'string' || mod.default.name.length === 0) {\n throw new Error(`Plugin main module ${mainPath} did not export a non-empty 'name'.`);\n }\n return {\n dir,\n packageName: result.packageName,\n packageVersion: result.packageVersion,\n manifest: result.manifest,\n plugin: mod.default,\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { PLUGINS_DIR } from '../paths.js';\nimport { loadPluginFromDir } from './load.js';\nimport type { DiscoveryResult, LoadedPlugin, PluginLoadFailure } from './types.js';\n\nasync function listSubdirs(root: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(root, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory()).map((e) => join(root, e.name));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw err;\n }\n}\n\nexport async function discoverPlugins(root: string = PLUGINS_DIR): Promise<DiscoveryResult> {\n const dirs = await listSubdirs(root);\n const loaded: LoadedPlugin[] = [];\n const failures: PluginLoadFailure[] = [];\n for (const dir of dirs) {\n try {\n // eslint-disable-next-line no-await-in-loop\n loaded.push(await loadPluginFromDir(dir));\n } catch (err) {\n failures.push({ dir, reason: (err as Error).message });\n }\n }\n return { loaded, failures };\n}\n","import { promises as fs } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nexport interface SdlcConfig {\n readonly project_slug: string;\n readonly stack?: string;\n readonly host?: string;\n readonly node_version?: string | number;\n readonly python_version?: string | number;\n readonly working_directory?: string;\n readonly source_dirs?: string;\n readonly integration_branch?: string;\n readonly release_branch?: string;\n readonly devaudit?: {\n readonly base_url?: string;\n readonly project_slug?: string;\n readonly api_key_secret?: string;\n };\n readonly uat?: { readonly enabled?: boolean };\n readonly approval?: { readonly mode?: string };\n}\n\nexport async function readSdlcConfig(projectPath: string): Promise<SdlcConfig | null> {\n const configPath = join(resolve(projectPath), 'sdlc-config.json');\n try {\n const raw = await fs.readFile(configPath, 'utf-8');\n return JSON.parse(raw) as SdlcConfig;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\nexport interface FrameworkFileStatus {\n readonly path: string;\n readonly present: boolean;\n}\n\nexport async function checkFrameworkFiles(\n projectPath: string,\n files: readonly string[],\n): Promise<readonly FrameworkFileStatus[]> {\n const checks = await Promise.all(\n files.map(async (rel) => {\n try {\n await fs.access(join(projectPath, rel));\n return { path: rel, present: true };\n } catch {\n return { path: rel, present: false };\n }\n }),\n );\n return checks;\n}\n","import type {\n PluginContext,\n PluginEvent,\n PluginLogger,\n PluginSdlcConfigView,\n} from '@metasession.co/devaudit-plugin-sdk';\nimport { readSdlcConfig } from '../sdlc-config.js';\nimport { logger } from '../logger.js';\n\nexport interface BuildPluginContextOptions {\n readonly projectPath: string;\n readonly events?: PluginEvent[];\n}\n\nexport async function buildPluginContext(opts: BuildPluginContextOptions): Promise<PluginContext> {\n const cfg = await readSdlcConfig(opts.projectPath);\n const sdlcConfig: PluginSdlcConfigView = (cfg as unknown as PluginSdlcConfigView) ?? {\n project_slug: '',\n };\n return {\n projectPath: opts.projectPath,\n sdlcConfig,\n logger: pluginLogger(),\n apiVersion: '1',\n emit: (event) => {\n opts.events?.push(event);\n },\n };\n}\n\nfunction pluginLogger(): PluginLogger {\n const log = logger();\n return {\n info: (m) => log.info(`[plugin] ${m}`),\n warn: (m) => log.warn(`[plugin] ${m}`),\n error: (m) => log.error(`[plugin] ${m}`),\n debug: (m) => log.debug(`[plugin] ${m}`),\n };\n}\n","import type { LifecycleHookName, PluginContext } from '@metasession.co/devaudit-plugin-sdk';\nimport { logger } from '../logger.js';\nimport type { LoadedPlugin } from './types.js';\n\nexport interface HookRunResult {\n readonly plugin: string;\n readonly hook: LifecycleHookName;\n readonly status: 'ok' | 'error' | 'skipped';\n readonly message?: string;\n}\n\nexport async function runHook(\n plugins: readonly LoadedPlugin[],\n hook: LifecycleHookName,\n ctx: PluginContext,\n): Promise<readonly HookRunResult[]> {\n const log = logger();\n const results: HookRunResult[] = [];\n for (const p of plugins) {\n const fn = p.plugin.hooks?.[hook];\n if (!fn) {\n results.push({ plugin: p.packageName, hook, status: 'skipped' });\n continue;\n }\n try {\n // eslint-disable-next-line no-await-in-loop\n await fn(ctx);\n results.push({ plugin: p.packageName, hook, status: 'ok' });\n } catch (err) {\n const message = (err as Error).message;\n log.warn(`Plugin '${p.packageName}' hook '${hook}' threw: ${message}`);\n results.push({ plugin: p.packageName, hook, status: 'error', message });\n }\n }\n return results;\n}\n","import type { Command } from 'commander';\nimport { resolve } from 'node:path';\nimport { logger } from '../logger.js';\nimport { buildPluginContext } from './context.js';\nimport type { LoadedPlugin } from './types.js';\n\nexport function registerPluginCommands(program: Command, plugins: readonly LoadedPlugin[]): void {\n for (const p of plugins) {\n const namespace = pluginNamespace(p.packageName);\n const manifestCommands = p.manifest.commands ?? [];\n if (manifestCommands.length === 0) continue;\n const group = program.command(namespace).description(p.manifest.displayName ?? p.packageName);\n for (const c of manifestCommands) {\n const impl = p.plugin.commands?.[c.name];\n if (!impl) continue;\n group\n .command(`${c.name} [args...]`)\n .description(c.description)\n .action(async (args: string[]) => {\n const log = logger();\n const projectPath = resolve(process.cwd());\n const ctx = await buildPluginContext({ projectPath });\n try {\n await impl(ctx, args);\n } catch (err) {\n log.error(`Plugin '${p.packageName}' command '${c.name}' failed: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n }\n }\n}\n\nfunction pluginNamespace(packageName: string): string {\n return packageName.replace(/^@[^/]+\\//, '').replace(/^devaudit-plugin-/, '');\n}\n","import { execa } from 'execa';\nimport { resolve } from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { logger } from '../lib/logger.js';\nimport { discoverPlugins, buildPluginContext, runHook, type LoadedPlugin } from '../lib/plugin/index.js';\n\nexport interface DoctorOptions {\n readonly plugins?: readonly LoadedPlugin[];\n}\n\ninterface CheckResult {\n readonly name: string;\n readonly ok: boolean;\n readonly detail: string;\n}\n\nasync function checkCommand(name: string, args: readonly string[]): Promise<CheckResult> {\n try {\n const result = await execa(name, args, { reject: false });\n const ok = result.exitCode === 0;\n const firstLine = result.stdout.split('\\n')[0] ?? '';\n return { name, ok, detail: ok ? firstLine : `exited ${result.exitCode}` };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return { name, ok: false, detail: message };\n }\n}\n\nasync function checkNodeVersion(): Promise<CheckResult> {\n const version = process.versions.node;\n const major = Number.parseInt(version.split('.')[0] ?? '0', 10);\n const ok = major >= 22;\n return { name: 'node', ok, detail: `v${version} (require >=22)` };\n}\n\n/**\n * Reconciliation safety-net (DevAudit-Installer#60): flag any release ticket\n * still in compliance/pending-releases/ whose portal release is already\n * `released` — i.e. a close-out that was missed (e.g. a dropped dispatch).\n * Non-fatal: a warning, not a tool-gate failure. Skips gracefully when not in\n * a consumer project or when no portal credentials are available.\n */\nasync function checkReleaseCloseoutDrift(): Promise<CheckResult> {\n const name = 'releases';\n let cfg: { project_slug?: string; devaudit?: { project_slug?: string; base_url?: string } };\n try {\n cfg = JSON.parse(await fs.readFile('sdlc-config.json', 'utf-8'));\n } catch {\n return { name, ok: true, detail: 'skipped (not a consumer project)' };\n }\n let entries: string[];\n try {\n entries = await fs.readdir('compliance/pending-releases');\n } catch {\n return { name, ok: true, detail: 'no pending-releases/' };\n }\n const reqs = entries\n .filter((f) => /^RELEASE-TICKET-REQ-\\d+\\.md$/.test(f))\n .map((f) => f.replace(/^RELEASE-TICKET-/, '').replace(/\\.md$/, ''));\n if (reqs.length === 0) return { name, ok: true, detail: 'no pending release tickets' };\n\n const slug = cfg.devaudit?.project_slug ?? cfg.project_slug;\n const base = (cfg.devaudit?.base_url ?? '').replace(/\\/$/, '');\n const apiKey = process.env['DEVAUDIT_API_KEY'];\n if (!slug || !base || !apiKey) {\n return {\n name,\n ok: true,\n detail: `${reqs.length} pending ticket(s); portal drift check skipped (set DEVAUDIT_API_KEY + devaudit.base_url)`,\n };\n }\n\n const drifted: string[] = [];\n for (const req of reqs) {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), 10000);\n const res = await fetch(\n `${base}/api/ci/releases/resolve?projectSlug=${encodeURIComponent(slug)}&versionPrefix=${encodeURIComponent(req)}`,\n { headers: { Authorization: `Bearer ${apiKey}` }, signal: ctrl.signal },\n );\n clearTimeout(timer);\n if (!res.ok) continue;\n const body = (await res.json()) as { latest?: { status?: string } };\n if (body.latest?.status === 'released') drifted.push(req);\n } catch {\n // network/timeout — leave as a skip for this REQ\n }\n }\n if (drifted.length > 0) {\n return {\n name,\n ok: false,\n detail: `released on the portal but still in pending-releases/: ${drifted.join(', ')} — run ./scripts/close-out-release.sh <REQ>`,\n };\n }\n return { name, ok: true, detail: `${reqs.length} pending ticket(s); none released on the portal` };\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<void> {\n const log = logger();\n log.info('Running devaudit doctor — checking required tools...\\n');\n const checks: readonly CheckResult[] = [\n await checkNodeVersion(),\n await checkCommand('git', ['--version']),\n await checkCommand('gh', ['--version']),\n await checkCommand('jq', ['--version']),\n await checkCommand('curl', ['--version']),\n ];\n let allOk = true;\n for (const check of checks) {\n const marker = check.ok ? '✓' : '✗';\n if (!check.ok) allOk = false;\n log.log(` ${marker} ${check.name.padEnd(8)} ${check.detail}`);\n }\n // Reconciliation safety-net — reported but does not gate the tool check (#60).\n const closeout = await checkReleaseCloseoutDrift();\n const closeoutMarker = closeout.ok ? '✓' : '⚠';\n log.log(` ${closeoutMarker} ${closeout.name.padEnd(8)} ${closeout.detail}`);\n log.log('');\n if (!closeout.ok) {\n log.warn('Release close-out drift detected — see above. (Does not affect the tool check.)');\n }\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath: resolve(process.cwd()) });\n await runHook(plugins, 'onDoctor', ctx);\n }\n if (allOk) {\n log.success('All required tools present.');\n process.exit(0);\n } else {\n log.error('One or more required tools are missing. Install them and re-run `devaudit doctor`.');\n process.exit(6);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { AUTH_FILE } from './paths.js';\n\ninterface AuthRecord {\n readonly version: 1;\n readonly token: string;\n readonly base_url: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nexport async function readAuth(): Promise<AuthRecord | null> {\n try {\n const raw = await fs.readFile(AUTH_FILE, 'utf-8');\n const parsed = JSON.parse(raw) as AuthRecord;\n if (parsed.version !== 1 || typeof parsed.token !== 'string') {\n return null;\n }\n return parsed;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\nexport async function writeAuth(token: string, baseUrl: string = DEFAULT_BASE_URL): Promise<void> {\n await fs.mkdir(dirname(AUTH_FILE), { recursive: true, mode: 0o700 });\n const record: AuthRecord = { version: 1, token, base_url: baseUrl };\n await fs.writeFile(AUTH_FILE, JSON.stringify(record, null, 2) + '\\n', { mode: 0o600 });\n}\n\nexport async function deleteAuth(): Promise<boolean> {\n try {\n await fs.unlink(AUTH_FILE);\n return true;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return false;\n throw err;\n }\n}\n\nexport async function resolveToken(): Promise<{ token: string; baseUrl: string; source: 'env' | 'file' } | null> {\n const envToken = process.env['DEVAUDIT_USER_TOKEN'];\n if (envToken) {\n const envBase = process.env['DEVAUDIT_BASE_URL'] ?? DEFAULT_BASE_URL;\n return { token: envToken, baseUrl: envBase, source: 'env' };\n }\n const record = await readAuth();\n if (record) return { token: record.token, baseUrl: record.base_url, source: 'file' };\n return null;\n}\n","interface DevAuditClientOptions {\n readonly token: string;\n readonly baseUrl: string;\n}\n\nexport interface DevAuditProject {\n readonly id: string;\n readonly slug: string;\n readonly name: string;\n}\n\nexport interface ApiKeyIssued {\n readonly id: string;\n readonly name: string;\n readonly plainTextKey: string;\n}\n\nexport interface ApiKeySummary {\n readonly id: string;\n readonly name: string;\n readonly revoked_at: string | null;\n}\n\nexport class DevAuditApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: string,\n ) {\n super(message);\n this.name = 'DevAuditApiError';\n }\n}\n\nexport class DevAuditClient {\n private readonly token: string;\n private readonly baseUrl: string;\n\n constructor(opts: DevAuditClientOptions) {\n this.token = opts.token;\n this.baseUrl = opts.baseUrl.replace(/\\/$/, '');\n }\n\n async listProjects(): Promise<readonly DevAuditProject[]> {\n const res = await this.request('GET', '/api/projects');\n const json = (await res.json()) as { projects?: DevAuditProject[] } | DevAuditProject[];\n if (Array.isArray(json)) return json;\n return json.projects ?? [];\n }\n\n async getProjectBySlug(slug: string): Promise<DevAuditProject | null> {\n const list = await this.listProjects();\n return list.find((p) => p.slug === slug) ?? null;\n }\n\n async createProject(slug: string, name: string): Promise<DevAuditProject> {\n const res = await this.request('POST', '/api/projects', { slug, name });\n return (await res.json()) as DevAuditProject;\n }\n\n async listApiKeys(projectId: string): Promise<readonly ApiKeySummary[]> {\n const res = await this.request('GET', `/api/projects/${projectId}/api-keys`);\n const json = (await res.json()) as ApiKeySummary[] | { keys?: ApiKeySummary[] };\n if (Array.isArray(json)) return json;\n return json.keys ?? [];\n }\n\n async issueApiKey(projectId: string, name: string): Promise<ApiKeyIssued> {\n const res = await this.request('POST', `/api/projects/${projectId}/api-keys`, {\n name,\n role: 'uploader',\n });\n return (await res.json()) as ApiKeyIssued;\n }\n\n private async request(method: string, path: string, body?: unknown): Promise<Response> {\n const url = `${this.baseUrl}${path}`;\n const headers: Record<string, string> = { 'x-devaudit-token': this.token };\n let payload: string | undefined;\n if (body !== undefined) {\n headers['content-type'] = 'application/json';\n payload = JSON.stringify(body);\n }\n const res = await fetch(url, { method, headers, body: payload });\n if (!res.ok) {\n const text = await res.text();\n throw new DevAuditApiError(`${method} ${path} → HTTP ${res.status}`, res.status, text);\n }\n return res;\n }\n}\n","import * as clack from '@clack/prompts';\nimport { writeAuth } from '../../lib/auth.js';\nimport { DevAuditClient, DevAuditApiError } from '../../lib/devaudit-api.js';\nimport { logger } from '../../lib/logger.js';\n\ninterface LoginOptions {\n readonly token?: string;\n readonly baseUrl?: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nexport async function runAuthLogin(options: LoginOptions): Promise<void> {\n const log = logger();\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n let token = options.token ?? process.env['DEVAUDIT_USER_TOKEN'];\n if (!token) {\n log.info(`Open ${baseUrl}/settings/tokens in your browser and issue a Personal Access Token.`);\n log.info('Paste the `mctok_...` value below; it never leaves this machine.');\n const result = await clack.password({\n message: 'Paste your DevAudit Personal Access Token (mctok_...):',\n validate: (val) => {\n if (!val) return 'Token is required.';\n if (!val.startsWith('mctok_')) return \"Token should start with 'mctok_'.\";\n return undefined;\n },\n });\n if (clack.isCancel(result)) {\n log.warn('Cancelled.');\n process.exit(0);\n }\n token = result;\n }\n log.info('Validating token against portal...');\n try {\n const client = new DevAuditClient({ token, baseUrl });\n await client.listProjects();\n } catch (err) {\n if (err instanceof DevAuditApiError && (err.status === 401 || err.status === 403)) {\n log.error('Token rejected by portal (HTTP ' + err.status + '). Check it was copied correctly + is not revoked.');\n process.exit(3);\n }\n throw err;\n }\n await writeAuth(token, baseUrl);\n log.success('Logged in. Token cached at ~/.config/devaudit/auth.json (mode 0600).');\n}\n","import { deleteAuth } from '../../lib/auth.js';\nimport { AUTH_FILE } from '../../lib/paths.js';\nimport { logger } from '../../lib/logger.js';\n\nexport async function runAuthLogout(): Promise<void> {\n const log = logger();\n const existed = await deleteAuth();\n if (existed) {\n log.success(`Removed cached token at ${AUTH_FILE}.`);\n } else {\n log.info('No cached token to remove.');\n }\n}\n","import { resolveToken } from '../../lib/auth.js';\nimport { DevAuditClient, DevAuditApiError } from '../../lib/devaudit-api.js';\nimport { emitJsonResult, isJsonMode, logger } from '../../lib/logger.js';\n\nexport async function runAuthStatus(): Promise<void> {\n const log = logger();\n const resolved = await resolveToken();\n if (!resolved) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'not_logged_in' });\n else log.warn('Not logged in. Run `devaudit auth login` or set DEVAUDIT_USER_TOKEN.');\n process.exit(3);\n return;\n }\n if (!isJsonMode()) {\n log.info(`Token source: ${resolved.source === 'env' ? 'DEVAUDIT_USER_TOKEN env var' : '~/.config/devaudit/auth.json'}`);\n log.info(`Portal: ${resolved.baseUrl}`);\n log.info('Verifying token against portal...');\n }\n try {\n const client = new DevAuditClient({ token: resolved.token, baseUrl: resolved.baseUrl });\n const projects = await client.listProjects();\n if (isJsonMode()) {\n emitJsonResult({\n ok: true,\n source: resolved.source,\n baseUrl: resolved.baseUrl,\n projects: projects.map((p) => p.slug),\n });\n return;\n }\n log.success(`Token is valid. Accessible projects: ${projects.length}`);\n for (const p of projects.slice(0, 10)) {\n log.log(` • ${p.slug}`);\n }\n if (projects.length > 10) log.log(` ... and ${projects.length - 10} more`);\n } catch (err) {\n if (err instanceof DevAuditApiError) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'portal_rejected', status: err.status });\n else log.error(`Portal rejected the token (HTTP ${err.status}). Re-run \\`devaudit auth login\\`.`);\n process.exit(3);\n return;\n }\n if (isJsonMode())\n emitJsonResult({ ok: false, reason: 'unexpected', message: err instanceof Error ? err.message : String(err) });\n else log.error(`Unexpected error: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n","import { resolve } from 'node:path';\nimport { readSdlcConfig, checkFrameworkFiles } from '../lib/sdlc-config.js';\nimport { emitJsonResult, isJsonMode, logger } from '../lib/logger.js';\n\nconst FRAMEWORK_FILES = [\n 'INSTRUCTIONS.md',\n 'CLAUDE.md',\n '.cursorrules',\n '.windsurfrules',\n 'GEMINI.md',\n 'SDLC/0-project-setup.md',\n 'SDLC/5-deploy-main.md',\n 'scripts/upload-evidence.sh',\n 'compliance/RTM.md',\n '.github/workflows/ci.yml',\n];\n\ninterface StatusOptions {\n readonly path?: string;\n}\n\nexport async function runStatus(options: StatusOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n const config = await readSdlcConfig(projectPath);\n if (!config) {\n if (isJsonMode()) {\n emitJsonResult({ ok: false, reason: 'not_onboarded', projectPath });\n } else {\n log.info(`Inspecting ${projectPath}`);\n log.warn('No sdlc-config.json found here. This project is not onboarded to DevAudit.');\n log.info('Run `devaudit install` to onboard.');\n }\n process.exit(7);\n return;\n }\n const files = await checkFrameworkFiles(projectPath, FRAMEWORK_FILES);\n const presentFiles = files.filter((f) => f.present).map((f) => f.path);\n const missingFiles = files.filter((f) => !f.present).map((f) => f.path);\n if (isJsonMode()) {\n emitJsonResult({\n ok: true,\n projectPath,\n project_slug: config.project_slug,\n stack: config.stack ?? null,\n host: config.host ?? null,\n node_version: config.node_version ?? null,\n python_version: config.python_version ?? null,\n working_directory: config.working_directory ?? null,\n source_dirs: config.source_dirs ?? null,\n devaudit_base_url: config.devaudit?.base_url ?? null,\n uat_enabled: config.uat?.enabled ?? false,\n approval_mode: config.approval?.mode ?? null,\n files_present: presentFiles,\n files_missing: missingFiles,\n });\n return;\n }\n log.info(`Inspecting ${projectPath}`);\n log.success('sdlc-config.json found.');\n log.log('');\n log.log(` Project slug: ${config.project_slug}`);\n log.log(` Stack: ${config.stack ?? '(unset)'}`);\n log.log(` Host: ${config.host ?? '(unset)'}`);\n if (config.node_version) log.log(` Node version: ${config.node_version}`);\n if (config.python_version) log.log(` Python version: ${config.python_version}`);\n if (config.working_directory) log.log(` Working dir: ${config.working_directory}`);\n if (config.source_dirs) log.log(` Source dirs: ${config.source_dirs}`);\n log.log(` DevAudit URL: ${config.devaudit?.base_url ?? '(unset)'}`);\n log.log(` UAT enabled: ${config.uat?.enabled ?? false}`);\n log.log(` Approval mode: ${config.approval?.mode ?? '(unset)'}`);\n log.log('');\n log.info('Framework files present?');\n for (const f of files) {\n const marker = f.present ? '✓' : '✗';\n log.log(` ${marker} ${f.path}`);\n }\n log.log('');\n if (missingFiles.length === 0) {\n log.success('All checked framework files are present.');\n } else {\n log.warn(`${missingFiles.length} framework file(s) missing. Re-sync with \\`devaudit update <version> <path>\\` to refresh.`);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { DevAuditApiError } from './devaudit-api.js';\n\nexport interface UploadOptions {\n readonly projectSlug: string;\n readonly requirementId: string;\n readonly evidenceType: string;\n readonly filePath: string;\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly releaseVersion?: string;\n readonly createReleaseIfMissing?: boolean;\n readonly environment?: string;\n readonly evidenceCategory?: string;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface UploadResult {\n readonly file: string;\n readonly ok: boolean;\n readonly status: number;\n readonly body?: unknown;\n readonly error?: string;\n}\n\nconst RETRYABLE_STATUSES = new Set([429, 500, 502, 503, 504]);\nconst MAX_ATTEMPTS = 3;\nconst INITIAL_BACKOFF_MS = 1000;\n\nexport async function collectFiles(filePath: string): Promise<readonly string[]> {\n const stat = await fs.stat(filePath);\n if (stat.isFile()) return [filePath];\n if (stat.isDirectory()) {\n const entries = await fs.readdir(filePath, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isFile()) files.push(join(filePath, entry.name));\n }\n return files;\n }\n throw new Error(`${filePath} is neither a file nor a directory.`);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((res) => setTimeout(res, ms));\n}\n\nasync function uploadOne(file: string, opts: UploadOptions): Promise<UploadResult> {\n const form = new FormData();\n const buf = await fs.readFile(file);\n const blob = new Blob([new Uint8Array(buf)]);\n form.set('file', blob, basename(file));\n form.set('projectSlug', opts.projectSlug);\n form.set('requirementId', opts.requirementId);\n form.set('evidenceType', opts.evidenceType);\n form.set('metadata', JSON.stringify(opts.metadata ?? {}));\n if (opts.releaseVersion) form.set('releaseVersion', opts.releaseVersion);\n if (opts.createReleaseIfMissing) form.set('createReleaseIfMissing', 'true');\n if (opts.environment) form.set('environment', opts.environment);\n if (opts.evidenceCategory) form.set('evidenceCategory', opts.evidenceCategory);\n const url = `${opts.baseUrl.replace(/\\/$/, '')}/api/evidence/upload`;\n let attempt = 1;\n let backoff = INITIAL_BACKOFF_MS;\n while (attempt <= MAX_ATTEMPTS) {\n const res = await fetch(url, {\n method: 'POST',\n headers: { authorization: `Bearer ${opts.apiKey}` },\n body: form,\n });\n if (res.ok) {\n const body = await res.json().catch(() => null);\n return { file, ok: true, status: res.status, body };\n }\n if (RETRYABLE_STATUSES.has(res.status) && attempt < MAX_ATTEMPTS) {\n const retryAfter = Number.parseInt(res.headers.get('retry-after') ?? '', 10);\n const wait = Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter * 1000 : backoff;\n await delay(wait);\n backoff *= 2;\n attempt += 1;\n continue;\n }\n const errText = await res.text().catch(() => '(no body)');\n return { file, ok: false, status: res.status, error: errText };\n }\n return { file, ok: false, status: 0, error: 'max retries exhausted' };\n}\n\nexport async function uploadEvidence(opts: UploadOptions): Promise<readonly UploadResult[]> {\n const files = await collectFiles(opts.filePath);\n if (files.length === 0) {\n throw new DevAuditApiError(`No files at ${opts.filePath}`, 0, '');\n }\n const results: UploadResult[] = [];\n for (const file of files) {\n // eslint-disable-next-line no-await-in-loop\n results.push(await uploadOne(file, opts));\n }\n return results;\n}\n","import { resolve } from 'node:path';\nimport { collectFiles, uploadEvidence } from '../lib/ci-upload.js';\nimport { logger, isJsonMode, emitJsonResult } from '../lib/logger.js';\nimport { discoverPlugins, buildPluginContext, runHook, type LoadedPlugin } from '../lib/plugin/index.js';\n\nexport interface PushOptions {\n readonly projectSlug: string;\n readonly requirementId: string;\n readonly evidenceType: string;\n readonly filePath: string;\n readonly release?: string;\n readonly createReleaseIfMissing?: boolean;\n readonly environment?: string;\n readonly category?: string;\n readonly gitSha?: string;\n readonly ciRunId?: string;\n readonly branch?: string;\n readonly baseUrl?: string;\n readonly apiKey?: string;\n readonly dryRun?: boolean;\n readonly plugins?: readonly LoadedPlugin[];\n}\n\nconst DEFAULT_BASE_URL = 'https://devaudit.metasession.co';\n\nfunction buildMetadata(options: PushOptions): Record<string, unknown> {\n const metadata: Record<string, unknown> = {};\n if (options.gitSha) metadata['gitSha'] = options.gitSha;\n if (options.ciRunId) metadata['ciRunId'] = options.ciRunId;\n if (options.branch) metadata['branch'] = options.branch;\n return metadata;\n}\n\nasync function runDryRun(options: PushOptions, baseUrl: string): Promise<void> {\n const log = logger();\n const files = await collectFiles(options.filePath);\n const planned = {\n dryRun: true,\n projectSlug: options.projectSlug,\n requirementId: options.requirementId,\n evidenceType: options.evidenceType,\n baseUrl,\n files: files.map((f) => ({ path: f })),\n metadata: buildMetadata(options),\n ...(options.release !== undefined ? { release: options.release } : {}),\n ...(options.environment !== undefined ? { environment: options.environment } : {}),\n ...(options.category !== undefined ? { category: options.category } : {}),\n };\n if (isJsonMode()) {\n emitJsonResult(planned);\n return;\n }\n log.info(\n `[dry-run] Would upload ${files.length} file(s) for ${options.projectSlug}/${options.requirementId} (${options.evidenceType}) → ${baseUrl}`,\n );\n for (const f of files) log.log(` · ${f}`);\n}\n\nexport async function runPush(options: PushOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(process.cwd());\n const baseUrl = options.baseUrl ?? process.env['DEVAUDIT_BASE_URL'] ?? DEFAULT_BASE_URL;\n if (options.dryRun) {\n await runDryRun(options, baseUrl);\n return;\n }\n const apiKey = options.apiKey ?? process.env['DEVAUDIT_API_KEY'];\n if (!apiKey) {\n if (isJsonMode()) emitJsonResult({ ok: false, reason: 'missing_api_key' });\n else {\n log.error('DEVAUDIT_API_KEY env var is required (or pass --api-key).');\n log.info('Issue a project API key at: <portal>/projects/<slug>/settings → API Key Management.');\n }\n process.exit(3);\n }\n log.info(\n `Uploading ${options.filePath} (project=${options.projectSlug} req=${options.requirementId} type=${options.evidenceType}) → ${baseUrl}`,\n );\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'beforePush', ctx);\n }\n const metadata = buildMetadata(options);\n const results = await uploadEvidence({\n projectSlug: options.projectSlug,\n requirementId: options.requirementId,\n evidenceType: options.evidenceType,\n filePath: options.filePath,\n apiKey: apiKey as string,\n baseUrl,\n ...(options.release !== undefined ? { releaseVersion: options.release } : {}),\n ...(options.createReleaseIfMissing !== undefined\n ? { createReleaseIfMissing: options.createReleaseIfMissing }\n : {}),\n ...(options.environment !== undefined ? { environment: options.environment } : {}),\n ...(options.category !== undefined ? { evidenceCategory: options.category } : {}),\n metadata,\n });\n let okCount = 0;\n let failCount = 0;\n for (const result of results) {\n if (result.ok) {\n okCount++;\n log.success(` ✓ ${result.file} (HTTP ${result.status})`);\n } else {\n failCount++;\n log.error(` ✗ ${result.file} (HTTP ${result.status}): ${result.error ?? '(no detail)'}`);\n }\n }\n log.log('');\n log.info(`Uploaded: ${okCount} succeeded, ${failCount} failed.`);\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'afterPush', ctx);\n }\n if (isJsonMode()) {\n emitJsonResult({\n ok: failCount === 0,\n uploaded: okCount,\n failed: failCount,\n results: results.map((r) => ({ file: r.file, ok: r.ok, status: r.status, error: r.error ?? null })),\n });\n }\n if (failCount > 0) process.exit(4);\n}\n","import { fileURLToPath } from 'node:url';\nimport { dirname, resolve } from 'node:path';\nimport { promises as fs } from 'node:fs';\n\n/**\n * Resolve the directory that holds the SDLC framework templates (`sdlc/files/`).\n *\n * Three sources, in priority order:\n * 1. `DEVAUDIT_INSTALLER_ROOT` — explicit override (e.g. developing against a\n * checkout that isn't the bundled snapshot).\n * 2. The package's own bundled snapshot — when installed from npm, the\n * published tarball ships `sdlc/` (and `scripts/upload-evidence.sh`)\n * alongside `dist/`. See `tools/bundle-templates.mjs`, run on `prepack`.\n * `dist/index.js` → `..` is the package root.\n * 3. The DevAudit-Installer repo root — running from a source checkout\n * (`cli/dist/index.js` → `../..`), where the canonical `sdlc/` lives.\n *\n * The sentinel is the presence of `sdlc/files` — not any bash script. The CLI\n * is the onboarding tool; it no longer depends on `scripts/sdlc-onboard.sh`.\n */\nexport async function resolveInstallerRoot(): Promise<string> {\n const override = process.env['DEVAUDIT_INSTALLER_ROOT'];\n if (override) return resolve(override);\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [resolve(here, '..'), resolve(here, '..', '..')];\n for (const candidate of candidates) {\n if (await hasTemplates(candidate)) return candidate;\n }\n throw new Error(\n 'Could not locate the SDLC templates (sdlc/files). Reinstall @metasession.co/devaudit-cli, ' +\n 'or set DEVAUDIT_INSTALLER_ROOT to a DevAudit-Installer checkout.',\n );\n}\n\nasync function hasTemplates(root: string): Promise<boolean> {\n try {\n await fs.access(resolve(root, 'sdlc', 'files'));\n return true;\n } catch {\n return false;\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { dirname, join, basename } from 'node:path';\n\nexport async function ensureDir(dir: string, mode = 0o755): Promise<void> {\n await fs.mkdir(dir, { recursive: true, mode });\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function isFile(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nexport async function isDir(path: string): Promise<boolean> {\n try {\n const stat = await fs.stat(path);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function copyFile(src: string, dst: string, mode?: number): Promise<void> {\n await ensureDir(dirname(dst));\n await fs.copyFile(src, dst);\n if (mode !== undefined) await fs.chmod(dst, mode);\n}\n\n/**\n * Recursive copy preserving directory structure. Roughly equivalent to\n * `cp -r src/. dst/`. If `clean` is true the destination is removed first\n * (rsync-style --delete semantics).\n */\nexport async function copyDir(src: string, dst: string, clean = false): Promise<number> {\n if (clean && (await exists(dst))) {\n await fs.rm(dst, { recursive: true, force: true });\n }\n await ensureDir(dst);\n let count = 0;\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = join(src, entry.name);\n const dstPath = join(dst, entry.name);\n if (entry.isDirectory()) {\n count += await copyDir(srcPath, dstPath, false);\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, dstPath);\n count += 1;\n }\n }\n return count;\n}\n\nexport async function listFiles(dir: string, predicate?: (name: string) => boolean): Promise<readonly string[]> {\n if (!(await isDir(dir))) return [];\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries\n .filter((e) => e.isFile())\n .map((e) => e.name)\n .filter((name) => (predicate ? predicate(name) : true))\n .map((name) => join(dir, name));\n}\n\nexport function fileBasename(path: string): string {\n return basename(path);\n}\n","import { execa } from 'execa';\nimport type {\n BranchProtectionResult,\n GitProvider,\n PullRequestCreateOptions,\n PullRequestCreated,\n RepoMeta,\n} from './types.js';\n\ninterface GithubProviderOptions {\n readonly preferGhCli?: boolean;\n readonly token?: string;\n}\n\ninterface GhCheckResult {\n readonly available: boolean;\n}\n\nlet ghAvailabilityCache: GhCheckResult | null = null;\n\nasync function ghAvailable(): Promise<boolean> {\n if (ghAvailabilityCache !== null) return ghAvailabilityCache.available;\n try {\n await execa('gh', ['--version']);\n ghAvailabilityCache = { available: true };\n return true;\n } catch {\n ghAvailabilityCache = { available: false };\n return false;\n }\n}\n\nexport class GitHubProvider implements GitProvider {\n readonly name = 'github' as const;\n private readonly preferGhCli: boolean;\n private readonly token: string | undefined;\n\n constructor(opts: GithubProviderOptions = {}) {\n this.preferGhCli = opts.preferGhCli ?? true;\n this.token = opts.token ?? process.env['GH_TOKEN'] ?? process.env['GITHUB_TOKEN'];\n }\n\n async getRepoMeta(cwd: string): Promise<RepoMeta> {\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa(\n 'gh',\n ['repo', 'view', '--json', 'owner,name,defaultBranchRef', '--jq', '{owner: .owner.login, name: .name, defaultBranch: .defaultBranchRef.name}'],\n { cwd, reject: false },\n );\n if (res.exitCode === 0 && res.stdout.trim().length > 0) {\n const parsed = JSON.parse(res.stdout) as RepoMeta;\n return parsed;\n }\n }\n const { owner, name } = await parseOriginRemote(cwd);\n if (!this.token) {\n throw new Error(\n 'No `gh` CLI on PATH and no GH_TOKEN env var — cannot resolve repo metadata for GitHub.',\n );\n }\n const res = await fetch(`https://api.github.com/repos/${owner}/${name}`, {\n headers: this.authHeaders(),\n });\n if (!res.ok) {\n throw new Error(`GitHub REST repo lookup failed: HTTP ${res.status}`);\n }\n const json = (await res.json()) as { default_branch: string };\n return { owner, name, defaultBranch: json.default_branch };\n }\n\n async setSecret(cwd: string, name: string, value: string): Promise<void> {\n if (this.preferGhCli && (await ghAvailable())) {\n await execa('gh', ['secret', 'set', name], { cwd, input: value });\n return;\n }\n throw new Error(\n 'Setting a GitHub repo secret without `gh` CLI requires sodium encryption (libsodium) — not implemented. Install `gh` CLI to use this command.',\n );\n }\n\n async hasSecret(cwd: string, name: string): Promise<boolean> {\n // Best-effort probe used by install's dev-mode detection (#NN). Returns\n // false on any read failure — the safe default routes to operator mode,\n // which preserves today's behaviour for first-dev installs.\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa('gh', ['secret', 'list', '--json', 'name'], { cwd, reject: false });\n if (res.exitCode !== 0) return false;\n try {\n const rows = JSON.parse(res.stdout) as Array<{ name: string }>;\n return rows.some((r) => r.name === name);\n } catch {\n return false;\n }\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) return false;\n const res = await fetch(\n `https://api.github.com/repos/${meta.owner}/${meta.name}/actions/secrets/${name}`,\n { headers: this.authHeaders() },\n );\n return res.ok;\n }\n\n async setVariable(cwd: string, name: string, value: string): Promise<void> {\n if (this.preferGhCli && (await ghAvailable())) {\n await execa('gh', ['variable', 'set', name, '--body', value], { cwd });\n return;\n }\n const { owner, name: repoName } = await this.getRepoMeta(cwd);\n if (!this.token) {\n throw new Error('No `gh` CLI and no GH_TOKEN — cannot set repo variable.');\n }\n const res = await fetch(`https://api.github.com/repos/${owner}/${repoName}/actions/variables`, {\n method: 'POST',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify({ name, value }),\n });\n if (res.status === 409) {\n const update = await fetch(\n `https://api.github.com/repos/${owner}/${repoName}/actions/variables/${name}`,\n {\n method: 'PATCH',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify({ value }),\n },\n );\n if (!update.ok) throw new Error(`GitHub REST variable update failed: HTTP ${update.status}`);\n return;\n }\n if (!res.ok) throw new Error(`GitHub REST variable create failed: HTTP ${res.status}`);\n }\n\n async applyBranchProtection(\n cwd: string,\n branch: string,\n requiredChecks: readonly string[],\n ): Promise<BranchProtectionResult> {\n const body = {\n required_status_checks: { strict: false, contexts: requiredChecks },\n enforce_admins: false,\n required_pull_request_reviews: { dismiss_stale_reviews: true, required_approving_review_count: 0 },\n restrictions: null,\n };\n if (this.preferGhCli && (await ghAvailable())) {\n const meta = await this.getRepoMeta(cwd);\n const res = await execa(\n 'gh',\n ['api', '-X', 'PUT', `/repos/${meta.owner}/${meta.name}/branches/${branch}/protection`, '--input', '-'],\n { cwd, input: JSON.stringify(body), reject: false },\n );\n if (res.exitCode === 0) return { applied: true };\n return { applied: false, message: res.stderr.split('\\n')[0] || 'gh api call failed' };\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) {\n return { applied: false, message: 'No `gh` CLI and no GH_TOKEN — cannot apply branch protection.' };\n }\n const res = await fetch(\n `https://api.github.com/repos/${meta.owner}/${meta.name}/branches/${branch}/protection`,\n {\n method: 'PUT',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify(body),\n },\n );\n if (res.ok) return { applied: true };\n return { applied: false, message: `GitHub REST branch-protection PUT failed: HTTP ${res.status}` };\n }\n\n async createPullRequest(cwd: string, opts: PullRequestCreateOptions): Promise<PullRequestCreated> {\n if (this.preferGhCli && (await ghAvailable())) {\n const res = await execa(\n 'gh',\n ['pr', 'create', '--base', opts.base, '--head', opts.head, '--title', opts.title, '--body', opts.body],\n { cwd },\n );\n return { url: res.stdout.trim() };\n }\n const meta = await this.getRepoMeta(cwd);\n if (!this.token) {\n throw new Error('No `gh` CLI and no GH_TOKEN — cannot create pull request.');\n }\n const res = await fetch(`https://api.github.com/repos/${meta.owner}/${meta.name}/pulls`, {\n method: 'POST',\n headers: { ...this.authHeaders(), 'content-type': 'application/json' },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`GitHub REST PR create failed: HTTP ${res.status}`);\n const json = (await res.json()) as { html_url: string };\n return { url: json.html_url };\n }\n\n private authHeaders(): Record<string, string> {\n if (!this.token) return { accept: 'application/vnd.github+json' };\n return { accept: 'application/vnd.github+json', authorization: `Bearer ${this.token}` };\n }\n}\n\nasync function parseOriginRemote(cwd: string): Promise<{ owner: string; name: string }> {\n const res = await execa('git', ['remote', 'get-url', 'origin'], { cwd, reject: false });\n if (res.exitCode !== 0) {\n throw new Error('No `origin` git remote configured; cannot determine GitHub repo.');\n }\n const url = res.stdout.trim();\n const match = url.match(/github\\.com[/:]([^/]+)\\/([^/.]+)(?:\\.git)?$/);\n if (!match) {\n throw new Error(`Could not parse GitHub owner/name from remote URL: ${url}`);\n }\n return { owner: match[1] ?? '', name: match[2] ?? '' };\n}\n\nexport function resetGhAvailabilityCache(): void {\n ghAvailabilityCache = null;\n}\n","import { execa } from 'execa';\nimport type { GitProviderName } from './types.js';\n\ninterface DetectResult {\n readonly provider: GitProviderName;\n readonly host: string;\n}\n\nexport async function detectProvider(cwd: string): Promise<DetectResult> {\n const res = await execa('git', ['remote', 'get-url', 'origin'], { cwd, reject: false });\n if (res.exitCode !== 0) {\n throw new Error(\n 'No `origin` git remote configured. Initialise the repo and add a remote before running this command.',\n );\n }\n const url = res.stdout.trim();\n return classifyRemoteUrl(url);\n}\n\nexport function classifyRemoteUrl(url: string): DetectResult {\n if (/github\\.com[/:]/.test(url)) return { provider: 'github', host: 'github.com' };\n if (/gitlab\\.com[/:]/.test(url)) return { provider: 'gitlab', host: 'gitlab.com' };\n if (/bitbucket\\.org[/:]/.test(url)) return { provider: 'bitbucket', host: 'bitbucket.org' };\n const hostMatch = url.match(/^(?:https?:\\/\\/|git@)([^:/]+)/);\n return { provider: 'self-hosted', host: hostMatch?.[1] ?? 'unknown' };\n}\n","import { GitHubProvider } from './github.js';\nimport { detectProvider } from './detect.js';\nimport type { GitProvider } from './types.js';\n\nexport { GitHubProvider } from './github.js';\nexport { detectProvider, classifyRemoteUrl } from './detect.js';\nexport type {\n GitProvider,\n GitProviderName,\n RepoMeta,\n BranchProtectionResult,\n PullRequestCreateOptions,\n PullRequestCreated,\n} from './types.js';\n\nexport async function getGitProvider(cwd: string): Promise<GitProvider> {\n const { provider, host } = await detectProvider(cwd);\n if (provider === 'github') return new GitHubProvider();\n throw new Error(\n `Git provider '${provider}' (host: ${host}) is not yet supported. Only GitHub is implemented in workstream C; GitLab/Bitbucket/self-hosted are planned.`,\n );\n}\n","import { DevAuditApiError, DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nexport async function runAuthProbe(ctx: InstallContext): Promise<StepResult> {\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n try {\n await client.listProjects();\n return { step: '1/11 Authenticate', status: 'ok', message: `PAT accepted at ${ctx.baseUrl}` };\n } catch (err) {\n if (err instanceof DevAuditApiError && (err.status === 401 || err.status === 403)) {\n throw new Error(\n `PAT rejected (HTTP ${err.status}). Issue a fresh token at ${ctx.baseUrl}/settings/tokens and retry.`,\n );\n }\n throw err;\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport type { DetectedStack, InstallContext, StepResult } from './types.js';\n\nconst MAX_DEPTH = 3;\nconst SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.turbo']);\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function findPyproject(root: string, depth: number, current: string): Promise<string | null> {\n if (depth > MAX_DEPTH) return null;\n const entries = await fs.readdir(current, { withFileTypes: true });\n for (const e of entries) {\n if (e.isFile() && e.name === 'pyproject.toml') {\n return join(current, e.name);\n }\n }\n for (const e of entries) {\n if (e.isDirectory() && !SKIP_DIRS.has(e.name)) {\n const found = await findPyproject(root, depth + 1, join(current, e.name));\n if (found) return found;\n }\n }\n return null;\n}\n\nexport async function detectStack(ctx: InstallContext): Promise<{ result: StepResult; detected: DetectedStack }> {\n const root = ctx.projectPath;\n if (await fileExists(join(root, 'pyproject.toml'))) {\n return { result: ok('python', '.'), detected: { stack: 'python', workingDirectory: '.' } };\n }\n const nested = await findPyproject(root, 1, root);\n if (nested) {\n const wd = relative(root, nested).split('/').slice(0, -1).join('/') || '.';\n return { result: ok('python', wd), detected: { stack: 'python', workingDirectory: wd } };\n }\n if (await fileExists(join(root, 'package.json'))) {\n return { result: ok('node', '.'), detected: { stack: 'node', workingDirectory: '.' } };\n }\n throw new Error(\n 'Could not detect stack — no pyproject.toml or package.json found within 3 directory levels.',\n );\n}\n\nfunction ok(stack: 'node' | 'python', wd: string): StepResult {\n return {\n step: '2/11 Detect stack',\n status: 'ok',\n message: `stack=${stack} working_directory=${wd} host=railway`,\n data: { stack, workingDirectory: wd, host: 'railway' },\n };\n}\n","import * as clack from '@clack/prompts';\nimport type { DetectedStack, InstallContext, InstallPlan } from './types.js';\nimport { readSdlcConfig } from '../lib/sdlc-config.js';\n\nconst NODE_DEFAULTS = { runtimeVersion: '20', sourceDirs: 'app/ lib/' };\nconst PYTHON_DEFAULTS = { runtimeVersion: '3.11', sourceDirs: 'src/ tests/' };\n\nfunction defaultSlug(projectName: string): string {\n return projectName\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nfunction prodUrlSecretDefault(slug: string): string {\n return slug.toUpperCase().replace(/-/g, '_') + '_PROD_URL';\n}\n\nexport async function collectPlan(\n ctx: InstallContext,\n detected: DetectedStack,\n): Promise<InstallPlan> {\n const defaults = detected.stack === 'node' ? NODE_DEFAULTS : PYTHON_DEFAULTS;\n if (ctx.nonInteractive) {\n return planFromConfig(ctx, detected, defaults);\n }\n return planFromPrompts(ctx, detected, defaults);\n}\n\nasync function planFromConfig(\n ctx: InstallContext,\n detected: DetectedStack,\n defaults: { runtimeVersion: string; sourceDirs: string },\n): Promise<InstallPlan> {\n const cfg = await readSdlcConfig(ctx.projectPath);\n if (!cfg && !ctx.dryRun) {\n throw new Error(\n '--yes requires an existing sdlc-config.json in the project directory. Run without --yes to create one interactively.',\n );\n }\n const slug = cfg?.project_slug ?? defaultSlug(ctx.projectName);\n const runtimeKey = detected.stack === 'node' ? cfg?.node_version : cfg?.python_version;\n const cfgRaw = cfg as Record<string, unknown> | null;\n const existingProdUrlSecret =\n typeof cfgRaw?.['production_url_secret'] === 'string'\n ? (cfgRaw['production_url_secret'] as string)\n : undefined;\n return {\n stack: detected.stack,\n host: 'railway',\n projectSlug: slug,\n runtimeVersion: String(runtimeKey ?? defaults.runtimeVersion),\n sourceDirs: cfg?.source_dirs ?? defaults.sourceDirs,\n workingDirectory: cfg?.working_directory ?? detected.workingDirectory,\n prodUrlSecretName: existingProdUrlSecret ?? prodUrlSecretDefault(slug),\n prodUrlValue: '',\n };\n}\n\nasync function planFromPrompts(\n ctx: InstallContext,\n detected: DetectedStack,\n defaults: { runtimeVersion: string; sourceDirs: string },\n): Promise<InstallPlan> {\n const slugDefault = defaultSlug(ctx.projectName);\n const wdInitialDefault = detected.workingDirectory;\n const answers = await clack.group(\n {\n projectSlug: () => clack.text({ message: 'Project slug', initialValue: slugDefault }),\n runtimeVersion: () =>\n clack.text({\n message: detected.stack === 'node' ? 'Node version' : 'Python version',\n initialValue: defaults.runtimeVersion,\n }),\n sourceDirs: () => clack.text({ message: 'Source dirs (space-sep)', initialValue: defaults.sourceDirs }),\n workingDirectory: () =>\n clack.text({\n message: wdInitialDefault === '.' ? 'Working directory (blank = root)' : 'Working directory',\n initialValue: wdInitialDefault,\n }),\n prodUrlSecretName: ({ results }) =>\n clack.text({\n message: 'Production URL secret name',\n initialValue: prodUrlSecretDefault(String(results.projectSlug ?? slugDefault)),\n }),\n prodUrlValue: () =>\n clack.text({ message: 'Production URL (https://...) — blank to set later', initialValue: '' }),\n },\n {\n onCancel: () => {\n process.stderr.write('Cancelled.\\n');\n process.exit(0);\n },\n },\n );\n const projectSlug = String(answers.projectSlug);\n const workingDirectory = String(answers.workingDirectory) || '.';\n return {\n stack: detected.stack,\n host: 'railway',\n projectSlug,\n runtimeVersion: String(answers.runtimeVersion),\n sourceDirs: String(answers.sourceDirs),\n workingDirectory,\n prodUrlSecretName: String(answers.prodUrlSecretName),\n prodUrlValue: String(answers.prodUrlValue ?? ''),\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { readSdlcConfig } from '../lib/sdlc-config.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nconst NODE_PATHS_IGNORE: readonly string[] = [\n 'SDLC/**',\n 'compliance/**',\n '*.md',\n '.cursorrules',\n '.windsurfrules',\n 'sdlc-config.json',\n 'scripts/upload-evidence.sh',\n 'scripts/validate-compliance-artifacts.sh',\n 'scripts/validate-commits.sh',\n 'scripts/check-requirement-jsdoc.sh',\n];\n\nconst PYTHON_PATHS_IGNORE: readonly string[] = [\n 'SDLC/**',\n 'compliance/**',\n '*.md',\n '.cursorrules',\n '.windsurfrules',\n 'sdlc-config.json',\n];\n\nexport async function writeSdlcConfig(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '4/11 Write sdlc-config.json',\n status: 'skipped',\n message:\n 'developer mode — leaving sdlc-config.json untouched (the team config is already on disk from the project operator). Use --force-team-config if you need to refresh wizard-owned fields.',\n };\n }\n const runtimeKey = plan.stack === 'node' ? 'node_version' : 'python_version';\n const pathsIgnore = plan.stack === 'node' ? NODE_PATHS_IGNORE : PYTHON_PATHS_IGNORE;\n const existing = ((await readSdlcConfig(ctx.projectPath)) as Record<string, unknown> | null) ?? null;\n const defaultedIfNew: Record<string, unknown> = {\n runner: 'ubuntu-latest',\n integration_branch: 'develop',\n release_branch: 'main',\n sast_baseline: 0,\n accepted_dep_risks: '',\n database_service: '',\n database_image: '',\n database_port: '',\n database_env: {},\n app_env: {},\n build_env: {},\n e2e_project: '',\n e2e_start_command: '',\n e2e_setup_command: '',\n e2e_seed_command: '',\n e2e_projects: [],\n e2e_env: {},\n paths_ignore: pathsIgnore,\n uat: { enabled: false, url: '', required_risk_classes: ['payment', 'destructive_migration', 'realtime'] },\n approval: { mode: 'dual_actor', auto_low_risk_threshold: 'LOW' },\n production_review: { enabled: true, terminal_status: 'prod_review' },\n };\n const wizardOwned: Record<string, unknown> = {\n stack: plan.stack,\n host: plan.host,\n project_slug: plan.projectSlug,\n production_url_secret: plan.prodUrlSecretName,\n [runtimeKey]: plan.runtimeVersion,\n working_directory: plan.workingDirectory,\n source_dirs: plan.sourceDirs,\n devaudit: {\n base_url: ctx.baseUrl,\n project_slug: plan.projectSlug,\n api_key_secret: 'DEVAUDIT_API_KEY',\n },\n };\n // Existing values override the \"defaultedIfNew\" defaults (preserves customizations\n // like sast_baseline, accepted_dep_risks, database_*, app_env, build_env, etc.);\n // wizardOwned always wins (stack/host/slug/runtime/source_dirs/working_directory/\n // production_url_secret/devaudit block come from the current install plan).\n const config: Record<string, unknown> = {\n ...defaultedIfNew,\n ...(existing ?? {}),\n ...wizardOwned,\n };\n const outPath = join(ctx.projectPath, 'sdlc-config.json');\n if (ctx.dryRun) {\n const preserved = existing\n ? `preserves existing customizations (${Object.keys(existing).filter((k) => !(k in wizardOwned)).length} non-wizard fields)`\n : 'fresh config';\n return {\n step: '4/11 Write sdlc-config.json',\n status: 'planned',\n message: `would write ${outPath} (stack=${plan.stack}, slug=${plan.projectSlug}) — ${preserved}`,\n };\n }\n await fs.writeFile(outPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n return { step: '4/11 Write sdlc-config.json', status: 'ok', message: `wrote ${outPath}` };\n}\n","import { DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nexport async function findOrCreateProject(\n ctx: InstallContext,\n plan: InstallPlan,\n): Promise<StepResult> {\n if (ctx.dryRun) {\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'planned',\n message: `would create or find project slug='${plan.projectSlug}' on ${ctx.baseUrl}`,\n };\n }\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.getProjectBySlug(plan.projectSlug);\n if (existing) {\n plan.projectId = existing.id;\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'ok',\n message: `project '${plan.projectSlug}' already exists (id ${existing.id.slice(0, 8)}…) — skipping creation`,\n data: { projectId: existing.id, created: false },\n };\n }\n const created = await client.createProject(plan.projectSlug, plan.projectSlug);\n plan.projectId = created.id;\n return {\n step: '5/11 Find or create DevAudit project',\n status: 'ok',\n message: `project '${plan.projectSlug}' created (id ${created.id.slice(0, 8)}…)`,\n data: { projectId: created.id, created: true },\n };\n}\n","import { DevAuditClient } from '../lib/devaudit-api.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nconst KEY_NAME = 'Onboarding-issued';\n\nexport async function issueApiKey(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '6/11 Issue project API key',\n status: 'skipped',\n message:\n \"developer mode — leaving the project's 'Onboarding-issued' API key untouched (the team key is already configured by the project operator).\",\n };\n }\n if (ctx.dryRun) {\n return {\n step: '6/11 Issue project API key',\n status: 'planned',\n message: `would issue API key named '${KEY_NAME}' on project '${plan.projectSlug}' (if not already present)`,\n };\n }\n if (!plan.projectId) {\n throw new Error('projectId missing from plan — step 5 must run before step 6.');\n }\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.listApiKeys(plan.projectId);\n const live = existing.find((k) => k.name === KEY_NAME && k.revoked_at === null);\n if (live) {\n return {\n step: '6/11 Issue project API key',\n status: 'warn',\n message: `'${KEY_NAME}' API key already exists — revoke it in the portal and re-run, or set DEVAUDIT_API_KEY manually`,\n };\n }\n const issued = await client.issueApiKey(plan.projectId, KEY_NAME);\n plan.apiKey = issued.plainTextKey;\n return {\n step: '6/11 Issue project API key',\n status: 'ok',\n message: `issued (will be stored as repo secret DEVAUDIT_API_KEY)`,\n };\n}\n","import type { GitProvider } from '../lib/git-provider/index.js';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\ninterface SecretOperation {\n readonly kind: 'secret' | 'variable';\n readonly name: string;\n readonly value: string;\n}\n\nfunction buildOperations(ctx: InstallContext, plan: InstallPlan): SecretOperation[] {\n const operations: SecretOperation[] = [];\n if (plan.apiKey) operations.push({ kind: 'secret', name: 'DEVAUDIT_API_KEY', value: plan.apiKey });\n operations.push({ kind: 'secret', name: 'DEVAUDIT_USER_TOKEN', value: ctx.token });\n if (plan.prodUrlValue) {\n operations.push({ kind: 'secret', name: plan.prodUrlSecretName, value: plan.prodUrlValue });\n }\n operations.push({ kind: 'variable', name: 'DEVAUDIT_BASE_URL', value: ctx.baseUrl });\n return operations;\n}\n\nfunction buildSkipped(plan: InstallPlan): string[] {\n const skipped: string[] = [];\n if (!plan.apiKey) skipped.push('DEVAUDIT_API_KEY (no new key issued)');\n if (!plan.prodUrlValue) skipped.push(`${plan.prodUrlSecretName} (no value provided)`);\n return skipped;\n}\n\nexport async function setGithubSecrets(\n ctx: InstallContext,\n plan: InstallPlan,\n provider: GitProvider,\n): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '7/11 Set GitHub secrets and variables',\n status: 'skipped',\n message:\n 'developer mode — leaving DEVAUDIT_USER_TOKEN, DEVAUDIT_API_KEY, DEVAUDIT_BASE_URL, and the production-URL secret unchanged. Use --force-team-config to rotate them as the project operator.',\n };\n }\n const operations = buildOperations(ctx, plan);\n if (ctx.dryRun) {\n const summary = operations.map((op) => `${op.kind}:${op.name}`).join(', ');\n return {\n step: '7/11 Set GitHub secrets and variables',\n status: 'planned',\n message: `would set ${summary} via ${provider.name} provider`,\n };\n }\n for (const op of operations) {\n if (op.kind === 'secret') {\n // eslint-disable-next-line no-await-in-loop\n await provider.setSecret(ctx.projectPath, op.name, op.value);\n } else {\n // eslint-disable-next-line no-await-in-loop\n await provider.setVariable(ctx.projectPath, op.name, op.value);\n }\n }\n const skipped = buildSkipped(plan);\n const detail = `${operations.length} item(s) set${skipped.length > 0 ? ` (skipped: ${skipped.join('; ')})` : ''}`;\n return { step: '7/11 Set GitHub secrets and variables', status: 'ok', message: detail };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nasync function commandExists(cmd: string): Promise<boolean> {\n try {\n await execa(process.platform === 'win32' ? 'where' : 'which', [cmd]);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const s = await fs.stat(path);\n return s.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function bootstrapHooks(ctx: InstallContext, plan: InstallPlan): Promise<StepResult> {\n if (ctx.dryRun) {\n const action = plan.stack === 'python' ? 'pre-commit install' : 'npx husky init';\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'planned',\n message: `would run \\`${action}\\` in ${ctx.projectPath}`,\n };\n }\n if (plan.stack === 'python') return bootstrapPython(ctx);\n return bootstrapNode(ctx);\n}\n\nasync function bootstrapPython(ctx: InstallContext): Promise<StepResult> {\n if (!(await commandExists('pre-commit'))) {\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'warn',\n message: 'pre-commit not on PATH — run `pip install pre-commit && pre-commit install` manually',\n };\n }\n await execa('pre-commit', ['install'], { cwd: ctx.projectPath, stdio: 'inherit' });\n await execa('pre-commit', ['install', '--hook-type', 'commit-msg'], { cwd: ctx.projectPath, stdio: 'inherit' });\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: 'pre-commit hooks installed' };\n}\n\nasync function bootstrapNode(ctx: InstallContext): Promise<StepResult> {\n const huskyDir = join(ctx.projectPath, '.husky');\n if (await dirExists(huskyDir)) {\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: '.husky/ already exists' };\n }\n if (!(await commandExists('npx'))) {\n return {\n step: '8/11 Bootstrap hook framework',\n status: 'warn',\n message: 'npx not on PATH — run `npx husky init` manually',\n };\n }\n await execa('npx', ['husky', 'init'], { cwd: ctx.projectPath, stdio: 'inherit' });\n return { step: '8/11 Bootstrap hook framework', status: 'ok', message: '.husky/ bootstrapped' };\n}\n","import type { GitProvider } from '../lib/git-provider/index.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nconst REQUIRED_CHECKS: readonly string[] = [\n 'Compliance Validation',\n 'DevAudit Release Approval',\n 'Quality Gates',\n];\n\nexport async function configureBranchProtection(\n ctx: InstallContext,\n provider: GitProvider,\n): Promise<StepResult> {\n if (ctx.installMode === 'developer') {\n return {\n step: '9/11 Configure branch protection',\n status: 'skipped',\n message:\n 'developer mode — leaving branch protection unchanged. Use --force-team-config to re-apply as the project operator.',\n };\n }\n let meta;\n try {\n meta = await provider.getRepoMeta(ctx.projectPath);\n } catch (err) {\n return {\n step: '9/11 Configure branch protection',\n status: 'warn',\n message: `could not resolve git repo (${(err as Error).message}) — configure manually`,\n };\n }\n const repo = `${meta.owner}/${meta.name}`;\n if (ctx.dryRun) {\n return {\n step: '9/11 Configure branch protection',\n status: 'planned',\n message: `would apply branch protection on ${repo}:${meta.defaultBranch} with checks=${JSON.stringify(REQUIRED_CHECKS)}`,\n };\n }\n const result = await provider.applyBranchProtection(ctx.projectPath, meta.defaultBranch, REQUIRED_CHECKS);\n if (result.applied) {\n return {\n step: '9/11 Configure branch protection',\n status: 'ok',\n message: `required checks on ${meta.defaultBranch}: ${REQUIRED_CHECKS.join(', ')}`,\n };\n }\n return {\n step: '9/11 Configure branch protection',\n status: 'warn',\n message: `${result.message ?? 'branch-protection apply failed'} — configure manually`,\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\n\nexport interface StackAdapter {\n readonly name: string;\n readonly hook_install_dir?: string;\n readonly hooks?: readonly string[];\n readonly hook_config_files?: readonly string[];\n readonly stack_scripts?: readonly string[];\n readonly required_dev_dependencies?: readonly string[];\n readonly manifest_file?: string;\n}\n\nexport interface HostAdapter {\n readonly name: string;\n}\n\nexport async function loadStackAdapter(installerRoot: string, stack: string): Promise<StackAdapter> {\n const path = join(installerRoot, 'sdlc', 'files', 'stacks', stack, 'adapter.json');\n const raw = await fs.readFile(path, 'utf-8');\n return JSON.parse(raw) as StackAdapter;\n}\n\nexport async function loadHostAdapter(installerRoot: string, host: string): Promise<HostAdapter> {\n const path = join(installerRoot, 'sdlc', 'files', 'hosts', host, 'adapter.json');\n const raw = await fs.readFile(path, 'utf-8');\n return JSON.parse(raw) as HostAdapter;\n}\n\nexport async function listStacks(installerRoot: string): Promise<readonly string[]> {\n const dir = join(installerRoot, 'sdlc', 'files', 'stacks');\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('_')).map((e) => e.name);\n}\n\nexport async function listHosts(installerRoot: string): Promise<readonly string[]> {\n const dir = join(installerRoot, 'sdlc', 'files', 'hosts');\n const entries = await fs.readdir(dir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('_')).map((e) => e.name);\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists } from '../lib/fs-utils.js';\nimport { listStacks, listHosts } from '../lib/adapter.js';\n\nexport interface AdapterResolution {\n readonly stack: string;\n readonly host: string;\n readonly deprecatedDefaults: boolean;\n}\n\ninterface PartialConfig {\n readonly stack?: string;\n readonly host?: string;\n}\n\nexport async function resolveAdapters(projectPath: string, installerRoot: string): Promise<AdapterResolution> {\n const configPath = join(projectPath, 'sdlc-config.json');\n let stack = 'node';\n let host = 'railway';\n let deprecatedDefaults = false;\n if (await exists(configPath)) {\n const raw = await fs.readFile(configPath, 'utf-8');\n const cfg = JSON.parse(raw) as PartialConfig;\n if (cfg.stack) {\n stack = cfg.stack;\n } else {\n deprecatedDefaults = true;\n }\n if (cfg.host) {\n host = cfg.host;\n } else {\n deprecatedDefaults = true;\n }\n } else {\n deprecatedDefaults = true;\n }\n const stackPath = join(installerRoot, 'sdlc', 'files', 'stacks', stack, 'adapter.json');\n if (!(await exists(stackPath))) {\n const available = await listStacks(installerRoot);\n throw new Error(`stack adapter not found: stacks/${stack}/adapter.json. Available: ${available.join(', ')}`);\n }\n const hostPath = join(installerRoot, 'sdlc', 'files', 'hosts', host, 'adapter.json');\n if (!(await exists(hostPath))) {\n const available = await listHosts(installerRoot);\n throw new Error(`host adapter not found: hosts/${host}/adapter.json. Available: ${available.join(', ')}`);\n }\n return { stack, host, deprecatedDefaults };\n}\n","import { join } from 'node:path';\nimport { copyFile, ensureDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2a: Sync _common/*.md stage docs into the consumer's SDLC/.\n */\nexport async function syncStageDocs(ctx: SyncContext): Promise<SectionResult> {\n const sdlcTarget = join(ctx.projectPath, 'SDLC');\n await ensureDir(sdlcTarget);\n const commonDir = join(ctx.installerRoot, 'sdlc', 'files', '_common');\n const mdFiles = await listFiles(commonDir, (n) => n.endsWith('.md'));\n for (const src of mdFiles) {\n await copyFile(src, join(sdlcTarget, fileBasename(src)));\n }\n return {\n name: '_common docs',\n filesSynced: mdFiles.length,\n message: 'synced to SDLC/',\n };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nconst CURSOR_POINTER = `# Cursor Rules\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for all development standards in this repository.\n`;\n\nconst WINDSURF_POINTER = `# Windsurf Rules\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for all development standards in this repository.\n`;\n\nconst GEMINI_POINTER = `# GEMINI.md\n\nThis file provides guidance to Gemini CLI when working in this repository.\n\n## Context\n\n**Project Standards:** See **[./INSTRUCTIONS.md](./INSTRUCTIONS.md)** for project rules, architecture, and development standards.\n\nPlease adhere to the instructions in \\`INSTRUCTIONS.md\\` as the **Single Source of Truth**.\n`;\n\nconst CLAUDE_POINTER_TAIL = `\n## Project Standards\n\nAll project rules, architectural standards, and development workflows are consolidated in:\n👉 **[INSTRUCTIONS.md](./INSTRUCTIONS.md)**\n\nPlease refer to \\`INSTRUCTIONS.md\\` as the **Single Source of Truth** for:\n- Tech Stack & Architecture\n- Code Style & Formatting\n- Security & Compliance\n- SDLC Development Process & Quality Gates\n`;\n\nconst CLAUDE_NEW = `# CLAUDE.md\n\nThis file provides guidance to Claude Code when working in this repository.\n${CLAUDE_POINTER_TAIL}`;\n\nconst SDLC_HEADER = '## SDLC Compliance Process (MANDATORY)';\n\nasync function writePointerFile(path: string, content: string): Promise<void> {\n await fs.writeFile(path, content);\n}\n\nasync function updateClaudeFile(target: string): Promise<void> {\n if (!(await exists(target))) {\n await fs.writeFile(target, CLAUDE_NEW);\n return;\n }\n let body = await fs.readFile(target, 'utf-8');\n const sdlcIdx = body.indexOf(SDLC_HEADER);\n if (sdlcIdx >= 0) {\n body = body.slice(0, sdlcIdx).trimEnd() + '\\n';\n }\n if (!body.includes('INSTRUCTIONS.md')) {\n body = body.trimEnd() + '\\n' + CLAUDE_POINTER_TAIL;\n }\n await fs.writeFile(target, body);\n}\n\nasync function updateInstructionsFile(target: string, sdlcContent: string): Promise<void> {\n if (!(await exists(target))) {\n const body =\n '# Project Instructions & Standards (Single Source of Truth)\\n' +\n '\\n' +\n 'This document serves as the primary reference for all development in this repository.\\n' +\n '\\n' +\n sdlcContent;\n await fs.writeFile(target, body);\n return;\n }\n let existing = await fs.readFile(target, 'utf-8');\n const sdlcIdx = existing.indexOf(SDLC_HEADER);\n if (sdlcIdx >= 0) {\n existing = existing.slice(0, sdlcIdx).replace(/\\n*$/u, '\\n');\n } else {\n existing = existing.replace(/\\n*$/u, '\\n');\n }\n const next = existing + '\\n' + sdlcContent;\n await fs.writeFile(target, next);\n}\n\n/**\n * Section 2b: AI rule files (single source of truth pattern).\n * - .cursorrules / .windsurfrules / GEMINI.md → pointer files (overwritten)\n * - CLAUDE.md → preserve project header, append pointer if missing,\n * strip any prior SDLC section\n * - INSTRUCTIONS.md → preserve project section, append/replace SDLC section\n * from sdlc/ai-rules/INSTRUCTIONS-SDLC.md\n */\nexport async function syncAiRules(ctx: SyncContext): Promise<SectionResult> {\n const sdlcSource = join(ctx.installerRoot, 'sdlc', 'ai-rules', 'INSTRUCTIONS-SDLC.md');\n if (!(await exists(sdlcSource))) {\n return { name: 'AI rule pointers + INSTRUCTIONS.md', filesSynced: 0, skipped: true, message: 'INSTRUCTIONS-SDLC.md not found' };\n }\n const sdlcContent = await fs.readFile(sdlcSource, 'utf-8');\n await writePointerFile(join(ctx.projectPath, '.cursorrules'), CURSOR_POINTER);\n await writePointerFile(join(ctx.projectPath, '.windsurfrules'), WINDSURF_POINTER);\n await writePointerFile(join(ctx.projectPath, 'GEMINI.md'), GEMINI_POINTER);\n await updateClaudeFile(join(ctx.projectPath, 'CLAUDE.md'));\n await updateInstructionsFile(join(ctx.projectPath, 'INSTRUCTIONS.md'), sdlcContent);\n return { name: 'AI rule pointers + INSTRUCTIONS.md', filesSynced: 5, message: 'synced' };\n}\n","import { join } from 'node:path';\nimport { copyFile, exists, isDir } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2c: Stack hooks (e.g. husky for node).\n *\n * Copies hooks listed in the adapter's `hooks` array into the consumer's\n * `<hook_install_dir>/` (e.g. .husky/). Also copies `hook_config_files`\n * (e.g. commitlint.config.mjs, lint-staged.config.mjs, .prettierrc.json)\n * to the consumer's repo root.\n *\n * Skipped if the consumer hasn't bootstrapped the hook framework yet\n * (the install dir doesn't exist).\n */\nexport async function syncStackHooks(ctx: SyncContext): Promise<SectionResult> {\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const hookInstallDir = adapter.hook_install_dir ?? '';\n if (!hookInstallDir) {\n return { name: `${ctx.stack} hooks`, filesSynced: 0, skipped: true, message: 'no hook_install_dir declared' };\n }\n const targetDir = join(ctx.projectPath, hookInstallDir);\n if (!(await isDir(targetDir))) {\n return {\n name: `${ctx.stack} hooks`,\n filesSynced: 0,\n skipped: true,\n message: `${hookInstallDir}/ not found — bootstrap hook framework first`,\n };\n }\n const stackHooksDir = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'hooks');\n if (!(await isDir(stackHooksDir))) {\n return { name: `${ctx.stack} hooks`, filesSynced: 0, skipped: true, message: 'stack has no hooks/' };\n }\n let count = 0;\n for (const hook of adapter.hooks ?? []) {\n const src = join(stackHooksDir, hook);\n if (await exists(src)) {\n const dst = join(targetDir, hook);\n await copyFile(src, dst, 0o755);\n count += 1;\n }\n }\n for (const cfg of adapter.hook_config_files ?? []) {\n const src = join(stackHooksDir, cfg);\n if (await exists(src)) {\n const dst = join(ctx.projectPath, cfg);\n await copyFile(src, dst);\n count += 1;\n }\n }\n return { name: `${ctx.stack} hooks`, filesSynced: count, message: `synced to ${hookInstallDir}/` };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { exists } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\ninterface PartialPackageJson {\n readonly devDependencies?: Readonly<Record<string, string>>;\n}\n\n/**\n * Section 2c-ii: Install missing stack devDependencies (node only for now).\n *\n * Preserves the fix from META-COMPLY #313 / #314: surface npm install\n * failures (no `2>/dev/null`) and retry with `--legacy-peer-deps` if the\n * first attempt fails. Abort the sync if both attempts fail.\n */\nexport async function syncStackDeps(ctx: SyncContext): Promise<SectionResult> {\n if (ctx.stack !== 'node') {\n return { name: `${ctx.stack} deps`, filesSynced: 0, skipped: true };\n }\n const pkgPath = join(ctx.projectPath, 'package.json');\n if (!(await exists(pkgPath))) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, skipped: true, message: 'no package.json' };\n }\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const required = adapter.required_dev_dependencies ?? [];\n if (required.length === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, message: 'no required_dev_dependencies declared' };\n }\n const raw = await fs.readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as PartialPackageJson;\n const installed = new Set(Object.keys(pkg.devDependencies ?? {}));\n const missing = required.filter((dep) => !installed.has(dep));\n if (missing.length === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: 0, message: 'all present' };\n }\n const args = ['install', '--save-dev', ...missing];\n const first = await execa('npm', args, { cwd: ctx.projectPath, reject: false, stdio: 'inherit' });\n if (first.exitCode === 0) {\n return { name: `${ctx.stack} deps`, filesSynced: missing.length, message: `installed ${missing.join(' ')}` };\n }\n const legacyArgs = ['install', '--save-dev', '--legacy-peer-deps', ...missing];\n const second = await execa('npm', legacyArgs, { cwd: ctx.projectPath, reject: false, stdio: 'inherit' });\n if (second.exitCode === 0) {\n return {\n name: `${ctx.stack} deps`,\n filesSynced: missing.length,\n message: `installed ${missing.join(' ')} (with --legacy-peer-deps)`,\n };\n }\n throw new Error(\n `Failed to install ${ctx.stack} deps. Fix manually: cd ${ctx.projectPath} && npm install --save-dev ${missing.join(' ')}`,\n );\n}\n","import { join } from 'node:path';\nimport { copyFile, exists, isDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport { loadStackAdapter } from '../lib/adapter.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nfunction isTestScript(name: string): boolean {\n return name.endsWith('.test.sh');\n}\n\n/**\n * Section 2d: Scripts. Three sources merged into the consumer's scripts/:\n * - _common/scripts/*.sh (excluding *.test.sh)\n * - stacks/<stack>/scripts/* (per adapter's stack_scripts list)\n * - the top-level scripts/upload-evidence.sh from this repo\n *\n * Skipped if the consumer has no scripts/ directory.\n */\nexport async function syncScripts(ctx: SyncContext): Promise<SectionResult> {\n const scriptsDst = join(ctx.projectPath, 'scripts');\n if (!(await isDir(scriptsDst))) {\n return { name: 'scripts', filesSynced: 0, skipped: true, message: 'scripts/ not found' };\n }\n let count = 0;\n const commonScriptsSrc = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'scripts');\n if (await isDir(commonScriptsSrc)) {\n const candidates = await listFiles(commonScriptsSrc, (n) => n.endsWith('.sh') && !isTestScript(n));\n for (const src of candidates) {\n await copyFile(src, join(scriptsDst, fileBasename(src)), 0o755);\n count += 1;\n }\n }\n const adapter = await loadStackAdapter(ctx.installerRoot, ctx.stack);\n const stackScriptsSrc = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'scripts');\n if ((await isDir(stackScriptsSrc)) && adapter.stack_scripts) {\n for (const scriptName of adapter.stack_scripts) {\n const src = join(stackScriptsSrc, scriptName);\n if (await exists(src)) {\n await copyFile(src, join(scriptsDst, scriptName), 0o755);\n count += 1;\n }\n }\n }\n const uploadEvidence = join(ctx.installerRoot, 'scripts', 'upload-evidence.sh');\n if (await exists(uploadEvidence)) {\n await copyFile(uploadEvidence, join(scriptsDst, 'upload-evidence.sh'), 0o755);\n count += 1;\n }\n return { name: 'scripts', filesSynced: count, message: 'synced to scripts/' };\n}\n","import { join } from 'node:path';\nimport { copyFile, ensureDir, isDir, listFiles, fileBasename } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e (issue templates subset): GitHub issue templates.\n */\nexport async function syncIssueTemplates(ctx: SyncContext): Promise<SectionResult> {\n const src = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'github', 'ISSUE_TEMPLATE');\n if (!(await isDir(src))) {\n return { name: 'Issue templates', filesSynced: 0, skipped: true };\n }\n const dst = join(ctx.projectPath, '.github', 'ISSUE_TEMPLATE');\n await ensureDir(dst);\n const files = await listFiles(src, (n) => n.endsWith('.yml'));\n for (const file of files) {\n await copyFile(file, join(dst, fileBasename(file)));\n }\n return { name: 'Issue templates', filesSynced: files.length, message: 'synced to .github/ISSUE_TEMPLATE/' };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { copyDir, isDir, ensureDir } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e-ii: Claude Code skills.\n *\n * Skills live under sdlc/files/_common/skills/<name>/ (universal) and\n * sdlc/files/stacks/<stack>/skills/<name>/ (stack-specific). Each is a\n * directory with SKILL.md + optional references/ assets/ scripts/.\n * They sync to the consumer's .claude/skills/<name>/.\n *\n * Behaviour: replace each skill destination dir wholesale (matches bash\n * rsync --delete) so stale skill artifacts don't accumulate.\n */\nexport async function syncSkills(ctx: SyncContext): Promise<SectionResult> {\n const skillDst = join(ctx.projectPath, '.claude', 'skills');\n const commonSkills = join(ctx.installerRoot, 'sdlc', 'files', '_common', 'skills');\n const stackSkills = join(ctx.installerRoot, 'sdlc', 'files', 'stacks', ctx.stack, 'skills');\n await ensureDir(skillDst);\n let count = 0;\n for (const src of [commonSkills, stackSkills]) {\n if (!(await isDir(src))) continue;\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name.startsWith('_')) continue;\n const skillSrc = join(src, entry.name);\n const skillDstDir = join(skillDst, entry.name);\n await copyDir(skillSrc, skillDstDir, true);\n count += 1;\n }\n }\n if (count === 0) {\n return { name: 'Claude Code skills', filesSynced: 0, skipped: true };\n }\n return { name: 'Claude Code skills', filesSynced: count, message: `${count} synced to .claude/skills/` };\n}\n","import { join } from 'node:path';\nimport { copyFile, exists } from '../lib/fs-utils.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\n/**\n * Section 2e-iii: E2E evidence helper (node stack only).\n *\n * The e2e-test-engineer skill prescribes an evidenceShot() helper for\n * per-AC screenshot evidence. Emit the canonical helper from the skill's\n * references/ into the consumer's e2e/helpers/ so tests can import it\n * as `./helpers/evidence`. Python-stack projects don't use Playwright.\n *\n * v0.1.35: also syncs `evidence-shot-core.ts` — the helper imports the\n * pure validation + filename composition + origin auto-detect from\n * that sibling file. Pre-0.1.35 sync omitted it and broke tsc on the\n * consumer side.\n */\nconst HELPER_FILES = ['evidence.ts', 'evidence-shot-core.ts'] as const;\n\nexport async function syncEvidenceHelper(ctx: SyncContext): Promise<SectionResult> {\n if (ctx.stack !== 'node') {\n return { name: 'E2E evidence helper', filesSynced: 0, skipped: true };\n }\n const srcDir = join(\n ctx.installerRoot,\n 'sdlc',\n 'files',\n '_common',\n 'skills',\n 'e2e-test-engineer',\n 'references',\n );\n let copied = 0;\n const missing: string[] = [];\n for (const fname of HELPER_FILES) {\n const src = join(srcDir, fname);\n if (!(await exists(src))) {\n missing.push(fname);\n continue;\n }\n const dst = join(ctx.projectPath, 'e2e', 'helpers', fname);\n await copyFile(src, dst);\n copied += 1;\n }\n if (copied === 0) {\n return { name: 'E2E evidence helper', filesSynced: 0, skipped: true, message: 'no sources found' };\n }\n const message =\n missing.length > 0\n ? `synced ${copied} to e2e/helpers/ (missing: ${missing.join(', ')})`\n : `synced to e2e/helpers/ (${HELPER_FILES.join(' + ')})`;\n return { name: 'E2E evidence helper', filesSynced: copied, message };\n}\n","/**\n * Token substitution for CI workflow templates. The bash version uses sed for\n * scalar tokens and awk for block tokens (multi-line replacements). We do both\n * with plain string operations.\n */\n\nexport type TokenMap = Readonly<Record<string, string>>;\n\n/**\n * Replace `{{TOKEN}}` occurrences with `tokens[TOKEN]`. Performs simple text\n * replacement (not regex), so tokens with reserved regex characters are safe.\n */\nexport function substituteTokens(content: string, tokens: TokenMap): string {\n let out = content;\n for (const [key, value] of Object.entries(tokens)) {\n const needle = `{{${key}}}`;\n out = out.split(needle).join(value);\n }\n return out;\n}\n\n/**\n * Replace lines that contain `{{TOKEN}}` with the given block (multi-line).\n * Matches the bash `replace_block` awk helper: a line containing the token\n * is replaced wholesale with the block content (the original line is dropped).\n *\n * When the replacement is the empty string, the line is dropped entirely\n * rather than leaving a blank line. Otherwise an empty `{{DATABASE_ENV}}`\n * substitution leaves a stray newline inside `env:` blocks that YAML\n * parsers reject (prettier flagged this on WGB v0.1.34 update).\n */\nexport function substituteBlocks(content: string, blocks: TokenMap): string {\n if (Object.keys(blocks).length === 0) return content;\n const out: string[] = [];\n for (const line of content.split('\\n')) {\n let matched = false;\n for (const [key, replacement] of Object.entries(blocks)) {\n const needle = `{{${key}}}`;\n if (line.includes(needle)) {\n matched = true;\n if (replacement.length > 0) out.push(replacement);\n // empty replacement → drop the line entirely\n break;\n }\n }\n if (!matched) out.push(line);\n }\n return out.join('\\n');\n}\n\n/**\n * Strip the `services:` block from a workflow file. Used when the consumer\n * project has no database service configured — the template ships with a\n * `services:` block that would otherwise reference an empty service name.\n *\n * Matches bash: `sed -i '/^ services:/,/^$/d' \"$OUTPUT_PATH\"`.\n */\nexport function stripServicesBlock(content: string): string {\n const lines = content.split('\\n');\n const out: string[] = [];\n let inServices = false;\n for (const line of lines) {\n if (!inServices && /^ {4}services:\\s*$/.test(line)) {\n inServices = true;\n continue;\n }\n if (inServices) {\n if (line.trim() === '') {\n inServices = false;\n continue;\n }\n continue;\n }\n out.push(line);\n }\n return out.join('\\n');\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { exists, isDir, ensureDir } from '../lib/fs-utils.js';\nimport { substituteTokens, substituteBlocks, stripServicesBlock } from '../lib/templates.js';\nimport type { SyncContext, SectionResult } from './types.js';\n\nconst CI_TEMPLATES = [\n 'ci.yml.template',\n 'ci-status-fallback.yml.template',\n 'compliance-validation.yml.template',\n 'check-release-approval.yml.template',\n 'post-deploy-prod.yml.template',\n 'compliance-evidence.yml.template',\n 'close-out-release.yml.template',\n // DevAudit-Installer#98 WS3: quarterly cron → auto-PR with the\n // periodic-review.md regenerated from local stats.\n 'periodic-review.yml.template',\n // DevAudit-Installer#98 WS4: fires on `label:incident` issue close →\n // auto-PR with the issue exported to compliance/governance/.\n 'incident-export.yml.template',\n];\n\nconst OLD_WORKFLOWS_TO_REMOVE = ['test-on-pr.yml', 'check-uat-approval.yml'];\n\ninterface SdlcConfig {\n readonly project_slug: string;\n readonly production_url_secret: string;\n readonly node_version?: string | number;\n readonly python_version?: string | number;\n readonly working_directory?: string;\n readonly runner: string;\n readonly source_dirs: string;\n readonly sast_baseline: number | string;\n readonly accepted_dep_risks: string;\n readonly database_service: string;\n readonly database_image: string;\n readonly database_port: string;\n readonly database_env?: Readonly<Record<string, string>>;\n readonly app_env?: Readonly<Record<string, string>>;\n readonly build_env?: Readonly<Record<string, string>>;\n readonly e2e_project: string;\n readonly e2e_start_command: string;\n // Optional pre-E2E setup command (foreground, blocking) run before the dev\n // server starts — e.g. `supabase start` + load schema + seed for a disposable\n // local database. Multi-line allowed. Absent → no setup step rendered.\n readonly e2e_setup_command?: string;\n // Authenticated e2e (report-only). Optional; absent → no extra step rendered.\n readonly e2e_seed_command?: string;\n readonly e2e_projects?: readonly string[];\n // Env applied to the E2E setup step, the (blocking) dev-server step, and the\n // blocking + report-only E2E test steps. Use it to point E2E at a local stack\n // (e.g. E2E_LOCAL=1 + local Supabase coords + a dummy email key), overriding\n // the job-level remote secrets so tests never touch production.\n readonly e2e_env?: Readonly<Record<string, string>>;\n readonly paths_ignore?: readonly string[];\n}\n\nfunction indentEnvBlock(env: Record<string, string>, indent: number): string {\n const pad = ' '.repeat(indent);\n return Object.entries(env)\n .map(([k, v]) => `${pad}${k}: ${v}`)\n .join('\\n');\n}\n\n/**\n * Build the optional pre-E2E setup step (foreground, blocking) injected before\n * the dev server starts. Renders only when e2e_setup_command is set, so existing\n * projects regenerate an identical ci.yml. Carries e2e_env so the setup command\n * (e.g. `supabase start` + schema load + seed) sees the local-stack coords.\n * A multi-line command is emitted as a `run: |` block scalar.\n */\nfunction buildE2eSetupStep(cfg: SdlcConfig): string {\n const cmd = (cfg.e2e_setup_command ?? '').trim();\n if (!cmd) return '';\n const env = cfg.e2e_env ?? {};\n const lines = [' - name: E2E setup'];\n if (Object.keys(env).length > 0) lines.push(' env:', indentEnvBlock({ ...env }, 10));\n if (cmd.includes('\\n')) {\n lines.push(' run: |');\n for (const l of cmd.split('\\n')) lines.push(` ${l}`);\n } else {\n lines.push(` run: ${cmd}`);\n }\n lines.push('');\n return lines.join('\\n');\n}\n\n/**\n * Build the blocking \"Start dev server\" step. Rebuilt in code (rather than left\n * inline in the template) so e2e_env can be threaded onto the dev-server process\n * — overriding the job-level remote secrets so the server talks to the local\n * stack. With no e2e_env the output is identical to the previous inline step.\n */\nfunction buildE2eDevServerStep(cfg: SdlcConfig): string {\n const env = cfg.e2e_env ?? {};\n const lines = [' - name: Start dev server'];\n if (Object.keys(env).length > 0) lines.push(' env:', indentEnvBlock({ ...env }, 10));\n lines.push(` run: ${cfg.e2e_start_command} &`);\n return lines.join('\\n');\n}\n\n/**\n * Build the blocking \"E2E Tests\" step. Rebuilt in code so e2e_env can be threaded\n * onto the Playwright process (specs read it to reach the local stack directly).\n * With no e2e_env the output is identical to the previous inline step, comment\n * and all.\n */\nfunction buildE2eTestStep(cfg: SdlcConfig): string {\n const env = cfg.e2e_env ?? {};\n const lines = [\n ' - name: E2E Tests',\n ' env:',\n ' # PLAYWRIGHT_JSON_OUTPUT_NAME makes the json reporter write straight',\n ' # to the file. Capturing stdout (`> e2e-results.json`) instead mixed',\n ' # the html reporter\\'s \"To open report\" line in after the JSON blob',\n ' # and produced an unparseable file (DevAudit #48). html report still',\n ' # lands in playwright-report/.',\n ' PLAYWRIGHT_HTML_REPORTER_OPEN: never',\n ' PLAYWRIGHT_JSON_OUTPUT_NAME: e2e-results.json',\n ];\n if (Object.keys(env).length > 0) lines.push(indentEnvBlock({ ...env }, 10));\n lines.push(` run: npx playwright test --project=${cfg.e2e_project} --reporter=json,html`);\n return lines.join('\\n');\n}\n\n/**\n * Build the optional \"authenticated e2e\" steps injected after the blocking\n * smoke e2e gate. Report-only by design (continue-on-error): authenticated\n * flows (auth-setup + seeded fixtures) are flakier than smoke, so failures\n * surface as evidence without blocking the merge until proven stable. Renders\n * empty (no step) unless the consumer configures e2e_projects and/or\n * e2e_seed_command — so existing projects regenerate to an identical ci.yml.\n */\nfunction buildAuthenticatedE2eStep(cfg: SdlcConfig): string {\n const projects = cfg.e2e_projects ?? [];\n const seed = (cfg.e2e_seed_command ?? '').trim();\n if (projects.length === 0 && !seed) return '';\n const env = cfg.e2e_env ?? {};\n const envBlock = Object.keys(env).length > 0 ? indentEnvBlock({ ...env }, 10) : '';\n const lines: string[] = [];\n if (seed) {\n lines.push(\n '',\n ' - name: Seed E2E test data (report-only)',\n ' if: always()',\n ' continue-on-error: true',\n );\n if (envBlock) lines.push(' env:', envBlock);\n lines.push(` run: ${seed}`);\n }\n if (projects.length > 0) {\n const flags = projects.map((p) => `--project=${p}`).join(' ');\n lines.push(\n '',\n ' - name: Authenticated E2E (report-only)',\n ' if: always()',\n ' continue-on-error: true',\n ' env:',\n ' PLAYWRIGHT_HTML_REPORTER_OPEN: never',\n ' PLAYWRIGHT_JSON_OUTPUT_NAME: e2e-auth-results.json',\n );\n if (envBlock) lines.push(envBlock);\n lines.push(` run: npx playwright test ${flags} --reporter=json,html`);\n }\n return lines.join('\\n');\n}\n\nfunction buildDbUriStep(dbService: string, dbPort: string): string {\n if (dbService !== 'mongodb') return '';\n return [\n ' - name: Set database URI from dynamic port',\n ' run: |',\n ` DB_PORT=\"\\${{ job.services.${dbService}.ports['${dbPort}'] }}\"`,\n ' echo \"MONGODB_WAWAGARDENBAR_APP_URI=mongodb://localhost:${DB_PORT}\" >> \"$GITHUB_ENV\"',\n ' echo \"Database on port: ${DB_PORT}\"',\n ].join('\\n');\n}\n\n/**\n * Section 2f: Generate CI workflows from templates + sdlc-config.json.\n *\n * Skipped if the consumer has no sdlc-config.json or no .github/workflows/.\n */\nexport async function syncCiTemplates(ctx: SyncContext): Promise<SectionResult> {\n const configPath = join(ctx.projectPath, 'sdlc-config.json');\n const workflowsDir = join(ctx.projectPath, '.github', 'workflows');\n if (!(await exists(configPath))) {\n return { name: 'CI workflows', filesSynced: 0, skipped: true, message: 'no sdlc-config.json' };\n }\n if (!(await isDir(workflowsDir))) {\n return { name: 'CI workflows', filesSynced: 0, skipped: true, message: '.github/workflows/ not found' };\n }\n await ensureDir(workflowsDir);\n const cfg = JSON.parse(await fs.readFile(configPath, 'utf-8')) as SdlcConfig;\n for (const oldName of OLD_WORKFLOWS_TO_REMOVE) {\n const oldPath = join(workflowsDir, oldName);\n if (await exists(oldPath)) await fs.rm(oldPath);\n }\n const workingDirectory = cfg.working_directory && cfg.working_directory !== '.' ? cfg.working_directory : '';\n const workingDirPrefix = workingDirectory ? `${workingDirectory.replace(/\\/$/, '')}/` : '';\n const tokens: Record<string, string> = {\n PROJECT_SLUG: cfg.project_slug,\n PRODUCTION_URL_SECRET: cfg.production_url_secret,\n NODE_VERSION: String(cfg.node_version ?? ''),\n PYTHON_VERSION: String(cfg.python_version ?? ''),\n WORKING_DIRECTORY: workingDirectory || '.',\n WORKING_DIR_PREFIX: workingDirPrefix,\n RUNNER: cfg.runner,\n SOURCE_DIRS: cfg.source_dirs,\n SAST_BASELINE: String(cfg.sast_baseline),\n ACCEPTED_DEP_RISKS: cfg.accepted_dep_risks,\n DATABASE_SERVICE: cfg.database_service,\n DATABASE_IMAGE: cfg.database_image,\n DATABASE_PORT: cfg.database_port,\n E2E_PROJECT: cfg.e2e_project,\n E2E_START_COMMAND: cfg.e2e_start_command,\n };\n const pathsIgnoreBlock = (cfg.paths_ignore ?? []).map((p) => ` - '${p}'`).join('\\n');\n const blocks: Record<string, string> = {\n PATHS_IGNORE: pathsIgnoreBlock,\n DATABASE_ENV: cfg.database_env ? indentEnvBlock({ ...cfg.database_env }, 6) : '',\n APP_ENV: cfg.app_env ? indentEnvBlock({ ...cfg.app_env }, 6) : '',\n BUILD_ENV: cfg.build_env ? indentEnvBlock({ ...cfg.build_env }, 10) : '',\n DATABASE_URI_STEP: buildDbUriStep(cfg.database_service, cfg.database_port),\n E2E_SETUP_STEP: buildE2eSetupStep(cfg),\n E2E_DEV_SERVER_STEP: buildE2eDevServerStep(cfg),\n E2E_TEST_STEP: buildE2eTestStep(cfg),\n E2E_AUTHENTICATED_STEP: buildAuthenticatedE2eStep(cfg),\n };\n let count = 0;\n for (const tmpl of CI_TEMPLATES) {\n const stackTmpl = join(ctx.installerRoot, 'sdlc', 'files', 'ci', ctx.stack, tmpl);\n const defaultTmpl = join(ctx.installerRoot, 'sdlc', 'files', 'ci', tmpl);\n let tmplPath: string;\n if (await exists(stackTmpl)) {\n tmplPath = stackTmpl;\n } else if (await exists(defaultTmpl)) {\n tmplPath = defaultTmpl;\n } else {\n continue;\n }\n const outputName = tmpl.replace(/\\.template$/, '');\n const outputPath = join(workflowsDir, outputName);\n let content = await fs.readFile(tmplPath, 'utf-8');\n content = substituteTokens(content, tokens);\n content = substituteBlocks(content, blocks);\n if (!cfg.database_service) {\n content = stripServicesBlock(content);\n }\n await fs.writeFile(outputPath, content);\n count += 1;\n }\n return { name: 'CI workflows', filesSynced: count, message: `${count} generated` };\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { isDir, listFiles, fileBasename, exists } from '../lib/fs-utils.js';\n\nconst TIER_1_DOCS = ['Test_Policy.md', 'Test_Strategy.md', 'Test_Architecture.md'];\n\n/**\n * Post-sync validation. Surfaces warnings that don't fail the sync but the\n * operator should see before committing.\n */\nexport async function runValidation(projectPath: string): Promise<readonly string[]> {\n const warnings: string[] = [];\n const workflowsDir = join(projectPath, '.github', 'workflows');\n if (await isDir(workflowsDir)) {\n const ymls = await listFiles(workflowsDir, (n) => n.endsWith('.yml'));\n for (const wf of ymls) {\n const content = await fs.readFile(wf, 'utf-8');\n const name = fileBasename(wf);\n if (content.includes('push:') && !content.includes('pull_request:')) {\n const dead = (content.match(/event_name.*pull_request/g) ?? []).length;\n if (dead > 0) {\n warnings.push(`${name} has ${dead} dead 'event_name == pull_request' condition(s) (push-only trigger)`);\n }\n }\n if (/require.*package\\.json.*version/i.test(content)) {\n warnings.push(`${name} uses package.json for version (should be date-based)`);\n }\n if (content.includes('raw.githubusercontent.com/metasession-dev/devaudit')) {\n warnings.push(`${name} downloads from DevAudit at runtime (should use local scripts)`);\n }\n }\n }\n const sdlcDir = join(projectPath, 'SDLC');\n if (await isDir(sdlcDir)) {\n for (const doc of TIER_1_DOCS) {\n if (!(await exists(join(sdlcDir, doc)))) {\n warnings.push(`Missing Tier 1 doc: SDLC/${doc}`);\n }\n }\n }\n return warnings;\n}\n","import { basename, resolve } from 'node:path';\nimport { isDir } from '../lib/fs-utils.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { resolveAdapters } from './resolve-adapters.js';\nimport { syncStageDocs } from './stage-docs.js';\nimport { syncAiRules } from './ai-rules.js';\nimport { syncStackHooks } from './stack-hooks.js';\nimport { syncStackDeps } from './stack-deps.js';\nimport { syncScripts } from './scripts.js';\nimport { syncIssueTemplates } from './issue-templates.js';\nimport { syncSkills } from './skills.js';\nimport { syncEvidenceHelper } from './evidence-helper.js';\nimport { syncCiTemplates } from './ci-templates.js';\nimport { runValidation } from './validation.js';\nimport { logger } from '../lib/logger.js';\nimport type { SyncContext, SectionResult, SyncReport } from './types.js';\n\nconst SECTION_RUNNERS: ReadonlyArray<{\n readonly key: string;\n readonly run: (ctx: SyncContext) => Promise<SectionResult>;\n}> = [\n { key: '2a', run: syncStageDocs },\n { key: '2b', run: syncAiRules },\n { key: '2c', run: syncStackHooks },\n { key: '2c-ii', run: syncStackDeps },\n { key: '2d', run: syncScripts },\n { key: '2e', run: syncIssueTemplates },\n { key: '2e-ii', run: syncSkills },\n { key: '2e-iii', run: syncEvidenceHelper },\n { key: '2f', run: syncCiTemplates },\n];\n\nexport async function syncProject(projectPath: string): Promise<SyncReport> {\n const absPath = resolve(projectPath);\n if (!(await isDir(absPath))) {\n throw new Error(`Project path not found: ${absPath}`);\n }\n const installerRoot = await resolveInstallerRoot();\n const log = logger();\n const projectName = basename(absPath);\n log.info(`--- Syncing to: ${projectName} (${absPath}) ---`);\n const { stack, host, deprecatedDefaults } = await resolveAdapters(absPath, installerRoot);\n log.info(` Stack: ${stack} | Host: ${host}`);\n if (deprecatedDefaults) {\n log.warn(` DEPRECATED: stack/host keys missing from sdlc-config.json — defaulted to ${stack}+${host}.`);\n }\n const ctx: SyncContext = { installerRoot, projectPath: absPath, projectName, stack, host };\n const sections: SectionResult[] = [];\n let total = 0;\n for (const { key, run } of SECTION_RUNNERS) {\n const result = await run(ctx);\n sections.push(result);\n total += result.filesSynced;\n if (result.skipped) {\n log.log(` [${key}] ${result.name}: SKIPPED${result.message ? ` (${result.message})` : ''}`);\n } else {\n log.log(` [${key}] ${result.name}: ${result.filesSynced} file(s)${result.message ? ` — ${result.message}` : ''}`);\n }\n }\n log.log('');\n log.info(` Total: ${total} files synced`);\n log.log('');\n log.log(' --- Validation ---');\n const warnings = await runValidation(absPath);\n if (warnings.length === 0) {\n log.success(' All validation checks passed');\n } else {\n for (const w of warnings) log.warn(` ${w}`);\n }\n log.log('');\n return { project: projectName, stack, host, sections, totalFilesSynced: total, warnings };\n}\n\nexport async function syncAll(projectPaths: readonly string[]): Promise<readonly SyncReport[]> {\n const reports: SyncReport[] = [];\n for (const p of projectPaths) {\n try {\n // eslint-disable-next-line no-await-in-loop\n reports.push(await syncProject(p));\n } catch (err) {\n const log = logger();\n log.error(`ERROR syncing ${p}: ${err instanceof Error ? err.message : String(err)}`);\n throw err;\n }\n }\n return reports;\n}\n","import { syncProject } from '../update/index.js';\nimport type { InstallContext, StepResult } from './types.js';\n\nexport async function syncTemplates(ctx: InstallContext): Promise<StepResult> {\n if (ctx.dryRun) {\n return {\n step: '10/11 Sync SDLC templates',\n status: 'planned',\n message: `would run native syncProject() against ${ctx.projectPath}`,\n };\n }\n const report = await syncProject(ctx.projectPath);\n return {\n step: '10/11 Sync SDLC templates',\n status: 'ok',\n message: `synced ${report.totalFilesSynced} files across ${report.sections.length} sections`,\n data: { totalFilesSynced: report.totalFilesSynced },\n };\n}\n","import type { InstallContext, InstallPlan, StepResult } from './types.js';\n\nexport function doneReport(ctx: InstallContext, plan: InstallPlan): StepResult {\n if (ctx.installMode === 'developer') {\n const lines = [\n '',\n ` ${ctx.projectName} — local developer setup complete.`,\n '',\n ' What ran:',\n ' - Templates re-synced from DevAudit-Installer (SDLC/, scripts/, .husky/, …).',\n ' - Git hooks bootstrapped.',\n '',\n ' What was deliberately skipped (developer mode):',\n ' - sdlc-config.json (team config — already on disk).',\n \" - 'Onboarding-issued' API key (team-owned by the project operator).\",\n ' - GitHub repo secrets (DEVAUDIT_USER_TOKEN, DEVAUDIT_API_KEY, DEVAUDIT_BASE_URL).',\n ' - Branch protection rules.',\n '',\n ' Verify your local install:',\n ' devaudit auth status # confirm your personal mctok_… is valid',\n ' devaudit status . # check framework files are present',\n ' devaudit doctor # node ≥22, git, gh, jq, curl',\n '',\n ' See SDLC/joining-an-existing-project.md for the full second-developer guide.',\n ' Rotate team secrets only as the project operator: `devaudit install --force-team-config`.',\n '',\n ];\n return {\n step: '11/11 Done (developer mode)',\n status: 'ok',\n message: lines.join('\\n'),\n data: { mode: 'developer' },\n };\n }\n const branch = 'feat/sdlc-onboarding';\n const lines = [\n '',\n ` ${ctx.projectName} is onboarded.`,\n '',\n ' Next steps:',\n ` cd ${ctx.projectPath}`,\n ' git status # review the diff',\n ` git checkout -b ${branch}`,\n ' git add -A',\n ` git commit -m \"feat: onboard ${plan.projectSlug} to Metasession SDLC\"`,\n ` git push -u origin ${branch}`,\n ' gh pr create --base main',\n '',\n ' After the PR merges:',\n ' - Push a compliance/ doc to develop so compliance-evidence.yml',\n ' registers the first release in DevAudit.',\n ' - Then walk REQ-001 through SDLC/0-project-setup.md → SDLC/5-deploy-main.md.',\n '',\n ];\n return {\n step: '11/11 Done',\n status: 'ok',\n message: lines.join('\\n'),\n data: { nextBranch: branch, mode: 'operator' },\n };\n}\n","import { basename, resolve } from 'node:path';\nimport { resolveToken } from '../lib/auth.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { isDir, isFile } from '../lib/fs-utils.js';\nimport { logger } from '../lib/logger.js';\nimport { getGitProvider, type GitProvider } from '../lib/git-provider/index.js';\nimport { DevAuditClient } from '../lib/devaudit-api.js';\nimport {\n discoverPlugins,\n buildPluginContext,\n runHook,\n type LoadedPlugin,\n} from '../lib/plugin/index.js';\nimport { runAuthProbe } from './auth-probe.js';\nimport { detectStack } from './detect-stack.js';\nimport { collectPlan } from './prompts.js';\nimport { writeSdlcConfig } from './write-config.js';\nimport { findOrCreateProject } from './project.js';\nimport { issueApiKey } from './api-key.js';\nimport { setGithubSecrets } from './github.js';\nimport { bootstrapHooks } from './hooks-bootstrap.js';\nimport { configureBranchProtection } from './branch-protection.js';\nimport { syncTemplates } from './sync-templates.js';\n// `bootstrapGovernanceDocs` is no longer called from the default install\n// flow; consumers invoke `devaudit bootstrap-governance` on demand. Kept\n// importable so the standalone command can still use it.\nimport { doneReport } from './done-report.js';\nimport type { InstallContext, InstallMode, InstallPlan, StepResult } from './types.js';\n\nexport interface RunInstallOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly nonInteractive?: boolean;\n readonly provider?: GitProvider;\n readonly plugins?: readonly LoadedPlugin[];\n /**\n * Pin the install mode explicitly. `'auto'` (default) lets `detectInstallMode`\n * decide based on probes. `'developer'` is set by the `devaudit join`\n * subcommand to force the lighter flow.\n */\n readonly mode?: 'auto' | InstallMode;\n /**\n * Re-enables the destructive steps (write sdlc-config, issue API key, set\n * GH secrets, apply branch protection) even when dev-mode detection would\n * have skipped them. The operator's rotation lane.\n */\n readonly forceTeamConfig?: boolean;\n}\n\nexport interface InstallReport {\n readonly project: string;\n readonly projectPath: string;\n readonly dryRun: boolean;\n readonly steps: readonly StepResult[];\n}\n\nexport async function runInstall(options: RunInstallOptions): Promise<InstallReport> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n if (!(await isDir(projectPath))) {\n throw new Error(`Project path not found: ${projectPath}`);\n }\n const projectName = basename(projectPath);\n const auth = await resolveTokenForInstall(options);\n const installerRoot = await resolveInstallerRoot();\n\n // Pre-flight mode detection runs after step 3 (plan), because it needs the\n // project slug. We build a tentative ctx for steps 1–3 here with mode set to\n // 'operator' (safe default — those steps don't consult installMode anyway).\n const tentativeCtx: InstallContext = {\n projectPath,\n projectName,\n installerRoot,\n token: auth.token,\n baseUrl: auth.baseUrl,\n dryRun: Boolean(options.dryRun),\n nonInteractive: Boolean(options.nonInteractive),\n installMode: 'operator',\n };\n banner(tentativeCtx);\n const steps: StepResult[] = [];\n steps.push(await record(log, runAuthProbe(tentativeCtx)));\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n if (plugins.length > 0 && !tentativeCtx.dryRun) {\n const pluginCtx = await buildPluginContext({ projectPath: tentativeCtx.projectPath });\n await runHook(plugins, 'beforeInstall', pluginCtx);\n }\n const { result: detectResult, detected } = await detectStack(tentativeCtx);\n steps.push(await record(log, Promise.resolve(detectResult)));\n const plan: InstallPlan = await collectPlan(tentativeCtx, detected);\n const planStep = planSummary(plan);\n steps.push(planStep);\n log.success(`[${planStep.step}] ${planStep.message ?? ''}`);\n\n const providerResolution = await resolveProvider(options, tentativeCtx);\n // Resolve install mode now that we have plan.projectSlug + (maybe) a\n // provider — see detectInstallMode for the four-bit decision rule.\n const detection = await detectInstallMode(tentativeCtx, plan, providerResolution.provider, options);\n if (detection.notice) log.info(detection.notice);\n const ctx: InstallContext = { ...tentativeCtx, installMode: detection.mode };\n\n steps.push(await record(log, writeSdlcConfig(ctx, plan)));\n steps.push(await record(log, findOrCreateProject(ctx, plan)));\n steps.push(await record(log, issueApiKey(ctx, plan)));\n if (providerResolution.provider) {\n steps.push(await record(log, setGithubSecrets(ctx, plan, providerResolution.provider)));\n } else {\n const skipped: StepResult = {\n step: '7/11 Set GitHub secrets and variables',\n status: 'skipped',\n message: providerResolution.reason ?? 'no git provider available',\n };\n steps.push(skipped);\n log.warn(`[${skipped.step}] SKIPPED ${skipped.message}`);\n }\n steps.push(await record(log, bootstrapHooks(ctx, plan)));\n if (providerResolution.provider) {\n steps.push(await record(log, configureBranchProtection(ctx, providerResolution.provider)));\n } else {\n const skipped: StepResult = {\n step: '9/11 Configure branch protection',\n status: 'skipped',\n message: providerResolution.reason ?? 'no git provider available',\n };\n steps.push(skipped);\n log.warn(`[${skipped.step}] SKIPPED ${skipped.message}`);\n }\n steps.push(await record(log, syncTemplates(ctx)));\n // Governance-doc auto-seed (v0.1.30 → v0.1.35) is now OPT-IN ONLY.\n // Operators ran `devaudit install` and the next CI push uploaded five\n // placeholder governance docs (ropa.md / dpia.md / etc.) as compliance\n // evidence on day one — the portal then read those starters as the\n // canonical answer, which they aren't. Run `devaudit bootstrap-governance`\n // explicitly when you actually want the starters on disk.\n const done = doneReport(ctx, plan);\n steps.push(done);\n log.success(`[${done.step}]`);\n log.log(done.message ?? '');\n if (plugins.length > 0 && !ctx.dryRun) {\n const pluginCtx = await buildPluginContext({ projectPath: ctx.projectPath });\n await runHook(plugins, 'afterInstall', pluginCtx);\n }\n return { project: projectName, projectPath, dryRun: ctx.dryRun, steps };\n}\n\ninterface ModeDetection {\n readonly mode: InstallMode;\n readonly notice?: string;\n /** True iff all four detection bits resolved to \"developer-mode\". */\n readonly allBitsMatched: boolean;\n}\n\n/**\n * Decide whether this install is the operator setting up / rotating a project\n * (`'operator'`) or a developer joining an already-onboarded one (`'developer'`).\n *\n * Developer mode requires **all four** bits to hold (any failure → operator,\n * the safe default that matches today's behaviour); `RunInstallOptions.mode`\n * overrides the auto-detection (used by `devaudit join`); `forceTeamConfig`\n * pins back to operator (the operator's rotation lane).\n *\n * 1. `sdlc-config.json` exists at projectPath — already-onboarded marker\n * 2. portal returns a project for `plan.projectSlug` — project lives on the portal\n * 3. an `'Onboarding-issued'` API key already exists — first install already ran\n * 4. the repo has a `DEVAUDIT_USER_TOKEN` secret — CI is already wired up\n */\nasync function detectInstallMode(\n ctx: InstallContext,\n plan: InstallPlan,\n provider: GitProvider | null,\n options: RunInstallOptions,\n): Promise<ModeDetection> {\n if (options.forceTeamConfig) {\n return {\n mode: 'operator',\n allBitsMatched: false,\n notice: '--force-team-config: running operator-mode (will rewrite repo secrets + branch protection).',\n };\n }\n if (options.mode === 'developer') {\n return {\n mode: 'developer',\n allBitsMatched: true,\n notice:\n \"mode=developer (pinned): destructive steps will skip — use `devaudit install --force-team-config` from the project's onboarding operator if you need to rotate team secrets.\",\n };\n }\n if (options.mode === 'operator') {\n return { mode: 'operator', allBitsMatched: false };\n }\n // auto-detect ('auto' or undefined)\n if (ctx.dryRun) {\n // In dry-run we don't probe; default to operator semantics so the report\n // shows the maximum possible step set. (The new --force-team-config and\n // mode=developer cases above still take effect in dry-run.)\n return { mode: 'operator', allBitsMatched: false };\n }\n const sdlcConfigExisted = await isFile(`${ctx.projectPath}/sdlc-config.json`);\n if (!sdlcConfigExisted) return { mode: 'operator', allBitsMatched: false };\n let projectExists = false;\n let keyExists = false;\n try {\n const client = new DevAuditClient({ token: ctx.token, baseUrl: ctx.baseUrl });\n const existing = await client.getProjectBySlug(plan.projectSlug);\n if (existing) {\n projectExists = true;\n const keys = await client.listApiKeys(existing.id);\n keyExists = keys.some((k) => k.name === 'Onboarding-issued' && k.revoked_at === null);\n }\n } catch {\n // Any portal error → fall back to operator (safe default).\n return { mode: 'operator', allBitsMatched: false };\n }\n if (!projectExists || !keyExists) return { mode: 'operator', allBitsMatched: false };\n let hasUserTokenSecret = false;\n if (provider) {\n try {\n hasUserTokenSecret = await provider.hasSecret(ctx.projectPath, 'DEVAUDIT_USER_TOKEN');\n } catch {\n hasUserTokenSecret = false;\n }\n }\n if (!hasUserTokenSecret) return { mode: 'operator', allBitsMatched: false };\n return {\n mode: 'developer',\n allBitsMatched: true,\n notice:\n 'developer mode auto-detected (project + Onboarding-issued key + DEVAUDIT_USER_TOKEN secret all present): destructive steps (4, 6, 7, 9) will skip. Use --force-team-config to rotate team secrets.',\n };\n}\n\nasync function resolveProvider(\n options: RunInstallOptions,\n ctx: InstallContext,\n): Promise<{ provider: GitProvider | null; reason?: string }> {\n if (options.provider) return { provider: options.provider };\n try {\n return { provider: await getGitProvider(ctx.projectPath) };\n } catch (err) {\n return { provider: null, reason: (err as Error).message };\n }\n}\n\nasync function resolveTokenForInstall(options: RunInstallOptions): Promise<{ token: string; baseUrl: string }> {\n if (options.token) {\n return { token: options.token, baseUrl: options.baseUrl ?? 'https://devaudit.metasession.co' };\n }\n const resolved = await resolveToken();\n if (!resolved) {\n throw new Error(\n 'No DevAudit token found. Set DEVAUDIT_USER_TOKEN, pass --token, or run `devaudit auth login` first.',\n );\n }\n return { token: resolved.token, baseUrl: options.baseUrl ?? resolved.baseUrl };\n}\n\nasync function record(log: ReturnType<typeof logger>, p: Promise<StepResult>): Promise<StepResult> {\n const result = await p;\n const tag = `[${result.step}]`;\n const msg = result.message ?? '';\n if (result.status === 'ok') log.success(`${tag} ${msg}`);\n else if (result.status === 'warn') log.warn(`${tag} ${msg}`);\n else if (result.status === 'skipped') log.info(`${tag} SKIPPED ${msg}`);\n else if (result.status === 'planned') log.info(`${tag} [dry-run] ${msg}`);\n else log.error(`${tag} ${msg}`);\n return result;\n}\n\nfunction planSummary(plan: InstallPlan): StepResult {\n return {\n step: '3/11 Configure',\n status: 'ok',\n message: `slug=${plan.projectSlug} runtime=${plan.runtimeVersion}`,\n data: { ...plan },\n };\n}\n\nfunction banner(ctx: InstallContext): void {\n const log = logger();\n log.log('');\n log.info(`Metasession SDLC Onboarding`);\n log.log(` Consumer: ${ctx.projectName}`);\n log.log(` Path: ${ctx.projectPath}`);\n log.log(` DevAudit: ${ctx.baseUrl}`);\n if (ctx.dryRun) log.warn(' DRY RUN — no mutations will be performed');\n log.log('');\n}\n","import { runInstall } from '../install/index.js';\nimport { logger } from '../lib/logger.js';\n\nexport interface InstallOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly yes?: boolean;\n /**\n * Re-enables the destructive steps even when dev-mode detection would have\n * skipped them — the project operator's rotation lane. Without this flag a\n * second-dev re-run on an onboarded project auto-routes to developer mode.\n */\n readonly forceTeamConfig?: boolean;\n}\n\nexport async function runInstallCommand(options: InstallOptions): Promise<void> {\n const log = logger();\n try {\n await runInstall({\n ...(options.path !== undefined ? { path: options.path } : {}),\n ...(options.token !== undefined ? { token: options.token } : {}),\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.dryRun !== undefined ? { dryRun: options.dryRun } : {}),\n ...(options.yes !== undefined ? { nonInteractive: options.yes } : {}),\n ...(options.forceTeamConfig !== undefined\n ? { forceTeamConfig: options.forceTeamConfig }\n : {}),\n });\n } catch (err) {\n log.error((err as Error).message);\n process.exit(1);\n }\n}\n","import { resolve } from 'node:path';\nimport { runInstall } from '../install/index.js';\nimport { isFile } from '../lib/fs-utils.js';\nimport { logger } from '../lib/logger.js';\n\nexport interface JoinOptions {\n readonly path?: string;\n readonly token?: string;\n readonly baseUrl?: string;\n readonly dryRun?: boolean;\n readonly yes?: boolean;\n}\n\n/**\n * `devaudit join` — the second-developer entry point. Runs the install flow\n * with `mode: 'developer'` pinned, so the destructive steps (write\n * sdlc-config, issue API key, set GitHub secrets, apply branch protection)\n * skip themselves and the team's CI token is left alone. See\n * `sdlc/files/_common/joining-an-existing-project.md` for the full guide.\n *\n * Pre-flight refuses to run when:\n * - `sdlc-config.json` is absent (the project hasn't been onboarded yet —\n * the operator should run `devaudit install`).\n *\n * Anything else (missing portal project, missing API key, missing repo\n * secret) is caught inside the install flow's mode detection — it'll log\n * a clear notice and routes back to operator mode if the detection fails;\n * if you really wanted developer mode, that's a signal the project is in\n * a half-onboarded state and the operator needs to finish it first.\n */\nexport async function runJoinCommand(options: JoinOptions): Promise<void> {\n const log = logger();\n const projectPath = resolve(options.path ?? process.cwd());\n const sdlcConfigExists = await isFile(`${projectPath}/sdlc-config.json`);\n if (!sdlcConfigExists) {\n log.error(\n `No sdlc-config.json at ${projectPath}. This project hasn't been onboarded yet — the project operator should run \\`devaudit install\\`. See SDLC/joining-an-existing-project.md (synced into onboarded repos) for the second-developer guide.`,\n );\n process.exit(7);\n }\n try {\n await runInstall({\n mode: 'developer',\n ...(options.path !== undefined ? { path: options.path } : {}),\n ...(options.token !== undefined ? { token: options.token } : {}),\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.dryRun !== undefined ? { dryRun: options.dryRun } : {}),\n ...(options.yes !== undefined ? { nonInteractive: options.yes } : {}),\n });\n } catch (err) {\n log.error((err as Error).message);\n process.exit(1);\n }\n}\n","import { syncAll } from '../update/index.js';\nimport { logger } from '../lib/logger.js';\nimport {\n discoverPlugins,\n buildPluginContext,\n runHook,\n type LoadedPlugin,\n} from '../lib/plugin/index.js';\n\nexport interface UpdateOptions {\n readonly version?: string;\n readonly paths: readonly string[];\n readonly plugins?: readonly LoadedPlugin[];\n}\n\n/**\n * Native TypeScript implementation of the SDLC template sync — the canonical\n * sync path (the former `scripts/sync-sdlc.sh` has been removed).\n *\n * Tagging DevAudit-Installer before sync is intentionally out of scope here;\n * `devaudit release tag` will own that concern in a future command. The version\n * argument is accepted for summary output and forward compatibility.\n */\nexport async function runUpdate(options: UpdateOptions): Promise<void> {\n const log = logger();\n if (options.version) {\n log.info(`Version (informational, no tag created): ${options.version}`);\n }\n if (options.paths.length === 0) {\n log.error('No project paths provided. Usage: devaudit update <version> <path> [path...]');\n process.exit(2);\n }\n const plugins = options.plugins ?? (await discoverPlugins()).loaded;\n for (const projectPath of options.paths) {\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'beforeSync', ctx);\n }\n }\n await syncAll(options.paths);\n for (const projectPath of options.paths) {\n if (plugins.length > 0) {\n const ctx = await buildPluginContext({ projectPath });\n await runHook(plugins, 'afterSync', ctx);\n }\n }\n log.success('=== Sync Complete ===');\n log.log('');\n log.log('Next steps for each consuming project:');\n log.log(' 1. Review the diff: git diff');\n log.log(\" 2. Commit: git add -A && git commit -m 'chore: sync SDLC templates from DevAudit'\");\n log.log(' 3. Push to develop');\n log.log('');\n log.warn('Do NOT auto-commit — review the changes first.');\n}\n","import { readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { ensureDir, isFile } from '../lib/fs-utils.js';\nimport type { InstallContext, StepResult } from './types.js';\n\n/**\n * Tightened view of `InstallContext` — only the fields this function\n * actually reads. Lets the standalone `devaudit bootstrap-governance`\n * command construct a minimal context without faking auth tokens or\n * install-mode state it doesn't have.\n */\ntype BootstrapCtx = Pick<InstallContext, 'projectPath' | 'installerRoot' | 'dryRun'>;\n\nconst STEP = 'Bootstrap governance docs';\nconst SOURCE_REL = 'sdlc/files/_common/governance';\nconst TARGET_REL = 'compliance/governance';\n\n/**\n * One-time copy of governance-doc starter templates into the consumer's\n * `compliance/governance/` directory.\n *\n * - Runs on `devaudit install` only — NOT re-run by `devaudit update`. Once\n * the operator edits a file, our starter is gone; we never overwrite.\n * - Idempotent: each target is skipped if it already exists on disk.\n * - Source files end in `.md.template`; the target drops the `.template`\n * suffix (e.g. `ropa.md.template` → `compliance/governance/ropa.md`).\n *\n * Templates begin with a prominent \"STARTER TEMPLATE — REPLACE BEFORE GOING\n * TO PRODUCTION\" banner so the placeholder status is unambiguous on disk\n * and in the portal's rendered evidence view.\n *\n * Closes framework clauses: GDPR.Art-30 (ropa), GDPR.Art-35 (dpia),\n * EUAIA.Art-13 (ai_disclosure), ISO29119.3.5.4 / GDPR.Art-33 / GDPR.Art-34 /\n * SOC2.CC7.2 (incident_report), SOC2.CC4.1 / ISO27001.A.12.1 (periodic_review).\n * The upload path is already wired by v0.1.26's `upload_governance` helper\n * in `sdlc/files/ci/compliance-evidence.yml.template`.\n *\n * See `docs/governance-templates.md` for the per-framework mapping the\n * operator needs to honour when replacing the starter content.\n */\nexport async function bootstrapGovernanceDocs(ctx: BootstrapCtx): Promise<StepResult> {\n const sourceDir = resolve(ctx.installerRoot, SOURCE_REL);\n const targetDir = resolve(ctx.projectPath, TARGET_REL);\n let templates: readonly string[] = [];\n try {\n templates = (await readdir(sourceDir))\n .filter((name) => name.endsWith('.md.template'))\n .sort();\n } catch (err) {\n return {\n step: STEP,\n status: 'warn',\n message: `source directory not found: ${sourceDir} (${(err as Error).message})`,\n };\n }\n if (templates.length === 0) {\n return { step: STEP, status: 'warn', message: `no .md.template files in ${sourceDir}` };\n }\n if (ctx.dryRun) {\n return {\n step: STEP,\n status: 'planned',\n message: `would copy ${templates.length} starter(s) to ${TARGET_REL}/ (skip-if-exists)`,\n data: { templates: [...templates] },\n };\n }\n await ensureDir(targetDir);\n const copied: string[] = [];\n const skipped: string[] = [];\n for (const template of templates) {\n const targetName = template.replace(/\\.template$/, '');\n const targetPath = join(targetDir, targetName);\n if (await isFile(targetPath)) {\n skipped.push(targetName);\n continue;\n }\n const body = await readFile(join(sourceDir, template), 'utf8');\n await writeFile(targetPath, body, 'utf8');\n copied.push(targetName);\n }\n const detail =\n skipped.length === 0\n ? `${copied.length} starter(s) copied to ${TARGET_REL}/`\n : `${copied.length} copied, ${skipped.length} kept (already on disk)`;\n return {\n step: STEP,\n status: 'ok',\n message: `${detail} — STARTERS, edit before production (see docs/governance-templates.md)`,\n data: { copied, skipped, targetDir: TARGET_REL },\n };\n}\n","/**\n * `devaudit bootstrap-governance` — explicit, opt-in copy of governance\n * starter templates into the consumer's `compliance/governance/`.\n *\n * Pre-v0.1.36 this ran automatically as install step 11/12. Operators\n * shipped `devaudit install`, the next CI push then uploaded five\n * placeholder governance docs as compliance evidence on day one — the\n * portal then read those starters as the canonical RoPA / DPIA /\n * AI-disclosure / etc. for the project, which they aren't (they're\n * pure placeholders with the literal text \"STARTER TEMPLATE — REPLACE\n * BEFORE GOING TO PRODUCTION\" at the top).\n *\n * v0.1.36 removes the auto-seed. Operators who genuinely want the\n * starters on disk run this command explicitly. Each target is skipped\n * if a file already exists at that path — non-destructive.\n */\nimport { resolve } from 'node:path';\nimport { bootstrapGovernanceDocs } from '../install/bootstrap-governance.js';\nimport { resolveInstallerRoot } from '../lib/installer-root.js';\nimport { logger, emitJsonResult, isJsonMode } from '../lib/logger.js';\n\nexport interface BootstrapGovernanceOpts {\n readonly path?: string;\n readonly dryRun?: boolean;\n}\n\nexport async function runBootstrapGovernance(opts: BootstrapGovernanceOpts): Promise<void> {\n const projectPath = resolve(opts.path ?? process.cwd());\n const installerRoot = await resolveInstallerRoot();\n const log = logger();\n\n const result = await bootstrapGovernanceDocs({\n projectPath,\n installerRoot,\n dryRun: Boolean(opts.dryRun),\n });\n\n if (isJsonMode()) {\n emitJsonResult(result);\n return;\n }\n if (result.status === 'ok') {\n log.success(`[${result.step}] ${result.message ?? ''}`);\n } else if (result.status === 'warn') {\n log.warn(`[${result.step}] ${result.message ?? ''}`);\n } else if (result.status === 'planned') {\n log.info(`[${result.step}] (dry-run) ${result.message ?? ''}`);\n } else {\n log.log(`[${result.step}] ${result.message ?? ''}`);\n }\n}\n","import { logger } from '../lib/logger.js';\n\ninterface StubInfo {\n readonly command: string;\n readonly summary: string;\n readonly trackedIn?: string;\n}\n\nexport function makeStub(info: StubInfo): () => Promise<never> {\n return async () => {\n const log = logger();\n log.warn(`\\`devaudit ${info.command}\\` is not implemented yet.`);\n log.info(info.summary);\n if (info.trackedIn) {\n log.info(`Tracked in: ${info.trackedIn}`);\n }\n log.info('See ./docs/devaudit-cli/build-plan.md for the full implementation plan.');\n process.exit(1);\n };\n}\n","import { discoverPlugins } from '../../lib/plugin/index.js';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\n\nexport interface PluginListOptions {\n readonly root?: string;\n}\n\nexport async function runPluginList(opts: PluginListOptions = {}): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const result = await discoverPlugins(root);\n log.info(`Plugin directory: ${root}`);\n if (result.loaded.length === 0 && result.failures.length === 0) {\n log.log(' (no plugins installed)');\n return;\n }\n if (result.loaded.length > 0) {\n log.log('');\n log.log('Loaded:');\n for (const p of result.loaded) {\n const hooks = Object.keys(p.plugin.hooks ?? {});\n const commands = Object.keys(p.plugin.commands ?? {});\n const detail = [\n `${p.packageName}@${p.packageVersion}`,\n hooks.length > 0 ? `hooks=[${hooks.join(',')}]` : 'hooks=[]',\n commands.length > 0 ? `commands=[${commands.join(',')}]` : 'commands=[]',\n ].join(' ');\n log.log(` ✓ ${detail}`);\n }\n }\n if (result.failures.length > 0) {\n log.log('');\n log.warn('Failed to load:');\n for (const f of result.failures) {\n log.log(` ✗ ${f.dir} — ${f.reason}`);\n }\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { loadPluginFromDir } from '../../lib/plugin/index.js';\n\nexport interface PluginInstallOptions {\n readonly source: string;\n readonly root?: string;\n}\n\nfunction deriveDirName(source: string): string {\n const last = source.split('/').pop() ?? source;\n return last.replace(/\\.git$/, '');\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function runPluginInstall(opts: PluginInstallOptions): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const dirName = deriveDirName(opts.source);\n if (!dirName) {\n log.error(`Could not derive a directory name from source: ${opts.source}`);\n process.exit(2);\n }\n await fs.mkdir(root, { recursive: true });\n const target = join(root, dirName);\n if (await pathExists(target)) {\n log.error(`Plugin directory already exists: ${target}. Run \\`devaudit plugin remove ${dirName}\\` first.`);\n process.exit(2);\n }\n log.info(`Cloning ${opts.source} → ${target}`);\n try {\n await execa('git', ['clone', '--depth', '1', opts.source, target], { stdio: 'inherit' });\n } catch (err) {\n log.error(`git clone failed: ${(err as Error).message}`);\n process.exit(6);\n }\n if (await pathExists(join(target, 'package.json'))) {\n log.info('Installing plugin dependencies...');\n const install = await execa('npm', ['install', '--legacy-peer-deps'], {\n cwd: target,\n stdio: 'inherit',\n reject: false,\n });\n if (install.exitCode !== 0) {\n log.error('npm install failed — leaving the plugin dir in place for inspection.');\n process.exit(5);\n }\n }\n log.info('Validating plugin manifest...');\n try {\n const loaded = await loadPluginFromDir(target);\n log.success(`Installed: ${loaded.packageName}@${loaded.packageVersion} at ${target}`);\n } catch (err) {\n log.error(`Plugin validation failed: ${(err as Error).message}`);\n log.warn(`Removing ${target}`);\n await fs.rm(target, { recursive: true, force: true });\n process.exit(9);\n }\n}\n","import { promises as fs } from 'node:fs';\nimport { basename } from 'node:path';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { discoverPlugins } from '../../lib/plugin/index.js';\n\nexport interface PluginRemoveOptions {\n readonly name: string;\n readonly root?: string;\n}\n\nexport async function runPluginRemove(opts: PluginRemoveOptions): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const discovery = await discoverPlugins(root);\n const candidates = [\n ...discovery.loaded.map((p) => ({ packageName: p.packageName, dir: p.dir })),\n ...discovery.failures.map((f) => ({ packageName: basename(f.dir), dir: f.dir })),\n ];\n const match = candidates.find((c) => c.packageName === opts.name || basename(c.dir) === opts.name);\n if (!match) {\n log.error(`No plugin found matching '${opts.name}'.`);\n log.info('Run `devaudit plugin list` to see installed plugins.');\n process.exit(2);\n return;\n }\n await fs.rm(match.dir, { recursive: true, force: true });\n log.success(`Removed plugin at ${match.dir}`);\n}\n","import { promises as fs } from 'node:fs';\nimport { join } from 'node:path';\nimport { execa } from 'execa';\nimport { logger } from '../../lib/logger.js';\nimport { PLUGINS_DIR } from '../../lib/paths.js';\nimport { discoverPlugins } from '../../lib/plugin/index.js';\n\nexport interface PluginUpdateOptions {\n readonly root?: string;\n}\n\ntype UpdateStatus = 'updated' | 'no-changes' | 'not-git' | 'failed';\n\ninterface UpdateResult {\n readonly plugin: string;\n readonly status: UpdateStatus;\n readonly detail?: string;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function updateOne(dir: string, packageName: string): Promise<UpdateResult> {\n if (!(await pathExists(join(dir, '.git')))) {\n return { plugin: packageName, status: 'not-git' };\n }\n const pull = await execa('git', ['pull', '--ff-only'], { cwd: dir, reject: false });\n if (pull.exitCode !== 0) {\n return { plugin: packageName, status: 'failed', detail: pull.stderr.split('\\n')[0] };\n }\n const noChanges = /Already up to date/i.test(pull.stdout);\n if (await pathExists(join(dir, 'package.json'))) {\n const install = await execa('npm', ['install', '--legacy-peer-deps'], {\n cwd: dir,\n reject: false,\n });\n if (install.exitCode !== 0) {\n return { plugin: packageName, status: 'failed', detail: 'npm install failed after pull' };\n }\n }\n return { plugin: packageName, status: noChanges ? 'no-changes' : 'updated' };\n}\n\nexport async function runPluginUpdate(opts: PluginUpdateOptions = {}): Promise<void> {\n const log = logger();\n const root = opts.root ?? PLUGINS_DIR;\n const discovery = await discoverPlugins(root);\n if (discovery.loaded.length === 0) {\n log.info('No plugins installed.');\n return;\n }\n log.info(`Updating ${discovery.loaded.length} plugin(s)...`);\n const results: UpdateResult[] = [];\n for (const p of discovery.loaded) {\n // eslint-disable-next-line no-await-in-loop\n results.push(await updateOne(p.dir, p.packageName));\n }\n for (const r of results) {\n if (r.status === 'updated') log.success(` ✓ ${r.plugin} — updated`);\n else if (r.status === 'no-changes') log.log(` · ${r.plugin} — already up to date`);\n else if (r.status === 'not-git') log.warn(` ⚠ ${r.plugin} — not a git checkout, skipped`);\n else log.error(` ✗ ${r.plugin} — ${r.detail ?? 'failed'}`);\n }\n}\n","import { Command, Option } from 'commander';\nimport { configureLogger } from './lib/logger.js';\nimport { CLI_VERSION } from './lib/version.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runAuthLogin } from './commands/auth/login.js';\nimport { runAuthLogout } from './commands/auth/logout.js';\nimport { runAuthStatus } from './commands/auth/status.js';\nimport { runStatus } from './commands/status.js';\nimport { runPush } from './commands/push.js';\nimport { runInstallCommand } from './commands/install.js';\nimport { runJoinCommand } from './commands/join.js';\nimport { runUpdate } from './commands/update.js';\nimport { runBootstrapGovernance } from './commands/bootstrap-governance.js';\nimport { makeStub } from './commands/stub.js';\nimport { discoverPlugins, registerPluginCommands } from './lib/plugin/index.js';\nimport { runPluginList } from './commands/plugin/list.js';\nimport { runPluginInstall } from './commands/plugin/install.js';\nimport { runPluginRemove } from './commands/plugin/remove.js';\nimport { runPluginUpdate } from './commands/plugin/update.js';\nimport { logger } from './lib/logger.js';\n\nconst TRACKING_ISSUE = 'https://github.com/metasession-dev/DevAudit-Installer/issues/1';\n\nfunction applyCommonFlags(program: Command): void {\n program.addOption(new Option('--json', 'machine-readable output'));\n program.addOption(new Option('-y, --yes', 'accept all interactive defaults (CI-friendly)'));\n program.addOption(new Option('--dry-run', \"preview, don't mutate\"));\n program.addOption(new Option('-v, --verbose', 'extra detail'));\n program.addOption(new Option('--no-color', 'strip ANSI'));\n program.addOption(new Option('--org <slug>', 'override active org context for this invocation'));\n program.hook('preAction', (cmd) => {\n const opts = cmd.optsWithGlobals();\n configureLogger({\n json: Boolean(opts.json),\n verbose: Boolean(opts.verbose),\n noColor: opts.color === false,\n });\n });\n}\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name('devaudit')\n .description(\n 'DevAudit CLI — installs, syncs, and operates the Metasession SDLC across consumer projects.',\n )\n .version(CLI_VERSION, '-V, --version');\n applyCommonFlags(program);\n program\n .command('install [path]')\n .description('Interactive onboarding for a consumer project (operator flow). On an already-onboarded project a second dev auto-routes to developer mode; use `devaudit join` for the explicit second-dev entry point.')\n .option('--token <token>', 'PAT to use (otherwise reads DEVAUDIT_USER_TOKEN env or ~/.config/devaudit/auth.json)')\n .option('--base-url <url>', 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)')\n .option('--force-team-config', 'Re-run the destructive steps (write sdlc-config, issue API key, set GH secrets, apply branch protection) even when dev-mode detection would have skipped them. The operator-only rotation lane.')\n .action(\n async (\n path: string | undefined,\n cmdOpts: { token?: string; baseUrl?: string; forceTeamConfig?: boolean },\n cmd,\n ) => {\n const globals = cmd.optsWithGlobals();\n await runInstallCommand({\n ...(path !== undefined ? { path } : {}),\n ...(cmdOpts.token !== undefined ? { token: cmdOpts.token } : {}),\n ...(cmdOpts.baseUrl !== undefined ? { baseUrl: cmdOpts.baseUrl } : {}),\n ...(cmdOpts.forceTeamConfig !== undefined\n ? { forceTeamConfig: Boolean(cmdOpts.forceTeamConfig) }\n : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n ...(globals.yes !== undefined ? { yes: Boolean(globals.yes) } : {}),\n });\n },\n );\n program\n .command('join [path]')\n .description(\n 'Second-developer entry point: re-sync framework templates + run hook bootstrap locally on an already-onboarded project. Skips the operator-only steps (sdlc-config write, API key issuance, GitHub secret writes, branch protection) so the team CI token is never rotated. See SDLC/joining-an-existing-project.md.',\n )\n .option(\n '--token <token>',\n 'PAT to use (otherwise reads DEVAUDIT_USER_TOKEN env or ~/.config/devaudit/auth.json)',\n )\n .option(\n '--base-url <url>',\n 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)',\n )\n .action(async (path: string | undefined, cmdOpts: { token?: string; baseUrl?: string }, cmd) => {\n const globals = cmd.optsWithGlobals();\n await runJoinCommand({\n ...(path !== undefined ? { path } : {}),\n ...(cmdOpts.token !== undefined ? { token: cmdOpts.token } : {}),\n ...(cmdOpts.baseUrl !== undefined ? { baseUrl: cmdOpts.baseUrl } : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n ...(globals.yes !== undefined ? { yes: Boolean(globals.yes) } : {}),\n });\n });\n program\n .command('update [version] [paths...]')\n .description(\n 'Sync framework templates into existing consumer(s). Both args are optional: ' +\n 'paths default to the current directory, and version is a cosmetic label ' +\n '(defaults to the running CLI version). So a bare `devaudit update` syncs ' +\n 'the current project.',\n )\n .action(async (version: string | undefined, paths: string[] | undefined) => {\n // `version` is purely informational. Disambiguate the single-arg case so\n // `devaudit update <path>` treats a path-like token as a path, not a label.\n let resolvedVersion = version;\n let resolvedPaths = paths ?? [];\n const looksLikeVersion = (s: string): boolean => /^v?\\d+(\\.\\d+)/.test(s);\n if (resolvedVersion && resolvedPaths.length === 0 && !looksLikeVersion(resolvedVersion)) {\n resolvedPaths = [resolvedVersion];\n resolvedVersion = undefined;\n }\n if (resolvedPaths.length === 0) resolvedPaths = ['.'];\n await runUpdate({ version: resolvedVersion ?? CLI_VERSION, paths: resolvedPaths });\n });\n program\n .command('push <project-slug> <requirement-id> <evidence-type> <file>')\n .description('Upload evidence file(s) to DevAudit (port of scripts/upload-evidence.sh)')\n .option('--release <version>', 'release version (e.g. v1.0.0)')\n .option('--create-release-if-missing', \"auto-create the release as 'draft' if absent\")\n .option('--environment <env>', 'uat | production')\n .option('--category <cat>', 'ci_pipeline | local_dev | planning | test_report | security_scan | release_artifact')\n .option('--git-sha <sha>', 'attached to metadata.gitSha')\n .option('--ci-run-id <id>', 'attached to metadata.ciRunId')\n .option('--branch <name>', 'attached to metadata.branch')\n .option('--base-url <url>', 'override portal URL (defaults to DEVAUDIT_BASE_URL env or production)')\n .option('--api-key <key>', 'override DEVAUDIT_API_KEY env var')\n .action(\n async (\n projectSlug: string,\n requirementId: string,\n evidenceType: string,\n file: string,\n opts: {\n release?: string;\n createReleaseIfMissing?: boolean;\n environment?: string;\n category?: string;\n gitSha?: string;\n ciRunId?: string;\n branch?: string;\n baseUrl?: string;\n apiKey?: string;\n },\n cmd,\n ) => {\n const globals = cmd.optsWithGlobals();\n await runPush({\n projectSlug,\n requirementId,\n evidenceType,\n filePath: file,\n ...(opts.release !== undefined ? { release: opts.release } : {}),\n ...(opts.createReleaseIfMissing !== undefined\n ? { createReleaseIfMissing: opts.createReleaseIfMissing }\n : {}),\n ...(opts.environment !== undefined ? { environment: opts.environment } : {}),\n ...(opts.category !== undefined ? { category: opts.category } : {}),\n ...(opts.gitSha !== undefined ? { gitSha: opts.gitSha } : {}),\n ...(opts.ciRunId !== undefined ? { ciRunId: opts.ciRunId } : {}),\n ...(opts.branch !== undefined ? { branch: opts.branch } : {}),\n ...(opts.baseUrl !== undefined ? { baseUrl: opts.baseUrl } : {}),\n ...(opts.apiKey !== undefined ? { apiKey: opts.apiKey } : {}),\n ...(globals.dryRun !== undefined ? { dryRun: Boolean(globals.dryRun) } : {}),\n });\n },\n );\n program\n .command('bootstrap-governance [path]')\n .description(\n 'Copy governance starter templates (ropa, dpia, ai-disclosure, periodic-review, incident-report) into compliance/governance/. Opt-in since v0.1.36 — auto-seed during install was removed because the placeholders auto-uploaded as evidence on first CI push.',\n )\n .action(async (path?: string, _opts?: unknown, cmd?: Command) => {\n const opts = (cmd?.optsWithGlobals() ?? {}) as { dryRun?: boolean };\n await runBootstrapGovernance({ path, dryRun: opts.dryRun });\n });\n program\n .command('doctor')\n .description('Verify the local install: required tools on PATH, auth state, config validity')\n .action(runDoctor);\n program\n .command('status [path]')\n .description(\"Show the consumer project's framework state\")\n .action(async (path?: string) => {\n await runStatus({ path });\n });\n program\n .command('upgrade')\n .description('Update the devaudit CLI itself to the latest release')\n .action(\n makeStub({\n command: 'upgrade',\n summary: 'Self-update via npm or the platform package manager. Workstream A milestone 8.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const authCmd = program.command('auth').description('Authentication management');\n authCmd\n .command('login')\n .option('--token <token>', 'PAT to use (skips the interactive prompt)')\n .option('--base-url <url>', 'override portal base URL', 'https://devaudit.metasession.co')\n .description('Sign in via PAT paste; stores token in ~/.config/devaudit/auth.json')\n .action(async (opts: { token?: string; baseUrl?: string }) => {\n await runAuthLogin({ token: opts.token, baseUrl: opts.baseUrl });\n });\n authCmd\n .command('logout')\n .description('Delete the cached token at ~/.config/devaudit/auth.json')\n .action(runAuthLogout);\n authCmd\n .command('status')\n .description('Show current auth state and verify the cached token')\n .action(runAuthStatus);\n const orgCmd = program.command('org').description('Organisation management (workstream B prereq)');\n orgCmd\n .command('list')\n .description('List orgs the user belongs to')\n .action(makeStub({ command: 'org list', summary: 'Needs portal RBAC + org endpoints.', trackedIn: TRACKING_ISSUE }));\n orgCmd\n .command('switch <slug>')\n .description('Switch active org context')\n .action(\n makeStub({ command: 'org switch', summary: 'Updates ~/.config/devaudit/config.json.', trackedIn: TRACKING_ISSUE }),\n );\n const orgPolicyCmd = orgCmd.command('policy').description('Org policy management');\n orgPolicyCmd\n .command('list')\n .description(\"Show the active org's policy baselines\")\n .action(\n makeStub({\n command: 'org policy list',\n summary: 'Reads from the portal policy engine (workstream B).',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n orgPolicyCmd\n .command('apply [path]')\n .description('Apply org policy to a project (or all org projects)')\n .action(\n makeStub({\n command: 'org policy apply',\n summary: 'Evaluates sdlc-config.json + CI evidence against org policy bundle.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n orgCmd\n .command('report')\n .option('--format <fmt>', 'html | json | csv', 'html')\n .description('Generate an org-wide compliance report')\n .action(\n makeStub({\n command: 'org report',\n summary: 'Aggregates per-project compliance state across the org.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const pluginCmd = program.command('plugin').description('Plugin management');\n pluginCmd\n .command('list')\n .description('List installed plugins in ~/.config/devaudit/plugins/')\n .action(runPluginList);\n pluginCmd\n .command('install <source>')\n .description('Install a plugin from a Git URL (portal registry resolution is pending)')\n .action(async (source: string) => {\n await runPluginInstall({ source });\n });\n pluginCmd\n .command('remove <name>')\n .description('Remove a locally installed plugin by package or directory name')\n .action(async (name: string) => {\n await runPluginRemove({ name });\n });\n pluginCmd\n .command('update')\n .description('Update all installed plugins (git pull + npm install)')\n .action(runPluginUpdate);\n const configCmd = program.command('config').description('CLI configuration (telemetry, default org, etc.)');\n configCmd\n .command('get <key>')\n .description('Read a CLI config value')\n .action(\n makeStub({ command: 'config get', summary: 'Reads ~/.config/devaudit/config.json.', trackedIn: TRACKING_ISSUE }),\n );\n configCmd\n .command('set <key> <value>')\n .description('Write a CLI config value')\n .action(\n makeStub({\n command: 'config set',\n summary: 'Writes to ~/.config/devaudit/config.json (mode 0600).',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n configCmd\n .command('list')\n .description('Print all CLI config values')\n .action(\n makeStub({\n command: 'config list',\n summary: 'Lists all CLI config keys with their current values.',\n trackedIn: TRACKING_ISSUE,\n }),\n );\n const discovery = await discoverPlugins();\n if (discovery.failures.length > 0) {\n const log = logger();\n for (const f of discovery.failures) {\n log.warn(`Plugin at ${f.dir} failed to load: ${f.reason}`);\n }\n }\n registerPluginCommands(program, discovery.loaded);\n program.parse(argv);\n}\n\nmain(process.argv).catch((err: unknown) => {\n const log = logger();\n log.error((err as Error).message);\n process.exit(1);\n});\n"]}