@nikovirtala/adr 0.4.0 → 0.5.1
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/README.md +15 -9
- package/dist/cli.js +47 -16
- package/dist/cli.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/{init-YgW7g9Fx.js → init-Bw0PZLnR.js} +79 -16
- package/dist/init-Bw0PZLnR.js.map +1 -0
- package/dist/{kind-DjvA3dyA.js → kind-C3DiBuUp.js} +44 -11
- package/dist/kind-C3DiBuUp.js.map +1 -0
- package/dist/kind.js +1 -1
- package/dist/{list-Dt4KGxvj.js → list-CnMSw8eA.js} +3 -3
- package/dist/{list-Dt4KGxvj.js.map → list-CnMSw8eA.js.map} +1 -1
- package/dist/{search-CwIPlNGd.js → search-DDDuzVfg.js} +299 -166
- package/dist/search-DDDuzVfg.js.map +1 -0
- package/dist/{server-CXCO5zfp.js → server-CRmWjWqD.js} +20 -8
- package/dist/server-CRmWjWqD.js.map +1 -0
- package/dist/types/cli/list.d.ts +4 -1
- package/dist/types/cli/search.d.ts +4 -1
- package/dist/types/commit-actions.d.ts +21 -1
- package/dist/types/hooks.d.ts +3 -2
- package/dist/types/index.d.ts +2 -1
- package/dist/types/kind/rules.d.ts +23 -2
- package/dist/types/kind.d.ts +1 -1
- package/dist/types/log-index.d.ts +0 -18
- package/dist/types/log.d.ts +6 -3
- package/dist/types/search.d.ts +4 -11
- package/dist/types/sources.d.ts +35 -0
- package/dist/types/verify.d.ts +20 -4
- package/dist/types/views.d.ts +2 -0
- package/dist/types/write.d.ts +37 -4
- package/package.json +2 -2
- package/dist/init-YgW7g9Fx.js.map +0 -1
- package/dist/kind-DjvA3dyA.js.map +0 -1
- package/dist/search-CwIPlNGd.js.map +0 -1
- package/dist/server-CXCO5zfp.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["short","USAGE","USAGE","strings","USAGE","USAGE","USAGE"],"sources":["../src/cli/open.ts","../src/cli/text.ts","../src/cli/accept.ts","../src/cli/deprecate.ts","../src/cli/for.ts","../src/cli/hooks.ts","../src/cli/index-command.ts","../src/cli/init.ts","../src/cli/link.ts","../src/cli/list.ts","../src/cli/mcp.ts","../src/cli/editor.ts","../src/cli/new.ts","../src/cli/note.ts","../src/cli/reject.ts","../src/cli/scope.ts","../src/cli/search.ts","../src/cli/show.ts","../src/cli/supersede.ts","../src/cli/withdraw.ts","../src/cli/commands.ts","../src/cli.ts"],"sourcesContent":["import type { CliIO, GlobalFlags } from \"@nikovirtala/ledger/cli\";\nimport { type DecisionLog, openDecisionLog, readDecisions } from \"../log.js\";\nimport type { Display } from \"./text.js\";\n\n/**\n * The decision log a command works on: `--root` and `--ref` from the globals, git run with the\n * CLI's environment.\n */\nexport function openForCli(\n io: CliIO,\n flags: GlobalFlags,\n o: { readonly reader?: \"worktree\" | \"index\" } = {},\n): Promise<DecisionLog> {\n return openDecisionLog({\n cwd: io.cwd,\n root: flags.root,\n ref: flags.ref,\n ...(o.reader === undefined ? {} : { reader: o.reader }),\n gitOptions: { env: io.env },\n });\n}\n\n/**\n * How other decisions display in a write's text, read again from the work tree, like the write\n * result's own views: a commit on the main ref has numbered the decisions it accepted.\n */\nexport async function displayAfterWrite(log: DecisionLog): Promise<{ readonly display: Display }> {\n const read = await readDecisions(log);\n return { display: (id) => read.projection.views.get(id)?.display ?? id };\n}\n\n/** `notes` with `note` appended when there is one. */\nexport const notesWith = (notes: readonly string[], note: string | null): readonly string[] =>\n note === null ? notes : [...notes, note];\n","import {\n type Actor,\n type EventEnvelope,\n type Finding,\n renderStateHeader,\n} from \"@nikovirtala/ledger\";\nimport type { InitResultJson } from \"../init.js\";\nimport { adrKind, type DecisionView } from \"../kind.js\";\nimport type { ChangedSince } from \"../log.js\";\nimport type { DecisionsForJson } from \"../scope.js\";\nimport type { DecisionSearchJson } from \"../search.js\";\nimport type { DecisionListJson, DecisionShowJson } from \"../views.js\";\nimport type { ScopeOffer, WriteResultJson } from \"../write.js\";\n\n/** How a decision id is shown: its display (`ADR-0007`), or the id when it has no number. */\nexport type Display = (id: string) => string;\n\n/** A table: each column padded to its widest value, trailing spaces removed. */\nfunction columns(rows: readonly (readonly string[])[]): string {\n const widths: number[] = [];\n for (const row of rows) {\n row.forEach((cell, i) => {\n widths[i] = Math.max(widths[i] ?? 0, cell.length);\n });\n }\n return rows\n .map((row) =>\n row\n .map((cell, i) => (i === row.length - 1 ? cell : cell.padEnd(widths[i] ?? 0)))\n .join(\" \")\n .trimEnd(),\n )\n .join(\"\\n\");\n}\n\n/** `adr list`: one row per decision, `→ <effective>` when it differs from the decision. */\nexport function listText(doc: DecisionListJson, display: Display): string {\n if (doc.decisions.length === 0) return \"No decisions.\";\n return listRows(doc, display).join(\"\\n\");\n}\n\n/**\n * `adr list --since <rev>` (design 2b D7): a heading, then each row followed by the event types\n * added since `rev`; nothing at all when no decision changed, so the post-merge hook stays quiet.\n */\nexport function sinceText(doc: DecisionListJson, since: ChangedSince, display: Display): string {\n if (doc.decisions.length === 0) return \"\";\n const rows = listRows(doc, display);\n return [\n `Changed since ${since.rev} (${since.commit.slice(0, 7)}):`,\n ...doc.decisions.flatMap((v, i) => {\n const types = [...new Set(since.events.filter((e) => e.subject === v.id).map((e) => e.type))];\n return [rows[i] ?? \"\", ` [new: ${types.join(\", \")}]`];\n }),\n ].join(\"\\n\");\n}\n\nfunction listRows(doc: DecisionListJson, display: Display): string[] {\n return columns(\n doc.decisions.map((v) => {\n const arrow =\n v.effective === null\n ? \"→ (cycle)\"\n : v.effective === v.id\n ? \"\"\n : `→ ${display(v.effective)}`;\n return [v.number === null ? \"-\" : v.display, v.id, v.status, v.title, arrow];\n }),\n ).split(\"\\n\");\n}\n\n/** `ADR-0003 (m2x7p4d2)`, or the id alone when it has no number. */\nfunction named(id: string, display: Display): string {\n const shown = display(id);\n return shown === id ? id : `${shown} (${id})`;\n}\n\nconst day = (at: string | null) => (at ?? \"\").slice(0, 10);\nconst list = (ids: readonly string[], display: Display) =>\n ids.length === 0 ? \"none\" : ids.map((id) => named(id, display)).join(\", \");\n\nfunction bodyLine(v: DecisionView): string {\n if (v.body_path === null) return \"missing\";\n if (v.body_intact === null) return v.body_path;\n return `${v.body_path} (${v.body_intact ? \"intact\" : \"changed after acceptance\"})`;\n}\n\nfunction actorText(e: EventEnvelope): string {\n const a = e.actor;\n return a.kind === \"agent\" ? `${a.name} (agent ${a.agent} for ${a.on_behalf_of})` : a.name;\n}\n\n/** The second line of an event in `show --history`: its reason, else a summary of its data. */\nfunction eventDetail(e: EventEnvelope): string | null {\n if (typeof e.reason === \"string\") return `reason: ${e.reason}`;\n const entries = Object.entries(e.data);\n if (entries.length === 0) return null;\n return entries\n .map(([k, v]) => `${k}: ${typeof v === \"string\" ? v : JSON.stringify(v)}`)\n .join(\", \");\n}\n\nfunction historyLines(events: readonly EventEnvelope[]): string[] {\n const width = Math.max(...events.map((e) => e.type.length));\n return events.flatMap((e) => {\n const detail = eventDetail(e);\n return [\n ` ${e.at} ${e.type.padEnd(width)} ${actorText(e)}`,\n ...(detail === null ? [] : [` ${detail}`]),\n ];\n });\n}\n\nconst SECTION_FINDING =\n /^(?:required )?section (.+?) (is missing|is empty|still contains its guidance text)$/;\nconst REASONS: Readonly<Record<string, string>> = {\n \"is missing\": \"missing\",\n \"is empty\": \"empty\",\n \"still contains its guidance text\": \"guidance text left\",\n};\n\n/** The section findings of a draft lint as headings and reasons, and the other findings. */\nfunction sectionGaps(findings: readonly Finding[]): {\n headings: string[];\n reasons: string[];\n other: Finding[];\n} {\n const headings: string[] = [];\n const reasons: string[] = [];\n const other: Finding[] = [];\n for (const f of findings) {\n const m = SECTION_FINDING.exec(f.message);\n if (m === null) {\n other.push(f);\n continue;\n }\n const [, heading = \"\", what = \"\"] = m;\n const reason = REASONS[what] ?? what;\n if (!headings.includes(heading)) headings.push(heading);\n if (!reasons.includes(reason)) reasons.push(reason);\n }\n return { headings, reasons, other };\n}\n\n/**\n * The draft lint of `new` as advice: `Fill in N sections before accepting: A, B (why)` for the\n * section findings, and one line per other finding.\n */\nfunction draftAdvice(findings: readonly Finding[]): string[] {\n const { headings, reasons, other } = sectionGaps(findings);\n const n = headings.length;\n return [\n ...(n === 0\n ? []\n : [\n `Fill in ${n === 1 ? \"1 section\" : `${n} sections`} before accepting: ${headings.join(\", \")} (${reasons.join(\", \")})`,\n ]),\n ...other.map((f) => `Draft: ${f.message} [${f.rule}]`),\n ];\n}\n\n/**\n * The stderr warning of `new` when the draft it wrote has unfilled sections (design §7.2), or\n * `null` when there are none.\n */\nexport function unfilledWarning(doc: WriteResultJson): string | null {\n if (doc.command !== \"new\" || !doc.ok || doc.written.length === 0) return null;\n const { headings, reasons } = sectionGaps(doc.findings);\n const n = headings.length;\n const path = doc.findings.find((f) => f.file !== null)?.file ?? doc.decision?.body_path ?? null;\n if (n === 0 || path === null) return null;\n return `${path}: fill in ${n === 1 ? \"1 required section\" : `${n} required sections`} before committing or accepting: ${headings.join(\", \")} (${reasons.join(\", \")}); adr verify reports this until then`;\n}\n\nfunction findingLines(findings: readonly Finding[]): string[] {\n return findings.map((f) => ` ${f.file === null ? \"\" : `${f.file}: `}${f.message} [${f.rule}]`);\n}\n\nconst short = (sha: string) => sha.slice(0, 7);\n\nexport interface FollowRenamesBefore {\n readonly before: ReadonlyMap<string, readonly string[]>;\n readonly renamed: boolean;\n}\n\n/**\n * `adr scope --follow-renames`: one `<named>: <old globs> → <new globs>` line per changed\n * decision (`affected`), whether or not a decision was given.\n */\nfunction followRenamesText(doc: WriteResultJson, display: Display, o: FollowRenamesBefore): string {\n if (!o.renamed) return \"No staged renames.\";\n if (doc.affected.length === 0) return \"No scope globs follow the staged renames.\";\n const lines = doc.affected.map((v) => {\n const before = o.before.get(v.id) ?? [];\n const old = before.filter((g) => !v.applies_to.includes(g));\n const now = v.applies_to.filter((g) => !before.includes(g));\n const change =\n old.length === 0 ? `+ ${now.join(\", \")}` : `${old.join(\", \")} → ${now.join(\", \")}`;\n return `${named(v.id, display)}: ${change}`;\n });\n return [...lines, \"Staged; commit the scoped events with the renames.\"].join(\"\\n\");\n}\n\n/** The past participle of each write command, for `Not <verb>: …`. */\nconst VERBS: Readonly<Record<WriteResultJson[\"command\"], string>> = {\n new: \"proposed\",\n accept: \"accepted\",\n supersede: \"superseded\",\n reject: \"rejected\",\n withdraw: \"withdrawn\",\n deprecate: \"deprecated\",\n note: \"noted\",\n link: \"linked\",\n scope: \"scoped\",\n update: \"updated\",\n};\n\n/**\n * The text of a write command (design §5.6, §6.1). `subject` names what a refused command was\n * about; `number` is the decision's number in the write result, if it has one now; `reason` is\n * the reason a lifecycle exit recorded.\n */\nexport function writeText(\n doc: WriteResultJson,\n display: Display,\n o: {\n readonly subject: string;\n readonly number: string | null;\n readonly reason?: string | null;\n /** The decision's globs before a `scope` write. */\n readonly scopeBefore?: readonly string[];\n /** For `scope --follow-renames`: every decision's globs before, and whether renames were staged. */\n readonly followRenames?: FollowRenamesBefore;\n /** The superseded scope an `accept` copied. */\n readonly copied?: ScopeOffer | null;\n /** Who proposed with `new`, and the log's `accept_requires_human`, for the next step. */\n readonly actor?: Actor;\n readonly acceptRequiresHuman?: boolean;\n },\n): string {\n const verb = VERBS[doc.command];\n if (!doc.ok) {\n // `new --commit` without an editor refuses a draft with unfilled sections (design §7.2).\n const unfilled = doc.command === \"new\" && sectionGaps(doc.findings).headings.length > 0;\n return [\n `Not ${verb}: ${o.subject}`,\n ...findingLines(doc.findings),\n ...(unfilled\n ? [\n \"Fill them in with --section <id>=<markdown>, or run without --commit and edit the draft.\",\n ]\n : []),\n ].join(\"\\n\");\n }\n // Before the null-decision guard: without a <decision>, `decision` is null (design-review L1).\n if (o.followRenames !== undefined) return followRenamesText(doc, display, o.followRenames);\n const v = doc.decision;\n if (v === null) return \"\";\n const committed = doc.commit === null ? null : `Committed ${short(doc.commit)}`;\n const recorded = committed === null ? \"Staged; commit to record it.\" : `${committed}.`;\n switch (doc.command) {\n case \"new\":\n return [\n `Proposed ${v.id}: ${v.title}`,\n ...doc.written.map((p) => ` ${p}`),\n ...draftAdvice(doc.findings),\n ...(committed === null ? [] : [`${committed}.`]),\n // An agent can't accept under accept_requires_human, so don't tell it to (design §7.1).\n o.actor?.kind === \"agent\" && o.acceptRequiresHuman === true\n ? `Next: ask a human to review and accept it (adr accept ${v.id})`\n : `Next: adr accept ${v.id}`,\n ].join(\"\\n\");\n case \"accept\":\n return [\n `Accepted ${v.id}: ${v.title}`,\n ...doc.affected.map((a) => `Superseded ${named(a.id, display)}: ${a.title}`),\n ...(o.copied === undefined || o.copied === null\n ? []\n : [`Copied scope from ${o.copied.displays.join(\", \")}: ${o.copied.globs.join(\", \")}`]),\n committed === null\n ? \"Staged; commit to record it.\"\n : o.number === null\n ? `${committed}. The number is assigned when this commit lands on main.`\n : `${committed} as ${o.number}.`,\n ].join(\"\\n\");\n case \"supersede\":\n return [\n `Superseded ${named(v.id, display)}: ${v.title}`,\n ` by ${named(v.superseded_by ?? \"\", display)}`,\n recorded,\n ].join(\"\\n\");\n case \"reject\":\n case \"withdraw\":\n case \"deprecate\":\n return [\n `${verb.charAt(0).toUpperCase()}${verb.slice(1)} ${named(v.id, display)}: ${v.title}`,\n ...(o.reason === undefined || o.reason === null ? [] : [` reason: ${o.reason}`]),\n recorded,\n ].join(\"\\n\");\n case \"note\":\n return [`Noted on ${named(v.id, display)}: ${v.title}`, recorded].join(\"\\n\");\n case \"link\": {\n // The reducer appends a new link, so the one written is the last.\n const link = doc.written.length === 0 ? undefined : v.links.at(-1);\n if (link === undefined) return `Links of ${named(v.id, display)} unchanged`;\n return [\n `Linked ${named(v.id, display)} ${link.rel} ${named(link.to, display)}`,\n recorded,\n ].join(\"\\n\");\n }\n case \"scope\": {\n const before = new Set(o.scopeBefore ?? []);\n const after = new Set(v.applies_to);\n const globs = v.applies_to.length === 0 ? \"no globs\" : v.applies_to.join(\", \");\n if (doc.written.length === 0) return `Scope of ${named(v.id, display)} unchanged: ${globs}`;\n return [\n `Scope of ${named(v.id, display)}: ${v.title}`,\n ...v.applies_to.filter((g) => !before.has(g)).map((g) => ` + ${g}`),\n ...[...before].filter((g) => !after.has(g)).map((g) => ` - ${g}`),\n ` = ${globs}`,\n recorded,\n ].join(\"\\n\");\n }\n case \"update\":\n if (doc.written.length === 0) return `Draft of ${named(v.id, display)} unchanged`;\n return [`Updated the draft of ${named(v.id, display)}: ${v.title}`, recorded].join(\"\\n\");\n }\n}\n\n/**\n * \"Applies to\" without globs: nothing is recorded, which isn't \"governs nothing\" (design §7.3),\n * with the command that adds globs while the decision can still take them.\n */\nfunction noGlobs(v: DecisionView, display: Display): string {\n return adrKind.machine.allowed(v.status, \"scoped\")\n ? `no globs recorded; add them with adr scope ${display(v.id)} --add <glob>`\n : \"no globs recorded\";\n}\n\n/** `adr show`: the state header, the decision's fields and its body. */\nexport function showText(doc: DecisionShowJson, display: Display): string {\n const v = doc.decision;\n const supersedes =\n v.supersedes.length === 0 && v.declared_supersedes.length > 0\n ? `none (declared: ${list(v.declared_supersedes, display)})`\n : list(v.supersedes, display);\n const fields: [string, string][] = [\n [\"Title\", v.title],\n [\"Status\", `${v.status} (${day(v.status_at)})`],\n [\"Effective\", v.effective === null ? \"none (supersession cycle)\" : named(v.effective, display)],\n [\"Chain\", v.chain.map(display).join(\" → \")],\n [\"Supersedes\", supersedes],\n [\"Applies to\", v.applies_to.length === 0 ? noGlobs(v, display) : v.applies_to.join(\", \")],\n [\"Body\", bodyLine(v)],\n ];\n if (doc.events === null) fields.push([\"History\", v.history.join(\" · \")]);\n const width = Math.max(...fields.map(([k]) => k.length)) + 2;\n const lines = fields.map(([k, value]) => `${`${k}:`.padEnd(width)}${value}`);\n if (doc.events !== null) lines.push(\"History:\", ...historyLines(doc.events));\n const body = doc.body === null ? \"\" : `\\n${doc.body.endsWith(\"\\n\") ? doc.body : `${doc.body}\\n`}`;\n return `${renderStateHeader(doc.header)}\\n${lines.join(\"\\n\")}\\n${body}`;\n}\n\n/**\n * `adr for`: per path, one row per decision (named, status, title, how it matched), its warning\n * below it when it isn't in force, then the anchors that name no decision of this log.\n */\nexport function forText(doc: DecisionsForJson, display: Display, keyword: string): string {\n const lines: string[] = [];\n for (const p of doc.paths) {\n lines.push(p.tracked ? p.path : `${p.path} (not tracked)`);\n if (p.decisions.length === 0 && p.unresolved.length === 0) lines.push(\" no decisions\");\n const rows = columns(\n p.decisions.map((d) => [\n named(d.id, display),\n d.status,\n d.title,\n d.via\n .map((v) => (v.type === \"glob\" ? `glob ${v.glob}` : `anchor line ${v.line}`))\n .join(\", \"),\n ]),\n ).split(\"\\n\");\n p.decisions.forEach((d, i) => {\n lines.push(` ${rows[i] ?? \"\"}`);\n if (d.warning !== null) lines.push(` ${d.warning}`);\n });\n for (const u of p.unresolved) {\n const why = u.reason === \"other-log\" ? \"in another log\" : \"not in this log\";\n lines.push(` unresolved: ${keyword}:${u.ref} (line ${u.line}, ${why})`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * `adr search`: one padded row per result with its excerpt (or which field matched) under it, and\n * an inactive result's warning; then the count.\n */\nexport function searchText(doc: DecisionSearchJson): string {\n const quoted = JSON.stringify(doc.query);\n if (doc.results.length === 0) {\n return `No ${doc.include_inactive ? \"\" : \"active \"}decisions match ${quoted}.`;\n }\n const rows = columns(\n doc.results.map((r) => [\n r.decision.number === null ? r.decision.id : `${r.decision.display} (${r.decision.id})`,\n r.decision.status,\n r.decision.title,\n ]),\n ).split(\"\\n\");\n const lines: string[] = [];\n doc.results.forEach((r, i) => {\n lines.push(rows[i] ?? \"\");\n if (r.header.warning !== null) lines.push(` ${r.header.warning}`);\n const where = r.matched.filter((f) => f === \"id\" || f === \"title\").join(\" and \");\n lines.push(r.excerpt === null ? ` (${where} match)` : ` ${r.excerpt}`);\n });\n const n = doc.total;\n lines.push(`${n === 1 ? \"1 decision matches\" : `${n} decisions match`} ${quoted}.`);\n return lines.join(\"\\n\");\n}\n\n/** `adr init`: what was written and kept, then the next step; or that nothing was needed. */\nexport function initText(doc: InitResultJson): string {\n if (doc.written.length === 0) {\n return `Already initialized: ${doc.root} (kept ${doc.kept.join(\", \")})`;\n }\n const skill = doc.skill !== null && doc.written.includes(doc.skill);\n const onlySkill = doc.written.every((p) => p === doc.skill || p === \"AGENTS.md\");\n return [\n onlySkill ? \"Set up the adr agent skill\" : `Initialized ${doc.root}`,\n ...doc.written.map((p) => ` ${p}`),\n ...doc.kept.map((p) => `Kept ${p}`),\n ...(doc.commit === null ? [] : [`Committed ${short(doc.commit)}.`]),\n skill ? \"Next: adr mcp, from your MCP client's config\" : 'Next: adr new \"<title>\"',\n ].join(\"\\n\");\n}\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport {\n type CliIO,\n COMMIT_OPTIONS,\n type CommandSpec,\n commitChoice,\n confirm,\n} from \"@nikovirtala/ledger/cli\";\nimport { acceptDecision, type CopyScope, type ScopeOffer } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst MAX_LISTED = 5;\n\n/** `Copy the scope of ADR-0002 (src/a/**, src/b/**) to k3f9q8a1? [y/N] ` (design §6.10). */\nfunction question(id: string, offer: ScopeOffer): string {\n const shown = offer.globs.slice(0, MAX_LISTED).join(\", \");\n const more = offer.globs.length - MAX_LISTED;\n const globs = more > 0 ? `${shown} and ${more} more` : shown;\n const ds = offer.displays;\n const sources = ds.length === 1 ? ds[0] : `${ds.slice(0, -1).join(\", \")} and ${ds.at(-1)}`;\n const list = ds.length === 1 ? globs : `${offer.globs.length} globs: ${globs}`;\n return `Copy the scope of ${sources} (${list}) to ${id}? [y/N] `;\n}\n\n/**\n * The flags decide; without them a person at a terminal is asked, and everyone else (scripts,\n * hooks, CI, `--json`) gets the note with the `adr scope` command (design §6.10, D-e). `seen`\n * receives the offer that was copied, for the text.\n */\nfunction copyChoice(\n io: CliIO,\n json: boolean,\n value: unknown,\n seen: (offer: ScopeOffer) => void,\n): CopyScope {\n const copy = async (offer: ScopeOffer) => {\n seen(offer);\n return true;\n };\n if (value === true) return copy;\n if (value === false) return \"skip\";\n if (json || !io.interactive) return \"suggest\";\n return async (offer) => {\n const yes = await confirm(io, question(offer.id, offer), { json });\n if (yes) seen(offer);\n return yes;\n };\n}\n\n/** `adr accept <decision> [--copy-scope | --no-copy-scope] …` (design §5.6, §6.10). */\nexport const acceptCommand: CommandSpec = {\n name: \"accept\",\n summary: \"accept a proposed decision, superseding the decisions it declares\",\n usage:\n \"accept <decision> [--copy-scope | --no-copy-scope] [--commit | --no-commit] [-m <message>]\",\n options: { \"copy-scope\": { type: \"boolean\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n const seen: { offer: ScopeOffer | null } = { offer: null };\n const copyScope = copyChoice(io, flags.json, values[\"copy-scope\"], (offer) => {\n seen.offer = offer;\n });\n const doc = await acceptDecision(\n log,\n { id: input, actor },\n {\n ...commitChoice(values, { autoCommit: log.adr.autoCommit }),\n notes: attribution,\n copyScope,\n },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: v === null || doc.commit === null || v.number === null ? null : v.display,\n copied: doc.ok ? seen.offer : null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { deprecateDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"deprecate <decision> --reason <text> [--commit | --no-commit] [-m <message>]\";\n\n/** `adr deprecate` (design §6.5): an accepted decision no longer in force. */\nexport const deprecateCommand: CommandSpec = {\n name: \"deprecate\",\n summary: \"deprecate an accepted decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason !== \"string\" || values.reason.trim() === \"\") {\n throw new UsageError(`missing --reason <text>; usage: adr ${USAGE}`);\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await deprecateDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions } from \"../log.js\";\nimport { decisionsFor } from \"../scope.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { forText } from \"./text.js\";\n\n/** `adr for <path>… [--ref <ref>]` (design §6.9): the decisions that govern each file. */\nexport const forCommand: CommandSpec = {\n name: \"for\",\n summary: \"list the decisions that govern files, by scope glob and code anchor\",\n usage: \"for <path>…\",\n options: {},\n positionals: { min: 1, max: 100, names: [\"path\"] },\n ref: \"read\",\n async run({ io, flags, positionals }) {\n const log = await openForCli(io, flags);\n const read = await readDecisions(log);\n const doc = await decisionsFor(read, log, { paths: positionals, cwd: io.cwd });\n const display = (id: string) => read.projection.views.get(id)?.display ?? id;\n return {\n exit: 0,\n json: doc as unknown as JsonValue,\n text: forText(doc, display, read.adr.anchorKeyword),\n notes: notesWith(doc.notes, numberingNote(read, { unavailable: false })),\n };\n },\n};\n","import { resolve } from \"node:path\";\nimport {\n findingsReport,\n formatText,\n type HookManager,\n type JsonValue,\n UsageError,\n} from \"@nikovirtala/ledger\";\nimport type { CommandSpec, Outcome } from \"@nikovirtala/ledger/cli\";\nimport {\n addHookTrailers,\n type HooksResultJson,\n installDecisionHooks,\n printDecisionHooks,\n runPreCommitHook,\n uninstallDecisionHooks,\n} from \"../hooks.js\";\nimport { openForCli } from \"./open.js\";\n\nconst USAGE =\n \"hooks install | uninstall | print --manager lefthook|husky|pre-commit | run pre-commit | trailers <message-file>\";\nconst MANAGERS: readonly HookManager[] = [\"lefthook\", \"husky\", \"pre-commit\"];\n\nconst outcome = (doc: HooksResultJson, text: string, notes: readonly string[]): Outcome => ({\n exit: 0,\n json: doc as unknown as JsonValue,\n text,\n notes,\n});\n\n/**\n * `adr hooks install | uninstall | print --manager … | run pre-commit | trailers <message-file>`\n * (design 2b D4, D8, §4.3): adr's git hooks through ledger's shims, shared with other ark tools.\n */\nexport const hooksCommand: CommandSpec = {\n name: \"hooks\",\n summary: \"install, remove or print adr's git hooks, and run their steps\",\n usage: USAGE,\n options: { manager: { type: \"string\" } },\n positionals: { min: 1, max: 2, names: [\"action\", \"argument\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [action = \"\", argument] = positionals;\n const manager = values.manager;\n if (manager !== undefined && action !== \"print\") {\n throw new UsageError(`--manager goes with hooks print only; usage: adr ${USAGE}`);\n }\n const noArgument = () => {\n if (argument !== undefined) {\n throw new UsageError(\n `unexpected argument ${JSON.stringify(argument)}; usage: adr ${USAGE}`,\n );\n }\n };\n switch (action) {\n case \"install\": {\n noArgument();\n const log = await openForCli(io, flags);\n const doc = await installDecisionHooks(log);\n const lines = [\n ...[...doc.written, ...doc.unchanged]\n .map((p) => `${doc.written.includes(p) ? \"wrote\" : \"unchanged\"} ${p}`)\n .sort((a, b) => order(a) - order(b)),\n `adr hooks: ${doc.registrations.map((r) => r.hook).join(\", \")}`,\n ];\n return outcome(doc, lines.join(\"\\n\"), log.notes);\n }\n case \"uninstall\": {\n noArgument();\n const log = await openForCli(io, flags);\n const doc = await uninstallDecisionHooks(log);\n const text =\n doc.written.length === 0\n ? \"adr hooks were not installed\"\n : doc.written.map((p) => `removed adr from ${p}`).join(\"\\n\");\n return outcome(doc, text, log.notes);\n }\n case \"print\": {\n noArgument();\n if (manager === undefined) {\n throw new UsageError(\"hooks print needs --manager lefthook, husky or pre-commit\");\n }\n if (!(MANAGERS as readonly unknown[]).includes(manager)) {\n throw new UsageError(\n `unknown hook manager ${JSON.stringify(manager)}; use lefthook, husky or pre-commit`,\n );\n }\n const log = await openForCli(io, flags);\n const doc = printDecisionHooks(log, manager as HookManager);\n return outcome(doc, doc.snippet ?? \"\", log.notes);\n }\n case \"run\": {\n if (argument !== \"pre-commit\") throw new UsageError(\"adr hooks run supports pre-commit\");\n const worktree = await openForCli(io, flags);\n const index = await openForCli(io, flags, { reader: \"index\" });\n const r = await runPreCommitHook({ worktree, index, env: io.env });\n return {\n exit: r.exit,\n json: findingsReport(r.findings, { failOn: r.failOn }) as unknown as JsonValue,\n text: r.findings.length === 0 ? \"\" : formatText(r.findings),\n notes: r.notes,\n };\n }\n case \"trailers\": {\n if (argument === undefined) {\n throw new UsageError(`missing argument <message-file>; usage: adr ${USAGE}`);\n }\n const log = await openForCli(io, flags);\n const doc = await addHookTrailers(log, resolve(io.cwd, argument));\n return outcome(doc, \"\", log.notes);\n }\n default:\n throw new UsageError(\n `unknown hooks action ${JSON.stringify(action)}; use install, uninstall, print, run or trailers`,\n );\n }\n },\n};\n\n/** A shim line's rank in hook order, for the install text. */\nfunction order(line: string): number {\n return [\"pre-commit\", \"commit-msg\", \"pre-push\", \"post-merge\"].findIndex((h) =>\n line.endsWith(`/${h}`),\n );\n}\n","import { exitCode, formatText, type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { type IndexRun, runDecisionIndex } from \"../log-index.js\";\nimport { openForCli } from \"./open.js\";\n\nconst short = (sha: string) => sha.slice(0, 7);\n\n/** The text of `adr index` (design 2b §4.5). */\nfunction indexText({ doc, refreshed }: IndexRun): string {\n const { path } = doc;\n if (doc.check)\n return doc.findings.length === 0 ? `${path} is up to date` : formatText(doc.findings);\n if (doc.commit !== null) {\n return [\n `Committed ${path} as ${short(doc.commit)}`,\n ...(refreshed ? [`Wrote ${path} with uncommitted log changes`] : []),\n ].join(\"\\n\");\n }\n if (refreshed) {\n return `${path} is up to date in HEAD; wrote the work tree's copy, which includes uncommitted log changes`;\n }\n if (doc.fresh) return `${path} is up to date`;\n return doc.written.length > 0 ? `Wrote ${path}` : `Staged ${path}`;\n}\n\n/** `adr index [--check] [--commit | --no-commit] [-m <message>]` (design 2b §4.5). */\nexport const indexCommand: CommandSpec = {\n name: \"index\",\n summary: \"regenerate the decision index (index.md), or check that it is current\",\n usage: \"index [--check] [--commit | --no-commit] [-m <message>]\",\n options: { check: { type: \"boolean\" }, ...COMMIT_OPTIONS },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"read\",\n async run({ io, flags, values }) {\n const check = values.check === true;\n if (check && (values.commit === true || typeof values.message === \"string\")) {\n throw new UsageError(\"--check writes nothing; drop --commit and --message\");\n }\n if (!check && flags.ref !== null) {\n throw new UsageError(\"adr index writes the work tree; use --ref only with --check\");\n }\n const log = await openForCli(io, flags);\n const run = await runDecisionIndex(log, {\n check,\n ...(check ? {} : commitChoice(values, { autoCommit: log.adr.autoCommit })),\n });\n return {\n exit: check ? exitCode(run.doc.findings, { failOn: log.adr.failOn }) : 0,\n json: run.doc as unknown as JsonValue,\n text: indexText(run),\n notes: run.doc.notes,\n };\n },\n};\n","import { realpath } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { initDecisionLog } from \"../init.js\";\nimport { openForCli } from \"./open.js\";\nimport { initText } from \"./text.js\";\n\nconst DEFAULT_SKILL_DIR = \".claude/skills/adr\";\nconst MAX_DIR = 1024;\n\n/** `--skill-dir` as a repo-relative directory inside the work tree and outside `.git`. */\nasync function skillDir(root: string, cwd: string, given: string): Promise<string> {\n const dir = given.trim();\n const bad = () => new UsageError(\"--skill-dir must be a directory inside the repository\");\n if (dir === \"\" || dir.length > MAX_DIR || dir.includes(\"\\0\")) throw bad();\n const base = await realpath(cwd).catch(() => cwd);\n const rel = relative(root, resolve(base, dir));\n if (rel === \"..\" || rel.startsWith(`..${sep}`) || isAbsolute(rel)) throw bad();\n const segments = rel.split(sep).filter((s) => s !== \"\");\n if (segments[0] === \".git\") throw bad();\n return segments.join(\"/\");\n}\n\n/**\n * `adr init [--template <name>]… [--skill [--skill-dir <path>]] [--commit | --no-commit]\n * [-m <message>]` (design §6.2, phase 3 §9).\n */\nexport function initCommand(version: string): CommandSpec {\n return {\n name: \"init\",\n summary: \"set up a decision log: a config file and starter templates\",\n usage:\n \"init [--template <name>]… [--skill [--skill-dir <path>]] [--commit | --no-commit] [-m <message>]\",\n options: {\n template: { type: \"string\", multiple: true },\n skill: { type: \"boolean\" },\n \"skill-dir\": { type: \"string\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"reject\",\n async run({ io, flags, values }) {\n const templates = Array.isArray(values.template) ? (values.template as string[]) : undefined;\n const given = typeof values[\"skill-dir\"] === \"string\" ? values[\"skill-dir\"] : null;\n if (given !== null && values.skill !== true)\n throw new UsageError(\"--skill-dir needs --skill\");\n const log = await openForCli(io, flags);\n const root = log.git.root ?? io.cwd;\n const dir =\n values.skill !== true\n ? null\n : given === null\n ? DEFAULT_SKILL_DIR\n : await skillDir(root, io.cwd, given);\n const doc = await initDecisionLog(log, {\n ...(templates === undefined ? {} : { templates }),\n ...(dir === null ? {} : { skill: { dir, version } }),\n ...commitChoice(values, { autoCommit: log.adr.autoCommit }),\n });\n return { exit: 0, json: doc as unknown as JsonValue, text: initText(doc), notes: doc.notes };\n },\n };\n}\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { linkDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\n/** `adr link <decision> <target> [--rel <rel>]` (design §6.7): a typed link, in any state. */\nexport const linkCommand: CommandSpec = {\n name: \"link\",\n summary: \"link a decision to another one, here or in a configured source\",\n usage:\n \"link <decision> <target> [--rel relates-to|refines|depends-on] [--commit | --no-commit] [-m <message>]\",\n options: { rel: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 2, max: 2, names: [\"decision\", \"target\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [input = \"\", to = \"\"] = positionals;\n const rel = typeof values.rel === \"string\" ? values.rel : \"relates-to\";\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await linkDecision(\n log,\n { id: input, to, rel, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { DECISION_STATUSES, type DecisionStatus } from \"../kind.js\";\nimport { changedSince, numberingNote, readDecisions } from \"../log.js\";\nimport { listDecisions } from \"../views.js\";\nimport { openForCli } from \"./open.js\";\nimport { listText, sinceText } from \"./text.js\";\n\nconst plural = (n: number, one: string, many: string) => (n === 1 ? `1 ${one}` : `${n} ${many}`);\n\nfunction statuses(values: Readonly<Record<string, unknown>>): DecisionStatus[] {\n const given = Array.isArray(values.status) ? (values.status as string[]) : [];\n return given.map((s) => {\n if (!(DECISION_STATUSES as readonly string[]).includes(s)) {\n throw new UsageError(\n `unknown status ${JSON.stringify(s)}; use one of ${DECISION_STATUSES.join(\", \")}`,\n );\n }\n return s as DecisionStatus;\n });\n}\n\n/** `--since`'s revision: non-empty and not an option. */\nfunction sinceRev(values: Readonly<Record<string, unknown>>): string | null {\n const v = values.since;\n if (typeof v !== \"string\") return null;\n if (v.trim() === \"\" || v.startsWith(\"-\")) throw new UsageError(\"--since must be a revision\");\n return v;\n}\n\n/** `adr list [--status <status>]… [--since <rev>]` (design §5.6, 2b D7). */\nexport const listCommand: CommandSpec = {\n name: \"list\",\n summary: \"list decisions with their computed status\",\n usage: \"list [--status <status>]… [--since <rev>]\",\n options: { status: { type: \"string\", multiple: true }, since: { type: \"string\" } },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"read\",\n async run({ io, flags, values }) {\n const status = statuses(values);\n const rev = sinceRev(values);\n const log = await openForCli(io, flags);\n const since = rev === null ? null : await changedSince(log, rev);\n const read = await readDecisions(log);\n const doc = listDecisions(read, { status, since });\n const notes = [...doc.notes];\n const numbering = numberingNote(read, { unavailable: true });\n if (numbering !== null && doc.decisions.length > 0) notes.push(numbering);\n if (doc.findings.length > 0) {\n notes.push(\n `the decision log has ${plural(doc.findings.length, \"problem\", \"problems\")}; run adr verify`,\n );\n }\n if (doc.unreadable.length > 0) {\n notes.push(\n `${plural(doc.unreadable.length, \"decision uses\", \"decisions use\")} a newer format; upgrade adr`,\n );\n }\n if (doc.unfoldable.length > 0) {\n notes.push(\n `${plural(doc.unfoldable.length, \"decision\", \"decisions\")} can't be read; run adr verify`,\n );\n }\n const display = (id: string) => read.projection.views.get(id)?.display ?? id;\n const text = doc.since === null ? listText(doc, display) : sinceText(doc, doc.since, display);\n return { exit: 0, json: doc as unknown as JsonValue, text, notes };\n },\n};\n","import { UsageError } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\n\n/**\n * `adr mcp` (design §7.1): the MCP server over stdio. Loaded with a dynamic import, so no other\n * command loads the MCP SDK.\n */\nexport function mcpCommand(version: string): CommandSpec {\n return {\n name: \"mcp\",\n summary: \"start the MCP server over stdio\",\n usage: \"mcp\",\n options: {},\n positionals: { min: 0, max: 0, names: [] },\n ref: \"reject\",\n async run({ io, flags }) {\n if (flags.json) throw new UsageError(\"adr mcp speaks JSON-RPC on stdout; it takes no --json\");\n if (io.interactive) {\n io.stderr.write(\n \"adr: adr mcp speaks MCP on stdin and stdout; start it from an MCP client\\n\",\n );\n }\n const { serveAdrMcp } = await import(\"../mcp/server.js\");\n await serveAdrMcp({\n cwd: io.cwd,\n root: flags.root,\n env: io.env,\n version,\n stderr: io.stderr,\n });\n return { exit: 0, json: null, text: \"\" };\n },\n };\n}\n","import { spawn } from \"node:child_process\";\n\n/** The `edit` callback of `proposeDecision`: `null` when the editor exited 0, else a note. */\nexport type Edit = (absPath: string) => Promise<string | null>;\n\n/**\n * The user's editor as an `edit` callback (design §5.7), or `null` when neither `VISUAL` nor\n * `EDITOR` is set. The editor string is run by `sh -c` the way git runs `core.editor`, with the\n * path as the positional parameter `$1`, never interpolated. When stdout isn't a TTY (piped\n * `--json`, say), the editor's stdout goes to stderr so the CLI's stdout stays one document.\n * The callback never throws: a spawn error or a non-zero exit becomes the note.\n */\nexport function editorFor(\n env: NodeJS.ProcessEnv,\n o: { readonly stdoutIsTTY: boolean },\n): Edit | null {\n const editor = [env.VISUAL, env.EDITOR].map((v) => v?.trim() ?? \"\").find((v) => v !== \"\");\n if (editor === undefined) return null;\n return (absPath) =>\n new Promise((resolve) => {\n const fail = (e: unknown) =>\n resolve(`could not start the editor: ${e instanceof Error ? e.message : String(e)}`);\n try {\n const child = spawn(\"sh\", [\"-c\", `${editor} \"$1\"`, \"sh\", absPath], {\n env,\n stdio: o.stdoutIsTTY ? \"inherit\" : [\"inherit\", 2, \"inherit\"],\n });\n child.on(\"error\", fail);\n child.on(\"close\", (code, signal) => {\n if (code === 0) resolve(null);\n else {\n const how =\n code === null\n ? `was killed by ${signal ?? \"a signal\"}`\n : `exited with status ${code}`;\n resolve(`the editor ${how}; the draft is staged as rendered`);\n }\n });\n } catch (e) {\n fail(e);\n }\n });\n}\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { proposeDecision } from \"../write.js\";\nimport { editorFor } from \"./editor.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { unfilledWarning, writeText } from \"./text.js\";\n\nconst strings = (v: unknown): string[] => (Array.isArray(v) ? (v as string[]) : []);\n\n/** `--section <id>=<markdown>` values, split at the first `=`; each id at most once. */\nfunction sections(values: readonly string[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const value of values) {\n const at = value.indexOf(\"=\");\n const id = at < 0 ? \"\" : value.slice(0, at).trim();\n if (id === \"\") {\n throw new UsageError(`--section needs <id>=<markdown>, not ${JSON.stringify(value)}`);\n }\n if (Object.hasOwn(out, id)) throw new UsageError(`--section ${id} is given twice`);\n out[id] = value.slice(at + 1);\n }\n return out;\n}\n\n/**\n * `adr new <title> …` (design §5.6). The editor runs with `--edit`, or without `--no-edit` when\n * the terminal is interactive and an editor is set.\n */\nexport const newCommand: CommandSpec = {\n name: \"new\",\n summary: \"propose a decision from a template and stage it\",\n usage:\n \"new <title> [--template <name>] [--supersedes <decision>]… [--section <id>=<markdown>]… [--edit | --no-edit] [--commit | --no-commit] [-m <message>]\",\n options: {\n template: { type: \"string\" },\n supersedes: { type: \"string\", multiple: true },\n section: { type: \"string\", multiple: true },\n edit: { type: \"boolean\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 1, max: 1, names: [\"title\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const title = positionals[0] ?? \"\";\n const given = sections(strings(values.section));\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n // Design review NIT 1: the skip notes say \"not committed\" only when a commit was asked for.\n const { commit: requested, message } = commitChoice(values, {\n autoCommit: log.adr.autoCommit,\n });\n const notes: string[] = [];\n const editor = editorFor(io.env, { stdoutIsTTY: io.stdoutIsTTY });\n const wantsEdit = values.edit === true || (values.edit === undefined && io.interactive);\n if (values.edit === true && editor === null) notes.push(\"no editor: set VISUAL or EDITOR\");\n const edit =\n wantsEdit && editor !== null\n ? async (abs: string) => {\n const note = await editor(abs);\n if (note !== null) notes.push(note);\n return note;\n }\n : undefined;\n const doc = await proposeDecision(\n log,\n {\n title,\n sections: given,\n supersedes: strings(values.supersedes),\n actor,\n ...(typeof values.template === \"string\" ? { template: values.template } : {}),\n },\n {\n commit: requested,\n message,\n notes: attribution,\n ...(edit === undefined ? {} : { edit }),\n onNote: (note) => notes.push(requested ? `not committed: ${note}` : note),\n },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n const unfilled = unfilledWarning(doc);\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: title.trim(),\n number: v === null || v.number === null ? null : v.display,\n actor,\n acceptRequiresHuman: log.adr.acceptRequiresHuman,\n }),\n notes: [...doc.notes, ...notes, ...(unfilled === null ? [] : [unfilled])],\n };\n },\n};\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { noteDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\n/** `adr note <decision> <text>` (design §6.6): a note on a decision in any state. */\nexport const noteCommand: CommandSpec = {\n name: \"note\",\n summary: \"add a note to a decision, in any state\",\n usage: \"note <decision> <text> [--commit | --no-commit] [-m <message>]\",\n options: { ...COMMIT_OPTIONS },\n positionals: { min: 2, max: 2, names: [\"decision\", \"text\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [input = \"\", text = \"\"] = positionals;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await noteDecision(\n log,\n { id: input, text, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { rejectDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"reject <decision> --reason <text> [--commit | --no-commit] [-m <message>]\";\n\n/** `adr reject` (design §6.3): a proposal that won't be adopted. */\nexport const rejectCommand: CommandSpec = {\n name: \"reject\",\n summary: \"reject a proposed decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason !== \"string\" || values.reason.trim() === \"\") {\n throw new UsageError(`missing --reason <text>; usage: adr ${USAGE}`);\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await rejectDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import {\n type JsonValue,\n resolveAttribution,\n type SetOp,\n stagedRenames,\n UsageError,\n} from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { readDecisions, resolveDecision } from \"../log.js\";\nimport { followScopeRenames, scopeDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE =\n \"scope <decision> ([--set <glob>]… | --clear | [--add <glob>]… [--remove <glob>]…) [--commit | --no-commit] [-m <message>] | scope [<decision>] --follow-renames\";\n/** The flag names `applySetOp` uses in its messages (design §3.2). */\nconst NAMES = { set: \"--set\", add: \"--add\", remove: \"--remove\", clear: \"--clear\" } as const;\n\nconst strings = (v: unknown): string[] => (Array.isArray(v) ? (v as string[]) : []);\n\n/** `--set`/`--clear`/`--add`/`--remove` as a set operation; `--clear` is `{ set: [] }`. */\nfunction setOp(values: Readonly<Record<string, unknown>>): SetOp {\n const set = strings(values.set);\n const add = strings(values.add);\n const remove = strings(values.remove);\n if (values.clear === true) {\n if (set.length > 0 || add.length > 0 || remove.length > 0) {\n throw new UsageError(\"--clear can't be combined with --set, --add or --remove\");\n }\n return { set: [] };\n }\n return { ...(set.length > 0 ? { set } : {}), add, remove };\n}\n\n/**\n * `--follow-renames` alone: no set operation, no commit and no message, all refused before\n * `commitChoice` so the answer doesn't depend on `auto_commit` (design §6.8).\n */\nfunction checkFollowRenames(values: Readonly<Record<string, unknown>>): void {\n const op = [\"set\", \"add\", \"remove\"].some((k) => strings(values[k]).length > 0);\n if (op || values.clear === true) {\n throw new UsageError(\n \"--follow-renames can't be combined with --set, --clear, --add or --remove\",\n );\n }\n if (values.commit === true) {\n throw new UsageError(\n \"--follow-renames stages its events for the commit that contains the renames; commit them together\",\n );\n }\n if (typeof values.message === \"string\") {\n throw new UsageError(\"--follow-renames never commits, so it takes no --message\");\n }\n}\n\n/**\n * `adr scope <decision> --set|--clear|--add|--remove …` (design §6.8): the globs of the code a\n * decision governs, written as one whole-set `scoped` event. `adr scope [<decision>]\n * --follow-renames` rewrites them after staged renames and stages the events, never committing.\n */\nexport const scopeCommand: CommandSpec = {\n name: \"scope\",\n summary: \"set, add or remove the globs of the code a decision governs\",\n usage: USAGE,\n options: {\n set: { type: \"string\", multiple: true },\n add: { type: \"string\", multiple: true },\n remove: { type: \"string\", multiple: true },\n clear: { type: \"boolean\" },\n \"follow-renames\": { type: \"boolean\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 0, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0];\n if (values[\"follow-renames\"] === true) {\n checkFollowRenames(values);\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const read = await readDecisions(log);\n const before = new Map([...read.projection.views].map(([id, v]) => [id, v.applies_to]));\n const renamed = (await stagedRenames(log.git)).length > 0;\n const doc = await followScopeRenames(\n log,\n { ...(input === undefined ? {} : { id: input }), actor },\n { notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? (input ?? \"\").trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n followRenames: { before, renamed },\n }),\n notes: doc.notes,\n };\n }\n const op = setOp(values);\n if (input === undefined)\n throw new UsageError(`missing argument <decision>; usage: adr ${USAGE}`);\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const choice = commitChoice(values, { autoCommit: log.adr.autoCommit });\n const read = await readDecisions(log);\n const before = read.projection.views.get(resolveDecision(read, input))?.applies_to ?? [];\n const doc = await scopeDecision(\n log,\n { id: input, op, actor, names: NAMES },\n { ...choice, notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n scopeBefore: before,\n }),\n notes: doc.notes,\n };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions } from \"../log.js\";\nimport { searchDecisions } from \"../search.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { searchText } from \"./text.js\";\n\n/** `adr search <query>… [--all]` (design §8.2): words are joined, and every one must match. */\nexport const searchCommand: CommandSpec = {\n name: \"search\",\n summary: \"search decisions' ids, titles, bodies and notes\",\n usage: \"search <query>… [--all]\",\n options: { all: { type: \"boolean\" } },\n positionals: { min: 1, max: 20, names: [\"query\"] },\n ref: \"read\",\n async run({ io, flags, values, positionals }) {\n const read = await readDecisions(await openForCli(io, flags));\n const doc = searchDecisions(read, {\n query: positionals.join(\" \"),\n includeInactive: values.all === true,\n });\n const notes = [...notesWith(doc.notes, numberingNote(read, { unavailable: false }))];\n if (doc.inactive_omitted > 0) {\n const k = doc.inactive_omitted;\n notes.push(\n `${k === 1 ? \"1 inactive decision also matches\" : `${k} inactive decisions also match`}; add --all to see them`,\n );\n }\n return { exit: 0, json: doc as unknown as JsonValue, text: searchText(doc), notes };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions, resolveDecision } from \"../log.js\";\nimport { showDecision } from \"../views.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { showText } from \"./text.js\";\n\n/** `adr show <decision> [--history]` (design §5.6). */\nexport const showCommand: CommandSpec = {\n name: \"show\",\n summary: \"show a decision with its state header, chain, history and body\",\n usage: \"show <decision> [--history]\",\n options: { history: { type: \"boolean\" } },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"read\",\n async run({ io, flags, values, positionals }) {\n const read = await readDecisions(await openForCli(io, flags));\n const id = resolveDecision(read, positionals[0] ?? \"\");\n const doc = await showDecision(read, id, { history: values.history === true });\n const display = (s: string) => read.projection.views.get(s)?.display ?? s;\n return {\n exit: 0,\n json: doc as unknown as JsonValue,\n text: showText(doc, display),\n notes: notesWith(doc.notes, numberingNote(read, { unavailable: false })),\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { supersedeDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE =\n \"supersede <decision> --by <decision> [--reason <text>] [--commit | --no-commit] [-m <message>]\";\n\n/** `adr supersede <decision> --by <decision> …` (design §5.6). */\nexport const supersedeCommand: CommandSpec = {\n name: \"supersede\",\n summary: \"mark an accepted decision as superseded by another accepted one\",\n usage: USAGE,\n options: { by: { type: \"string\" }, reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.by !== \"string\") {\n throw new UsageError(`missing --by <decision>; usage: adr ${USAGE}`);\n }\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n const doc = await supersedeDecision(\n log,\n {\n id: input,\n by: values.by,\n actor,\n ...(typeof values.reason === \"string\" ? { reason: values.reason } : {}),\n },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes: attribution },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { withdrawDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"withdraw <decision> [--reason <text>] [--commit | --no-commit] [-m <message>]\";\n\n/** `adr withdraw` (design §6.4): a proposal its author takes back. */\nexport const withdrawCommand: CommandSpec = {\n name: \"withdraw\",\n summary: \"withdraw a proposed decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason === \"string\" && values.reason.trim() === \"\") {\n throw new UsageError(\"--reason must not be empty\");\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await withdrawDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { templateHistoryRef } from \"@nikovirtala/ledger\";\nimport { type ToolCli, verifyCommand } from \"@nikovirtala/ledger/cli\";\nimport { adrKind } from \"../kind.js\";\nimport { adrChecks } from \"../verify.js\";\nimport { acceptCommand } from \"./accept.js\";\nimport { deprecateCommand } from \"./deprecate.js\";\nimport { forCommand } from \"./for.js\";\nimport { hooksCommand } from \"./hooks.js\";\nimport { indexCommand } from \"./index-command.js\";\nimport { initCommand } from \"./init.js\";\nimport { linkCommand } from \"./link.js\";\nimport { listCommand } from \"./list.js\";\nimport { mcpCommand } from \"./mcp.js\";\nimport { newCommand } from \"./new.js\";\nimport { noteCommand } from \"./note.js\";\nimport { openForCli } from \"./open.js\";\nimport { rejectCommand } from \"./reject.js\";\nimport { scopeCommand } from \"./scope.js\";\nimport { searchCommand } from \"./search.js\";\nimport { showCommand } from \"./show.js\";\nimport { supersedeCommand } from \"./supersede.js\";\nimport { withdrawCommand } from \"./withdraw.js\";\n\n/**\n * ledger's shared `verify`: the log as the mode reads it (the index for `--staged`, else the\n * `--ref` tree or the work tree), every phase-1 check, and `[verify] fail_on`.\n */\nconst verify = verifyCommand({\n async open({ io, flags, mode }) {\n const log = await openForCli(io, flags, {\n reader: mode.type === \"staged\" ? \"index\" : \"worktree\",\n });\n return {\n git: log.git,\n kind: adrKind,\n layout: log.layout,\n checks: adrChecks(log, await templateHistoryRef(log.git, mode)),\n failOn: log.adr.failOn,\n notes: log.notes,\n };\n },\n});\n\n/** The `adr` tool: its commands, for ledger's `runCli`. */\nexport function adrCli(version: string): ToolCli {\n return {\n name: \"adr\",\n version,\n summary: \"Architecture decision records kept as event logs in git.\",\n commands: [\n initCommand(version),\n newCommand,\n acceptCommand,\n rejectCommand,\n withdrawCommand,\n deprecateCommand,\n supersedeCommand,\n noteCommand,\n linkCommand,\n scopeCommand,\n indexCommand,\n hooksCommand,\n forCommand,\n listCommand,\n showCommand,\n searchCommand,\n verify,\n mcpCommand(version),\n ],\n };\n}\n","#!/usr/bin/env node\nimport { createRequire } from \"node:module\";\nimport { processIO, runCli } from \"@nikovirtala/ledger/cli\";\nimport { adrCli } from \"./cli/commands.js\";\n\n// Read at run time, relative to dist/cli.js (or src/cli.ts): both sit next to ../package.json.\nconst { version } = createRequire(import.meta.url)(\"../package.json\") as { version: string };\n\nprocess.exitCode = await runCli(adrCli(version), processIO());\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","names":["short","USAGE","USAGE","strings","USAGE","USAGE","USAGE"],"sources":["../src/cli/open.ts","../src/cli/text.ts","../src/cli/accept.ts","../src/cli/deprecate.ts","../src/cli/for.ts","../src/cli/hooks.ts","../src/cli/index-command.ts","../src/cli/init.ts","../src/cli/link.ts","../src/cli/list.ts","../src/cli/mcp.ts","../src/cli/editor.ts","../src/cli/new.ts","../src/cli/note.ts","../src/cli/reject.ts","../src/cli/scope.ts","../src/cli/search.ts","../src/cli/show.ts","../src/cli/supersede.ts","../src/cli/withdraw.ts","../src/cli/commands.ts","../src/cli.ts"],"sourcesContent":["import type { CliIO, GlobalFlags } from \"@nikovirtala/ledger/cli\";\nimport { type DecisionLog, openDecisionLog, readDecisions } from \"../log.js\";\nimport type { Display } from \"./text.js\";\n\n/**\n * The decision log a command works on: `--root` and `--ref` from the globals, git run with the\n * CLI's environment.\n */\nexport function openForCli(\n io: CliIO,\n flags: GlobalFlags,\n o: { readonly reader?: \"worktree\" | \"index\" } = {},\n): Promise<DecisionLog> {\n return openDecisionLog({\n cwd: io.cwd,\n root: flags.root,\n ref: flags.ref,\n ...(o.reader === undefined ? {} : { reader: o.reader }),\n gitOptions: { env: io.env },\n });\n}\n\n/**\n * How other decisions display in a write's text, read again from the work tree, like the write\n * result's own views: a commit on the main ref has numbered the decisions it accepted.\n */\nexport async function displayAfterWrite(log: DecisionLog): Promise<{ readonly display: Display }> {\n const read = await readDecisions(log);\n return { display: (id) => read.projection.views.get(id)?.display ?? id };\n}\n\n/** `notes` with `note` appended when there is one. */\nexport const notesWith = (notes: readonly string[], note: string | null): readonly string[] =>\n note === null ? notes : [...notes, note];\n","import {\n type Actor,\n type EventEnvelope,\n type Finding,\n renderStateHeader,\n} from \"@nikovirtala/ledger\";\nimport type { InitResultJson } from \"../init.js\";\nimport { adrKind, type DecisionView } from \"../kind.js\";\nimport type { ChangedSince } from \"../log.js\";\nimport type { DecisionsForJson } from \"../scope.js\";\nimport type { DecisionSearchJson } from \"../search.js\";\nimport type { DecisionListJson, DecisionShowJson } from \"../views.js\";\nimport type { ScopeOffer, WriteResultJson } from \"../write.js\";\n\n/** How a decision id is shown: its display (`ADR-0007`), or the id when it has no number. */\nexport type Display = (id: string) => string;\n\n/** A table: each column padded to its widest value, trailing spaces removed. */\nfunction columns(rows: readonly (readonly string[])[]): string {\n const widths: number[] = [];\n for (const row of rows) {\n row.forEach((cell, i) => {\n widths[i] = Math.max(widths[i] ?? 0, cell.length);\n });\n }\n return rows\n .map((row) =>\n row\n .map((cell, i) => (i === row.length - 1 ? cell : cell.padEnd(widths[i] ?? 0)))\n .join(\" \")\n .trimEnd(),\n )\n .join(\"\\n\");\n}\n\n/** `adr list`: one row per decision, `→ <effective>` when it differs from the decision. */\nexport function listText(doc: DecisionListJson, display: Display): string {\n if (doc.decisions.length === 0) return \"No decisions.\";\n return listRows(doc, display).join(\"\\n\");\n}\n\n/**\n * `adr list --since <rev>` (design 2b D7): a heading, then each row followed by the event types\n * added since `rev`; nothing at all when no decision changed, so the post-merge hook stays quiet.\n */\nexport function sinceText(doc: DecisionListJson, since: ChangedSince, display: Display): string {\n if (doc.decisions.length === 0) return \"\";\n const rows = listRows(doc, display);\n return [\n `Changed since ${since.rev} (${since.commit.slice(0, 7)}):`,\n ...doc.decisions.flatMap((v, i) => {\n const types = [...new Set(since.events.filter((e) => e.subject === v.id).map((e) => e.type))];\n return [rows[i] ?? \"\", ` [new: ${types.join(\", \")}]`];\n }),\n ].join(\"\\n\");\n}\n\nfunction listRows(doc: DecisionListJson, display: Display): string[] {\n return columns(\n doc.decisions.map((v) => {\n const arrow =\n v.effective === null\n ? \"→ (cycle)\"\n : v.effective === v.id\n ? \"\"\n : `→ ${display(v.effective)}`;\n return [v.number === null ? \"-\" : v.display, v.id, v.status, v.title, arrow];\n }),\n ).split(\"\\n\");\n}\n\n/** `ADR-0003 (m2x7p4d2)`, or the id alone when it has no number. */\nfunction named(id: string, display: Display): string {\n const shown = display(id);\n return shown === id ? id : `${shown} (${id})`;\n}\n\nconst day = (at: string | null) => (at ?? \"\").slice(0, 10);\nconst list = (ids: readonly string[], display: Display) =>\n ids.length === 0 ? \"none\" : ids.map((id) => named(id, display)).join(\", \");\n\nfunction bodyLine(v: DecisionView): string {\n if (v.body_path === null) return \"missing\";\n if (v.body_intact === null) return v.body_path;\n return `${v.body_path} (${v.body_intact ? \"intact\" : \"changed after acceptance\"})`;\n}\n\nfunction actorText(e: EventEnvelope): string {\n const a = e.actor;\n return a.kind === \"agent\" ? `${a.name} (agent ${a.agent} for ${a.on_behalf_of})` : a.name;\n}\n\n/** The second line of an event in `show --history`: its reason, else a summary of its data. */\nfunction eventDetail(e: EventEnvelope): string | null {\n if (typeof e.reason === \"string\") return `reason: ${e.reason}`;\n const entries = Object.entries(e.data);\n if (entries.length === 0) return null;\n return entries\n .map(([k, v]) => `${k}: ${typeof v === \"string\" ? v : JSON.stringify(v)}`)\n .join(\", \");\n}\n\nfunction historyLines(events: readonly EventEnvelope[]): string[] {\n const width = Math.max(...events.map((e) => e.type.length));\n return events.flatMap((e) => {\n const detail = eventDetail(e);\n return [\n ` ${e.at} ${e.type.padEnd(width)} ${actorText(e)}`,\n ...(detail === null ? [] : [` ${detail}`]),\n ];\n });\n}\n\nconst SECTION_FINDING =\n /^(?:required )?section (.+?) (is missing|is empty|still contains its guidance text)$/;\nconst REASONS: Readonly<Record<string, string>> = {\n \"is missing\": \"missing\",\n \"is empty\": \"empty\",\n \"still contains its guidance text\": \"guidance text left\",\n};\n\n/** The section findings of a draft lint as headings and reasons, and the other findings. */\nfunction sectionGaps(findings: readonly Finding[]): {\n headings: string[];\n reasons: string[];\n other: Finding[];\n} {\n const headings: string[] = [];\n const reasons: string[] = [];\n const other: Finding[] = [];\n for (const f of findings) {\n const m = SECTION_FINDING.exec(f.message);\n if (m === null) {\n other.push(f);\n continue;\n }\n const [, heading = \"\", what = \"\"] = m;\n const reason = REASONS[what] ?? what;\n if (!headings.includes(heading)) headings.push(heading);\n if (!reasons.includes(reason)) reasons.push(reason);\n }\n return { headings, reasons, other };\n}\n\n/**\n * The draft lint of `new` as advice: `Fill in N sections before accepting: A, B (why)` for the\n * section findings, and one line per other finding.\n */\nfunction draftAdvice(findings: readonly Finding[]): string[] {\n const { headings, reasons, other } = sectionGaps(findings);\n const n = headings.length;\n return [\n ...(n === 0\n ? []\n : [\n `Fill in ${n === 1 ? \"1 section\" : `${n} sections`} before accepting: ${headings.join(\", \")} (${reasons.join(\", \")})`,\n ]),\n ...other.map((f) => `Draft: ${f.message} [${f.rule}]`),\n ];\n}\n\n/**\n * The stderr warning of `new` when the draft it wrote has unfilled sections (design §7.2), or\n * `null` when there are none.\n */\nexport function unfilledWarning(doc: WriteResultJson): string | null {\n if (doc.command !== \"new\" || !doc.ok || doc.written.length === 0) return null;\n const { headings, reasons } = sectionGaps(doc.findings);\n const n = headings.length;\n const path = doc.findings.find((f) => f.file !== null)?.file ?? doc.decision?.body_path ?? null;\n if (n === 0 || path === null) return null;\n return `${path}: fill in ${n === 1 ? \"1 required section\" : `${n} required sections`} before committing or accepting: ${headings.join(\", \")} (${reasons.join(\", \")}); adr verify reports this until then`;\n}\n\nfunction findingLines(findings: readonly Finding[]): string[] {\n return findings.map((f) => ` ${f.file === null ? \"\" : `${f.file}: `}${f.message} [${f.rule}]`);\n}\n\nconst short = (sha: string) => sha.slice(0, 7);\n\nexport interface FollowRenamesBefore {\n readonly before: ReadonlyMap<string, readonly string[]>;\n readonly renamed: boolean;\n}\n\n/**\n * `adr scope --follow-renames`: one `<named>: <old globs> → <new globs>` line per changed\n * decision (`affected`), whether or not a decision was given.\n */\nfunction followRenamesText(doc: WriteResultJson, display: Display, o: FollowRenamesBefore): string {\n if (!o.renamed) return \"No staged renames.\";\n if (doc.affected.length === 0) return \"No scope globs follow the staged renames.\";\n const lines = doc.affected.map((v) => {\n const before = o.before.get(v.id) ?? [];\n const old = before.filter((g) => !v.applies_to.includes(g));\n const now = v.applies_to.filter((g) => !before.includes(g));\n const change =\n old.length === 0 ? `+ ${now.join(\", \")}` : `${old.join(\", \")} → ${now.join(\", \")}`;\n return `${named(v.id, display)}: ${change}`;\n });\n return [...lines, \"Staged; commit the scoped events with the renames.\"].join(\"\\n\");\n}\n\n/** The past participle of each write command, for `Not <verb>: …`. */\nconst VERBS: Readonly<Record<WriteResultJson[\"command\"], string>> = {\n new: \"proposed\",\n accept: \"accepted\",\n supersede: \"superseded\",\n reject: \"rejected\",\n withdraw: \"withdrawn\",\n deprecate: \"deprecated\",\n note: \"noted\",\n link: \"linked\",\n scope: \"scoped\",\n update: \"updated\",\n};\n\n/**\n * The text of a write command (design §5.6, §6.1). `subject` names what a refused command was\n * about; `number` is the decision's number in the write result, if it has one now; `reason` is\n * the reason a lifecycle exit recorded.\n */\nexport function writeText(\n doc: WriteResultJson,\n display: Display,\n o: {\n readonly subject: string;\n readonly number: string | null;\n readonly reason?: string | null;\n /** The decision's globs before a `scope` write. */\n readonly scopeBefore?: readonly string[];\n /** For `scope --follow-renames`: every decision's globs before, and whether renames were staged. */\n readonly followRenames?: FollowRenamesBefore;\n /** The superseded scope an `accept` copied. */\n readonly copied?: ScopeOffer | null;\n /** Who proposed with `new`, and the log's `accept_requires_human`, for the next step. */\n readonly actor?: Actor;\n readonly acceptRequiresHuman?: boolean;\n },\n): string {\n const verb = VERBS[doc.command];\n if (!doc.ok) {\n // `new --commit` without an editor refuses a draft with unfilled sections (design §7.2).\n const unfilled = doc.command === \"new\" && sectionGaps(doc.findings).headings.length > 0;\n return [\n `Not ${verb}: ${o.subject}`,\n ...findingLines(doc.findings),\n ...(unfilled\n ? [\n \"Fill them in with --section <id>=<markdown>, or run without --commit and edit the draft.\",\n ]\n : []),\n ].join(\"\\n\");\n }\n // Before the null-decision guard: without a <decision>, `decision` is null (design-review L1).\n if (o.followRenames !== undefined) return followRenamesText(doc, display, o.followRenames);\n const v = doc.decision;\n if (v === null) return \"\";\n const committed = doc.commit === null ? null : `Committed ${short(doc.commit)}`;\n const recorded = committed === null ? \"Staged; commit to record it.\" : `${committed}.`;\n switch (doc.command) {\n case \"new\":\n return [\n `Proposed ${v.id}: ${v.title}`,\n ...doc.written.map((p) => ` ${p}`),\n ...draftAdvice(doc.findings),\n ...(committed === null ? [] : [`${committed}.`]),\n // An agent can't accept under accept_requires_human, so don't tell it to (design §7.1).\n o.actor?.kind === \"agent\" && o.acceptRequiresHuman === true\n ? `Next: ask a human to review and accept it (adr accept ${v.id})`\n : `Next: adr accept ${v.id}`,\n ].join(\"\\n\");\n case \"accept\":\n return [\n `Accepted ${v.id}: ${v.title}`,\n ...doc.affected.map((a) => `Superseded ${named(a.id, display)}: ${a.title}`),\n ...(o.copied === undefined || o.copied === null\n ? []\n : [`Copied scope from ${o.copied.displays.join(\", \")}: ${o.copied.globs.join(\", \")}`]),\n committed === null\n ? \"Staged; commit to record it.\"\n : o.number === null\n ? `${committed}. The number is assigned when this commit lands on main.`\n : `${committed} as ${o.number}.`,\n ].join(\"\\n\");\n case \"supersede\":\n return [\n `Superseded ${named(v.id, display)}: ${v.title}`,\n ` by ${named(v.superseded_by ?? \"\", display)}`,\n recorded,\n ].join(\"\\n\");\n case \"reject\":\n case \"withdraw\":\n case \"deprecate\":\n return [\n `${verb.charAt(0).toUpperCase()}${verb.slice(1)} ${named(v.id, display)}: ${v.title}`,\n ...(o.reason === undefined || o.reason === null ? [] : [` reason: ${o.reason}`]),\n recorded,\n ].join(\"\\n\");\n case \"note\":\n return [`Noted on ${named(v.id, display)}: ${v.title}`, recorded].join(\"\\n\");\n case \"link\": {\n // The reducer appends a new link, so the one written is the last.\n const link = doc.written.length === 0 ? undefined : v.links.at(-1);\n if (link === undefined) return `Links of ${named(v.id, display)} unchanged`;\n return [\n `Linked ${named(v.id, display)} ${link.rel} ${named(link.to, display)}`,\n recorded,\n ].join(\"\\n\");\n }\n case \"scope\": {\n const before = new Set(o.scopeBefore ?? []);\n const after = new Set(v.applies_to);\n const globs = v.applies_to.length === 0 ? \"no globs\" : v.applies_to.join(\", \");\n if (doc.written.length === 0) return `Scope of ${named(v.id, display)} unchanged: ${globs}`;\n return [\n `Scope of ${named(v.id, display)}: ${v.title}`,\n ...v.applies_to.filter((g) => !before.has(g)).map((g) => ` + ${g}`),\n ...[...before].filter((g) => !after.has(g)).map((g) => ` - ${g}`),\n ` = ${globs}`,\n recorded,\n ].join(\"\\n\");\n }\n case \"update\":\n if (doc.written.length === 0) return `Draft of ${named(v.id, display)} unchanged`;\n return [`Updated the draft of ${named(v.id, display)}: ${v.title}`, recorded].join(\"\\n\");\n }\n}\n\n/**\n * \"Applies to\" without globs: nothing is recorded, which isn't \"governs nothing\" (design §7.3),\n * with the command that adds globs while the decision can still take them.\n */\nfunction noGlobs(v: DecisionView, display: Display): string {\n return adrKind.machine.allowed(v.status, \"scoped\")\n ? `no globs recorded; add them with adr scope ${display(v.id)} --add <glob>`\n : \"no globs recorded\";\n}\n\n/** `adr show`: the state header, the decision's fields and its body. */\nexport function showText(doc: DecisionShowJson, display: Display): string {\n const v = doc.decision;\n const supersedes =\n v.supersedes.length === 0 && v.declared_supersedes.length > 0\n ? `none (declared: ${list(v.declared_supersedes, display)})`\n : list(v.supersedes, display);\n const fields: [string, string][] = [\n [\"Title\", v.title],\n [\"Status\", `${v.status} (${day(v.status_at)})`],\n [\"Effective\", v.effective === null ? \"none (supersession cycle)\" : named(v.effective, display)],\n [\"Chain\", v.chain.map(display).join(\" → \")],\n [\"Supersedes\", supersedes],\n [\"Applies to\", v.applies_to.length === 0 ? noGlobs(v, display) : v.applies_to.join(\", \")],\n [\"Body\", bodyLine(v)],\n ];\n if (doc.events === null) fields.push([\"History\", v.history.join(\" · \")]);\n const width = Math.max(...fields.map(([k]) => k.length)) + 2;\n const lines = fields.map(([k, value]) => `${`${k}:`.padEnd(width)}${value}`);\n if (doc.events !== null) lines.push(\"History:\", ...historyLines(doc.events));\n const body = doc.body === null ? \"\" : `\\n${doc.body.endsWith(\"\\n\") ? doc.body : `${doc.body}\\n`}`;\n return `${renderStateHeader(doc.header)}\\n${lines.join(\"\\n\")}\\n${body}`;\n}\n\n/**\n * `adr for`: per path, one row per decision (named, status, title, how it matched), its warning\n * below it when it isn't in force, then the anchors that name no decision of this log.\n */\nexport function forText(doc: DecisionsForJson, display: Display, keyword: string): string {\n const lines: string[] = [];\n for (const p of doc.paths) {\n lines.push(p.tracked ? p.path : `${p.path} (not tracked)`);\n if (p.decisions.length === 0 && p.unresolved.length === 0) lines.push(\" no decisions\");\n const rows = columns(\n p.decisions.map((d) => [\n named(d.id, display),\n d.status,\n d.title,\n d.via\n .map((v) => (v.type === \"glob\" ? `glob ${v.glob}` : `anchor line ${v.line}`))\n .join(\", \"),\n ]),\n ).split(\"\\n\");\n p.decisions.forEach((d, i) => {\n lines.push(` ${rows[i] ?? \"\"}`);\n if (d.warning !== null) lines.push(` ${d.warning}`);\n });\n for (const u of p.unresolved) {\n const why = u.reason === \"other-log\" ? \"in another log\" : \"not in this log\";\n lines.push(` unresolved: ${keyword}:${u.ref} (line ${u.line}, ${why})`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * `adr search`: one padded row per result with its excerpt (or which field matched) under it, and\n * an inactive result's warning; then the count.\n */\nexport function searchText(doc: DecisionSearchJson): string {\n const quoted = JSON.stringify(doc.query);\n if (doc.results.length === 0) {\n return `No ${doc.include_inactive ? \"\" : \"active \"}decisions match ${quoted}.`;\n }\n const rows = columns(\n doc.results.map((r) => [\n r.decision.number === null ? r.decision.id : `${r.decision.display} (${r.decision.id})`,\n r.decision.status,\n r.decision.title,\n ]),\n ).split(\"\\n\");\n const lines: string[] = [];\n doc.results.forEach((r, i) => {\n lines.push(rows[i] ?? \"\");\n if (r.header.warning !== null) lines.push(` ${r.header.warning}`);\n const where = r.matched.filter((f) => f === \"id\" || f === \"title\").join(\" and \");\n lines.push(r.excerpt === null ? ` (${where} match)` : ` ${r.excerpt}`);\n });\n const n = doc.total;\n lines.push(`${n === 1 ? \"1 decision matches\" : `${n} decisions match`} ${quoted}.`);\n return lines.join(\"\\n\");\n}\n\n/** `adr init`: what was written and kept, then the next step; or that nothing was needed. */\nexport function initText(doc: InitResultJson): string {\n if (doc.written.length === 0) {\n return `Already initialized: ${doc.root} (kept ${doc.kept.join(\", \")})`;\n }\n const skill = doc.skill !== null && doc.written.includes(doc.skill);\n const onlySkill = doc.written.every((p) => p === doc.skill || p === \"AGENTS.md\");\n return [\n onlySkill ? \"Set up the adr agent skill\" : `Initialized ${doc.root}`,\n ...doc.written.map((p) => ` ${p}`),\n ...doc.kept.map((p) => `Kept ${p}`),\n ...(doc.commit === null ? [] : [`Committed ${short(doc.commit)}.`]),\n skill ? \"Next: adr mcp, from your MCP client's config\" : 'Next: adr new \"<title>\"',\n ].join(\"\\n\");\n}\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport {\n type CliIO,\n COMMIT_OPTIONS,\n type CommandSpec,\n commitChoice,\n confirm,\n} from \"@nikovirtala/ledger/cli\";\nimport { acceptDecision, type CopyScope, type ScopeOffer } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst MAX_LISTED = 5;\n\n/** `Copy the scope of ADR-0002 (src/a/**, src/b/**) to k3f9q8a1? [y/N] ` (design §6.10). */\nfunction question(id: string, offer: ScopeOffer): string {\n const shown = offer.globs.slice(0, MAX_LISTED).join(\", \");\n const more = offer.globs.length - MAX_LISTED;\n const globs = more > 0 ? `${shown} and ${more} more` : shown;\n const ds = offer.displays;\n const sources = ds.length === 1 ? ds[0] : `${ds.slice(0, -1).join(\", \")} and ${ds.at(-1)}`;\n const list = ds.length === 1 ? globs : `${offer.globs.length} globs: ${globs}`;\n return `Copy the scope of ${sources} (${list}) to ${id}? [y/N] `;\n}\n\n/**\n * The flags decide; without them a person at a terminal is asked, and everyone else (scripts,\n * hooks, CI, `--json`) gets the note with the `adr scope` command (design §6.10, D-e). `seen`\n * receives the offer that was copied, for the text.\n */\nfunction copyChoice(\n io: CliIO,\n json: boolean,\n value: unknown,\n seen: (offer: ScopeOffer) => void,\n): CopyScope {\n const copy = async (offer: ScopeOffer) => {\n seen(offer);\n return true;\n };\n if (value === true) return copy;\n if (value === false) return \"skip\";\n if (json || !io.interactive) return \"suggest\";\n return async (offer) => {\n const yes = await confirm(io, question(offer.id, offer), { json });\n if (yes) seen(offer);\n return yes;\n };\n}\n\n/** `adr accept <decision> [--copy-scope | --no-copy-scope] …` (design §5.6, §6.10). */\nexport const acceptCommand: CommandSpec = {\n name: \"accept\",\n summary: \"accept a proposed decision, superseding the decisions it declares\",\n usage:\n \"accept <decision> [--copy-scope | --no-copy-scope] [--commit | --no-commit] [-m <message>]\",\n options: { \"copy-scope\": { type: \"boolean\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n const seen: { offer: ScopeOffer | null } = { offer: null };\n const copyScope = copyChoice(io, flags.json, values[\"copy-scope\"], (offer) => {\n seen.offer = offer;\n });\n const doc = await acceptDecision(\n log,\n { id: input, actor },\n {\n ...commitChoice(values, { autoCommit: log.adr.autoCommit }),\n notes: attribution,\n copyScope,\n },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: v === null || doc.commit === null || v.number === null ? null : v.display,\n copied: doc.ok ? seen.offer : null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { deprecateDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"deprecate <decision> --reason <text> [--commit | --no-commit] [-m <message>]\";\n\n/** `adr deprecate` (design §6.5): an accepted decision no longer in force. */\nexport const deprecateCommand: CommandSpec = {\n name: \"deprecate\",\n summary: \"deprecate an accepted decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason !== \"string\" || values.reason.trim() === \"\") {\n throw new UsageError(`missing --reason <text>; usage: adr ${USAGE}`);\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await deprecateDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions } from \"../log.js\";\nimport { decisionsFor } from \"../scope.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { forText } from \"./text.js\";\n\n/** `adr for <path>… [--ref <ref>]` (design §6.9): the decisions that govern each file. */\nexport const forCommand: CommandSpec = {\n name: \"for\",\n summary: \"list the decisions that govern files, by scope glob and code anchor\",\n usage: \"for <path>…\",\n options: {},\n positionals: { min: 1, max: 100, names: [\"path\"] },\n ref: \"read\",\n async run({ io, flags, positionals }) {\n const log = await openForCli(io, flags);\n const read = await readDecisions(log);\n const doc = await decisionsFor(read, log, { paths: positionals, cwd: io.cwd });\n const display = (id: string) => read.projection.views.get(id)?.display ?? id;\n return {\n exit: 0,\n json: doc as unknown as JsonValue,\n text: forText(doc, display, read.adr.anchorKeyword),\n notes: notesWith(doc.notes, numberingNote(read, { unavailable: false })),\n };\n },\n};\n","import { resolve } from \"node:path\";\nimport {\n findingsReport,\n formatText,\n type HookManager,\n type JsonValue,\n UsageError,\n} from \"@nikovirtala/ledger\";\nimport type { CommandSpec, Outcome } from \"@nikovirtala/ledger/cli\";\nimport {\n addHookTrailers,\n type HooksResultJson,\n installDecisionHooks,\n printDecisionHooks,\n runPreCommitHook,\n uninstallDecisionHooks,\n} from \"../hooks.js\";\nimport { openForCli } from \"./open.js\";\n\nconst USAGE =\n \"hooks install | uninstall | print --manager lefthook|husky|pre-commit | run pre-commit | trailers <message-file>\";\nconst MANAGERS: readonly HookManager[] = [\"lefthook\", \"husky\", \"pre-commit\"];\n\nconst outcome = (doc: HooksResultJson, text: string, notes: readonly string[]): Outcome => ({\n exit: 0,\n json: doc as unknown as JsonValue,\n text,\n notes,\n});\n\n/**\n * `adr hooks install | uninstall | print --manager … | run pre-commit | trailers <message-file>`\n * (design 2b D4, D8, §4.3): adr's git hooks through ledger's shims, shared with other ark tools.\n */\nexport const hooksCommand: CommandSpec = {\n name: \"hooks\",\n summary: \"install, remove or print adr's git hooks, and run their steps\",\n usage: USAGE,\n options: { manager: { type: \"string\" } },\n positionals: { min: 1, max: 2, names: [\"action\", \"argument\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [action = \"\", argument] = positionals;\n const manager = values.manager;\n if (manager !== undefined && action !== \"print\") {\n throw new UsageError(`--manager goes with hooks print only; usage: adr ${USAGE}`);\n }\n const noArgument = () => {\n if (argument !== undefined) {\n throw new UsageError(\n `unexpected argument ${JSON.stringify(argument)}; usage: adr ${USAGE}`,\n );\n }\n };\n switch (action) {\n case \"install\": {\n noArgument();\n const log = await openForCli(io, flags);\n const doc = await installDecisionHooks(log);\n const lines = [\n ...[...doc.written, ...doc.unchanged]\n .map((p) => `${doc.written.includes(p) ? \"wrote\" : \"unchanged\"} ${p}`)\n .sort((a, b) => order(a) - order(b)),\n `adr hooks: ${doc.registrations.map((r) => r.hook).join(\", \")}`,\n ];\n return outcome(doc, lines.join(\"\\n\"), log.notes);\n }\n case \"uninstall\": {\n noArgument();\n const log = await openForCli(io, flags);\n const doc = await uninstallDecisionHooks(log);\n const text =\n doc.written.length === 0\n ? \"adr hooks were not installed\"\n : doc.written.map((p) => `removed adr from ${p}`).join(\"\\n\");\n return outcome(doc, text, log.notes);\n }\n case \"print\": {\n noArgument();\n if (manager === undefined) {\n throw new UsageError(\"hooks print needs --manager lefthook, husky or pre-commit\");\n }\n if (!(MANAGERS as readonly unknown[]).includes(manager)) {\n throw new UsageError(\n `unknown hook manager ${JSON.stringify(manager)}; use lefthook, husky or pre-commit`,\n );\n }\n const log = await openForCli(io, flags);\n const doc = printDecisionHooks(log, manager as HookManager);\n return outcome(doc, doc.snippet ?? \"\", log.notes);\n }\n case \"run\": {\n if (argument !== \"pre-commit\") throw new UsageError(\"adr hooks run supports pre-commit\");\n const worktree = await openForCli(io, flags);\n const index = await openForCli(io, flags, { reader: \"index\" });\n const r = await runPreCommitHook({ worktree, index, env: io.env });\n return {\n exit: r.exit,\n json: findingsReport(r.findings, { failOn: r.failOn }) as unknown as JsonValue,\n text: r.findings.length === 0 ? \"\" : formatText(r.findings),\n notes: r.notes,\n };\n }\n case \"trailers\": {\n if (argument === undefined) {\n throw new UsageError(`missing argument <message-file>; usage: adr ${USAGE}`);\n }\n const log = await openForCli(io, flags);\n const doc = await addHookTrailers(log, resolve(io.cwd, argument));\n return outcome(doc, \"\", log.notes);\n }\n default:\n throw new UsageError(\n `unknown hooks action ${JSON.stringify(action)}; use install, uninstall, print, run or trailers`,\n );\n }\n },\n};\n\n/** A shim line's rank in hook order, for the install text. */\nfunction order(line: string): number {\n return [\"pre-commit\", \"commit-msg\", \"pre-push\", \"post-merge\"].findIndex((h) =>\n line.endsWith(`/${h}`),\n );\n}\n","import { exitCode, formatText, type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { type IndexRun, runDecisionIndex } from \"../log-index.js\";\nimport { openForCli } from \"./open.js\";\n\nconst short = (sha: string) => sha.slice(0, 7);\n\n/** The text of `adr index` (design 2b §4.5). */\nfunction indexText({ doc, refreshed }: IndexRun): string {\n const { path } = doc;\n if (doc.check)\n return doc.findings.length === 0 ? `${path} is up to date` : formatText(doc.findings);\n if (doc.commit !== null) {\n return [\n `Committed ${path} as ${short(doc.commit)}`,\n ...(refreshed ? [`Wrote ${path} with uncommitted log changes`] : []),\n ].join(\"\\n\");\n }\n if (refreshed) {\n return `${path} is up to date in HEAD; wrote the work tree's copy, which includes uncommitted log changes`;\n }\n if (doc.fresh) return `${path} is up to date`;\n return doc.written.length > 0 ? `Wrote ${path}` : `Staged ${path}`;\n}\n\n/** `adr index [--check] [--commit | --no-commit] [-m <message>]` (design 2b §4.5). */\nexport const indexCommand: CommandSpec = {\n name: \"index\",\n summary: \"regenerate the decision index (index.md), or check that it is current\",\n usage: \"index [--check] [--commit | --no-commit] [-m <message>]\",\n options: { check: { type: \"boolean\" }, ...COMMIT_OPTIONS },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"read\",\n async run({ io, flags, values }) {\n const check = values.check === true;\n if (check && (values.commit === true || typeof values.message === \"string\")) {\n throw new UsageError(\"--check writes nothing; drop --commit and --message\");\n }\n if (!check && flags.ref !== null) {\n throw new UsageError(\"adr index writes the work tree; use --ref only with --check\");\n }\n const log = await openForCli(io, flags);\n const run = await runDecisionIndex(log, {\n check,\n ...(check ? {} : commitChoice(values, { autoCommit: log.adr.autoCommit })),\n });\n return {\n exit: check ? exitCode(run.doc.findings, { failOn: log.adr.failOn }) : 0,\n json: run.doc as unknown as JsonValue,\n text: indexText(run),\n notes: run.doc.notes,\n };\n },\n};\n","import { realpath } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { initDecisionLog } from \"../init.js\";\nimport { openForCli } from \"./open.js\";\nimport { initText } from \"./text.js\";\n\nconst DEFAULT_SKILL_DIR = \".claude/skills/adr\";\nconst MAX_DIR = 1024;\n\n/** `--skill-dir` as a repo-relative directory inside the work tree and outside `.git`. */\nasync function skillDir(root: string, cwd: string, given: string): Promise<string> {\n const dir = given.trim();\n const bad = () => new UsageError(\"--skill-dir must be a directory inside the repository\");\n if (dir === \"\" || dir.length > MAX_DIR || dir.includes(\"\\0\")) throw bad();\n const base = await realpath(cwd).catch(() => cwd);\n const rel = relative(root, resolve(base, dir));\n if (rel === \"..\" || rel.startsWith(`..${sep}`) || isAbsolute(rel)) throw bad();\n const segments = rel.split(sep).filter((s) => s !== \"\");\n if (segments[0] === \".git\") throw bad();\n return segments.join(\"/\");\n}\n\n/**\n * `adr init [--template <name>]… [--skill [--skill-dir <path>]] [--commit | --no-commit]\n * [-m <message>]` (design §6.2, phase 3 §9).\n */\nexport function initCommand(version: string): CommandSpec {\n return {\n name: \"init\",\n summary: \"set up a decision log: a config file and starter templates\",\n usage:\n \"init [--template <name>]… [--skill [--skill-dir <path>]] [--commit | --no-commit] [-m <message>]\",\n options: {\n template: { type: \"string\", multiple: true },\n skill: { type: \"boolean\" },\n \"skill-dir\": { type: \"string\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"reject\",\n async run({ io, flags, values }) {\n const templates = Array.isArray(values.template) ? (values.template as string[]) : undefined;\n const given = typeof values[\"skill-dir\"] === \"string\" ? values[\"skill-dir\"] : null;\n if (given !== null && values.skill !== true)\n throw new UsageError(\"--skill-dir needs --skill\");\n const log = await openForCli(io, flags);\n const root = log.git.root ?? io.cwd;\n const dir =\n values.skill !== true\n ? null\n : given === null\n ? DEFAULT_SKILL_DIR\n : await skillDir(root, io.cwd, given);\n const doc = await initDecisionLog(log, {\n ...(templates === undefined ? {} : { templates }),\n ...(dir === null ? {} : { skill: { dir, version } }),\n ...commitChoice(values, { autoCommit: log.adr.autoCommit }),\n });\n return { exit: 0, json: doc as unknown as JsonValue, text: initText(doc), notes: doc.notes };\n },\n };\n}\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { linkDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\n/** `adr link <decision> <target> [--rel <rel>]` (design §6.7): a typed link, in any state. */\nexport const linkCommand: CommandSpec = {\n name: \"link\",\n summary: \"link a decision to another one, here or in a configured source\",\n usage:\n \"link <decision> <target> [--rel relates-to|refines|depends-on] [--commit | --no-commit] [-m <message>]\",\n options: { rel: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 2, max: 2, names: [\"decision\", \"target\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [input = \"\", to = \"\"] = positionals;\n const rel = typeof values.rel === \"string\" ? values.rel : \"relates-to\";\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await linkDecision(\n log,\n { id: input, to, rel, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, UsageError } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { DECISION_STATUSES, type DecisionStatus } from \"../kind.js\";\nimport { changedSince, numberingNote, readDecisions } from \"../log.js\";\nimport { readSourceDecisions } from \"../sources.js\";\nimport { listDecisions } from \"../views.js\";\nimport { openForCli } from \"./open.js\";\nimport { listText, sinceText } from \"./text.js\";\n\nconst plural = (n: number, one: string, many: string) => (n === 1 ? `1 ${one}` : `${n} ${many}`);\n\nfunction statuses(values: Readonly<Record<string, unknown>>): DecisionStatus[] {\n const given = Array.isArray(values.status) ? (values.status as string[]) : [];\n return given.map((s) => {\n if (!(DECISION_STATUSES as readonly string[]).includes(s)) {\n throw new UsageError(\n `unknown status ${JSON.stringify(s)}; use one of ${DECISION_STATUSES.join(\", \")}`,\n );\n }\n return s as DecisionStatus;\n });\n}\n\n/** `--since`'s revision: non-empty and not an option. */\nfunction sinceRev(values: Readonly<Record<string, unknown>>): string | null {\n const v = values.since;\n if (typeof v !== \"string\") return null;\n if (v.trim() === \"\" || v.startsWith(\"-\")) throw new UsageError(\"--since must be a revision\");\n return v;\n}\n\n/**\n * `adr list [--status <status>]… [--since <rev>] [--source <name>]` (design §5.6, 2b D7):\n * `--source` lists a `[[sources]]` entry's cached log instead of the local one.\n */\nexport const listCommand: CommandSpec = {\n name: \"list\",\n summary: \"list decisions with their computed status\",\n usage: \"list [--status <status>]… [--since <rev>] [--source <name>]\",\n options: {\n status: { type: \"string\", multiple: true },\n since: { type: \"string\" },\n source: { type: \"string\" },\n },\n positionals: { min: 0, max: 0, names: [] },\n ref: \"read\",\n async run({ io, flags, values }) {\n const status = statuses(values);\n const rev = sinceRev(values);\n const source = typeof values.source === \"string\" ? values.source : null;\n if (source !== null && rev !== null) {\n throw new UsageError(\"--source can't be combined with --since\");\n }\n const log = await openForCli(io, flags);\n const since = rev === null ? null : await changedSince(log, rev);\n const read =\n source === null ? await readDecisions(log) : await readSourceDecisions(log, source);\n const doc = listDecisions(read, { status, since });\n const notes = [...doc.notes];\n const numbering = numberingNote(read, { unavailable: true });\n if (numbering !== null && doc.decisions.length > 0) notes.push(numbering);\n if (doc.findings.length > 0) {\n notes.push(\n `the decision log has ${plural(doc.findings.length, \"problem\", \"problems\")}; run adr verify`,\n );\n }\n if (doc.unreadable.length > 0) {\n notes.push(\n `${plural(doc.unreadable.length, \"decision uses\", \"decisions use\")} a newer format; upgrade adr`,\n );\n }\n if (doc.unfoldable.length > 0) {\n notes.push(\n `${plural(doc.unfoldable.length, \"decision\", \"decisions\")} can't be read; run adr verify`,\n );\n }\n const display = (id: string) => read.projection.views.get(id)?.display ?? id;\n const text = doc.since === null ? listText(doc, display) : sinceText(doc, doc.since, display);\n return { exit: 0, json: doc as unknown as JsonValue, text, notes };\n },\n};\n","import { UsageError } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\n\n/**\n * `adr mcp` (design §7.1): the MCP server over stdio. Loaded with a dynamic import, so no other\n * command loads the MCP SDK.\n */\nexport function mcpCommand(version: string): CommandSpec {\n return {\n name: \"mcp\",\n summary: \"start the MCP server over stdio\",\n usage: \"mcp\",\n options: {},\n positionals: { min: 0, max: 0, names: [] },\n ref: \"reject\",\n async run({ io, flags }) {\n if (flags.json) throw new UsageError(\"adr mcp speaks JSON-RPC on stdout; it takes no --json\");\n if (io.interactive) {\n io.stderr.write(\n \"adr: adr mcp speaks MCP on stdin and stdout; start it from an MCP client\\n\",\n );\n }\n const { serveAdrMcp } = await import(\"../mcp/server.js\");\n await serveAdrMcp({\n cwd: io.cwd,\n root: flags.root,\n env: io.env,\n version,\n stderr: io.stderr,\n });\n return { exit: 0, json: null, text: \"\" };\n },\n };\n}\n","import { spawn } from \"node:child_process\";\n\n/** The `edit` callback of `proposeDecision`: `null` when the editor exited 0, else a note. */\nexport type Edit = (absPath: string) => Promise<string | null>;\n\n/**\n * The user's editor as an `edit` callback (design §5.7), or `null` when neither `VISUAL` nor\n * `EDITOR` is set. The editor string is run by `sh -c` the way git runs `core.editor`, with the\n * path as the positional parameter `$1`, never interpolated. When stdout isn't a TTY (piped\n * `--json`, say), the editor's stdout goes to stderr so the CLI's stdout stays one document.\n * The callback never throws: a spawn error or a non-zero exit becomes the note.\n */\nexport function editorFor(\n env: NodeJS.ProcessEnv,\n o: { readonly stdoutIsTTY: boolean },\n): Edit | null {\n const editor = [env.VISUAL, env.EDITOR].map((v) => v?.trim() ?? \"\").find((v) => v !== \"\");\n if (editor === undefined) return null;\n return (absPath) =>\n new Promise((resolve) => {\n const fail = (e: unknown) =>\n resolve(`could not start the editor: ${e instanceof Error ? e.message : String(e)}`);\n try {\n const child = spawn(\"sh\", [\"-c\", `${editor} \"$1\"`, \"sh\", absPath], {\n env,\n stdio: o.stdoutIsTTY ? \"inherit\" : [\"inherit\", 2, \"inherit\"],\n });\n child.on(\"error\", fail);\n child.on(\"close\", (code, signal) => {\n if (code === 0) resolve(null);\n else {\n const how =\n code === null\n ? `was killed by ${signal ?? \"a signal\"}`\n : `exited with status ${code}`;\n resolve(`the editor ${how}; the draft is staged as rendered`);\n }\n });\n } catch (e) {\n fail(e);\n }\n });\n}\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { proposeDecision } from \"../write.js\";\nimport { editorFor } from \"./editor.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { unfilledWarning, writeText } from \"./text.js\";\n\nconst strings = (v: unknown): string[] => (Array.isArray(v) ? (v as string[]) : []);\n\n/** `--section <id>=<markdown>` values, split at the first `=`; each id at most once. */\nfunction sections(values: readonly string[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const value of values) {\n const at = value.indexOf(\"=\");\n const id = at < 0 ? \"\" : value.slice(0, at).trim();\n if (id === \"\") {\n throw new UsageError(`--section needs <id>=<markdown>, not ${JSON.stringify(value)}`);\n }\n if (Object.hasOwn(out, id)) throw new UsageError(`--section ${id} is given twice`);\n out[id] = value.slice(at + 1);\n }\n return out;\n}\n\n/**\n * `adr new <title> …` (design §5.6). The editor runs with `--edit`, or without `--no-edit` when\n * the terminal is interactive and an editor is set.\n */\nexport const newCommand: CommandSpec = {\n name: \"new\",\n summary: \"propose a decision from a template and stage it\",\n usage:\n \"new <title> [--template <name>] [--supersedes <decision>]… [--section <id>=<markdown>]… [--edit | --no-edit] [--commit | --no-commit] [-m <message>]\",\n options: {\n template: { type: \"string\" },\n supersedes: { type: \"string\", multiple: true },\n section: { type: \"string\", multiple: true },\n edit: { type: \"boolean\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 1, max: 1, names: [\"title\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const title = positionals[0] ?? \"\";\n const given = sections(strings(values.section));\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n // Design review NIT 1: the skip notes say \"not committed\" only when a commit was asked for.\n const { commit: requested, message } = commitChoice(values, {\n autoCommit: log.adr.autoCommit,\n });\n const notes: string[] = [];\n const editor = editorFor(io.env, { stdoutIsTTY: io.stdoutIsTTY });\n const wantsEdit = values.edit === true || (values.edit === undefined && io.interactive);\n if (values.edit === true && editor === null) notes.push(\"no editor: set VISUAL or EDITOR\");\n const edit =\n wantsEdit && editor !== null\n ? async (abs: string) => {\n const note = await editor(abs);\n if (note !== null) notes.push(note);\n return note;\n }\n : undefined;\n const doc = await proposeDecision(\n log,\n {\n title,\n sections: given,\n supersedes: strings(values.supersedes),\n actor,\n ...(typeof values.template === \"string\" ? { template: values.template } : {}),\n },\n {\n commit: requested,\n message,\n notes: attribution,\n ...(edit === undefined ? {} : { edit }),\n onNote: (note) => notes.push(requested ? `not committed: ${note}` : note),\n },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n const unfilled = unfilledWarning(doc);\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: title.trim(),\n number: v === null || v.number === null ? null : v.display,\n actor,\n acceptRequiresHuman: log.adr.acceptRequiresHuman,\n }),\n notes: [...doc.notes, ...notes, ...(unfilled === null ? [] : [unfilled])],\n };\n },\n};\n","import { type JsonValue, resolveAttribution } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { noteDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\n/** `adr note <decision> <text>` (design §6.6): a note on a decision in any state. */\nexport const noteCommand: CommandSpec = {\n name: \"note\",\n summary: \"add a note to a decision, in any state\",\n usage: \"note <decision> <text> [--commit | --no-commit] [-m <message>]\",\n options: { ...COMMIT_OPTIONS },\n positionals: { min: 2, max: 2, names: [\"decision\", \"text\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const [input = \"\", text = \"\"] = positionals;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await noteDecision(\n log,\n { id: input, text, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { rejectDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"reject <decision> --reason <text> [--commit | --no-commit] [-m <message>]\";\n\n/** `adr reject` (design §6.3): a proposal that won't be adopted. */\nexport const rejectCommand: CommandSpec = {\n name: \"reject\",\n summary: \"reject a proposed decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason !== \"string\" || values.reason.trim() === \"\") {\n throw new UsageError(`missing --reason <text>; usage: adr ${USAGE}`);\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await rejectDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import {\n type JsonValue,\n resolveAttribution,\n type SetOp,\n stagedRenames,\n UsageError,\n} from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { readDecisions, resolveDecision } from \"../log.js\";\nimport { followScopeRenames, scopeDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE =\n \"scope <decision> ([--set <glob>]… | --clear | [--add <glob>]… [--remove <glob>]…) [--commit | --no-commit] [-m <message>] | scope [<decision>] --follow-renames\";\n/** The flag names `applySetOp` uses in its messages (design §3.2). */\nconst NAMES = { set: \"--set\", add: \"--add\", remove: \"--remove\", clear: \"--clear\" } as const;\n\nconst strings = (v: unknown): string[] => (Array.isArray(v) ? (v as string[]) : []);\n\n/** `--set`/`--clear`/`--add`/`--remove` as a set operation; `--clear` is `{ set: [] }`. */\nfunction setOp(values: Readonly<Record<string, unknown>>): SetOp {\n const set = strings(values.set);\n const add = strings(values.add);\n const remove = strings(values.remove);\n if (values.clear === true) {\n if (set.length > 0 || add.length > 0 || remove.length > 0) {\n throw new UsageError(\"--clear can't be combined with --set, --add or --remove\");\n }\n return { set: [] };\n }\n return { ...(set.length > 0 ? { set } : {}), add, remove };\n}\n\n/**\n * `--follow-renames` alone: no set operation, no commit and no message, all refused before\n * `commitChoice` so the answer doesn't depend on `auto_commit` (design §6.8).\n */\nfunction checkFollowRenames(values: Readonly<Record<string, unknown>>): void {\n const op = [\"set\", \"add\", \"remove\"].some((k) => strings(values[k]).length > 0);\n if (op || values.clear === true) {\n throw new UsageError(\n \"--follow-renames can't be combined with --set, --clear, --add or --remove\",\n );\n }\n if (values.commit === true) {\n throw new UsageError(\n \"--follow-renames stages its events for the commit that contains the renames; commit them together\",\n );\n }\n if (typeof values.message === \"string\") {\n throw new UsageError(\"--follow-renames never commits, so it takes no --message\");\n }\n}\n\n/**\n * `adr scope <decision> --set|--clear|--add|--remove …` (design §6.8): the globs of the code a\n * decision governs, written as one whole-set `scoped` event. `adr scope [<decision>]\n * --follow-renames` rewrites them after staged renames and stages the events, never committing.\n */\nexport const scopeCommand: CommandSpec = {\n name: \"scope\",\n summary: \"set, add or remove the globs of the code a decision governs\",\n usage: USAGE,\n options: {\n set: { type: \"string\", multiple: true },\n add: { type: \"string\", multiple: true },\n remove: { type: \"string\", multiple: true },\n clear: { type: \"boolean\" },\n \"follow-renames\": { type: \"boolean\" },\n ...COMMIT_OPTIONS,\n },\n positionals: { min: 0, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0];\n if (values[\"follow-renames\"] === true) {\n checkFollowRenames(values);\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const read = await readDecisions(log);\n const before = new Map([...read.projection.views].map(([id, v]) => [id, v.applies_to]));\n const renamed = (await stagedRenames(log.git)).length > 0;\n const doc = await followScopeRenames(\n log,\n { ...(input === undefined ? {} : { id: input }), actor },\n { notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? (input ?? \"\").trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n followRenames: { before, renamed },\n }),\n notes: doc.notes,\n };\n }\n const op = setOp(values);\n if (input === undefined)\n throw new UsageError(`missing argument <decision>; usage: adr ${USAGE}`);\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const choice = commitChoice(values, { autoCommit: log.adr.autoCommit });\n const read = await readDecisions(log);\n const before = read.projection.views.get(resolveDecision(read, input))?.applies_to ?? [];\n const doc = await scopeDecision(\n log,\n { id: input, op, actor, names: NAMES },\n { ...choice, notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n scopeBefore: before,\n }),\n notes: doc.notes,\n };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions } from \"../log.js\";\nimport { searchDecisions } from \"../search.js\";\nimport { readSourceDecisions } from \"../sources.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { searchText } from \"./text.js\";\n\n/**\n * `adr search <query>… [--all] [--source <name>]` (design §8.2): words are joined, and every one\n * must match. `--source` searches a `[[sources]]` entry's cached log instead of the local one.\n */\nexport const searchCommand: CommandSpec = {\n name: \"search\",\n summary: \"search decisions' ids, titles, bodies and notes\",\n usage: \"search <query>… [--all] [--source <name>]\",\n options: { all: { type: \"boolean\" }, source: { type: \"string\" } },\n positionals: { min: 1, max: 20, names: [\"query\"] },\n ref: \"read\",\n async run({ io, flags, values, positionals }) {\n const log = await openForCli(io, flags);\n const read =\n typeof values.source === \"string\"\n ? await readSourceDecisions(log, values.source)\n : await readDecisions(log);\n const doc = searchDecisions(read, {\n query: positionals.join(\" \"),\n includeInactive: values.all === true,\n });\n const notes = [...notesWith(doc.notes, numberingNote(read, { unavailable: false }))];\n if (doc.inactive_omitted > 0) {\n const k = doc.inactive_omitted;\n notes.push(\n `${k === 1 ? \"1 inactive decision also matches\" : `${k} inactive decisions also match`}; add --all to see them`,\n );\n }\n return { exit: 0, json: doc as unknown as JsonValue, text: searchText(doc), notes };\n },\n};\n","import type { JsonValue } from \"@nikovirtala/ledger\";\nimport type { CommandSpec } from \"@nikovirtala/ledger/cli\";\nimport { numberingNote, readDecisions, resolveDecision } from \"../log.js\";\nimport { showDecision } from \"../views.js\";\nimport { notesWith, openForCli } from \"./open.js\";\nimport { showText } from \"./text.js\";\n\n/** `adr show <decision> [--history]` (design §5.6). */\nexport const showCommand: CommandSpec = {\n name: \"show\",\n summary: \"show a decision with its state header, chain, history and body\",\n usage: \"show <decision> [--history]\",\n options: { history: { type: \"boolean\" } },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"read\",\n async run({ io, flags, values, positionals }) {\n const read = await readDecisions(await openForCli(io, flags));\n const id = resolveDecision(read, positionals[0] ?? \"\");\n const doc = await showDecision(read, id, { history: values.history === true });\n const display = (s: string) => read.projection.views.get(s)?.display ?? s;\n return {\n exit: 0,\n json: doc as unknown as JsonValue,\n text: showText(doc, display),\n notes: notesWith(doc.notes, numberingNote(read, { unavailable: false })),\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { supersedeDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE =\n \"supersede <decision> --by <decision> [--reason <text>] [--commit | --no-commit] [-m <message>]\";\n\n/** `adr supersede <decision> --by <decision> …` (design §5.6). */\nexport const supersedeCommand: CommandSpec = {\n name: \"supersede\",\n summary: \"mark an accepted decision as superseded by another accepted one\",\n usage: USAGE,\n options: { by: { type: \"string\" }, reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.by !== \"string\") {\n throw new UsageError(`missing --by <decision>; usage: adr ${USAGE}`);\n }\n const log = await openForCli(io, flags);\n const { actor, notes: attribution } = await resolveAttribution(log.git, { env: io.env });\n const doc = await supersedeDecision(\n log,\n {\n id: input,\n by: values.by,\n actor,\n ...(typeof values.reason === \"string\" ? { reason: values.reason } : {}),\n },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes: attribution },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { type JsonValue, resolveAttribution, UsageError } from \"@nikovirtala/ledger\";\nimport { COMMIT_OPTIONS, type CommandSpec, commitChoice } from \"@nikovirtala/ledger/cli\";\nimport { withdrawDecision } from \"../write.js\";\nimport { displayAfterWrite, openForCli } from \"./open.js\";\nimport { writeText } from \"./text.js\";\n\nconst USAGE = \"withdraw <decision> [--reason <text>] [--commit | --no-commit] [-m <message>]\";\n\n/** `adr withdraw` (design §6.4): a proposal its author takes back. */\nexport const withdrawCommand: CommandSpec = {\n name: \"withdraw\",\n summary: \"withdraw a proposed decision\",\n usage: USAGE,\n options: { reason: { type: \"string\" }, ...COMMIT_OPTIONS },\n positionals: { min: 1, max: 1, names: [\"decision\"] },\n ref: \"reject\",\n async run({ io, flags, values, positionals }) {\n const input = positionals[0] ?? \"\";\n if (typeof values.reason === \"string\" && values.reason.trim() === \"\") {\n throw new UsageError(\"--reason must not be empty\");\n }\n const reason = typeof values.reason === \"string\" ? values.reason.trim() : null;\n const log = await openForCli(io, flags);\n const { actor, notes } = await resolveAttribution(log.git, { env: io.env });\n const doc = await withdrawDecision(\n log,\n { id: input, reason, actor },\n { ...commitChoice(values, { autoCommit: log.adr.autoCommit }), notes },\n );\n const { display } = await displayAfterWrite(log);\n const v = doc.decision;\n return {\n exit: doc.ok ? 0 : 1,\n json: doc as unknown as JsonValue,\n text: writeText(doc, display, {\n subject: v === null ? input.trim() : `${display(v.id)}: ${v.title}`,\n number: null,\n reason,\n }),\n notes: doc.notes,\n };\n },\n};\n","import { templateHistoryRef } from \"@nikovirtala/ledger\";\nimport { sourcesCommand, type ToolCli, verifyCommand } from \"@nikovirtala/ledger/cli\";\nimport { adrKind } from \"../kind.js\";\nimport { decisionSourceConfigs, readDecisionSources } from \"../sources.js\";\nimport { adrChecks, decisionVerifyInputs } from \"../verify.js\";\nimport { acceptCommand } from \"./accept.js\";\nimport { deprecateCommand } from \"./deprecate.js\";\nimport { forCommand } from \"./for.js\";\nimport { hooksCommand } from \"./hooks.js\";\nimport { indexCommand } from \"./index-command.js\";\nimport { initCommand } from \"./init.js\";\nimport { linkCommand } from \"./link.js\";\nimport { listCommand } from \"./list.js\";\nimport { mcpCommand } from \"./mcp.js\";\nimport { newCommand } from \"./new.js\";\nimport { noteCommand } from \"./note.js\";\nimport { openForCli } from \"./open.js\";\nimport { rejectCommand } from \"./reject.js\";\nimport { scopeCommand } from \"./scope.js\";\nimport { searchCommand } from \"./search.js\";\nimport { showCommand } from \"./show.js\";\nimport { supersedeCommand } from \"./supersede.js\";\nimport { withdrawCommand } from \"./withdraw.js\";\n\n/**\n * ledger's shared `verify`: the log as the mode reads it (the index for `--staged`, else the\n * `--ref` tree or the work tree), every phase-1 check, and `[verify] fail_on`.\n */\nconst verify = verifyCommand({\n async open({ io, flags, mode, fetchSources }) {\n const log = await openForCli(io, flags, {\n reader: mode.type === \"staged\" ? \"index\" : \"worktree\",\n });\n const sources = await readDecisionSources(log, {\n fetch: fetchSources ? \"network\" : \"cache\",\n });\n return {\n git: log.git,\n kind: adrKind,\n layout: log.layout,\n checks: adrChecks(log, await templateHistoryRef(log.git, mode), sources),\n failOn: log.adr.failOn,\n notes: [...log.notes, ...sources.notes],\n widenOn: decisionVerifyInputs(log),\n ...((log.config?.sources ?? []).length === 0 ? {} : { sources: sources.statuses }),\n };\n },\n});\n\n/** ledger's shared `sources fetch`, over the `kind = \"adr\"` entries of `[[sources]]`. */\nconst sources = sourcesCommand({\n format: \"adr-sources/v1\",\n tool: \"adr\",\n async open({ io, flags }) {\n const log = await openForCli(io, flags);\n return {\n git: log.git,\n ...decisionSourceConfigs(log),\n configPath: log.configPath,\n notes: log.notes,\n };\n },\n});\n\n/** The `adr` tool: its commands, for ledger's `runCli`. */\nexport function adrCli(version: string): ToolCli {\n return {\n name: \"adr\",\n version,\n summary: \"Architecture decision records kept as event logs in git.\",\n commands: [\n initCommand(version),\n newCommand,\n acceptCommand,\n rejectCommand,\n withdrawCommand,\n deprecateCommand,\n supersedeCommand,\n noteCommand,\n linkCommand,\n scopeCommand,\n indexCommand,\n hooksCommand,\n forCommand,\n listCommand,\n showCommand,\n searchCommand,\n verify,\n sources,\n mcpCommand(version),\n ],\n };\n}\n","#!/usr/bin/env node\nimport { createRequire } from \"node:module\";\nimport { processIO, runCli } from \"@nikovirtala/ledger/cli\";\nimport { adrCli } from \"./cli/commands.js\";\n\n// Read at run time, relative to dist/cli.js (or src/cli.ts): both sit next to ../package.json.\nconst { version } = createRequire(import.meta.url)(\"../package.json\") as { version: string };\n\nprocess.exitCode = await runCli(adrCli(version), processIO());\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as parseDecisionNumber, i as formatDecisionNumber, n as DECISION_STATUSES, r as REF, t as adrKind } from "./kind-
|
|
3
|
-
import { a as installDecisionHooks, c as uninstallDecisionHooks, i as decisionHookCommands, l as adrChecks, n as SKILL_MD, o as printDecisionHooks, r as addHookTrailers, s as runPreCommitHook, t as initDecisionLog, u as
|
|
4
|
-
import { t as listTemplates } from "./list-
|
|
5
|
-
export { DECISION_STATUSES, DEFAULT_ADR_CONFIG, REF, SKILL_MD, acceptDecision, addHookTrailers, adrChecks, adrKind, changedSince, decisionHookCommands, decisionsFor, deprecateDecision, followScopeRenames, formatDecisionNumber, indexDecisionLog, initDecisionLog, installDecisionHooks, linkDecision, listDecisions, listTemplates, noteDecision, openDecisionLog, parseAdrConfig, parseDecisionNumber, printDecisionHooks, proposeDecision, readDecisions, readDecisionsFrom, rejectDecision, renderDecisionIndex, resolveDecision, runPreCommitHook, scopeDecision, scopeToCopy, searchDecisions, showDecision, sourcesNote, stateHeader, supersedeDecision, uninstallDecisionHooks, updateDraft, verifyDecisions, withdrawDecision };
|
|
1
|
+
import { D as renderDecisionIndex, F as resolveDecision, I as sourcesNote, L as DEFAULT_ADR_CONFIG, M as openDecisionLog, N as readDecisions, P as readDecisionsFrom, R as parseAdrConfig, T as indexDecisionLog, _ as withdrawDecision, a as stateHeader, b as readDecisionSources, c as followScopeRenames, d as proposeDecision, f as rejectDecision, g as updateDraft, h as supersedeDecision, i as showDecision, k as changedSince, l as linkDecision, m as scopeToCopy, n as decisionsFor, o as acceptDecision, p as scopeDecision, r as listDecisions, s as deprecateDecision, t as searchDecisions, u as noteDecision, x as readSourceDecisions, y as decisionSourceConfigs } from "./search-DDDuzVfg.js";
|
|
2
|
+
import { a as parseDecisionNumber, i as formatDecisionNumber, n as DECISION_STATUSES, r as REF, t as adrKind } from "./kind-C3DiBuUp.js";
|
|
3
|
+
import { a as installDecisionHooks, c as uninstallDecisionHooks, d as verifyDecisions, i as decisionHookCommands, l as adrChecks, n as SKILL_MD, o as printDecisionHooks, r as addHookTrailers, s as runPreCommitHook, t as initDecisionLog, u as decisionVerifyInputs } from "./init-Bw0PZLnR.js";
|
|
4
|
+
import { t as listTemplates } from "./list-CnMSw8eA.js";
|
|
5
|
+
export { DECISION_STATUSES, DEFAULT_ADR_CONFIG, REF, SKILL_MD, acceptDecision, addHookTrailers, adrChecks, adrKind, changedSince, decisionHookCommands, decisionSourceConfigs, decisionVerifyInputs, decisionsFor, deprecateDecision, followScopeRenames, formatDecisionNumber, indexDecisionLog, initDecisionLog, installDecisionHooks, linkDecision, listDecisions, listTemplates, noteDecision, openDecisionLog, parseAdrConfig, parseDecisionNumber, printDecisionHooks, proposeDecision, readDecisionSources, readDecisions, readDecisionsFrom, readSourceDecisions, rejectDecision, renderDecisionIndex, resolveDecision, runPreCommitHook, scopeDecision, scopeToCopy, searchDecisions, showDecision, sourcesNote, stateHeader, supersedeDecision, uninstallDecisionHooks, updateDraft, verifyDecisions, withdrawDecision };
|