baller-maester 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/state/schema.ts","../src/schemas/citadel.ts","../src/schemas/maester.ts","../src/core/errors.ts","../src/core/config/paths.ts","../src/core/config/loader.ts","../src/core/auth/resolver.ts","../src/core/git/client.ts","../src/core/sources/fetcher.ts","../src/core/state/html.ts","../src/core/state/json.ts","../src/core/state/markdown.ts","../src/core/state/plaintext.ts","../src/core/state/yaml.ts","../src/core/state/format.ts","../src/core/state/applier.ts","../src/core/sync/provenance.ts","../src/core/sync/stage.ts","../src/core/sync/runner.ts","../src/core/status/probe.ts","../src/core/status/runner.ts","../src/core/skill/managed-region.ts","../src/core/skill/templates/content/citadel-awareness.md","../src/core/skill/templates/content/freshness-awareness.md","../src/core/skill/templates/content/state-awareness.md","../src/core/skill/templates/shells/claude-code.ts","../src/core/skill/targets/claude-code.ts","../src/core/skill/templates/shells/agents-md.ts","../src/core/skill/targets/agents-md-writer.ts","../src/core/skill/targets/codex.ts","../src/core/skill/templates/shells/cursor.ts","../src/core/skill/targets/cursor.ts","../src/core/skill/targets/generic.ts","../src/core/skill/targets/index.ts","../package.json","../src/package-meta.ts","../src/core/skill/version.ts","../src/core/skill/runner.ts"],"names":["z","resolve","path","existsSync","execFileCb","entry","readFile","parseDocument","walk","parse","write","splitFirstLine","readdir","writeFile","mkdir","rm","marker","MAESTER_MANIFEST_FILENAME","manifestError","DEFAULT_CONCURRENCY","errorMessage","fs","interpolate","readTextOrUndefined","readInstalledVersion","decideAction"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const STATE_VALUES = [\"draft\", \"canon\"] as const;\nexport const StateSchema = z.enum(STATE_VALUES);\nexport type State = z.infer<typeof StateSchema>;\n\nexport const DEFAULT_STATE: State = \"draft\";\n\nexport type ParseStateResult =\n | { kind: \"valid\"; value: State }\n | { kind: \"invalid\"; raw: string }\n | { kind: \"absent\" };\n\nexport type RuleEntry = {\n pattern: string;\n state?: State;\n};\n\nexport function parseState(value: unknown): ParseStateResult {\n if (value === undefined || value === null) return { kind: \"absent\" };\n const raw = typeof value === \"string\" ? value : String(value);\n if (raw.length === 0) return { kind: \"absent\" };\n const result = StateSchema.safeParse(raw);\n if (result.success) return { kind: \"valid\", value: result.data };\n return { kind: \"invalid\", raw };\n}\n","import { resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { StateSchema } from \"../core/state/schema.js\";\n\nexport const SLUG_RE = /^[a-z0-9][a-z0-9-]*$/;\nexport const ENV_VAR_RE = /^[A-Z][A-Z0-9_]*$/;\nconst URL_FORMS = [/^https:\\/\\/\\S+$/i, /^ssh:\\/\\/\\S+$/i, /^git@[^\\s:]+:\\S+$/, /^file:\\/\\/\\S+$/i];\n\nfunction isValidGitUrl(url: string): boolean {\n if (/\\s/.test(url)) return false;\n return URL_FORMS.some((re) => re.test(url));\n}\n\nfunction isSafeRelativePath(value: string): boolean {\n if (value.length === 0) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nfunction isSafeIncludesEntry(value: string): boolean {\n if (value.length === 0 || /^\\s+$/.test(value)) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nexport const AuthRefNoneSchema = z\n .object({\n type: z.literal(\"none\"),\n })\n .strict();\n\nexport const AuthRefTokenSchema = z\n .object({\n type: z.literal(\"token\"),\n envVar: z\n .string()\n .min(1, \"envVar is required for token auth\")\n .regex(ENV_VAR_RE, \"envVar must be uppercase letters, digits, and underscores\"),\n })\n .strict();\n\nexport const AuthRefSchema = z.discriminatedUnion(\"type\", [AuthRefNoneSchema, AuthRefTokenSchema]);\n\nconst IncludesPathSchema = z\n .string()\n .min(1)\n .refine(\n isSafeIncludesEntry,\n \"includes entry must be a repo-relative path or glob; no leading '/' and no '..'\",\n );\n\nexport const IncludeEntryObjectSchema = z\n .object({\n path: IncludesPathSchema,\n state: StateSchema.optional(),\n })\n .strict();\n\nexport const IncludeEntrySchema = z.union([IncludesPathSchema, IncludeEntryObjectSchema]);\n\nexport function normalizeIncludeEntry(entry: z.infer<typeof IncludeEntrySchema>): {\n path: string;\n state?: z.infer<typeof StateSchema>;\n} {\n if (typeof entry === \"string\") return { path: entry };\n if (entry.state === undefined) return { path: entry.path };\n return { path: entry.path, state: entry.state };\n}\n\nexport const SourceSchema = z\n .object({\n name: z\n .string()\n .min(1)\n .regex(SLUG_RE, \"name must be a kebab-case slug starting with a letter or digit\"),\n url: z.string().refine(isValidGitUrl, \"url must be https://, ssh://, or git@host:path\"),\n ref: z.string().min(1).optional(),\n includes: z\n .array(IncludeEntrySchema)\n .min(1, \"includes must declare at least one entry when present\")\n .optional(),\n auth: AuthRefSchema.optional(),\n destination: z\n .string()\n .min(1)\n .refine(isSafeRelativePath, \"destination must be a repo-relative path with no '..' segments\")\n .optional(),\n description: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).regex(SLUG_RE, \"tags must be slugs\")).optional(),\n })\n .strict();\n\nexport const DEFAULT_BASE_DIR = \"citadel\";\n\nexport function resolveBaseDir(config: { baseDir?: string }): string {\n return config.baseDir ?? DEFAULT_BASE_DIR;\n}\n\ntype ParsedCitadel = {\n schemaVersion: 1;\n baseDir?: string;\n sources: z.infer<typeof SourceSchema>[];\n};\n\nfunction applyCombinedInvariants(data: ParsedCitadel, ctx: z.RefinementCtx): void {\n if (data.sources.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"citadel must declare at least one source\",\n path: [\"sources\"],\n });\n return;\n }\n\n const baseDir = data.baseDir ?? DEFAULT_BASE_DIR;\n const namesSeen = new Map<string, number>();\n const destsSeen = new Map<string, { index: number; name: string }>();\n\n for (let i = 0; i < data.sources.length; i++) {\n const entry = data.sources[i];\n if (!entry?.name) continue;\n const priorIndex = namesSeen.get(entry.name);\n if (priorIndex !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate name '${entry.name}' — also used by sources[${priorIndex}]`,\n path: [\"sources\", i, \"name\"],\n });\n } else {\n namesSeen.set(entry.name, i);\n }\n\n const resolved = entry.destination\n ? resolve(\"/_citadel_root_\", entry.destination)\n : resolve(\"/_citadel_root_\", baseDir, entry.name);\n const prior = destsSeen.get(resolved);\n if (prior !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `destination collision: sources '${entry.name}' and '${prior.name}' (sources[${prior.index}]) both resolve to the same path`,\n path: [\"sources\", i, \"destination\"],\n });\n } else {\n destsSeen.set(resolved, { index: i, name: entry.name });\n }\n }\n}\n\nexport const CitadelConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n baseDir: z\n .string()\n .min(1)\n .refine(isSafeRelativePath, \"baseDir must be a repo-relative path with no '..' segments\")\n .optional(),\n sources: z.array(SourceSchema).optional().default([]),\n })\n .strict()\n .superRefine((data, ctx) => {\n applyCombinedInvariants(data as ParsedCitadel, ctx);\n });\n\nexport type AuthRef = z.infer<typeof AuthRefSchema>;\nexport type IncludeEntry = z.infer<typeof IncludeEntrySchema>;\nexport type Source = z.infer<typeof SourceSchema>;\nexport type CitadelConfig = z.infer<typeof CitadelConfigSchema>;\n","import { z } from \"zod\";\nimport { StateSchema } from \"../core/state/schema.js\";\nimport { SLUG_RE } from \"./citadel.js\";\n\nfunction isSafeRepoRelative(value: string): boolean {\n if (value.length === 0 || /^\\s+$/.test(value)) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nexport const PublishedDocumentSchema = z\n .object({\n path: z\n .string()\n .min(1)\n .refine(\n isSafeRepoRelative,\n \"path must be a repo-relative file or glob; no leading '/' and no '..'\",\n ),\n description: z.string().min(1).optional(),\n category: z.string().min(1).regex(SLUG_RE, \"category must be a kebab-case slug\").optional(),\n tags: z.array(z.string().min(1).regex(SLUG_RE, \"tags must be slugs\")).optional(),\n state: StateSchema.optional(),\n })\n .strict();\n\nexport const MaesterConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n documents: z\n .array(PublishedDocumentSchema)\n .min(1, \"at least one published document must be declared\")\n .superRefine((docs, ctx) => {\n const seen = new Map<string, number>();\n for (let i = 0; i < docs.length; i++) {\n const p = docs[i]?.path;\n if (!p) continue;\n const prior = seen.get(p);\n if (prior !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate path '${p}' (also at index ${prior})`,\n path: [i, \"path\"],\n });\n } else {\n seen.set(p, i);\n }\n }\n }),\n })\n .strict();\n\nexport type PublishedDocument = z.infer<typeof PublishedDocumentSchema>;\nexport type MaesterConfig = z.infer<typeof MaesterConfigSchema>;\n","export class MaesterError extends Error {\n readonly code: string;\n override readonly cause?: unknown;\n constructor(code: string, message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"MaesterError\";\n this.code = code;\n if (options?.cause !== undefined) {\n this.cause = options.cause;\n }\n }\n}\n\nexport class ConfigError extends MaesterError {\n readonly filePath: string | undefined;\n readonly line?: number;\n readonly column?: number;\n constructor(\n message: string,\n detail: { filePath?: string; line?: number; column?: number; cause?: unknown } = {},\n ) {\n super(\"CONFIG_ERROR\", message, detail.cause !== undefined ? { cause: detail.cause } : {});\n this.name = \"ConfigError\";\n this.filePath = detail.filePath;\n if (detail.line !== undefined) this.line = detail.line;\n if (detail.column !== undefined) this.column = detail.column;\n }\n}\n\nexport class AuthError extends MaesterError {\n readonly envVar: string;\n constructor(envVar: string, message?: string) {\n super(\"AUTH_ERROR\", message ?? `Environment variable ${envVar} is not set.`);\n this.name = \"AuthError\";\n this.envVar = envVar;\n }\n}\n\nexport class RefNotFoundError extends MaesterError {\n readonly ref: string;\n readonly url: string;\n constructor(ref: string, url: string, cause?: unknown) {\n super(\n \"REF_NOT_FOUND\",\n `ref \\`${ref}\\` not found on \\`${url}\\``,\n cause !== undefined ? { cause } : {},\n );\n this.name = \"RefNotFoundError\";\n this.ref = ref;\n this.url = url;\n }\n}\n\nexport class DestinationBlockedError extends MaesterError {\n readonly destination: string;\n constructor(destination: string, message: string) {\n super(\"DESTINATION_BLOCKED\", message);\n this.name = \"DestinationBlockedError\";\n this.destination = destination;\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\n\nexport const CITADEL_CONFIG_FILENAME = \"citadel.yaml\";\nexport const MAESTER_CONFIG_FILENAME = \"maester.yaml\";\nexport const CACHE_DIR_NAME = \".maester\";\nexport const CACHE_SUBDIR = \".maester/cache\";\n\nexport function citadelConfigPath(repoRoot: string): string {\n return resolve(repoRoot, CITADEL_CONFIG_FILENAME);\n}\n\nexport function maesterConfigPath(repoRoot: string): string {\n return resolve(repoRoot, MAESTER_CONFIG_FILENAME);\n}\n\nexport function cachePath(repoRoot: string): string {\n return resolve(repoRoot, CACHE_SUBDIR);\n}\n\nexport function cachePathForSource(repoRoot: string, sourceName: string): string {\n return resolve(repoRoot, CACHE_SUBDIR, sourceName);\n}\n\nexport function defaultDestinationFor(\n repoRoot: string,\n sourceName: string,\n baseDir?: string,\n): string {\n return resolve(repoRoot, baseDir ?? DEFAULT_BASE_DIR, sourceName);\n}\n\nexport type RepoRoles = {\n hasCitadel: boolean;\n hasMaester: boolean;\n};\n\nexport function detectRoles(repoRoot: string): RepoRoles {\n return {\n hasCitadel: existsSync(citadelConfigPath(repoRoot)),\n hasMaester: existsSync(maesterConfigPath(repoRoot)),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { type YAMLError, parseDocument } from \"yaml\";\nimport type { z } from \"zod\";\nimport { type CitadelConfig, CitadelConfigSchema } from \"../../schemas/citadel.js\";\nimport { type MaesterConfig, MaesterConfigSchema } from \"../../schemas/maester.js\";\nimport { ConfigError } from \"../errors.js\";\nimport { citadelConfigPath, maesterConfigPath } from \"./paths.js\";\n\nexport async function loadCitadelConfig(repoRoot: string): Promise<CitadelConfig> {\n const path = citadelConfigPath(repoRoot);\n if (!existsSync(path)) {\n throw new ConfigError(\n \"No citadel.yaml found at the repository root. Run `npx maester init` to create one.\",\n { filePath: path },\n );\n }\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, CitadelConfigSchema, path);\n}\n\nexport async function loadMaesterConfig(repoRoot: string): Promise<MaesterConfig> {\n const path = maesterConfigPath(repoRoot);\n if (!existsSync(path)) {\n throw new ConfigError(\n \"No maester.yaml found at the repository root. Run `npx maester publish` to create one.\",\n { filePath: path },\n );\n }\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, MaesterConfigSchema, path);\n}\n\nexport async function loadMaesterConfigOptional(\n repoRoot: string,\n): Promise<MaesterConfig | undefined> {\n const path = maesterConfigPath(repoRoot);\n if (!existsSync(path)) return undefined;\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, MaesterConfigSchema, path);\n}\n\nexport function parseAndValidate<T extends z.ZodTypeAny>(\n raw: string,\n schema: T,\n filePath: string,\n): z.infer<T> {\n const data = parseYaml(raw, filePath);\n return runSchema(data, schema, filePath);\n}\n\nfunction parseYaml(raw: string, filePath: string): unknown {\n const doc = parseDocument(raw, { keepSourceTokens: false });\n const yamlErrors = doc.errors;\n if (yamlErrors.length > 0) {\n const first = yamlErrors[0] as YAMLError;\n const pos = positionFromError(first, raw);\n throw new ConfigError(`YAML parse error: ${first.message}`, {\n filePath,\n line: pos.line,\n column: pos.column,\n cause: first,\n });\n }\n return doc.toJS({ maxAliasCount: -1 });\n}\n\nfunction runSchema<T extends z.ZodTypeAny>(data: unknown, schema: T, filePath: string): z.infer<T> {\n const result = schema.safeParse(data);\n if (!result.success) {\n const issue = result.error.issues[0];\n const where = issue?.path?.length ? ` at \\`${issue.path.join(\".\")}\\`` : \"\";\n throw new ConfigError(`${filePath}: ${issue?.message ?? \"validation failed\"}${where}`, {\n filePath,\n cause: result.error,\n });\n }\n return result.data;\n}\n\nfunction positionFromError(err: YAMLError, raw: string): { line: number; column: number } {\n const pos = (err as { pos?: [number, number] }).pos;\n if (!pos) return { line: 1, column: 1 };\n const offset = pos[0];\n let line = 1;\n let lastLineStart = 0;\n for (let i = 0; i < offset && i < raw.length; i++) {\n if (raw[i] === \"\\n\") {\n line++;\n lastLineStart = i + 1;\n }\n }\n return { line, column: offset - lastLineStart + 1 };\n}\n","import type { AuthRef } from \"../../schemas/citadel.js\";\nimport { AuthError } from \"../errors.js\";\n\nexport type ResolvedAuth = { type: \"delegated\" } | { type: \"token\"; value: string };\n\nexport function resolveAuth(\n auth: AuthRef | undefined,\n env: NodeJS.ProcessEnv = process.env,\n): ResolvedAuth {\n if (!auth || auth.type === \"none\") return { type: \"delegated\" };\n const value = env[auth.envVar];\n if (value === undefined || value.length === 0) {\n throw new AuthError(\n auth.envVar,\n `${auth.envVar} is not set. Define it in your shell, .env loader, or CI secret manager before syncing.`,\n );\n }\n return { type: \"token\", value };\n}\n","import { execFile as execFileCb } from \"node:child_process\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { promisify } from \"node:util\";\nimport { type SimpleGit, simpleGit } from \"simple-git\";\nimport { RefNotFoundError } from \"../errors.js\";\n\nconst execFile = promisify(execFileCb);\n\nexport type GitCapabilities = {\n version: string;\n supportsPartialClone: boolean;\n};\n\nlet cachedCapabilities: GitCapabilities | undefined;\n\nexport async function detectGitCapabilities(): Promise<GitCapabilities> {\n if (cachedCapabilities) return cachedCapabilities;\n const { stdout } = await execFile(\"git\", [\"--version\"]);\n const match = stdout.match(/git version (\\d+)\\.(\\d+)(?:\\.(\\d+))?/);\n if (!match) {\n cachedCapabilities = { version: stdout.trim(), supportsPartialClone: false };\n return cachedCapabilities;\n }\n const major = Number(match[1] ?? 0);\n const minor = Number(match[2] ?? 0);\n const supportsPartialClone = major > 2 || (major === 2 && minor >= 27);\n cachedCapabilities = { version: `${major}.${minor}`, supportsPartialClone };\n return cachedCapabilities;\n}\n\nexport function clearGitCapabilityCache(): void {\n cachedCapabilities = undefined;\n}\n\nexport type CloneInput = {\n url: string;\n destination: string;\n ref: string | undefined;\n useTokenInUrl?: string;\n};\n\nexport async function shallowSparseClone(input: CloneInput): Promise<SimpleGit> {\n await mkdir(input.destination, { recursive: true });\n const caps = await detectGitCapabilities();\n const url = input.useTokenInUrl ? injectToken(input.url, input.useTokenInUrl) : input.url;\n\n const git = simpleGit(input.destination);\n\n if (caps.supportsPartialClone) {\n const cloneArgs = [\"--filter=blob:none\", \"--depth=1\", \"--no-checkout\", \"--sparse\"];\n if (input.ref) cloneArgs.push(\"--branch\", input.ref);\n try {\n await git.clone(url, \".\", cloneArgs);\n } catch (err) {\n if (input.ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(input.ref, input.url, err);\n }\n throw err;\n }\n } else {\n const cloneArgs: string[] = [\"--depth=1\"];\n if (input.ref) cloneArgs.push(\"--branch\", input.ref);\n try {\n await git.clone(url, \".\", cloneArgs);\n } catch (err) {\n if (input.ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(input.ref, input.url, err);\n }\n throw err;\n }\n }\n return git;\n}\n\nexport async function setSparsePatterns(\n workDir: string,\n patterns: readonly string[],\n): Promise<void> {\n const git = simpleGit(workDir);\n if (patterns.length === 0) {\n await git.raw([\"sparse-checkout\", \"disable\"]);\n return;\n }\n await git.raw([\"sparse-checkout\", \"set\", \"--no-cone\", ...patterns]);\n}\n\nexport async function checkoutRef(workDir: string, ref: string | undefined): Promise<string> {\n const git = simpleGit(workDir);\n try {\n if (ref) await git.checkout(ref);\n else await git.checkout([\"HEAD\"]);\n } catch (err) {\n if (ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(ref, await tryReadOriginUrl(workDir), err);\n }\n throw err;\n }\n const sha = (await git.revparse([\"HEAD\"])).trim();\n return sha;\n}\n\nexport async function fetchHead(workDir: string, ref: string | undefined): Promise<string> {\n const git = simpleGit(workDir);\n const args = ref ? [\"--depth=1\", \"origin\", ref] : [\"--depth=1\", \"origin\"];\n try {\n await git.fetch(args);\n } catch (err) {\n if (ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(ref, await tryReadOriginUrl(workDir), err);\n }\n throw err;\n }\n await git.raw([\"reset\", \"--hard\", \"FETCH_HEAD\"]);\n return (await git.revparse([\"HEAD\"])).trim();\n}\n\nexport async function clearWorktree(workDir: string): Promise<void> {\n await rm(workDir, { recursive: true, force: true });\n}\n\nexport type ListRemoteRefInput = {\n url: string;\n ref: string | undefined;\n useTokenInUrl?: string;\n};\n\nexport async function listRemoteRef(input: ListRemoteRefInput): Promise<string> {\n const url = input.useTokenInUrl ? injectToken(input.url, input.useTokenInUrl) : input.url;\n const git = simpleGit();\n const target = input.ref ?? \"HEAD\";\n let output: string;\n try {\n output = await git.listRemote([url, target]);\n } catch (err) {\n throw new RefNotFoundError(target, input.url, err);\n }\n const sha = parseListRemoteOutput(output, target);\n if (!sha) {\n throw new RefNotFoundError(target, input.url);\n }\n return sha;\n}\n\nfunction parseListRemoteOutput(output: string, target: string): string | undefined {\n const lines = output\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (lines.length === 0) return undefined;\n\n let primary: string | undefined;\n let peeled: string | undefined;\n for (const line of lines) {\n const match = line.match(/^([0-9a-f]{40})\\s+(\\S+)$/);\n if (!match) continue;\n const sha = match[1];\n const refName = match[2];\n if (!sha || !refName) continue;\n if (refName === target) {\n primary = sha;\n continue;\n }\n if (matchesRefName(refName, target)) {\n primary = sha;\n }\n if (refName.endsWith(\"^{}\") && matchesRefName(refName.slice(0, -3), target)) {\n peeled = sha;\n }\n }\n return peeled ?? primary;\n}\n\nfunction matchesRefName(refName: string, target: string): boolean {\n if (refName === target) return true;\n if (refName === `refs/heads/${target}`) return true;\n if (refName === `refs/tags/${target}`) return true;\n if (refName === `refs/remotes/origin/${target}`) return true;\n return false;\n}\n\nfunction refNotFoundFromError(err: unknown): boolean {\n const msg = err instanceof Error ? `${err.message}\\n${err.stack ?? \"\"}` : String(err);\n return (\n /Remote branch .+ not found/i.test(msg) ||\n /couldn't find remote ref/i.test(msg) ||\n /not a tree/i.test(msg) ||\n /unknown revision or path/i.test(msg)\n );\n}\n\nfunction injectToken(url: string, token: string): string {\n if (!url.startsWith(\"https://\")) return url;\n const after = url.slice(\"https://\".length);\n return `https://x-access-token:${token}@${after}`;\n}\n\nasync function tryReadOriginUrl(workDir: string): Promise<string> {\n try {\n const git = simpleGit(workDir);\n const remotes = await git.getRemotes(true);\n return remotes.find((r) => r.name === \"origin\")?.refs.fetch ?? \"\";\n } catch {\n return \"\";\n }\n}\n","import type { Dirent } from \"node:fs\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { parseDocument } from \"yaml\";\nimport { type Source, normalizeIncludeEntry } from \"../../schemas/citadel.js\";\nimport { MaesterConfigSchema } from \"../../schemas/maester.js\";\nimport { MaesterError } from \"../errors.js\";\nimport { checkoutRef, fetchHead, setSparsePatterns, shallowSparseClone } from \"../git/client.js\";\nimport type { RuleEntry } from \"../state/schema.js\";\n\nconst MAESTER_MANIFEST_FILENAME = \"maester.yaml\";\n\nexport type FetchWarning = {\n type: \"no-matches\";\n name: string;\n includes: readonly string[];\n};\n\nexport type FetchedTree = {\n name: string;\n cacheDir: string;\n commitSha: string;\n filterSet: readonly string[];\n rules: readonly RuleEntry[];\n warnings: FetchWarning[];\n};\n\nexport type FetchContext = {\n cacheDir: string;\n cacheExists: boolean;\n tokenForUrl: string | undefined;\n};\n\ntype ManifestDiscovery =\n | { mode: \"manifest\"; patterns: string[]; rules: RuleEntry[] }\n | { mode: \"no-manifest\"; reason: \"absent\" | \"invalid\" };\n\nexport async function fetchSource(entry: Source, ctx: FetchContext): Promise<FetchedTree> {\n if (entry.includes && entry.includes.length > 0) {\n const normalized = entry.includes.map(normalizeIncludeEntry);\n return fetchWithExplicitIncludes(entry, ctx, normalized);\n }\n return fetchWithRemoteManifest(entry, ctx);\n}\n\nasync function fetchWithRemoteManifest(entry: Source, ctx: FetchContext): Promise<FetchedTree> {\n if (!ctx.cacheExists) {\n await shallowSparseClone({\n url: entry.url,\n destination: ctx.cacheDir,\n ref: entry.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n // Materialize only the manifest first so we can discover the filter set\n // without paying the cost of the full tree.\n await setSparsePatterns(ctx.cacheDir, [MAESTER_MANIFEST_FILENAME]);\n await checkoutRef(ctx.cacheDir, entry.ref);\n } else {\n await fetchHead(ctx.cacheDir, entry.ref);\n }\n\n const discovery = await discoverManifestFromCache(ctx.cacheDir);\n if (discovery.mode === \"no-manifest\") {\n throw manifestError(entry.name, discovery.reason);\n }\n\n await setSparsePatterns(ctx.cacheDir, discovery.patterns);\n const commitSha = await checkoutRef(ctx.cacheDir, entry.ref);\n\n return {\n name: entry.name,\n cacheDir: ctx.cacheDir,\n commitSha,\n filterSet: discovery.patterns,\n rules: discovery.rules,\n warnings: [],\n };\n}\n\nasync function fetchWithExplicitIncludes(\n entry: Source,\n ctx: FetchContext,\n normalized: readonly { path: string; state?: import(\"../state/schema.js\").State }[],\n): Promise<FetchedTree> {\n if (!ctx.cacheExists) {\n await shallowSparseClone({\n url: entry.url,\n destination: ctx.cacheDir,\n ref: entry.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n } else {\n await fetchHead(ctx.cacheDir, entry.ref);\n }\n\n // Explicit includes bypass remote manifest discovery — the citadel owns the\n // filter set directly. Validated as non-empty by the schema.\n const patterns = normalized.map((entry) => entry.path);\n await setSparsePatterns(ctx.cacheDir, patterns);\n const commitSha = await checkoutRef(ctx.cacheDir, entry.ref);\n\n const matchedFileCount = await countMaterializedFiles(ctx.cacheDir);\n const warnings: FetchWarning[] = [];\n if (matchedFileCount === 0) {\n warnings.push({ type: \"no-matches\", name: entry.name, includes: patterns });\n }\n\n const rules: RuleEntry[] = normalized.map((entry) =>\n entry.state === undefined\n ? { pattern: entry.path }\n : { pattern: entry.path, state: entry.state },\n );\n\n return {\n name: entry.name,\n cacheDir: ctx.cacheDir,\n commitSha,\n filterSet: patterns,\n rules,\n warnings,\n };\n}\n\nfunction manifestError(name: string, reason: \"absent\" | \"invalid\"): MaesterError {\n if (reason === \"absent\") {\n return new MaesterError(\n \"MAESTER_MANIFEST_MISSING\",\n `source '${name}' does not publish a maester.yaml manifest at the configured ref. Sync will not fall back to the full tree — either add a maester.yaml to the source repo or declare an \\`includes\\` list on this source.`,\n );\n }\n return new MaesterError(\n \"MAESTER_MANIFEST_INVALID\",\n `source '${name}' publishes a maester.yaml that failed schema validation. Sync will not fall back to the full tree — fix the manifest in the source repo or declare an \\`includes\\` list on this source.`,\n );\n}\n\nexport async function discoverManifestFromCache(cacheDir: string): Promise<ManifestDiscovery> {\n const path = resolve(cacheDir, MAESTER_MANIFEST_FILENAME);\n if (!existsSync(path)) return { mode: \"no-manifest\", reason: \"absent\" };\n try {\n const raw = await readFile(path, \"utf8\");\n const doc = parseDocument(raw);\n if (doc.errors.length > 0) return { mode: \"no-manifest\", reason: \"invalid\" };\n const parsed = MaesterConfigSchema.safeParse(doc.toJS({ maxAliasCount: -1 }));\n if (!parsed.success) return { mode: \"no-manifest\", reason: \"invalid\" };\n const rules: RuleEntry[] = parsed.data.documents.map((d) =>\n d.state === undefined ? { pattern: d.path } : { pattern: d.path, state: d.state },\n );\n const patterns = parsed.data.documents.map((d) => d.path);\n if (patterns.length === 0) return { mode: \"no-manifest\", reason: \"invalid\" };\n if (!patterns.includes(MAESTER_MANIFEST_FILENAME)) patterns.unshift(MAESTER_MANIFEST_FILENAME);\n return { mode: \"manifest\", patterns, rules };\n } catch {\n return { mode: \"no-manifest\", reason: \"invalid\" };\n }\n}\n\nasync function countMaterializedFiles(cacheDir: string): Promise<number> {\n let count = 0;\n async function walk(dir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = (await readdir(dir, {\n withFileTypes: true,\n encoding: \"utf8\",\n })) as Dirent[];\n } catch {\n return;\n }\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n count++;\n }\n }\n }\n await walk(cacheDir);\n return count;\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nconst STATE_COMMENT_RE = /^<!--\\s*state:\\s*([^\\s-]+)\\s*-->$/;\n\nfunction splitFirstLine(text: string): { firstLine: string; rest: string; eol: string } {\n const crlfIdx = text.indexOf(\"\\r\\n\");\n const lfIdx = text.indexOf(\"\\n\");\n if (crlfIdx !== -1 && (lfIdx === -1 || crlfIdx <= lfIdx)) {\n return { firstLine: text.slice(0, crlfIdx), rest: text.slice(crlfIdx + 2), eol: \"\\r\\n\" };\n }\n if (lfIdx !== -1) {\n return { firstLine: text.slice(0, lfIdx), rest: text.slice(lfIdx + 1), eol: \"\\n\" };\n }\n return { firstLine: text, rest: \"\", eol: \"\\n\" };\n}\n\nexport function parse(buf: Buffer): ParseResult {\n const text = buf.toString(\"utf8\");\n const { firstLine } = splitFirstLine(text);\n const match = firstLine.match(STATE_COMMENT_RE);\n if (!match) return { kind: \"absent\" };\n return parseState(match[1]);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n const { firstLine, rest, eol } = splitFirstLine(text);\n const desiredLine = `<!-- state: ${state} -->`;\n\n const existingMatch = firstLine.match(STATE_COMMENT_RE);\n if (existingMatch) {\n if (firstLine === desiredLine) return buf;\n return Buffer.from(`${desiredLine}${eol}${rest}`, \"utf8\");\n }\n\n const prefix = `${desiredLine}\\n`;\n return Buffer.from(`${prefix}${text}`, \"utf8\");\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nfunction detectIndent(text: string): number | \"\\t\" {\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\\t\")) return \"\\t\";\n const match = line.match(/^( +)\\S/);\n if (match) return match[1]?.length ?? 2;\n }\n return 2;\n}\n\nfunction detectTrailingNewline(text: string): string {\n return text.endsWith(\"\\n\") ? \"\\n\" : \"\";\n}\n\nexport function parse(buf: Buffer): ParseResult {\n let value: unknown;\n try {\n value = JSON.parse(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return { kind: \"absent\" };\n }\n return parseState((value as Record<string, unknown>).state);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return buf;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return buf;\n }\n const obj = value as Record<string, unknown>;\n if (obj.state === state) return buf;\n obj.state = state;\n const indent = detectIndent(text);\n const trailing = detectTrailingNewline(text);\n const serialized = JSON.stringify(obj, null, indent);\n return Buffer.from(`${serialized}${trailing}`, \"utf8\");\n}\n","import matter from \"gray-matter\";\nimport type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nexport function parse(buf: Buffer): ParseResult {\n let parsed: matter.GrayMatterFile<string>;\n try {\n parsed = matter(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n const raw = (parsed.data as Record<string, unknown>).state;\n return parseState(raw);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n let parsed: matter.GrayMatterFile<string>;\n try {\n parsed = matter(buf.toString(\"utf8\"));\n } catch {\n return buf;\n }\n const sourceData = parsed.data as Record<string, unknown>;\n if (sourceData.state === state) return buf;\n // Clone before mutating — gray-matter's content-keyed cache holds the same\n // data reference across calls; mutating it in place would pollute later\n // parses of identical input.\n const nextData = { ...sourceData, state };\n const next = matter.stringify(parsed.content, nextData);\n return Buffer.from(next, \"utf8\");\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nconst STATE_LINE_RE = /^state:\\s+(\\S+)\\s*$/;\n\nfunction splitFirstLine(text: string): { firstLine: string; rest: string; eol: string } {\n const crlfIdx = text.indexOf(\"\\r\\n\");\n const lfIdx = text.indexOf(\"\\n\");\n if (crlfIdx !== -1 && (lfIdx === -1 || crlfIdx <= lfIdx)) {\n return { firstLine: text.slice(0, crlfIdx), rest: text.slice(crlfIdx + 2), eol: \"\\r\\n\" };\n }\n if (lfIdx !== -1) {\n return { firstLine: text.slice(0, lfIdx), rest: text.slice(lfIdx + 1), eol: \"\\n\" };\n }\n return { firstLine: text, rest: \"\", eol: \"\\n\" };\n}\n\nexport function parse(buf: Buffer): ParseResult {\n const text = buf.toString(\"utf8\");\n const { firstLine } = splitFirstLine(text);\n const match = firstLine.match(STATE_LINE_RE);\n if (!match) return { kind: \"absent\" };\n return parseState(match[1]);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n const { firstLine, rest, eol } = splitFirstLine(text);\n const desiredLine = `state: ${state}`;\n\n const existingMatch = firstLine.match(STATE_LINE_RE);\n if (existingMatch) {\n if (firstLine === desiredLine) return buf;\n return Buffer.from(`${desiredLine}${eol}${rest}`, \"utf8\");\n }\n\n return Buffer.from(`${desiredLine}\\n${text}`, \"utf8\");\n}\n","import { isMap, parseDocument } from \"yaml\";\nimport type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nexport function parse(buf: Buffer): ParseResult {\n let doc: ReturnType<typeof parseDocument>;\n try {\n doc = parseDocument(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n if (doc.errors.length > 0) return { kind: \"absent\" };\n if (!isMap(doc.contents)) return { kind: \"absent\" };\n const raw = doc.get(\"state\");\n return parseState(raw);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n let doc: ReturnType<typeof parseDocument>;\n try {\n doc = parseDocument(text);\n } catch {\n return buf;\n }\n if (doc.errors.length > 0) return buf;\n if (!isMap(doc.contents)) return buf;\n if (doc.get(\"state\") === state) return buf;\n doc.set(\"state\", state);\n return Buffer.from(doc.toString(), \"utf8\");\n}\n","import { extname } from \"node:path\";\nimport * as html from \"./html.js\";\nimport * as json from \"./json.js\";\nimport * as markdown from \"./markdown.js\";\nimport * as plaintext from \"./plaintext.js\";\nimport type { State } from \"./schema.js\";\nimport * as yaml from \"./yaml.js\";\n\nexport type ParseResult =\n | { kind: \"valid\"; value: State }\n | { kind: \"invalid\"; raw: string }\n | { kind: \"absent\" };\n\nexport type FormatHandler = {\n parse(buf: Buffer): ParseResult;\n write(buf: Buffer, state: State): Buffer;\n};\n\nconst HANDLERS: Record<string, FormatHandler> = {\n \".md\": markdown,\n \".markdown\": markdown,\n \".html\": html,\n \".htm\": html,\n \".yaml\": yaml,\n \".yml\": yaml,\n \".json\": json,\n \".txt\": plaintext,\n};\n\nexport function handlerFor(filePath: string): FormatHandler | undefined {\n const ext = extname(filePath).toLowerCase();\n return HANDLERS[ext];\n}\n\nexport function isSupportedFormat(filePath: string): boolean {\n return handlerFor(filePath) !== undefined;\n}\n","import type { Dirent } from \"node:fs\";\nimport { readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { relative, resolve } from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { handlerFor } from \"./format.js\";\nimport { DEFAULT_STATE, type RuleEntry, type State } from \"./schema.js\";\n\nexport type SourceOfTruth = \"inline\" | \"rule\" | \"default\";\n\nexport type StateBreakdown = {\n canon: number;\n draft: number;\n untagged: number;\n};\n\nexport type BadInlineStateWarning = {\n type: \"bad-inline-state\";\n file: string;\n raw: string;\n};\n\nexport type DisagreementWarning = {\n type: \"disagreement\";\n file: string;\n inline: State;\n rule: State;\n};\n\nexport type StateWarning = BadInlineStateWarning | DisagreementWarning;\n\nexport type StateApplyDetail = {\n file: string;\n state: State | \"untagged\";\n sourceOfTruth: SourceOfTruth | \"untagged\";\n};\n\nexport type StateApplyResult = {\n breakdown: StateBreakdown;\n warnings: StateWarning[];\n details: StateApplyDetail[];\n};\n\nconst MATCHER_OPTIONS = { dot: false, nocase: false } as const;\n\nfunction compileMatchers(rules: readonly RuleEntry[]): Array<(p: string) => boolean> {\n return rules.map((r) => picomatch(r.pattern, MATCHER_OPTIONS));\n}\n\nfunction findRuleState(\n filePath: string,\n rules: readonly RuleEntry[],\n matchers: Array<(p: string) => boolean>,\n): State | undefined {\n for (let i = 0; i < rules.length; i++) {\n const match = matchers[i];\n const rule = rules[i];\n if (!match || !rule) continue;\n if (!match(filePath)) continue;\n if (rule.state !== undefined) return rule.state;\n return undefined;\n }\n return undefined;\n}\n\nasync function* walk(dir: string, root: string): AsyncGenerator<string> {\n let entries: Dirent[];\n try {\n entries = (await readdir(dir, { withFileTypes: true, encoding: \"utf8\" })) as Dirent[];\n } catch {\n return;\n }\n const isRoot = dir === root;\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n if (entry.name === \".maester-source.json\") continue;\n // The remote's maester.yaml is fetched as part of the sparse checkout so\n // that the citadel can see the source's declared publish surface, but it\n // is the manifest itself — a sync artifact, not a published document.\n // Skipping it at the destination root keeps the breakdown honest and\n // avoids injecting a state tag into a config file.\n if (isRoot && entry.name === \"maester.yaml\") continue;\n const full = resolve(dir, entry.name);\n if (entry.isDirectory()) {\n yield* walk(full, root);\n } else if (entry.isFile()) {\n yield relative(root, full);\n }\n }\n}\n\nexport async function applyState(\n stagedDir: string,\n rules: readonly RuleEntry[],\n): Promise<StateApplyResult> {\n const matchers = compileMatchers(rules);\n const breakdown: StateBreakdown = { canon: 0, draft: 0, untagged: 0 };\n const warnings: StateWarning[] = [];\n const details: StateApplyDetail[] = [];\n\n for await (const relPath of walk(stagedDir, stagedDir)) {\n const handler = handlerFor(relPath);\n if (!handler) {\n breakdown.untagged++;\n details.push({ file: relPath, state: \"untagged\", sourceOfTruth: \"untagged\" });\n continue;\n }\n\n const fullPath = resolve(stagedDir, relPath);\n const buf = await readFile(fullPath);\n const parsed = handler.parse(buf);\n\n let resolved: State;\n let sourceOfTruth: SourceOfTruth;\n\n if (parsed.kind === \"valid\") {\n resolved = parsed.value;\n sourceOfTruth = \"inline\";\n const ruleState = findRuleState(relPath, rules, matchers);\n if (ruleState !== undefined && ruleState !== resolved) {\n warnings.push({\n type: \"disagreement\",\n file: relPath,\n inline: resolved,\n rule: ruleState,\n });\n }\n } else {\n if (parsed.kind === \"invalid\") {\n warnings.push({ type: \"bad-inline-state\", file: relPath, raw: parsed.raw });\n }\n const ruleState = findRuleState(relPath, rules, matchers);\n if (ruleState !== undefined) {\n resolved = ruleState;\n sourceOfTruth = \"rule\";\n } else {\n resolved = DEFAULT_STATE;\n sourceOfTruth = \"default\";\n }\n }\n\n const next = handler.write(buf, resolved);\n if (next !== buf) {\n await writeFile(fullPath, next);\n }\n\n breakdown[resolved]++;\n details.push({ file: relPath, state: resolved, sourceOfTruth });\n }\n\n return { breakdown, warnings, details };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport const PROVENANCE_FILENAME = \".maester-source.json\";\n\nexport type ProvenanceMarker = {\n sourceName: string;\n sourceUrl: string;\n ref: string | undefined;\n commitSha: string;\n filterSet: readonly string[];\n syncedAt: string;\n};\n\nexport async function writeProvenanceMarker(\n destination: string,\n marker: ProvenanceMarker,\n): Promise<string> {\n const path = resolve(destination, PROVENANCE_FILENAME);\n const body = `${JSON.stringify(marker, null, 2)}\\n`;\n await writeFile(path, body, \"utf8\");\n return path;\n}\n\nexport async function readProvenanceMarker(\n destination: string,\n): Promise<ProvenanceMarker | undefined> {\n const path = resolve(destination, PROVENANCE_FILENAME);\n if (!existsSync(path)) return undefined;\n try {\n const text = await readFile(path, \"utf8\");\n const parsed = JSON.parse(text) as Record<string, unknown>;\n if (\n typeof parsed.sourceName !== \"string\" ||\n typeof parsed.sourceUrl !== \"string\" ||\n typeof parsed.commitSha !== \"string\" ||\n !Array.isArray(parsed.filterSet)\n ) {\n return undefined;\n }\n return {\n sourceName: parsed.sourceName,\n sourceUrl: parsed.sourceUrl,\n ref: typeof parsed.ref === \"string\" ? parsed.ref : undefined,\n commitSha: parsed.commitSha,\n filterSet: parsed.filterSet as readonly string[],\n syncedAt: typeof parsed.syncedAt === \"string\" ? parsed.syncedAt : new Date(0).toISOString(),\n };\n } catch {\n return undefined;\n }\n}\n\nexport function filterSetMatches(a: readonly string[], b: readonly string[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n","import { existsSync } from \"node:fs\";\nimport { cp, mkdir, readdir, rename, rm } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { DestinationBlockedError } from \"../errors.js\";\nimport {\n PROVENANCE_FILENAME,\n type ProvenanceMarker,\n readProvenanceMarker,\n writeProvenanceMarker,\n} from \"./provenance.js\";\n\nexport type StageInput<TApply = unknown> = {\n cacheDir: string;\n destination: string;\n marker: ProvenanceMarker;\n /**\n * Optional hook invoked against the staged copy AFTER the cache has been\n * copied and BEFORE the provenance marker is written + the atomic promote.\n * Used by the state-tag applier (architecture §6.8 / §9 Gap 19) — running\n * on the staged copy means a crash mid-rewrite leaves the previous promote\n * intact.\n */\n beforePromote?: (stagedDir: string) => Promise<TApply>;\n};\n\nexport type StageOutcome<TApply = unknown> = {\n staged: boolean;\n finalPath: string;\n beforePromoteResult?: TApply;\n};\n\nexport async function stageDestination<TApply = unknown>(\n input: StageInput<TApply>,\n): Promise<StageOutcome<TApply>> {\n await assertDestinationSafe(input.destination, input.marker.sourceName);\n const tempDir = `${input.destination}.tmp-${Math.random().toString(36).slice(2, 10)}`;\n await mkdir(dirname(input.destination), { recursive: true });\n await mkdir(tempDir, { recursive: true });\n await copyCacheToTemp(input.cacheDir, tempDir);\n const beforePromoteResult = input.beforePromote ? await input.beforePromote(tempDir) : undefined;\n await writeProvenanceMarker(tempDir, input.marker);\n await promoteTempToDestination(tempDir, input.destination);\n if (beforePromoteResult !== undefined) {\n return { staged: true, finalPath: input.destination, beforePromoteResult };\n }\n return { staged: true, finalPath: input.destination };\n}\n\nasync function copyCacheToTemp(cacheDir: string, tempDir: string): Promise<void> {\n if (!existsSync(cacheDir)) return;\n const entries = await readdir(cacheDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n const src = resolve(cacheDir, entry.name);\n const dst = resolve(tempDir, entry.name);\n await cp(src, dst, { recursive: true, force: true, errorOnExist: false });\n }\n}\n\nasync function promoteTempToDestination(tempDir: string, destination: string): Promise<void> {\n if (existsSync(destination)) {\n const backup = `${destination}.old-${Math.random().toString(36).slice(2, 10)}`;\n await rename(destination, backup);\n try {\n await rename(tempDir, destination);\n } catch (err) {\n await rename(backup, destination).catch(() => undefined);\n throw err;\n }\n await rm(backup, { recursive: true, force: true });\n return;\n }\n await rename(tempDir, destination);\n}\n\nexport async function assertDestinationSafe(\n destination: string,\n expectedSourceName: string,\n): Promise<void> {\n if (!existsSync(destination)) return;\n const entries = await readdir(destination);\n if (entries.length === 0) return;\n if (entries.length === 1 && entries[0] === PROVENANCE_FILENAME) {\n const marker = await readProvenanceMarker(destination);\n if (!marker || marker.sourceName === expectedSourceName) return;\n }\n const marker = await readProvenanceMarker(destination);\n if (marker && marker.sourceName === expectedSourceName) return;\n throw new DestinationBlockedError(\n destination,\n `Refusing to overwrite ${destination}: contains content that was not produced by '${expectedSourceName}'. Remove the directory or choose a different destination.`,\n );\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { CitadelConfig, Source } from \"../../schemas/citadel.js\";\nimport { resolveAuth } from \"../auth/resolver.js\";\nimport { CACHE_SUBDIR, cachePathForSource, defaultDestinationFor } from \"../config/paths.js\";\nimport { AuthError, MaesterError, RefNotFoundError } from \"../errors.js\";\nimport { clearWorktree } from \"../git/client.js\";\nimport { type FetchWarning, type FetchedTree, fetchSource } from \"../sources/fetcher.js\";\nimport {\n type StateApplyDetail,\n type StateApplyResult,\n type StateBreakdown,\n type StateWarning,\n applyState,\n} from \"../state/applier.js\";\nimport { filterSetMatches, readProvenanceMarker } from \"./provenance.js\";\nimport { stageDestination } from \"./stage.js\";\n\nexport type SyncStatus = \"added\" | \"updated\" | \"unchanged\" | \"failed\";\n\nexport type SyncOutcome = {\n name: string;\n status: SyncStatus;\n destination: string;\n ref: string | undefined;\n commitSha?: string;\n warnings: FetchWarning[];\n stateBreakdown?: StateBreakdown;\n stateWarnings?: StateWarning[];\n stateDetails?: StateApplyDetail[];\n error?: string;\n};\n\nexport type SyncResult = {\n outcomes: SyncOutcome[];\n failed: number;\n};\n\nexport type SyncOptions = {\n repoRoot: string;\n scope?: readonly string[];\n concurrency?: number;\n env?: NodeJS.ProcessEnv;\n baseDir?: string;\n onProgress?: (event: ProgressEvent) => void;\n};\n\nexport type ProgressEvent =\n | { type: \"start\"; name: string }\n | { type: \"fetched\"; name: string; commitSha: string }\n | { type: \"staged\"; name: string; status: SyncStatus }\n | { type: \"warning\"; name: string; warning: FetchWarning }\n | { type: \"failed\"; name: string; error: string };\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport async function runSync(config: CitadelConfig, options: SyncOptions): Promise<SyncResult> {\n const env = options.env ?? process.env;\n const scope = options.scope?.length ? new Set(options.scope) : undefined;\n const baseDir = options.baseDir ?? config.baseDir;\n\n if (scope) {\n const known = new Set(config.sources.map((s) => s.name));\n for (const name of scope) {\n if (!known.has(name)) {\n throw new MaesterError(\n \"UNKNOWN_SOURCE\",\n `Unknown source '${name}' — not declared in citadel.yaml.`,\n );\n }\n }\n }\n\n const entries = config.sources.filter((s) => !scope || scope.has(s.name));\n const limit = Math.min(\n Math.max(1, options.concurrency ?? DEFAULT_CONCURRENCY),\n entries.length || 1,\n );\n const outcomes: SyncOutcome[] = new Array(entries.length);\n\n await mkdir(resolve(options.repoRoot, CACHE_SUBDIR), { recursive: true });\n\n let cursor = 0;\n const workers: Promise<void>[] = [];\n for (let i = 0; i < limit; i++) {\n workers.push(\n (async () => {\n while (true) {\n const index = cursor++;\n if (index >= entries.length) return;\n const entry = entries[index];\n if (!entry) return;\n outcomes[index] = await processEntry(entry, options, env, baseDir);\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const failed = outcomes.filter((o) => o.status === \"failed\").length;\n return { outcomes, failed };\n}\n\nasync function processEntry(\n source: Source,\n options: SyncOptions,\n env: NodeJS.ProcessEnv,\n baseDir: string | undefined,\n): Promise<SyncOutcome> {\n const cacheDir = cachePathForSource(options.repoRoot, source.name);\n const destination = source.destination\n ? resolve(options.repoRoot, source.destination)\n : defaultDestinationFor(options.repoRoot, source.name, baseDir);\n\n options.onProgress?.({ type: \"start\", name: source.name });\n\n try {\n const auth = resolveAuth(source.auth, env);\n const tokenForUrl = auth.type === \"token\" ? auth.value : undefined;\n const cacheExists = existsSync(cacheDir);\n\n const tree: FetchedTree = await fetchSource(source, {\n cacheDir,\n cacheExists,\n tokenForUrl,\n });\n\n options.onProgress?.({ type: \"fetched\", name: source.name, commitSha: tree.commitSha });\n for (const warning of tree.warnings) {\n options.onProgress?.({ type: \"warning\", name: source.name, warning });\n }\n\n const existingMarker = await readProvenanceMarker(destination);\n const wasUnchanged =\n !!existingMarker &&\n existingMarker.commitSha === tree.commitSha &&\n existingMarker.sourceName === source.name &&\n filterSetMatches(existingMarker.filterSet, tree.filterSet) &&\n existsSync(destination);\n\n if (wasUnchanged) {\n options.onProgress?.({ type: \"staged\", name: source.name, status: \"unchanged\" });\n return {\n name: source.name,\n status: \"unchanged\",\n destination,\n ref: source.ref,\n commitSha: tree.commitSha,\n warnings: tree.warnings,\n };\n }\n\n const stageResult = await stageDestination<StateApplyResult>({\n cacheDir: tree.cacheDir,\n destination,\n marker: {\n sourceName: tree.name,\n sourceUrl: source.url,\n ref: source.ref,\n commitSha: tree.commitSha,\n filterSet: tree.filterSet,\n syncedAt: new Date().toISOString(),\n },\n beforePromote: (stagedDir) => applyState(stagedDir, tree.rules),\n });\n const stateResult = stageResult.beforePromoteResult;\n\n const status: SyncStatus = existingMarker ? \"updated\" : \"added\";\n options.onProgress?.({ type: \"staged\", name: source.name, status });\n return {\n name: source.name,\n status,\n destination,\n ref: source.ref,\n commitSha: tree.commitSha,\n warnings: tree.warnings,\n ...(stateResult\n ? {\n stateBreakdown: stateResult.breakdown,\n stateWarnings: stateResult.warnings,\n stateDetails: stateResult.details,\n }\n : {}),\n };\n } catch (err) {\n const message = errorMessage(err);\n options.onProgress?.({ type: \"failed\", name: source.name, error: message });\n try {\n await clearWorktree(cacheDir);\n } catch {\n /* ignore */\n }\n return {\n name: source.name,\n status: \"failed\",\n destination,\n ref: source.ref,\n warnings: [],\n error: message,\n };\n }\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof AuthError) return err.message;\n if (err instanceof RefNotFoundError) return err.message;\n if (err instanceof MaesterError) return err.message;\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","import { mkdir, mkdtemp, rm } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Source } from \"../../schemas/citadel.js\";\nimport { CACHE_DIR_NAME } from \"../config/paths.js\";\nimport { MaesterError } from \"../errors.js\";\nimport {\n checkoutRef,\n listRemoteRef,\n setSparsePatterns,\n shallowSparseClone,\n} from \"../git/client.js\";\nimport { discoverManifestFromCache } from \"../sources/fetcher.js\";\n\nconst SHA_RE = /^[0-9a-f]{40}$/;\nconst MAESTER_MANIFEST_FILENAME = \"maester.yaml\";\nconst STATUS_TEMP_PREFIX = \".status-\";\n\nexport type ProbeContext = {\n repoRoot: string;\n tokenForUrl: string | undefined;\n};\n\nexport type ManifestProbeResult = {\n filterSet: readonly string[];\n};\n\nexport async function probeCommitSha(source: Source, ctx: ProbeContext): Promise<string> {\n if (source.ref && SHA_RE.test(source.ref)) {\n return source.ref;\n }\n return listRemoteRef({\n url: source.url,\n ref: source.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n}\n\nexport async function probeManifest(\n source: Source,\n ctx: ProbeContext,\n): Promise<ManifestProbeResult> {\n const tempRoot = resolve(ctx.repoRoot, CACHE_DIR_NAME);\n await mkdir(tempRoot, { recursive: true });\n const tempDir = await mkdtemp(resolve(tempRoot, STATUS_TEMP_PREFIX));\n try {\n await shallowSparseClone({\n url: source.url,\n destination: tempDir,\n ref: source.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n await setSparsePatterns(tempDir, [MAESTER_MANIFEST_FILENAME]);\n await checkoutRef(tempDir, source.ref);\n const discovery = await discoverManifestFromCache(tempDir);\n if (discovery.mode === \"no-manifest\") {\n throw manifestError(source.name, discovery.reason);\n }\n return { filterSet: discovery.patterns };\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n\nfunction manifestError(name: string, reason: \"absent\" | \"invalid\"): MaesterError {\n if (reason === \"absent\") {\n return new MaesterError(\n \"MAESTER_MANIFEST_MISSING\",\n `source '${name}' does not publish a maester.yaml manifest at the configured ref.`,\n );\n }\n return new MaesterError(\n \"MAESTER_MANIFEST_INVALID\",\n `source '${name}' publishes a maester.yaml that failed schema validation.`,\n );\n}\n","import { resolve } from \"node:path\";\nimport type { CitadelConfig, Source } from \"../../schemas/citadel.js\";\nimport { resolveAuth } from \"../auth/resolver.js\";\nimport { defaultDestinationFor } from \"../config/paths.js\";\nimport { AuthError, MaesterError, RefNotFoundError } from \"../errors.js\";\nimport { readProvenanceMarker } from \"../sync/provenance.js\";\nimport { type ProbeContext, probeCommitSha, probeManifest } from \"./probe.js\";\n\nexport type StatusVerdict = \"up-to-date\" | \"behind\" | \"failed\";\n\nexport type BehindReason = \"never-synced\" | \"remote-ref-advanced\" | \"manifest-changed\";\n\nexport type StatusOutcome =\n | { name: string; verdict: \"up-to-date\"; commitSha: string }\n | {\n name: string;\n verdict: \"behind\";\n reasons: readonly BehindReason[];\n commitSha?: string;\n resolvedSha?: string;\n }\n | { name: string; verdict: \"failed\"; error: string };\n\nexport type StatusCounts = {\n upToDate: number;\n behind: number;\n failed: number;\n};\n\nexport type StatusResult = {\n outcomes: StatusOutcome[];\n counts: StatusCounts;\n};\n\nexport type StatusOptions = {\n repoRoot: string;\n scope?: readonly string[];\n concurrency?: number;\n env?: NodeJS.ProcessEnv;\n baseDir?: string;\n};\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport async function runStatus(\n config: CitadelConfig,\n options: StatusOptions,\n): Promise<StatusResult> {\n const env = options.env ?? process.env;\n const scope = options.scope?.length ? new Set(options.scope) : undefined;\n const baseDir = options.baseDir ?? config.baseDir;\n\n if (scope) {\n const known = new Set(config.sources.map((s) => s.name));\n for (const name of scope) {\n if (!known.has(name)) {\n throw new MaesterError(\n \"UNKNOWN_SOURCE\",\n `Unknown source '${name}' — not declared in citadel.yaml.`,\n );\n }\n }\n }\n\n const entries = config.sources.filter((s) => !scope || scope.has(s.name));\n if (entries.length === 0) {\n return { outcomes: [], counts: { upToDate: 0, behind: 0, failed: 0 } };\n }\n\n const limit = Math.min(Math.max(1, options.concurrency ?? DEFAULT_CONCURRENCY), entries.length);\n const outcomes: StatusOutcome[] = new Array(entries.length);\n\n let cursor = 0;\n const workers: Promise<void>[] = [];\n for (let i = 0; i < limit; i++) {\n workers.push(\n (async () => {\n while (true) {\n const index = cursor++;\n if (index >= entries.length) return;\n const entry = entries[index];\n if (!entry) return;\n outcomes[index] = await checkSource(entry, options, env, baseDir);\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const counts: StatusCounts = { upToDate: 0, behind: 0, failed: 0 };\n for (const outcome of outcomes) {\n if (outcome.verdict === \"up-to-date\") counts.upToDate++;\n else if (outcome.verdict === \"behind\") counts.behind++;\n else counts.failed++;\n }\n return { outcomes, counts };\n}\n\nasync function checkSource(\n source: Source,\n options: StatusOptions,\n env: NodeJS.ProcessEnv,\n baseDir: string | undefined,\n): Promise<StatusOutcome> {\n const destination = source.destination\n ? resolve(options.repoRoot, source.destination)\n : defaultDestinationFor(options.repoRoot, source.name, baseDir);\n\n const marker = await readProvenanceMarker(destination);\n if (!marker) {\n return {\n name: source.name,\n verdict: \"behind\",\n reasons: [\"never-synced\"],\n };\n }\n\n try {\n const auth = resolveAuth(source.auth, env);\n const tokenForUrl = auth.type === \"token\" ? auth.value : undefined;\n const probeCtx: ProbeContext = { repoRoot: options.repoRoot, tokenForUrl };\n\n const resolvedSha = await probeCommitSha(source, probeCtx);\n\n const reasons: BehindReason[] = [];\n if (resolvedSha !== marker.commitSha) {\n reasons.push(\"remote-ref-advanced\");\n }\n\n const isManifestDriven = !source.includes || source.includes.length === 0;\n if (isManifestDriven) {\n const { filterSet } = await probeManifest(source, probeCtx);\n if (!filterSetsEqual(filterSet, marker.filterSet)) {\n reasons.push(\"manifest-changed\");\n }\n }\n\n if (reasons.length === 0) {\n return {\n name: source.name,\n verdict: \"up-to-date\",\n commitSha: resolvedSha,\n };\n }\n return {\n name: source.name,\n verdict: \"behind\",\n reasons,\n commitSha: marker.commitSha,\n resolvedSha,\n };\n } catch (err) {\n return {\n name: source.name,\n verdict: \"failed\",\n error: errorMessage(err),\n };\n }\n}\n\nexport function filterSetsEqual(a: readonly string[], b: readonly string[]): boolean {\n const left = [...new Set(a)].sort();\n const right = [...new Set(b)].sort();\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof AuthError) return err.message;\n if (err instanceof RefNotFoundError) return err.message;\n if (err instanceof MaesterError) return err.message;\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","const BEGIN_MARKER_RE = /<!--\\s*maester:skill:begin(?:\\s+v=([^\\s>]+))?\\s*-->/;\nconst END_MARKER_LITERAL = \"<!-- maester:skill:end -->\";\n\nexport type MarkdownRegion = {\n /** Bytes before the begin marker (preserved on rewrite). */\n prefix: string;\n /** Bytes after the end marker (preserved on rewrite). */\n suffix: string;\n /** Version extracted from the begin marker, if present. */\n version: string | undefined;\n};\n\n/**\n * Locate the maester-managed region in a Markdown file. Returns `undefined` when\n * no region is present (caller should treat the entire file as user content).\n */\nexport function extractMarkdownRegion(text: string): MarkdownRegion | undefined {\n const beginMatch = BEGIN_MARKER_RE.exec(text);\n if (!beginMatch) return undefined;\n const beginIdx = beginMatch.index;\n const afterBegin = beginIdx + beginMatch[0].length;\n const endIdx = text.indexOf(END_MARKER_LITERAL, afterBegin);\n if (endIdx < 0) return undefined;\n const suffixStart = endIdx + END_MARKER_LITERAL.length;\n return {\n prefix: text.slice(0, beginIdx),\n suffix: text.slice(suffixStart),\n version: beginMatch[1],\n };\n}\n\n/**\n * Build a Markdown file containing the maester managed region. When `existing`\n * is provided, content before the begin marker and after the end marker is\n * preserved exactly. When `existing` is absent, only the managed region is\n * emitted (callers may wrap with a preamble of their choice).\n */\nexport function replaceMarkdownRegion(\n existing: string | undefined,\n body: string,\n version: string,\n preambleWhenAbsent = \"\",\n): string {\n const region = renderManagedRegion(body, version);\n if (existing === undefined) {\n if (preambleWhenAbsent.length === 0) {\n return `${region}\\n`;\n }\n return `${preambleWhenAbsent}${preambleWhenAbsent.endsWith(\"\\n\") ? \"\" : \"\\n\"}${region}\\n`;\n }\n const found = extractMarkdownRegion(existing);\n if (!found) {\n const sep = existing.length > 0 && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n return `${existing}${sep}${region}\\n`;\n }\n return `${found.prefix}${region}${found.suffix}`;\n}\n\nfunction renderManagedRegion(body: string, version: string): string {\n const inner = body.endsWith(\"\\n\") ? body.slice(0, -1) : body;\n return `<!-- maester:skill:begin v=${version} -->\\n${inner}\\n${END_MARKER_LITERAL}`;\n}\n\nexport type ClaudeSettings = Record<string, unknown>;\n\n/**\n * Parse a `.claude/settings.json` document, replace its top-level `maester`\n * key with the supplied object, and re-serialize. Every other top-level key\n * is preserved; key order is preserved by treating the `maester` key as the\n * last entry when not previously present.\n */\nexport function replaceJsonMaesterKey(\n existingText: string | undefined,\n maesterBlock: Record<string, unknown>,\n): string {\n const parsed: ClaudeSettings =\n existingText && existingText.trim().length > 0\n ? (JSON.parse(existingText) as ClaudeSettings)\n : {};\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"Expected .claude/settings.json to be a JSON object at the top level.\");\n }\n // Rebuild with the maester key at the same position when present, or appended.\n const rebuilt: Record<string, unknown> = {};\n let placed = false;\n for (const [key, value] of Object.entries(parsed)) {\n if (key === \"maester\") {\n rebuilt[key] = maesterBlock;\n placed = true;\n } else {\n rebuilt[key] = value;\n }\n }\n if (!placed) {\n rebuilt.maester = maesterBlock;\n }\n return `${JSON.stringify(rebuilt, null, 2)}\\n`;\n}\n\n/**\n * Read the maester block from a `.claude/settings.json` document if any.\n */\nexport function readJsonMaesterKey(\n existingText: string | undefined,\n): Record<string, unknown> | undefined {\n if (!existingText || existingText.trim().length === 0) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(existingText);\n } catch {\n return undefined;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return undefined;\n const block = (parsed as Record<string, unknown>).maester;\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) return undefined;\n return block as Record<string, unknown>;\n}\n","## Citadel awareness\n\nThis repository is a **citadel** — it pulls curated documentation from multiple\nremote sources into a single tree, managed by the `maester` CLI.\n\n- The citadel's aggregated content lives under `{{baseDir}}/` at the repository\n root. Each direct subdirectory of `{{baseDir}}/` corresponds to one remote\n source declared in `citadel.yaml` (`{{baseDir}}/<source-name>/...`).\n- The configuration that declares those sources is in `citadel.yaml` at the\n repository root. It names each source, the git remote it pulls from, and the\n ref it pins to.\n- When answering questions about anything the citadel covers, prefer citing\n files under `{{baseDir}}/` over external knowledge. Cite the file path\n relative to the repository root so the user can open it.\n- Each materialized file may carry a `state` value in its frontmatter or\n inline (see \"State awareness\" below). Surface that state alongside any\n citation so the user knows whether the source is canonical or draft.\n","## Freshness awareness\n\nCitadel content can drift out of date when remote sources advance after the\nlast sync. The Grand Maester is **auto-sync directed**: when the citadel is\nbehind, refresh it before reading rather than relying on stale content.\n\n**Auto-sync policy**\n\nWhen you discover that the citadel is behind — either from the Claude Code\npre-read hook's `additionalContext` message, or from a manual run of\n`npx maester status` — follow these steps without prompting the user:\n\n1. Run `npx maester sync` to refresh every configured source.\n - Exits 0 on success.\n - Exits non-zero if any source failed (missing auth env var, ref typo,\n network error). Report the failure to the user and proceed cautiously.\n2. **Invalidate the pre-read hook's debounce cache** so the next read\n observes fresh state instead of the stale verdict captured before the\n sync:\n ```\n rm -f .maester/.skill-cache.json\n ```\n3. Proceed with the original read of the citadel file.\n\nYou do not need to ask the user before syncing. `maester sync` is read-only\nagainst the remote sources it pulls from; it only materializes content the\n`citadel.yaml` already declared. The same sync the user would run manually.\n\n**Don't loop on failures.** If `maester sync` fails (or the hook reports a\n`failed` verdict from `maester status`), do **not** retry sync repeatedly.\nSurface the failure to the user, proceed with the read, and flag that cited\ncontent may be stale.\n\n**Avoid redundant syncs within a session.** Once you have synced and\ninvalidated the cache, ignore any further \"citadel is behind\" messages that\narrive before you have done another citadel read — they are cached signals\ncaptured before your sync completed.\n\n**Manual status check**\n\n```\nnpx maester status\n```\n\nExit codes:\n\n- **`0`** — every source is up to date.\n- **`1`** — at least one source is behind (remote advanced, manifest\n changed, or never-synced). Run the auto-sync policy above.\n- **`2`** — the status check itself failed. Surface to the user; proceed\n with a caveat that staleness cannot be verified.\n\nFor machine-readable output, pass `--json` and parse the NDJSON stream on\nstdout. The final line contains `{ \"type\": \"summary\", \"upToDate\": N,\n\"behind\": N, \"failed\": N }`.\n\n**On Claude Code specifically**, a `PreToolUse` hook installed by\n`maester skill install` runs the status check automatically before any\n`Read`, `Glob`, or `Grep` targeting a path under `{{baseDir}}/`. The\nhook debounces (default 300s, override with `MAESTER_SKILL_STATUS_TTL`) so\nthe check does not run more than once per session for routine reads.\n","## State awareness (canon vs draft)\n\nEvery citadel file may declare a publication state of `canon` (authoritative)\nor `draft` (work-in-progress). The state lives **inline** in the file using\nthe format's native convention:\n\n- **Markdown / MDX (`.md`, `.mdx`)** — `state` field inside YAML frontmatter\n at the top of the file:\n ```\n ---\n state: canon\n ---\n ```\n- **HTML (`.html`, `.htm`)** — first-line HTML comment:\n `<!-- state: canon -->`\n- **YAML / JSON (`.yaml`, `.yml`, `.json`)** — a top-level `state` key.\n- **Plain text (`.txt`)** — `state: canon` as the very first line.\n\nFiles without inline state default to `draft`.\n\n**Policy when answering from the citadel:**\n\n1. **Prefer `canon` files** as the authoritative source of truth. When a\n `canon` file answers the question, cite it and stop there.\n2. **`draft` files are informational only.** Cite them when no `canon`\n alternative exists, but mark the citation explicitly: \"(draft — work in\n progress)\" alongside the file path so the user knows the source is not yet\n stable.\n3. **Never mix the two without labeling.** If you draw from both canon and\n draft files in one answer, separate the two and tell the user which fact\n came from which kind of source.\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst SKILL_FRONTMATTER_DESCRIPTION =\n \"Citadel-aware guidance for reading aggregated documentation under the citadel base directory. Prefers canon files over draft and runs maester status before substantial citadel reads.\";\n\nexport function renderClaudeSkillBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester (Claude Code skill)\",\n \"\",\n \"Use this guidance whenever you read files under the citadel base directory\",\n `(\\`${opts.baseDir}/\\`) in this repository.`,\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function renderClaudeSkillFile(body: string): string {\n return [\n \"---\",\n \"name: grand-maester\",\n `description: ${SKILL_FRONTMATTER_DESCRIPTION}`,\n \"---\",\n \"\",\n body,\n ].join(\"\\n\");\n}\n\nexport type ClaudeMaesterBlock = {\n version: string;\n hooks: {\n PreToolUse: Array<{\n matcher: string;\n hooks: Array<{ type: \"command\"; command: string }>;\n }>;\n };\n};\n\nexport function buildClaudeMaesterBlock(version: string): ClaudeMaesterBlock {\n return {\n version,\n hooks: {\n PreToolUse: [\n {\n matcher: \"Read|Glob|Grep\",\n hooks: [{ type: \"command\", command: \"npx maester skill runtime preread\" }],\n },\n ],\n },\n };\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport {\n extractMarkdownRegion,\n readJsonMaesterKey,\n replaceJsonMaesterKey,\n replaceMarkdownRegion,\n} from \"../managed-region.js\";\nimport {\n buildClaudeMaesterBlock,\n renderClaudeSkillBody,\n renderClaudeSkillFile,\n} from \"../templates/shells/claude-code.js\";\nimport type { SkillAction, SkillTarget, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nconst SKILL_MD_PATH = \".claude/skills/grand-maester/SKILL.md\";\nconst SETTINGS_JSON_PATH = \".claude/settings.json\";\n\nexport const claudeCodeTarget: SkillTarget = {\n id: \"claude-code\",\n label: \"Claude Code\",\n artifactPaths: [SKILL_MD_PATH, SETTINGS_JSON_PATH],\n writerKey: \"claude-code\",\n write: writeClaudeCode,\n readInstalledVersion,\n};\n\nasync function writeClaudeCode(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const skillResult = await writeSkillMd(input);\n const settingsResult = await writeSettingsJson(input);\n const action = combineActions(skillResult.action, settingsResult.action);\n return {\n action,\n installedVersion: input.skillVersion,\n };\n}\n\nasync function writeSkillMd(input: SkillWriteInput): Promise<{ action: SkillAction }> {\n const filePath = path.join(input.repoRoot, SKILL_MD_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousVersion = existing ? extractMarkdownRegion(existing)?.version : undefined;\n const body = renderClaudeSkillBody({ baseDir: input.citadelBaseDir });\n // Wrap the body in the managed region inside the Claude skill file shape.\n const managedRegion = replaceMarkdownRegion(undefined, body, input.skillVersion).trimEnd();\n const fileContent = existing\n ? replaceMarkdownRegion(existing, body, input.skillVersion)\n : `${renderClaudeSkillFile(managedRegion)}\\n`;\n if (existing === fileContent) return { action: \"unchanged\" };\n await fs.writeFile(filePath, fileContent, \"utf8\");\n if (existing === undefined) return { action: \"installed\" };\n if (previousVersion === undefined) return { action: \"installed\" };\n return { action: \"upgraded\" };\n}\n\nasync function writeSettingsJson(input: SkillWriteInput): Promise<{ action: SkillAction }> {\n const filePath = path.join(input.repoRoot, SETTINGS_JSON_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousBlock = readJsonMaesterKey(existing);\n const previousVersion =\n typeof previousBlock?.version === \"string\" ? previousBlock.version : undefined;\n const block = buildClaudeMaesterBlock(input.skillVersion);\n const next = replaceJsonMaesterKey(existing, block as unknown as Record<string, unknown>);\n if (existing === next) return { action: \"unchanged\" };\n await fs.writeFile(filePath, next, \"utf8\");\n if (existing === undefined || previousBlock === undefined) return { action: \"installed\" };\n if (previousVersion !== input.skillVersion) return { action: \"upgraded\" };\n return { action: \"upgraded\" };\n}\n\nasync function readInstalledVersion(repoRoot: string): Promise<string | undefined> {\n // Source of truth is the SKILL.md begin marker. The settings.json key is the\n // hook wiring; if SKILL.md is absent the skill is not installed even if\n // settings.json has lingering hook config.\n const skillPath = path.join(repoRoot, SKILL_MD_PATH);\n const text = await readTextOrUndefined(skillPath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction combineActions(a: SkillAction, b: SkillAction): SkillAction {\n if (a === \"failed\" || b === \"failed\") return \"failed\";\n if (a === \"installed\" || b === \"installed\") return \"installed\";\n if (a === \"upgraded\" || b === \"upgraded\") return \"upgraded\";\n return \"unchanged\";\n}\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst PREAMBLE = `# AGENTS.md\n\nThis file contains agent instructions for working in this repository. The\nsection between the maester managed-region markers is generated by\n\\`maester skill install\\` and refreshed by \\`maester skill upgrade\\`. Anything\nyou write outside that region is preserved across upgrades.\n`;\n\nexport function renderAgentsMdBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester guidance\",\n \"\",\n \"This repository is set up to aggregate documentation from remote sources\",\n \"into a local citadel. When you reason about citadel content, follow the\",\n \"guidance below.\",\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function agentsMdPreamble(): string {\n return PREAMBLE;\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { extractMarkdownRegion, replaceMarkdownRegion } from \"../managed-region.js\";\nimport { agentsMdPreamble, renderAgentsMdBody } from \"../templates/shells/agents-md.js\";\nimport type { SkillAction, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nexport const AGENTS_MD_ARTIFACT_PATH = \"AGENTS.md\";\n\nexport async function writeAgentsMd(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const filePath = path.join(input.repoRoot, AGENTS_MD_ARTIFACT_PATH);\n const existingText = await readTextOrUndefined(filePath);\n const previousVersion = existingText ? extractMarkdownRegion(existingText)?.version : undefined;\n const body = renderAgentsMdBody({ baseDir: input.citadelBaseDir });\n const next = replaceMarkdownRegion(existingText, body, input.skillVersion, agentsMdPreamble());\n const action = decideAction(existingText, previousVersion, input.skillVersion, next);\n if (action === \"unchanged\") {\n return previousVersion !== undefined\n ? { action, installedVersion: previousVersion }\n : { action };\n }\n await fs.writeFile(filePath, next, \"utf8\");\n return { action, installedVersion: input.skillVersion };\n}\n\nexport async function readAgentsMdInstalledVersion(repoRoot: string): Promise<string | undefined> {\n const filePath = path.join(repoRoot, AGENTS_MD_ARTIFACT_PATH);\n const text = await readTextOrUndefined(filePath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction decideAction(\n existing: string | undefined,\n previousVersion: string | undefined,\n newVersion: string,\n newContent: string,\n): SkillAction {\n if (existing === undefined) return \"installed\";\n if (existing === newContent) return \"unchanged\";\n if (previousVersion === undefined) return \"installed\";\n if (previousVersion !== newVersion) return \"upgraded\";\n return \"upgraded\";\n}\n","import type { SkillTarget } from \"../types.js\";\nimport {\n AGENTS_MD_ARTIFACT_PATH,\n readAgentsMdInstalledVersion,\n writeAgentsMd,\n} from \"./agents-md-writer.js\";\n\nexport const codexTarget: SkillTarget = {\n id: \"codex\",\n label: \"Codex CLI\",\n artifactPaths: [AGENTS_MD_ARTIFACT_PATH],\n writerKey: \"agents-md\",\n write: writeAgentsMd,\n readInstalledVersion: readAgentsMdInstalledVersion,\n};\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst DESCRIPTION =\n \"Citadel-aware guidance for reading aggregated documentation under the citadel base directory.\";\n\nexport function renderCursorRuleBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester (Cursor rule)\",\n \"\",\n \"This rule applies when the user asks about content under the citadel\",\n `base directory (\\`${opts.baseDir}/\\`).`,\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function renderCursorRuleFile(body: string, opts: { baseDir: string }): string {\n return [\n \"---\",\n `description: ${DESCRIPTION}`,\n `globs: [\"${opts.baseDir}/**/*\"]`,\n \"alwaysApply: false\",\n \"---\",\n \"\",\n body,\n ].join(\"\\n\");\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { extractMarkdownRegion, replaceMarkdownRegion } from \"../managed-region.js\";\nimport { renderCursorRuleBody, renderCursorRuleFile } from \"../templates/shells/cursor.js\";\nimport type { SkillAction, SkillTarget, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nconst CURSOR_RULE_PATH = \".cursor/rules/grand-maester.mdc\";\n\nexport const cursorTarget: SkillTarget = {\n id: \"cursor\",\n label: \"Cursor\",\n artifactPaths: [CURSOR_RULE_PATH],\n writerKey: \"cursor\",\n write: writeCursor,\n readInstalledVersion,\n};\n\nasync function writeCursor(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const filePath = path.join(input.repoRoot, CURSOR_RULE_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousVersion = existing ? extractMarkdownRegion(existing)?.version : undefined;\n const body = renderCursorRuleBody({ baseDir: input.citadelBaseDir });\n const next = existing\n ? replaceMarkdownRegion(existing, body, input.skillVersion)\n : `${renderCursorRuleFile(\n replaceMarkdownRegion(undefined, body, input.skillVersion).trimEnd(),\n {\n baseDir: input.citadelBaseDir,\n },\n )}\\n`;\n const action = decideAction(existing, previousVersion, input.skillVersion, next);\n if (action === \"unchanged\") {\n return previousVersion !== undefined\n ? { action, installedVersion: previousVersion }\n : { action };\n }\n await fs.writeFile(filePath, next, \"utf8\");\n return { action, installedVersion: input.skillVersion };\n}\n\nasync function readInstalledVersion(repoRoot: string): Promise<string | undefined> {\n const filePath = path.join(repoRoot, CURSOR_RULE_PATH);\n const text = await readTextOrUndefined(filePath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction decideAction(\n existing: string | undefined,\n previousVersion: string | undefined,\n newVersion: string,\n newContent: string,\n): SkillAction {\n if (existing === undefined) return \"installed\";\n if (existing === newContent) return \"unchanged\";\n if (previousVersion === undefined) return \"installed\";\n if (previousVersion !== newVersion) return \"upgraded\";\n return \"upgraded\";\n}\n","import type { SkillTarget } from \"../types.js\";\nimport {\n AGENTS_MD_ARTIFACT_PATH,\n readAgentsMdInstalledVersion,\n writeAgentsMd,\n} from \"./agents-md-writer.js\";\n\nexport const genericTarget: SkillTarget = {\n id: \"agents-md\",\n label: \"Generic AGENTS.md\",\n artifactPaths: [AGENTS_MD_ARTIFACT_PATH],\n writerKey: \"agents-md\",\n write: writeAgentsMd,\n readInstalledVersion: readAgentsMdInstalledVersion,\n};\n","import type { SkillTarget, SkillTargetId } from \"../types.js\";\nimport { claudeCodeTarget } from \"./claude-code.js\";\nimport { codexTarget } from \"./codex.js\";\nimport { cursorTarget } from \"./cursor.js\";\nimport { genericTarget } from \"./generic.js\";\n\nconst REGISTRY: readonly SkillTarget[] = [\n claudeCodeTarget,\n codexTarget,\n cursorTarget,\n genericTarget,\n];\n\nexport function listSkillTargets(): readonly SkillTarget[] {\n return REGISTRY;\n}\n\nexport function getTarget(id: SkillTargetId): SkillTarget {\n const found = REGISTRY.find((t) => t.id === id);\n if (!found) {\n throw new Error(\n `Unknown skill target '${id}'. Supported: ${REGISTRY.map((t) => t.id).join(\", \")}`,\n );\n }\n return found;\n}\n\n/**\n * Group a selection of targets by their writer so multiple ids that share an\n * output (e.g. `codex` + `agents-md` both write `AGENTS.md`) trigger a single\n * write call. The returned tuples preserve every id label for reporting.\n */\nexport type DedupedTargetGroup = {\n writerKey: string;\n primary: SkillTarget;\n ids: SkillTargetId[];\n labels: string[];\n artifactPaths: readonly string[];\n};\n\nexport function dedupeTargets(targets: readonly SkillTarget[]): DedupedTargetGroup[] {\n const groups = new Map<string, DedupedTargetGroup>();\n for (const target of targets) {\n const existing = groups.get(target.writerKey);\n if (existing) {\n existing.ids.push(target.id);\n existing.labels.push(target.label);\n } else {\n groups.set(target.writerKey, {\n writerKey: target.writerKey,\n primary: target,\n ids: [target.id],\n labels: [target.label],\n artifactPaths: target.artifactPaths,\n });\n }\n }\n return [...groups.values()];\n}\n","{\n \"name\": \"baller-maester\",\n \"version\": \"0.2.1\",\n \"description\": \"A Node CLI for aggregating documentation from many sources into one central knowledge home for developers and AI agents.\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"bin\": {\n \"maester\": \"bin/maester.mjs\"\n },\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"files\": [\"bin\", \"dist\", \"README.md\", \"CHANGELOG.md\", \"LICENSE\"],\n \"sideEffects\": false,\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"format\": \"biome format --write .\",\n \"prepare\": \"simple-git-hooks\",\n \"prepublishOnly\": \"pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build\"\n },\n \"simple-git-hooks\": {\n \"pre-commit\": \"pnpm exec biome check --staged --no-errors-on-unmatched && pnpm exec tsc --noEmit\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\"@biomejs/biome\", \"esbuild\", \"simple-git-hooks\"]\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^0.9.1\",\n \"boxen\": \"^8.0.1\",\n \"chalk\": \"^5.4.1\",\n \"cli-progress\": \"^3.12.0\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"consola\": \"^3.4.0\",\n \"figlet\": \"^1.8.0\",\n \"globby\": \"^14.1.0\",\n \"gray-matter\": \"^4.0.3\",\n \"is-unicode-supported\": \"^2.1.0\",\n \"pathe\": \"^2.0.2\",\n \"picomatch\": \"^4.0.4\",\n \"simple-git\": \"^3.27.0\",\n \"supports-color\": \"^10.0.0\",\n \"terminal-link\": \"^4.0.0\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^1.9.4\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/figlet\": \"^1.7.0\",\n \"@types/node\": \"^22.10.7\",\n \"@types/picomatch\": \"^4.0.3\",\n \"simple-git-hooks\": \"^2.11.1\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^2.1.8\"\n },\n \"keywords\": [\"cli\", \"documentation\", \"aggregation\", \"git\", \"knowledge\", \"monorepo\", \"ai-context\"],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/gballer77/maester.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/gballer77/maester/issues\"\n },\n \"homepage\": \"https://github.com/gballer77/maester#readme\"\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\n\nexport const PACKAGE_NAME = pkg.name;\nexport const PACKAGE_VERSION = pkg.version;\n","import { PACKAGE_VERSION } from \"../../package-meta.js\";\n\nexport const SKILL_VERSION = PACKAGE_VERSION;\n","import { dedupeTargets, getTarget, listSkillTargets } from \"./targets/index.js\";\nimport type {\n SkillInstallOutcome,\n SkillInstallResult,\n SkillStatusOutcome,\n SkillStatusResult,\n SkillTargetId,\n} from \"./types.js\";\nimport { SKILL_VERSION } from \"./version.js\";\n\nexport type RunSkillInstallOpts = {\n targets: readonly SkillTargetId[];\n mode: \"install\" | \"add-target\";\n citadelBaseDir: string;\n};\n\nexport async function runSkillInstall(\n repoRoot: string,\n opts: RunSkillInstallOpts,\n): Promise<SkillInstallResult> {\n if (opts.targets.length === 0) {\n throw new Error(\"At least one target id must be supplied.\");\n }\n // Validate every requested id before any write.\n const targets = opts.targets.map((id) => getTarget(id));\n const groups = dedupeTargets(targets);\n const outcomes: SkillInstallOutcome[] = [];\n for (const group of groups) {\n const writeOutcome = await safeWrite(group.primary.write, {\n repoRoot,\n skillVersion: SKILL_VERSION,\n citadelBaseDir: opts.citadelBaseDir,\n });\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action: writeOutcome.action,\n ...(writeOutcome.installedVersion !== undefined\n ? { installedVersion: writeOutcome.installedVersion }\n : {}),\n ...(writeOutcome.error !== undefined ? { error: writeOutcome.error } : {}),\n });\n }\n }\n return { outcomes, counts: countOutcomes(outcomes) };\n}\n\nexport type RunSkillUpgradeOpts = {\n check?: boolean;\n citadelBaseDir: string;\n};\n\nexport async function runSkillUpgrade(\n repoRoot: string,\n opts: RunSkillUpgradeOpts,\n): Promise<SkillInstallResult> {\n const installedGroups = await findInstalledGroups(repoRoot);\n if (installedGroups.length === 0) {\n return { outcomes: [], counts: countOutcomes([]) };\n }\n const outcomes: SkillInstallOutcome[] = [];\n for (const group of installedGroups) {\n const installedVersion = await group.primary.readInstalledVersion(repoRoot);\n const isOutdated = installedVersion !== SKILL_VERSION;\n if (opts.check === true) {\n const action = isOutdated ? \"upgraded\" : \"unchanged\";\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action,\n ...(installedVersion !== undefined ? { installedVersion } : {}),\n });\n }\n continue;\n }\n const writeOutcome = await safeWrite(group.primary.write, {\n repoRoot,\n skillVersion: SKILL_VERSION,\n citadelBaseDir: opts.citadelBaseDir,\n });\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action: writeOutcome.action,\n ...(writeOutcome.installedVersion !== undefined\n ? { installedVersion: writeOutcome.installedVersion }\n : {}),\n ...(writeOutcome.error !== undefined ? { error: writeOutcome.error } : {}),\n });\n }\n }\n return { outcomes, counts: countOutcomes(outcomes) };\n}\n\nexport async function runSkillStatus(repoRoot: string): Promise<SkillStatusResult> {\n const outcomes: SkillStatusOutcome[] = [];\n let upToDate = 0;\n let outdated = 0;\n let notInstalled = 0;\n for (const target of listSkillTargets()) {\n const installedVersion = await target.readInstalledVersion(repoRoot);\n let state: SkillStatusOutcome[\"state\"];\n if (installedVersion === undefined) {\n state = \"not-installed\";\n notInstalled += 1;\n } else if (installedVersion === SKILL_VERSION) {\n state = \"up-to-date\";\n upToDate += 1;\n } else {\n state = \"outdated\";\n outdated += 1;\n }\n outcomes.push({\n id: target.id,\n label: target.label,\n artifactPaths: target.artifactPaths,\n state,\n ...(installedVersion !== undefined ? { installedVersion } : {}),\n currentVersion: SKILL_VERSION,\n });\n }\n return {\n outcomes,\n counts: { upToDate, outdated, notInstalled },\n };\n}\n\nexport { listSkillTargets } from \"./targets/index.js\";\nexport type {\n SkillInstallOutcome,\n SkillInstallResult,\n SkillStatusOutcome,\n SkillStatusResult,\n SkillTargetId,\n} from \"./types.js\";\n\nasync function safeWrite(\n write: ReturnType<typeof getTarget>[\"write\"],\n input: { repoRoot: string; skillVersion: string; citadelBaseDir: string },\n): Promise<{ action: SkillInstallOutcome[\"action\"]; installedVersion?: string; error?: string }> {\n try {\n return await write(input);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return { action: \"failed\", error: message };\n }\n}\n\nasync function findInstalledGroups(repoRoot: string): Promise<ReturnType<typeof dedupeTargets>> {\n const targets = listSkillTargets();\n const installed = [];\n for (const target of targets) {\n const installedVersion = await target.readInstalledVersion(repoRoot);\n if (installedVersion !== undefined) installed.push(target);\n }\n return dedupeTargets(installed);\n}\n\nfunction countOutcomes(outcomes: readonly SkillInstallOutcome[]): SkillInstallResult[\"counts\"] {\n let installed = 0;\n let upgraded = 0;\n let unchanged = 0;\n let failed = 0;\n for (const o of outcomes) {\n if (o.action === \"installed\") installed += 1;\n else if (o.action === \"upgraded\") upgraded += 1;\n else if (o.action === \"unchanged\") unchanged += 1;\n else if (o.action === \"failed\") failed += 1;\n }\n return { installed, upgraded, unchanged, failed };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/state/schema.ts","../src/schemas/citadel.ts","../src/schemas/maester.ts","../src/core/errors.ts","../src/core/config/paths.ts","../src/core/config/loader.ts","../src/core/auth/resolver.ts","../src/core/git/client.ts","../src/core/sources/fetcher.ts","../src/core/state/html.ts","../src/core/state/json.ts","../src/core/state/markdown.ts","../src/core/state/plaintext.ts","../src/core/state/yaml.ts","../src/core/state/format.ts","../src/core/state/applier.ts","../src/core/sync/provenance.ts","../src/core/sync/stage.ts","../src/core/sync/runner.ts","../src/core/status/probe.ts","../src/core/status/runner.ts","../src/core/skill/managed-region.ts","../src/core/skill/templates/content/citadel-awareness.md","../src/core/skill/templates/content/freshness-awareness.md","../src/core/skill/templates/content/state-awareness.md","../src/core/skill/templates/shells/claude-code.ts","../src/core/skill/targets/claude-code.ts","../src/core/skill/templates/shells/agents-md.ts","../src/core/skill/targets/agents-md-writer.ts","../src/core/skill/targets/codex.ts","../src/core/skill/templates/shells/cursor.ts","../src/core/skill/targets/cursor.ts","../src/core/skill/targets/generic.ts","../src/core/skill/targets/index.ts","../package.json","../src/package-meta.ts","../src/core/skill/version.ts","../src/core/skill/runner.ts"],"names":["z","resolve","path","existsSync","execFileCb","entry","readFile","parseDocument","walk","parse","write","splitFirstLine","readdir","writeFile","mkdir","rm","marker","MAESTER_MANIFEST_FILENAME","manifestError","DEFAULT_CONCURRENCY","errorMessage","fs","interpolate","readTextOrUndefined","readInstalledVersion","decideAction"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const STATE_VALUES = [\"draft\", \"canon\"] as const;\nexport const StateSchema = z.enum(STATE_VALUES);\nexport type State = z.infer<typeof StateSchema>;\n\nexport const DEFAULT_STATE: State = \"draft\";\n\nexport type ParseStateResult =\n | { kind: \"valid\"; value: State }\n | { kind: \"invalid\"; raw: string }\n | { kind: \"absent\" };\n\nexport type RuleEntry = {\n pattern: string;\n state?: State;\n};\n\nexport function parseState(value: unknown): ParseStateResult {\n if (value === undefined || value === null) return { kind: \"absent\" };\n const raw = typeof value === \"string\" ? value : String(value);\n if (raw.length === 0) return { kind: \"absent\" };\n const result = StateSchema.safeParse(raw);\n if (result.success) return { kind: \"valid\", value: result.data };\n return { kind: \"invalid\", raw };\n}\n","import { resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { StateSchema } from \"../core/state/schema.js\";\n\nexport const SLUG_RE = /^[a-z0-9][a-z0-9-]*$/;\nexport const ENV_VAR_RE = /^[A-Z][A-Z0-9_]*$/;\nconst URL_FORMS = [/^https:\\/\\/\\S+$/i, /^ssh:\\/\\/\\S+$/i, /^git@[^\\s:]+:\\S+$/, /^file:\\/\\/\\S+$/i];\n\nfunction isValidGitUrl(url: string): boolean {\n if (/\\s/.test(url)) return false;\n return URL_FORMS.some((re) => re.test(url));\n}\n\nfunction isSafeRelativePath(value: string): boolean {\n if (value.length === 0) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nfunction isSafeIncludesEntry(value: string): boolean {\n if (value.length === 0 || /^\\s+$/.test(value)) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nexport const AuthRefNoneSchema = z\n .object({\n type: z.literal(\"none\"),\n })\n .strict();\n\nexport const AuthRefTokenSchema = z\n .object({\n type: z.literal(\"token\"),\n envVar: z\n .string()\n .min(1, \"envVar is required for token auth\")\n .regex(ENV_VAR_RE, \"envVar must be uppercase letters, digits, and underscores\"),\n })\n .strict();\n\nexport const AuthRefSchema = z.discriminatedUnion(\"type\", [AuthRefNoneSchema, AuthRefTokenSchema]);\n\nconst IncludesPathSchema = z\n .string()\n .min(1)\n .refine(\n isSafeIncludesEntry,\n \"includes entry must be a repo-relative path or glob; no leading '/' and no '..'\",\n );\n\nexport const IncludeEntryObjectSchema = z\n .object({\n path: IncludesPathSchema,\n state: StateSchema.optional(),\n })\n .strict();\n\nexport const IncludeEntrySchema = z.union([IncludesPathSchema, IncludeEntryObjectSchema]);\n\nexport function normalizeIncludeEntry(entry: z.infer<typeof IncludeEntrySchema>): {\n path: string;\n state?: z.infer<typeof StateSchema>;\n} {\n if (typeof entry === \"string\") return { path: entry };\n if (entry.state === undefined) return { path: entry.path };\n return { path: entry.path, state: entry.state };\n}\n\nexport const SourceSchema = z\n .object({\n name: z\n .string()\n .min(1)\n .regex(SLUG_RE, \"name must be a kebab-case slug starting with a letter or digit\"),\n url: z.string().refine(isValidGitUrl, \"url must be https://, ssh://, or git@host:path\"),\n ref: z.string().min(1).optional(),\n includes: z\n .array(IncludeEntrySchema)\n .min(1, \"includes must declare at least one entry when present\")\n .optional(),\n auth: AuthRefSchema.optional(),\n destination: z\n .string()\n .min(1)\n .refine(isSafeRelativePath, \"destination must be a repo-relative path with no '..' segments\")\n .optional(),\n description: z.string().min(1).optional(),\n tags: z.array(z.string().min(1).regex(SLUG_RE, \"tags must be slugs\")).optional(),\n })\n .strict();\n\nexport const DEFAULT_BASE_DIR = \"citadel\";\n\nexport function resolveBaseDir(config: { baseDir?: string }): string {\n return config.baseDir ?? DEFAULT_BASE_DIR;\n}\n\ntype ParsedCitadel = {\n schemaVersion: 1;\n baseDir?: string;\n sources: z.infer<typeof SourceSchema>[];\n};\n\nfunction applyCombinedInvariants(data: ParsedCitadel, ctx: z.RefinementCtx): void {\n if (data.sources.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"citadel must declare at least one source\",\n path: [\"sources\"],\n });\n return;\n }\n\n const baseDir = data.baseDir ?? DEFAULT_BASE_DIR;\n const namesSeen = new Map<string, number>();\n const destsSeen = new Map<string, { index: number; name: string }>();\n\n for (let i = 0; i < data.sources.length; i++) {\n const entry = data.sources[i];\n if (!entry?.name) continue;\n const priorIndex = namesSeen.get(entry.name);\n if (priorIndex !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate name '${entry.name}' — also used by sources[${priorIndex}]`,\n path: [\"sources\", i, \"name\"],\n });\n } else {\n namesSeen.set(entry.name, i);\n }\n\n const resolved = entry.destination\n ? resolve(\"/_citadel_root_\", entry.destination)\n : resolve(\"/_citadel_root_\", baseDir, entry.name);\n const prior = destsSeen.get(resolved);\n if (prior !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `destination collision: sources '${entry.name}' and '${prior.name}' (sources[${prior.index}]) both resolve to the same path`,\n path: [\"sources\", i, \"destination\"],\n });\n } else {\n destsSeen.set(resolved, { index: i, name: entry.name });\n }\n }\n}\n\nexport const CitadelConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n baseDir: z\n .string()\n .min(1)\n .refine(isSafeRelativePath, \"baseDir must be a repo-relative path with no '..' segments\")\n .optional(),\n sources: z.array(SourceSchema).optional().default([]),\n })\n .strict()\n .superRefine((data, ctx) => {\n applyCombinedInvariants(data as ParsedCitadel, ctx);\n });\n\nexport type AuthRef = z.infer<typeof AuthRefSchema>;\nexport type IncludeEntry = z.infer<typeof IncludeEntrySchema>;\nexport type Source = z.infer<typeof SourceSchema>;\nexport type CitadelConfig = z.infer<typeof CitadelConfigSchema>;\n","import { z } from \"zod\";\nimport { StateSchema } from \"../core/state/schema.js\";\nimport { SLUG_RE } from \"./citadel.js\";\n\nfunction isSafeRepoRelative(value: string): boolean {\n if (value.length === 0 || /^\\s+$/.test(value)) return false;\n if (value.startsWith(\"/\")) return false;\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) return false;\n return true;\n}\n\nexport const PublishedDocumentSchema = z\n .object({\n path: z\n .string()\n .min(1)\n .refine(\n isSafeRepoRelative,\n \"path must be a repo-relative file or glob; no leading '/' and no '..'\",\n ),\n description: z.string().min(1).optional(),\n category: z.string().min(1).regex(SLUG_RE, \"category must be a kebab-case slug\").optional(),\n tags: z.array(z.string().min(1).regex(SLUG_RE, \"tags must be slugs\")).optional(),\n state: StateSchema.optional(),\n })\n .strict();\n\nexport const MaesterConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n documents: z\n .array(PublishedDocumentSchema)\n .min(1, \"at least one published document must be declared\")\n .superRefine((docs, ctx) => {\n const seen = new Map<string, number>();\n for (let i = 0; i < docs.length; i++) {\n const p = docs[i]?.path;\n if (!p) continue;\n const prior = seen.get(p);\n if (prior !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate path '${p}' (also at index ${prior})`,\n path: [i, \"path\"],\n });\n } else {\n seen.set(p, i);\n }\n }\n }),\n })\n .strict();\n\nexport type PublishedDocument = z.infer<typeof PublishedDocumentSchema>;\nexport type MaesterConfig = z.infer<typeof MaesterConfigSchema>;\n","export class MaesterError extends Error {\n readonly code: string;\n override readonly cause?: unknown;\n constructor(code: string, message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"MaesterError\";\n this.code = code;\n if (options?.cause !== undefined) {\n this.cause = options.cause;\n }\n }\n}\n\nexport class ConfigError extends MaesterError {\n readonly filePath: string | undefined;\n readonly line?: number;\n readonly column?: number;\n constructor(\n message: string,\n detail: { filePath?: string; line?: number; column?: number; cause?: unknown } = {},\n ) {\n super(\"CONFIG_ERROR\", message, detail.cause !== undefined ? { cause: detail.cause } : {});\n this.name = \"ConfigError\";\n this.filePath = detail.filePath;\n if (detail.line !== undefined) this.line = detail.line;\n if (detail.column !== undefined) this.column = detail.column;\n }\n}\n\nexport class AuthError extends MaesterError {\n readonly envVar: string;\n constructor(envVar: string, message?: string) {\n super(\"AUTH_ERROR\", message ?? `Environment variable ${envVar} is not set.`);\n this.name = \"AuthError\";\n this.envVar = envVar;\n }\n}\n\nexport class RefNotFoundError extends MaesterError {\n readonly ref: string;\n readonly url: string;\n constructor(ref: string, url: string, cause?: unknown) {\n super(\n \"REF_NOT_FOUND\",\n `ref \\`${ref}\\` not found on \\`${url}\\``,\n cause !== undefined ? { cause } : {},\n );\n this.name = \"RefNotFoundError\";\n this.ref = ref;\n this.url = url;\n }\n}\n\nexport class DestinationBlockedError extends MaesterError {\n readonly destination: string;\n constructor(destination: string, message: string) {\n super(\"DESTINATION_BLOCKED\", message);\n this.name = \"DestinationBlockedError\";\n this.destination = destination;\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\n\nexport const CITADEL_CONFIG_FILENAME = \"citadel.yaml\";\nexport const MAESTER_CONFIG_FILENAME = \"maester.yaml\";\nexport const CACHE_DIR_NAME = \".maester\";\nexport const CACHE_SUBDIR = \".maester/cache\";\n\nexport function citadelConfigPath(repoRoot: string): string {\n return resolve(repoRoot, CITADEL_CONFIG_FILENAME);\n}\n\nexport function maesterConfigPath(repoRoot: string): string {\n return resolve(repoRoot, MAESTER_CONFIG_FILENAME);\n}\n\nexport function cachePath(repoRoot: string): string {\n return resolve(repoRoot, CACHE_SUBDIR);\n}\n\nexport function cachePathForSource(repoRoot: string, sourceName: string): string {\n return resolve(repoRoot, CACHE_SUBDIR, sourceName);\n}\n\nexport function defaultDestinationFor(\n repoRoot: string,\n sourceName: string,\n baseDir?: string,\n): string {\n return resolve(repoRoot, baseDir ?? DEFAULT_BASE_DIR, sourceName);\n}\n\nexport type RepoRoles = {\n hasCitadel: boolean;\n hasMaester: boolean;\n};\n\nexport function detectRoles(repoRoot: string): RepoRoles {\n return {\n hasCitadel: existsSync(citadelConfigPath(repoRoot)),\n hasMaester: existsSync(maesterConfigPath(repoRoot)),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { type YAMLError, parseDocument } from \"yaml\";\nimport type { z } from \"zod\";\nimport { type CitadelConfig, CitadelConfigSchema } from \"../../schemas/citadel.js\";\nimport { type MaesterConfig, MaesterConfigSchema } from \"../../schemas/maester.js\";\nimport { ConfigError } from \"../errors.js\";\nimport { citadelConfigPath, maesterConfigPath } from \"./paths.js\";\n\nexport async function loadCitadelConfig(repoRoot: string): Promise<CitadelConfig> {\n const path = citadelConfigPath(repoRoot);\n if (!existsSync(path)) {\n throw new ConfigError(\n \"No citadel.yaml found at the repository root. Run `npx maester init` to create one.\",\n { filePath: path },\n );\n }\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, CitadelConfigSchema, path);\n}\n\nexport async function loadMaesterConfig(repoRoot: string): Promise<MaesterConfig> {\n const path = maesterConfigPath(repoRoot);\n if (!existsSync(path)) {\n throw new ConfigError(\n \"No maester.yaml found at the repository root. Run `npx maester publish` to create one.\",\n { filePath: path },\n );\n }\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, MaesterConfigSchema, path);\n}\n\nexport async function loadMaesterConfigOptional(\n repoRoot: string,\n): Promise<MaesterConfig | undefined> {\n const path = maesterConfigPath(repoRoot);\n if (!existsSync(path)) return undefined;\n const raw = await readFile(path, \"utf8\");\n return parseAndValidate(raw, MaesterConfigSchema, path);\n}\n\nexport function parseAndValidate<T extends z.ZodTypeAny>(\n raw: string,\n schema: T,\n filePath: string,\n): z.infer<T> {\n const data = parseYaml(raw, filePath);\n return runSchema(data, schema, filePath);\n}\n\nfunction parseYaml(raw: string, filePath: string): unknown {\n const doc = parseDocument(raw, { keepSourceTokens: false });\n const yamlErrors = doc.errors;\n if (yamlErrors.length > 0) {\n const first = yamlErrors[0] as YAMLError;\n const pos = positionFromError(first, raw);\n throw new ConfigError(`YAML parse error: ${first.message}`, {\n filePath,\n line: pos.line,\n column: pos.column,\n cause: first,\n });\n }\n return doc.toJS({ maxAliasCount: -1 });\n}\n\nfunction runSchema<T extends z.ZodTypeAny>(data: unknown, schema: T, filePath: string): z.infer<T> {\n const result = schema.safeParse(data);\n if (!result.success) {\n const issue = result.error.issues[0];\n const where = issue?.path?.length ? ` at \\`${issue.path.join(\".\")}\\`` : \"\";\n throw new ConfigError(`${filePath}: ${issue?.message ?? \"validation failed\"}${where}`, {\n filePath,\n cause: result.error,\n });\n }\n return result.data;\n}\n\nfunction positionFromError(err: YAMLError, raw: string): { line: number; column: number } {\n const pos = (err as { pos?: [number, number] }).pos;\n if (!pos) return { line: 1, column: 1 };\n const offset = pos[0];\n let line = 1;\n let lastLineStart = 0;\n for (let i = 0; i < offset && i < raw.length; i++) {\n if (raw[i] === \"\\n\") {\n line++;\n lastLineStart = i + 1;\n }\n }\n return { line, column: offset - lastLineStart + 1 };\n}\n","import type { AuthRef } from \"../../schemas/citadel.js\";\nimport { AuthError } from \"../errors.js\";\n\nexport type ResolvedAuth = { type: \"delegated\" } | { type: \"token\"; value: string };\n\nexport function resolveAuth(\n auth: AuthRef | undefined,\n env: NodeJS.ProcessEnv = process.env,\n): ResolvedAuth {\n if (!auth || auth.type === \"none\") return { type: \"delegated\" };\n const value = env[auth.envVar];\n if (value === undefined || value.length === 0) {\n throw new AuthError(\n auth.envVar,\n `${auth.envVar} is not set. Define it in your shell, .env loader, or CI secret manager before syncing.`,\n );\n }\n return { type: \"token\", value };\n}\n","import { execFile as execFileCb } from \"node:child_process\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { promisify } from \"node:util\";\nimport { type SimpleGit, simpleGit } from \"simple-git\";\nimport { RefNotFoundError } from \"../errors.js\";\n\nconst execFile = promisify(execFileCb);\n\nexport type GitCapabilities = {\n version: string;\n supportsPartialClone: boolean;\n};\n\nlet cachedCapabilities: GitCapabilities | undefined;\n\nexport async function detectGitCapabilities(): Promise<GitCapabilities> {\n if (cachedCapabilities) return cachedCapabilities;\n const { stdout } = await execFile(\"git\", [\"--version\"]);\n const match = stdout.match(/git version (\\d+)\\.(\\d+)(?:\\.(\\d+))?/);\n if (!match) {\n cachedCapabilities = { version: stdout.trim(), supportsPartialClone: false };\n return cachedCapabilities;\n }\n const major = Number(match[1] ?? 0);\n const minor = Number(match[2] ?? 0);\n const supportsPartialClone = major > 2 || (major === 2 && minor >= 27);\n cachedCapabilities = { version: `${major}.${minor}`, supportsPartialClone };\n return cachedCapabilities;\n}\n\nexport function clearGitCapabilityCache(): void {\n cachedCapabilities = undefined;\n}\n\nexport type CloneInput = {\n url: string;\n destination: string;\n ref: string | undefined;\n useTokenInUrl?: string;\n};\n\nexport async function shallowSparseClone(input: CloneInput): Promise<SimpleGit> {\n await mkdir(input.destination, { recursive: true });\n const caps = await detectGitCapabilities();\n const url = input.useTokenInUrl ? injectToken(input.url, input.useTokenInUrl) : input.url;\n\n const git = simpleGit(input.destination);\n\n if (caps.supportsPartialClone) {\n const cloneArgs = [\"--filter=blob:none\", \"--depth=1\", \"--no-checkout\", \"--sparse\"];\n if (input.ref) cloneArgs.push(\"--branch\", input.ref);\n try {\n await git.clone(url, \".\", cloneArgs);\n } catch (err) {\n if (input.ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(input.ref, input.url, err);\n }\n throw err;\n }\n } else {\n const cloneArgs: string[] = [\"--depth=1\"];\n if (input.ref) cloneArgs.push(\"--branch\", input.ref);\n try {\n await git.clone(url, \".\", cloneArgs);\n } catch (err) {\n if (input.ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(input.ref, input.url, err);\n }\n throw err;\n }\n }\n return git;\n}\n\nexport async function setSparsePatterns(\n workDir: string,\n patterns: readonly string[],\n): Promise<void> {\n const git = simpleGit(workDir);\n if (patterns.length === 0) {\n await git.raw([\"sparse-checkout\", \"disable\"]);\n return;\n }\n await git.raw([\"sparse-checkout\", \"set\", \"--no-cone\", ...patterns]);\n}\n\nexport async function checkoutRef(workDir: string, ref: string | undefined): Promise<string> {\n const git = simpleGit(workDir);\n try {\n if (ref) await git.checkout(ref);\n else await git.checkout([\"HEAD\"]);\n } catch (err) {\n if (ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(ref, await tryReadOriginUrl(workDir), err);\n }\n throw err;\n }\n const sha = (await git.revparse([\"HEAD\"])).trim();\n return sha;\n}\n\nexport async function fetchHead(workDir: string, ref: string | undefined): Promise<string> {\n const git = simpleGit(workDir);\n const args = ref ? [\"--depth=1\", \"origin\", ref] : [\"--depth=1\", \"origin\"];\n try {\n await git.fetch(args);\n } catch (err) {\n if (ref && refNotFoundFromError(err)) {\n throw new RefNotFoundError(ref, await tryReadOriginUrl(workDir), err);\n }\n throw err;\n }\n await git.raw([\"reset\", \"--hard\", \"FETCH_HEAD\"]);\n return (await git.revparse([\"HEAD\"])).trim();\n}\n\nexport async function clearWorktree(workDir: string): Promise<void> {\n await rm(workDir, { recursive: true, force: true });\n}\n\nexport type ListRemoteRefInput = {\n url: string;\n ref: string | undefined;\n useTokenInUrl?: string;\n};\n\nexport async function listRemoteRef(input: ListRemoteRefInput): Promise<string> {\n const url = input.useTokenInUrl ? injectToken(input.url, input.useTokenInUrl) : input.url;\n const git = simpleGit();\n const target = input.ref ?? \"HEAD\";\n let output: string;\n try {\n output = await git.listRemote([url, target]);\n } catch (err) {\n throw new RefNotFoundError(target, input.url, err);\n }\n const sha = parseListRemoteOutput(output, target);\n if (!sha) {\n throw new RefNotFoundError(target, input.url);\n }\n return sha;\n}\n\nfunction parseListRemoteOutput(output: string, target: string): string | undefined {\n const lines = output\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (lines.length === 0) return undefined;\n\n let primary: string | undefined;\n let peeled: string | undefined;\n for (const line of lines) {\n const match = line.match(/^([0-9a-f]{40})\\s+(\\S+)$/);\n if (!match) continue;\n const sha = match[1];\n const refName = match[2];\n if (!sha || !refName) continue;\n if (refName === target) {\n primary = sha;\n continue;\n }\n if (matchesRefName(refName, target)) {\n primary = sha;\n }\n if (refName.endsWith(\"^{}\") && matchesRefName(refName.slice(0, -3), target)) {\n peeled = sha;\n }\n }\n return peeled ?? primary;\n}\n\nfunction matchesRefName(refName: string, target: string): boolean {\n if (refName === target) return true;\n if (refName === `refs/heads/${target}`) return true;\n if (refName === `refs/tags/${target}`) return true;\n if (refName === `refs/remotes/origin/${target}`) return true;\n return false;\n}\n\nfunction refNotFoundFromError(err: unknown): boolean {\n const msg = err instanceof Error ? `${err.message}\\n${err.stack ?? \"\"}` : String(err);\n return (\n /Remote branch .+ not found/i.test(msg) ||\n /couldn't find remote ref/i.test(msg) ||\n /not a tree/i.test(msg) ||\n /unknown revision or path/i.test(msg)\n );\n}\n\nfunction injectToken(url: string, token: string): string {\n if (!url.startsWith(\"https://\")) return url;\n const after = url.slice(\"https://\".length);\n return `https://x-access-token:${token}@${after}`;\n}\n\nasync function tryReadOriginUrl(workDir: string): Promise<string> {\n try {\n const git = simpleGit(workDir);\n const remotes = await git.getRemotes(true);\n return remotes.find((r) => r.name === \"origin\")?.refs.fetch ?? \"\";\n } catch {\n return \"\";\n }\n}\n","import type { Dirent } from \"node:fs\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { parseDocument } from \"yaml\";\nimport { type Source, normalizeIncludeEntry } from \"../../schemas/citadel.js\";\nimport { MaesterConfigSchema } from \"../../schemas/maester.js\";\nimport { MaesterError } from \"../errors.js\";\nimport { checkoutRef, fetchHead, setSparsePatterns, shallowSparseClone } from \"../git/client.js\";\nimport type { RuleEntry } from \"../state/schema.js\";\n\nconst MAESTER_MANIFEST_FILENAME = \"maester.yaml\";\n\nexport type FetchWarning = {\n type: \"no-matches\";\n name: string;\n includes: readonly string[];\n};\n\nexport type FetchedTree = {\n name: string;\n cacheDir: string;\n commitSha: string;\n filterSet: readonly string[];\n rules: readonly RuleEntry[];\n warnings: FetchWarning[];\n};\n\nexport type FetchContext = {\n cacheDir: string;\n cacheExists: boolean;\n tokenForUrl: string | undefined;\n};\n\ntype ManifestDiscovery =\n | { mode: \"manifest\"; patterns: string[]; rules: RuleEntry[] }\n | { mode: \"no-manifest\"; reason: \"absent\" | \"invalid\" };\n\nexport async function fetchSource(entry: Source, ctx: FetchContext): Promise<FetchedTree> {\n if (entry.includes && entry.includes.length > 0) {\n const normalized = entry.includes.map(normalizeIncludeEntry);\n return fetchWithExplicitIncludes(entry, ctx, normalized);\n }\n return fetchWithRemoteManifest(entry, ctx);\n}\n\nasync function fetchWithRemoteManifest(entry: Source, ctx: FetchContext): Promise<FetchedTree> {\n if (!ctx.cacheExists) {\n await shallowSparseClone({\n url: entry.url,\n destination: ctx.cacheDir,\n ref: entry.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n // Materialize only the manifest first so we can discover the filter set\n // without paying the cost of the full tree.\n await setSparsePatterns(ctx.cacheDir, [MAESTER_MANIFEST_FILENAME]);\n await checkoutRef(ctx.cacheDir, entry.ref);\n } else {\n await fetchHead(ctx.cacheDir, entry.ref);\n }\n\n const discovery = await discoverManifestFromCache(ctx.cacheDir);\n if (discovery.mode === \"no-manifest\") {\n throw manifestError(entry.name, discovery.reason);\n }\n\n await setSparsePatterns(ctx.cacheDir, discovery.patterns);\n const commitSha = await checkoutRef(ctx.cacheDir, entry.ref);\n\n return {\n name: entry.name,\n cacheDir: ctx.cacheDir,\n commitSha,\n filterSet: discovery.patterns,\n rules: discovery.rules,\n warnings: [],\n };\n}\n\nasync function fetchWithExplicitIncludes(\n entry: Source,\n ctx: FetchContext,\n normalized: readonly { path: string; state?: import(\"../state/schema.js\").State }[],\n): Promise<FetchedTree> {\n if (!ctx.cacheExists) {\n await shallowSparseClone({\n url: entry.url,\n destination: ctx.cacheDir,\n ref: entry.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n } else {\n await fetchHead(ctx.cacheDir, entry.ref);\n }\n\n // Explicit includes bypass remote manifest discovery — the citadel owns the\n // filter set directly. Validated as non-empty by the schema.\n const patterns = normalized.map((entry) => entry.path);\n await setSparsePatterns(ctx.cacheDir, patterns);\n const commitSha = await checkoutRef(ctx.cacheDir, entry.ref);\n\n const matchedFileCount = await countMaterializedFiles(ctx.cacheDir);\n const warnings: FetchWarning[] = [];\n if (matchedFileCount === 0) {\n warnings.push({ type: \"no-matches\", name: entry.name, includes: patterns });\n }\n\n const rules: RuleEntry[] = normalized.map((entry) =>\n entry.state === undefined\n ? { pattern: entry.path }\n : { pattern: entry.path, state: entry.state },\n );\n\n return {\n name: entry.name,\n cacheDir: ctx.cacheDir,\n commitSha,\n filterSet: patterns,\n rules,\n warnings,\n };\n}\n\nfunction manifestError(name: string, reason: \"absent\" | \"invalid\"): MaesterError {\n if (reason === \"absent\") {\n return new MaesterError(\n \"MAESTER_MANIFEST_MISSING\",\n `source '${name}' does not publish a maester.yaml manifest at the configured ref. Sync will not fall back to the full tree — either add a maester.yaml to the source repo or declare an \\`includes\\` list on this source.`,\n );\n }\n return new MaesterError(\n \"MAESTER_MANIFEST_INVALID\",\n `source '${name}' publishes a maester.yaml that failed schema validation. Sync will not fall back to the full tree — fix the manifest in the source repo or declare an \\`includes\\` list on this source.`,\n );\n}\n\nexport async function discoverManifestFromCache(cacheDir: string): Promise<ManifestDiscovery> {\n const path = resolve(cacheDir, MAESTER_MANIFEST_FILENAME);\n if (!existsSync(path)) return { mode: \"no-manifest\", reason: \"absent\" };\n try {\n const raw = await readFile(path, \"utf8\");\n const doc = parseDocument(raw);\n if (doc.errors.length > 0) return { mode: \"no-manifest\", reason: \"invalid\" };\n const parsed = MaesterConfigSchema.safeParse(doc.toJS({ maxAliasCount: -1 }));\n if (!parsed.success) return { mode: \"no-manifest\", reason: \"invalid\" };\n const rules: RuleEntry[] = parsed.data.documents.map((d) =>\n d.state === undefined ? { pattern: d.path } : { pattern: d.path, state: d.state },\n );\n const patterns = parsed.data.documents.map((d) => d.path);\n if (patterns.length === 0) return { mode: \"no-manifest\", reason: \"invalid\" };\n if (!patterns.includes(MAESTER_MANIFEST_FILENAME)) patterns.unshift(MAESTER_MANIFEST_FILENAME);\n return { mode: \"manifest\", patterns, rules };\n } catch {\n return { mode: \"no-manifest\", reason: \"invalid\" };\n }\n}\n\nasync function countMaterializedFiles(cacheDir: string): Promise<number> {\n let count = 0;\n async function walk(dir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = (await readdir(dir, {\n withFileTypes: true,\n encoding: \"utf8\",\n })) as Dirent[];\n } catch {\n return;\n }\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n count++;\n }\n }\n }\n await walk(cacheDir);\n return count;\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nconst STATE_COMMENT_RE = /^<!--\\s*state:\\s*([^\\s-]+)\\s*-->$/;\n\nfunction splitFirstLine(text: string): { firstLine: string; rest: string; eol: string } {\n const crlfIdx = text.indexOf(\"\\r\\n\");\n const lfIdx = text.indexOf(\"\\n\");\n if (crlfIdx !== -1 && (lfIdx === -1 || crlfIdx <= lfIdx)) {\n return { firstLine: text.slice(0, crlfIdx), rest: text.slice(crlfIdx + 2), eol: \"\\r\\n\" };\n }\n if (lfIdx !== -1) {\n return { firstLine: text.slice(0, lfIdx), rest: text.slice(lfIdx + 1), eol: \"\\n\" };\n }\n return { firstLine: text, rest: \"\", eol: \"\\n\" };\n}\n\nexport function parse(buf: Buffer): ParseResult {\n const text = buf.toString(\"utf8\");\n const { firstLine } = splitFirstLine(text);\n const match = firstLine.match(STATE_COMMENT_RE);\n if (!match) return { kind: \"absent\" };\n return parseState(match[1]);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n const { firstLine, rest, eol } = splitFirstLine(text);\n const desiredLine = `<!-- state: ${state} -->`;\n\n const existingMatch = firstLine.match(STATE_COMMENT_RE);\n if (existingMatch) {\n if (firstLine === desiredLine) return buf;\n return Buffer.from(`${desiredLine}${eol}${rest}`, \"utf8\");\n }\n\n const prefix = `${desiredLine}\\n`;\n return Buffer.from(`${prefix}${text}`, \"utf8\");\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nfunction detectIndent(text: string): number | \"\\t\" {\n const lines = text.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"\\t\")) return \"\\t\";\n const match = line.match(/^( +)\\S/);\n if (match) return match[1]?.length ?? 2;\n }\n return 2;\n}\n\nfunction detectTrailingNewline(text: string): string {\n return text.endsWith(\"\\n\") ? \"\\n\" : \"\";\n}\n\nexport function parse(buf: Buffer): ParseResult {\n let value: unknown;\n try {\n value = JSON.parse(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return { kind: \"absent\" };\n }\n return parseState((value as Record<string, unknown>).state);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch {\n return buf;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return buf;\n }\n const obj = value as Record<string, unknown>;\n if (obj.state === state) return buf;\n obj.state = state;\n const indent = detectIndent(text);\n const trailing = detectTrailingNewline(text);\n const serialized = JSON.stringify(obj, null, indent);\n return Buffer.from(`${serialized}${trailing}`, \"utf8\");\n}\n","import matter from \"gray-matter\";\nimport type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nexport function parse(buf: Buffer): ParseResult {\n let parsed: matter.GrayMatterFile<string>;\n try {\n parsed = matter(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n const raw = (parsed.data as Record<string, unknown>).state;\n return parseState(raw);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n let parsed: matter.GrayMatterFile<string>;\n try {\n parsed = matter(buf.toString(\"utf8\"));\n } catch {\n return buf;\n }\n const sourceData = parsed.data as Record<string, unknown>;\n if (sourceData.state === state) return buf;\n // Clone before mutating — gray-matter's content-keyed cache holds the same\n // data reference across calls; mutating it in place would pollute later\n // parses of identical input.\n const nextData = { ...sourceData, state };\n const next = matter.stringify(parsed.content, nextData);\n return Buffer.from(next, \"utf8\");\n}\n","import type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nconst STATE_LINE_RE = /^state:\\s+(\\S+)\\s*$/;\n\nfunction splitFirstLine(text: string): { firstLine: string; rest: string; eol: string } {\n const crlfIdx = text.indexOf(\"\\r\\n\");\n const lfIdx = text.indexOf(\"\\n\");\n if (crlfIdx !== -1 && (lfIdx === -1 || crlfIdx <= lfIdx)) {\n return { firstLine: text.slice(0, crlfIdx), rest: text.slice(crlfIdx + 2), eol: \"\\r\\n\" };\n }\n if (lfIdx !== -1) {\n return { firstLine: text.slice(0, lfIdx), rest: text.slice(lfIdx + 1), eol: \"\\n\" };\n }\n return { firstLine: text, rest: \"\", eol: \"\\n\" };\n}\n\nexport function parse(buf: Buffer): ParseResult {\n const text = buf.toString(\"utf8\");\n const { firstLine } = splitFirstLine(text);\n const match = firstLine.match(STATE_LINE_RE);\n if (!match) return { kind: \"absent\" };\n return parseState(match[1]);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n const { firstLine, rest, eol } = splitFirstLine(text);\n const desiredLine = `state: ${state}`;\n\n const existingMatch = firstLine.match(STATE_LINE_RE);\n if (existingMatch) {\n if (firstLine === desiredLine) return buf;\n return Buffer.from(`${desiredLine}${eol}${rest}`, \"utf8\");\n }\n\n return Buffer.from(`${desiredLine}\\n${text}`, \"utf8\");\n}\n","import { isMap, parseDocument } from \"yaml\";\nimport type { ParseResult } from \"./format.js\";\nimport { type State, parseState } from \"./schema.js\";\n\nexport function parse(buf: Buffer): ParseResult {\n let doc: ReturnType<typeof parseDocument>;\n try {\n doc = parseDocument(buf.toString(\"utf8\"));\n } catch {\n return { kind: \"absent\" };\n }\n if (doc.errors.length > 0) return { kind: \"absent\" };\n if (!isMap(doc.contents)) return { kind: \"absent\" };\n const raw = doc.get(\"state\");\n return parseState(raw);\n}\n\nexport function write(buf: Buffer, state: State): Buffer {\n const text = buf.toString(\"utf8\");\n let doc: ReturnType<typeof parseDocument>;\n try {\n doc = parseDocument(text);\n } catch {\n return buf;\n }\n if (doc.errors.length > 0) return buf;\n if (!isMap(doc.contents)) return buf;\n if (doc.get(\"state\") === state) return buf;\n doc.set(\"state\", state);\n return Buffer.from(doc.toString(), \"utf8\");\n}\n","import { extname } from \"node:path\";\nimport * as html from \"./html.js\";\nimport * as json from \"./json.js\";\nimport * as markdown from \"./markdown.js\";\nimport * as plaintext from \"./plaintext.js\";\nimport type { State } from \"./schema.js\";\nimport * as yaml from \"./yaml.js\";\n\nexport type ParseResult =\n | { kind: \"valid\"; value: State }\n | { kind: \"invalid\"; raw: string }\n | { kind: \"absent\" };\n\nexport type FormatHandler = {\n parse(buf: Buffer): ParseResult;\n write(buf: Buffer, state: State): Buffer;\n};\n\nconst HANDLERS: Record<string, FormatHandler> = {\n \".md\": markdown,\n \".markdown\": markdown,\n \".html\": html,\n \".htm\": html,\n \".yaml\": yaml,\n \".yml\": yaml,\n \".json\": json,\n \".txt\": plaintext,\n};\n\nexport function handlerFor(filePath: string): FormatHandler | undefined {\n const ext = extname(filePath).toLowerCase();\n return HANDLERS[ext];\n}\n\nexport function isSupportedFormat(filePath: string): boolean {\n return handlerFor(filePath) !== undefined;\n}\n","import type { Dirent } from \"node:fs\";\nimport { readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { relative, resolve } from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { handlerFor } from \"./format.js\";\nimport { DEFAULT_STATE, type RuleEntry, type State } from \"./schema.js\";\n\nexport type SourceOfTruth = \"inline\" | \"rule\" | \"default\";\n\nexport type StateBreakdown = {\n canon: number;\n draft: number;\n untagged: number;\n};\n\nexport type BadInlineStateWarning = {\n type: \"bad-inline-state\";\n file: string;\n raw: string;\n};\n\nexport type DisagreementWarning = {\n type: \"disagreement\";\n file: string;\n inline: State;\n rule: State;\n};\n\nexport type StateWarning = BadInlineStateWarning | DisagreementWarning;\n\nexport type StateApplyDetail = {\n file: string;\n state: State | \"untagged\";\n sourceOfTruth: SourceOfTruth | \"untagged\";\n};\n\nexport type StateApplyResult = {\n breakdown: StateBreakdown;\n warnings: StateWarning[];\n details: StateApplyDetail[];\n};\n\nconst MATCHER_OPTIONS = { dot: false, nocase: false } as const;\n\nfunction compileMatchers(rules: readonly RuleEntry[]): Array<(p: string) => boolean> {\n return rules.map((r) => picomatch(r.pattern, MATCHER_OPTIONS));\n}\n\nfunction findRuleState(\n filePath: string,\n rules: readonly RuleEntry[],\n matchers: Array<(p: string) => boolean>,\n): State | undefined {\n for (let i = 0; i < rules.length; i++) {\n const match = matchers[i];\n const rule = rules[i];\n if (!match || !rule) continue;\n if (!match(filePath)) continue;\n if (rule.state !== undefined) return rule.state;\n return undefined;\n }\n return undefined;\n}\n\nasync function* walk(dir: string, root: string): AsyncGenerator<string> {\n let entries: Dirent[];\n try {\n entries = (await readdir(dir, { withFileTypes: true, encoding: \"utf8\" })) as Dirent[];\n } catch {\n return;\n }\n const isRoot = dir === root;\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n if (entry.name === \".maester-source.json\") continue;\n // The remote's maester.yaml is fetched as part of the sparse checkout so\n // that the citadel can see the source's declared publish surface, but it\n // is the manifest itself — a sync artifact, not a published document.\n // Skipping it at the destination root keeps the breakdown honest and\n // avoids injecting a state tag into a config file.\n if (isRoot && entry.name === \"maester.yaml\") continue;\n const full = resolve(dir, entry.name);\n if (entry.isDirectory()) {\n yield* walk(full, root);\n } else if (entry.isFile()) {\n yield relative(root, full);\n }\n }\n}\n\nexport async function applyState(\n stagedDir: string,\n rules: readonly RuleEntry[],\n): Promise<StateApplyResult> {\n const matchers = compileMatchers(rules);\n const breakdown: StateBreakdown = { canon: 0, draft: 0, untagged: 0 };\n const warnings: StateWarning[] = [];\n const details: StateApplyDetail[] = [];\n\n for await (const relPath of walk(stagedDir, stagedDir)) {\n const handler = handlerFor(relPath);\n if (!handler) {\n breakdown.untagged++;\n details.push({ file: relPath, state: \"untagged\", sourceOfTruth: \"untagged\" });\n continue;\n }\n\n const fullPath = resolve(stagedDir, relPath);\n const buf = await readFile(fullPath);\n const parsed = handler.parse(buf);\n\n let resolved: State;\n let sourceOfTruth: SourceOfTruth;\n\n if (parsed.kind === \"valid\") {\n resolved = parsed.value;\n sourceOfTruth = \"inline\";\n const ruleState = findRuleState(relPath, rules, matchers);\n if (ruleState !== undefined && ruleState !== resolved) {\n warnings.push({\n type: \"disagreement\",\n file: relPath,\n inline: resolved,\n rule: ruleState,\n });\n }\n } else {\n if (parsed.kind === \"invalid\") {\n warnings.push({ type: \"bad-inline-state\", file: relPath, raw: parsed.raw });\n }\n const ruleState = findRuleState(relPath, rules, matchers);\n if (ruleState !== undefined) {\n resolved = ruleState;\n sourceOfTruth = \"rule\";\n } else {\n resolved = DEFAULT_STATE;\n sourceOfTruth = \"default\";\n }\n }\n\n const next = handler.write(buf, resolved);\n if (next !== buf) {\n await writeFile(fullPath, next);\n }\n\n breakdown[resolved]++;\n details.push({ file: relPath, state: resolved, sourceOfTruth });\n }\n\n return { breakdown, warnings, details };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport const PROVENANCE_FILENAME = \".maester-source.json\";\n\nexport type ProvenanceMarker = {\n sourceName: string;\n sourceUrl: string;\n ref: string | undefined;\n commitSha: string;\n filterSet: readonly string[];\n syncedAt: string;\n};\n\nexport async function writeProvenanceMarker(\n destination: string,\n marker: ProvenanceMarker,\n): Promise<string> {\n const path = resolve(destination, PROVENANCE_FILENAME);\n const body = `${JSON.stringify(marker, null, 2)}\\n`;\n await writeFile(path, body, \"utf8\");\n return path;\n}\n\nexport async function readProvenanceMarker(\n destination: string,\n): Promise<ProvenanceMarker | undefined> {\n const path = resolve(destination, PROVENANCE_FILENAME);\n if (!existsSync(path)) return undefined;\n try {\n const text = await readFile(path, \"utf8\");\n const parsed = JSON.parse(text) as Record<string, unknown>;\n if (\n typeof parsed.sourceName !== \"string\" ||\n typeof parsed.sourceUrl !== \"string\" ||\n typeof parsed.commitSha !== \"string\" ||\n !Array.isArray(parsed.filterSet)\n ) {\n return undefined;\n }\n return {\n sourceName: parsed.sourceName,\n sourceUrl: parsed.sourceUrl,\n ref: typeof parsed.ref === \"string\" ? parsed.ref : undefined,\n commitSha: parsed.commitSha,\n filterSet: parsed.filterSet as readonly string[],\n syncedAt: typeof parsed.syncedAt === \"string\" ? parsed.syncedAt : new Date(0).toISOString(),\n };\n } catch {\n return undefined;\n }\n}\n\nexport function filterSetMatches(a: readonly string[], b: readonly string[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n","import { existsSync } from \"node:fs\";\nimport { cp, mkdir, readdir, rename, rm } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { DestinationBlockedError } from \"../errors.js\";\nimport {\n PROVENANCE_FILENAME,\n type ProvenanceMarker,\n readProvenanceMarker,\n writeProvenanceMarker,\n} from \"./provenance.js\";\n\nexport type StageInput<TApply = unknown> = {\n cacheDir: string;\n destination: string;\n marker: ProvenanceMarker;\n /**\n * Optional hook invoked against the staged copy AFTER the cache has been\n * copied and BEFORE the provenance marker is written + the atomic promote.\n * Used by the state-tag applier (architecture §6.8 / §9 Gap 19) — running\n * on the staged copy means a crash mid-rewrite leaves the previous promote\n * intact.\n */\n beforePromote?: (stagedDir: string) => Promise<TApply>;\n};\n\nexport type StageOutcome<TApply = unknown> = {\n staged: boolean;\n finalPath: string;\n beforePromoteResult?: TApply;\n};\n\nexport async function stageDestination<TApply = unknown>(\n input: StageInput<TApply>,\n): Promise<StageOutcome<TApply>> {\n await assertDestinationSafe(input.destination, input.marker.sourceName);\n const tempDir = `${input.destination}.tmp-${Math.random().toString(36).slice(2, 10)}`;\n await mkdir(dirname(input.destination), { recursive: true });\n await mkdir(tempDir, { recursive: true });\n await copyCacheToTemp(input.cacheDir, tempDir);\n const beforePromoteResult = input.beforePromote ? await input.beforePromote(tempDir) : undefined;\n await writeProvenanceMarker(tempDir, input.marker);\n await promoteTempToDestination(tempDir, input.destination);\n if (beforePromoteResult !== undefined) {\n return { staged: true, finalPath: input.destination, beforePromoteResult };\n }\n return { staged: true, finalPath: input.destination };\n}\n\nasync function copyCacheToTemp(cacheDir: string, tempDir: string): Promise<void> {\n if (!existsSync(cacheDir)) return;\n const entries = await readdir(cacheDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \".git\") continue;\n const src = resolve(cacheDir, entry.name);\n const dst = resolve(tempDir, entry.name);\n await cp(src, dst, { recursive: true, force: true, errorOnExist: false });\n }\n}\n\nasync function promoteTempToDestination(tempDir: string, destination: string): Promise<void> {\n if (existsSync(destination)) {\n const backup = `${destination}.old-${Math.random().toString(36).slice(2, 10)}`;\n await rename(destination, backup);\n try {\n await rename(tempDir, destination);\n } catch (err) {\n await rename(backup, destination).catch(() => undefined);\n throw err;\n }\n await rm(backup, { recursive: true, force: true });\n return;\n }\n await rename(tempDir, destination);\n}\n\nexport async function assertDestinationSafe(\n destination: string,\n expectedSourceName: string,\n): Promise<void> {\n if (!existsSync(destination)) return;\n const entries = await readdir(destination);\n if (entries.length === 0) return;\n if (entries.length === 1 && entries[0] === PROVENANCE_FILENAME) {\n const marker = await readProvenanceMarker(destination);\n if (!marker || marker.sourceName === expectedSourceName) return;\n }\n const marker = await readProvenanceMarker(destination);\n if (marker && marker.sourceName === expectedSourceName) return;\n throw new DestinationBlockedError(\n destination,\n `Refusing to overwrite ${destination}: contains content that was not produced by '${expectedSourceName}'. Remove the directory or choose a different destination.`,\n );\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { CitadelConfig, Source } from \"../../schemas/citadel.js\";\nimport { resolveAuth } from \"../auth/resolver.js\";\nimport { CACHE_SUBDIR, cachePathForSource, defaultDestinationFor } from \"../config/paths.js\";\nimport { AuthError, MaesterError, RefNotFoundError } from \"../errors.js\";\nimport { clearWorktree } from \"../git/client.js\";\nimport { type FetchWarning, type FetchedTree, fetchSource } from \"../sources/fetcher.js\";\nimport {\n type StateApplyDetail,\n type StateApplyResult,\n type StateBreakdown,\n type StateWarning,\n applyState,\n} from \"../state/applier.js\";\nimport { filterSetMatches, readProvenanceMarker } from \"./provenance.js\";\nimport { stageDestination } from \"./stage.js\";\n\nexport type SyncStatus = \"added\" | \"updated\" | \"unchanged\" | \"failed\";\n\nexport type SyncOutcome = {\n name: string;\n status: SyncStatus;\n destination: string;\n ref: string | undefined;\n commitSha?: string;\n warnings: FetchWarning[];\n stateBreakdown?: StateBreakdown;\n stateWarnings?: StateWarning[];\n stateDetails?: StateApplyDetail[];\n error?: string;\n};\n\nexport type SyncResult = {\n outcomes: SyncOutcome[];\n failed: number;\n};\n\nexport type SyncOptions = {\n repoRoot: string;\n scope?: readonly string[];\n concurrency?: number;\n env?: NodeJS.ProcessEnv;\n baseDir?: string;\n onProgress?: (event: ProgressEvent) => void;\n};\n\nexport type ProgressEvent =\n | { type: \"start\"; name: string }\n | { type: \"fetched\"; name: string; commitSha: string }\n | { type: \"staged\"; name: string; status: SyncStatus }\n | { type: \"warning\"; name: string; warning: FetchWarning }\n | { type: \"failed\"; name: string; error: string };\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport async function runSync(config: CitadelConfig, options: SyncOptions): Promise<SyncResult> {\n const env = options.env ?? process.env;\n const scope = options.scope?.length ? new Set(options.scope) : undefined;\n const baseDir = options.baseDir ?? config.baseDir;\n\n if (scope) {\n const known = new Set(config.sources.map((s) => s.name));\n for (const name of scope) {\n if (!known.has(name)) {\n throw new MaesterError(\n \"UNKNOWN_SOURCE\",\n `Unknown source '${name}' — not declared in citadel.yaml.`,\n );\n }\n }\n }\n\n const entries = config.sources.filter((s) => !scope || scope.has(s.name));\n const limit = Math.min(\n Math.max(1, options.concurrency ?? DEFAULT_CONCURRENCY),\n entries.length || 1,\n );\n const outcomes: SyncOutcome[] = new Array(entries.length);\n\n await mkdir(resolve(options.repoRoot, CACHE_SUBDIR), { recursive: true });\n\n let cursor = 0;\n const workers: Promise<void>[] = [];\n for (let i = 0; i < limit; i++) {\n workers.push(\n (async () => {\n while (true) {\n const index = cursor++;\n if (index >= entries.length) return;\n const entry = entries[index];\n if (!entry) return;\n outcomes[index] = await processEntry(entry, options, env, baseDir);\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const failed = outcomes.filter((o) => o.status === \"failed\").length;\n return { outcomes, failed };\n}\n\nasync function processEntry(\n source: Source,\n options: SyncOptions,\n env: NodeJS.ProcessEnv,\n baseDir: string | undefined,\n): Promise<SyncOutcome> {\n const cacheDir = cachePathForSource(options.repoRoot, source.name);\n const destination = source.destination\n ? resolve(options.repoRoot, source.destination)\n : defaultDestinationFor(options.repoRoot, source.name, baseDir);\n\n options.onProgress?.({ type: \"start\", name: source.name });\n\n try {\n const auth = resolveAuth(source.auth, env);\n const tokenForUrl = auth.type === \"token\" ? auth.value : undefined;\n const cacheExists = existsSync(cacheDir);\n\n const tree: FetchedTree = await fetchSource(source, {\n cacheDir,\n cacheExists,\n tokenForUrl,\n });\n\n options.onProgress?.({ type: \"fetched\", name: source.name, commitSha: tree.commitSha });\n for (const warning of tree.warnings) {\n options.onProgress?.({ type: \"warning\", name: source.name, warning });\n }\n\n const existingMarker = await readProvenanceMarker(destination);\n const wasUnchanged =\n !!existingMarker &&\n existingMarker.commitSha === tree.commitSha &&\n existingMarker.sourceName === source.name &&\n filterSetMatches(existingMarker.filterSet, tree.filterSet) &&\n existsSync(destination);\n\n if (wasUnchanged) {\n options.onProgress?.({ type: \"staged\", name: source.name, status: \"unchanged\" });\n return {\n name: source.name,\n status: \"unchanged\",\n destination,\n ref: source.ref,\n commitSha: tree.commitSha,\n warnings: tree.warnings,\n };\n }\n\n const stageResult = await stageDestination<StateApplyResult>({\n cacheDir: tree.cacheDir,\n destination,\n marker: {\n sourceName: tree.name,\n sourceUrl: source.url,\n ref: source.ref,\n commitSha: tree.commitSha,\n filterSet: tree.filterSet,\n syncedAt: new Date().toISOString(),\n },\n beforePromote: (stagedDir) => applyState(stagedDir, tree.rules),\n });\n const stateResult = stageResult.beforePromoteResult;\n\n const status: SyncStatus = existingMarker ? \"updated\" : \"added\";\n options.onProgress?.({ type: \"staged\", name: source.name, status });\n return {\n name: source.name,\n status,\n destination,\n ref: source.ref,\n commitSha: tree.commitSha,\n warnings: tree.warnings,\n ...(stateResult\n ? {\n stateBreakdown: stateResult.breakdown,\n stateWarnings: stateResult.warnings,\n stateDetails: stateResult.details,\n }\n : {}),\n };\n } catch (err) {\n const message = errorMessage(err);\n options.onProgress?.({ type: \"failed\", name: source.name, error: message });\n try {\n await clearWorktree(cacheDir);\n } catch {\n /* ignore */\n }\n return {\n name: source.name,\n status: \"failed\",\n destination,\n ref: source.ref,\n warnings: [],\n error: message,\n };\n }\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof AuthError) return err.message;\n if (err instanceof RefNotFoundError) return err.message;\n if (err instanceof MaesterError) return err.message;\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","import { mkdir, mkdtemp, rm } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Source } from \"../../schemas/citadel.js\";\nimport { CACHE_DIR_NAME } from \"../config/paths.js\";\nimport { MaesterError } from \"../errors.js\";\nimport {\n checkoutRef,\n listRemoteRef,\n setSparsePatterns,\n shallowSparseClone,\n} from \"../git/client.js\";\nimport { discoverManifestFromCache } from \"../sources/fetcher.js\";\n\nconst SHA_RE = /^[0-9a-f]{40}$/;\nconst MAESTER_MANIFEST_FILENAME = \"maester.yaml\";\nconst STATUS_TEMP_PREFIX = \".status-\";\n\nexport type ProbeContext = {\n repoRoot: string;\n tokenForUrl: string | undefined;\n};\n\nexport type ManifestProbeResult = {\n filterSet: readonly string[];\n};\n\nexport async function probeCommitSha(source: Source, ctx: ProbeContext): Promise<string> {\n if (source.ref && SHA_RE.test(source.ref)) {\n return source.ref;\n }\n return listRemoteRef({\n url: source.url,\n ref: source.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n}\n\nexport async function probeManifest(\n source: Source,\n ctx: ProbeContext,\n): Promise<ManifestProbeResult> {\n const tempRoot = resolve(ctx.repoRoot, CACHE_DIR_NAME);\n await mkdir(tempRoot, { recursive: true });\n const tempDir = await mkdtemp(resolve(tempRoot, STATUS_TEMP_PREFIX));\n try {\n await shallowSparseClone({\n url: source.url,\n destination: tempDir,\n ref: source.ref,\n ...(ctx.tokenForUrl ? { useTokenInUrl: ctx.tokenForUrl } : {}),\n });\n await setSparsePatterns(tempDir, [MAESTER_MANIFEST_FILENAME]);\n await checkoutRef(tempDir, source.ref);\n const discovery = await discoverManifestFromCache(tempDir);\n if (discovery.mode === \"no-manifest\") {\n throw manifestError(source.name, discovery.reason);\n }\n return { filterSet: discovery.patterns };\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n\nfunction manifestError(name: string, reason: \"absent\" | \"invalid\"): MaesterError {\n if (reason === \"absent\") {\n return new MaesterError(\n \"MAESTER_MANIFEST_MISSING\",\n `source '${name}' does not publish a maester.yaml manifest at the configured ref.`,\n );\n }\n return new MaesterError(\n \"MAESTER_MANIFEST_INVALID\",\n `source '${name}' publishes a maester.yaml that failed schema validation.`,\n );\n}\n","import { resolve } from \"node:path\";\nimport type { CitadelConfig, Source } from \"../../schemas/citadel.js\";\nimport { resolveAuth } from \"../auth/resolver.js\";\nimport { defaultDestinationFor } from \"../config/paths.js\";\nimport { AuthError, MaesterError, RefNotFoundError } from \"../errors.js\";\nimport { readProvenanceMarker } from \"../sync/provenance.js\";\nimport { type ProbeContext, probeCommitSha, probeManifest } from \"./probe.js\";\n\nexport type StatusVerdict = \"up-to-date\" | \"behind\" | \"failed\";\n\nexport type BehindReason = \"never-synced\" | \"remote-ref-advanced\" | \"manifest-changed\";\n\nexport type StatusOutcome =\n | { name: string; verdict: \"up-to-date\"; commitSha: string }\n | {\n name: string;\n verdict: \"behind\";\n reasons: readonly BehindReason[];\n commitSha?: string;\n resolvedSha?: string;\n }\n | { name: string; verdict: \"failed\"; error: string };\n\nexport type StatusCounts = {\n upToDate: number;\n behind: number;\n failed: number;\n};\n\nexport type StatusResult = {\n outcomes: StatusOutcome[];\n counts: StatusCounts;\n};\n\nexport type StatusOptions = {\n repoRoot: string;\n scope?: readonly string[];\n concurrency?: number;\n env?: NodeJS.ProcessEnv;\n baseDir?: string;\n};\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport async function runStatus(\n config: CitadelConfig,\n options: StatusOptions,\n): Promise<StatusResult> {\n const env = options.env ?? process.env;\n const scope = options.scope?.length ? new Set(options.scope) : undefined;\n const baseDir = options.baseDir ?? config.baseDir;\n\n if (scope) {\n const known = new Set(config.sources.map((s) => s.name));\n for (const name of scope) {\n if (!known.has(name)) {\n throw new MaesterError(\n \"UNKNOWN_SOURCE\",\n `Unknown source '${name}' — not declared in citadel.yaml.`,\n );\n }\n }\n }\n\n const entries = config.sources.filter((s) => !scope || scope.has(s.name));\n if (entries.length === 0) {\n return { outcomes: [], counts: { upToDate: 0, behind: 0, failed: 0 } };\n }\n\n const limit = Math.min(Math.max(1, options.concurrency ?? DEFAULT_CONCURRENCY), entries.length);\n const outcomes: StatusOutcome[] = new Array(entries.length);\n\n let cursor = 0;\n const workers: Promise<void>[] = [];\n for (let i = 0; i < limit; i++) {\n workers.push(\n (async () => {\n while (true) {\n const index = cursor++;\n if (index >= entries.length) return;\n const entry = entries[index];\n if (!entry) return;\n outcomes[index] = await checkSource(entry, options, env, baseDir);\n }\n })(),\n );\n }\n await Promise.all(workers);\n\n const counts: StatusCounts = { upToDate: 0, behind: 0, failed: 0 };\n for (const outcome of outcomes) {\n if (outcome.verdict === \"up-to-date\") counts.upToDate++;\n else if (outcome.verdict === \"behind\") counts.behind++;\n else counts.failed++;\n }\n return { outcomes, counts };\n}\n\nasync function checkSource(\n source: Source,\n options: StatusOptions,\n env: NodeJS.ProcessEnv,\n baseDir: string | undefined,\n): Promise<StatusOutcome> {\n const destination = source.destination\n ? resolve(options.repoRoot, source.destination)\n : defaultDestinationFor(options.repoRoot, source.name, baseDir);\n\n const marker = await readProvenanceMarker(destination);\n if (!marker) {\n return {\n name: source.name,\n verdict: \"behind\",\n reasons: [\"never-synced\"],\n };\n }\n\n try {\n const auth = resolveAuth(source.auth, env);\n const tokenForUrl = auth.type === \"token\" ? auth.value : undefined;\n const probeCtx: ProbeContext = { repoRoot: options.repoRoot, tokenForUrl };\n\n const resolvedSha = await probeCommitSha(source, probeCtx);\n\n const reasons: BehindReason[] = [];\n if (resolvedSha !== marker.commitSha) {\n reasons.push(\"remote-ref-advanced\");\n }\n\n const isManifestDriven = !source.includes || source.includes.length === 0;\n if (isManifestDriven) {\n const { filterSet } = await probeManifest(source, probeCtx);\n if (!filterSetsEqual(filterSet, marker.filterSet)) {\n reasons.push(\"manifest-changed\");\n }\n }\n\n if (reasons.length === 0) {\n return {\n name: source.name,\n verdict: \"up-to-date\",\n commitSha: resolvedSha,\n };\n }\n return {\n name: source.name,\n verdict: \"behind\",\n reasons,\n commitSha: marker.commitSha,\n resolvedSha,\n };\n } catch (err) {\n return {\n name: source.name,\n verdict: \"failed\",\n error: errorMessage(err),\n };\n }\n}\n\nexport function filterSetsEqual(a: readonly string[], b: readonly string[]): boolean {\n const left = [...new Set(a)].sort();\n const right = [...new Set(b)].sort();\n if (left.length !== right.length) return false;\n for (let i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) return false;\n }\n return true;\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof AuthError) return err.message;\n if (err instanceof RefNotFoundError) return err.message;\n if (err instanceof MaesterError) return err.message;\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","const BEGIN_MARKER_RE = /<!--\\s*maester:skill:begin(?:\\s+v=([^\\s>]+))?\\s*-->/;\nconst END_MARKER_LITERAL = \"<!-- maester:skill:end -->\";\n\nexport type MarkdownRegion = {\n /** Bytes before the begin marker (preserved on rewrite). */\n prefix: string;\n /** Bytes after the end marker (preserved on rewrite). */\n suffix: string;\n /** Version extracted from the begin marker, if present. */\n version: string | undefined;\n};\n\n/**\n * Locate the maester-managed region in a Markdown file. Returns `undefined` when\n * no region is present (caller should treat the entire file as user content).\n */\nexport function extractMarkdownRegion(text: string): MarkdownRegion | undefined {\n const beginMatch = BEGIN_MARKER_RE.exec(text);\n if (!beginMatch) return undefined;\n const beginIdx = beginMatch.index;\n const afterBegin = beginIdx + beginMatch[0].length;\n const endIdx = text.indexOf(END_MARKER_LITERAL, afterBegin);\n if (endIdx < 0) return undefined;\n const suffixStart = endIdx + END_MARKER_LITERAL.length;\n return {\n prefix: text.slice(0, beginIdx),\n suffix: text.slice(suffixStart),\n version: beginMatch[1],\n };\n}\n\n/**\n * Build a Markdown file containing the maester managed region. When `existing`\n * is provided, content before the begin marker and after the end marker is\n * preserved exactly. When `existing` is absent, only the managed region is\n * emitted (callers may wrap with a preamble of their choice).\n */\nexport function replaceMarkdownRegion(\n existing: string | undefined,\n body: string,\n version: string,\n preambleWhenAbsent = \"\",\n): string {\n const region = renderManagedRegion(body, version);\n if (existing === undefined) {\n if (preambleWhenAbsent.length === 0) {\n return `${region}\\n`;\n }\n return `${preambleWhenAbsent}${preambleWhenAbsent.endsWith(\"\\n\") ? \"\" : \"\\n\"}${region}\\n`;\n }\n const found = extractMarkdownRegion(existing);\n if (!found) {\n const sep = existing.length > 0 && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n return `${existing}${sep}${region}\\n`;\n }\n return `${found.prefix}${region}${found.suffix}`;\n}\n\nfunction renderManagedRegion(body: string, version: string): string {\n const inner = body.endsWith(\"\\n\") ? body.slice(0, -1) : body;\n return `<!-- maester:skill:begin v=${version} -->\\n${inner}\\n${END_MARKER_LITERAL}`;\n}\n\nexport type ClaudeSettings = Record<string, unknown>;\n\n/**\n * Parse a `.claude/settings.json` document, replace its top-level `maester`\n * key with the supplied object, and re-serialize. Every other top-level key\n * is preserved; key order is preserved by treating the `maester` key as the\n * last entry when not previously present.\n */\nexport function replaceJsonMaesterKey(\n existingText: string | undefined,\n maesterBlock: Record<string, unknown>,\n): string {\n const parsed: ClaudeSettings =\n existingText && existingText.trim().length > 0\n ? (JSON.parse(existingText) as ClaudeSettings)\n : {};\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"Expected .claude/settings.json to be a JSON object at the top level.\");\n }\n // Rebuild with the maester key at the same position when present, or appended.\n const rebuilt: Record<string, unknown> = {};\n let placed = false;\n for (const [key, value] of Object.entries(parsed)) {\n if (key === \"maester\") {\n rebuilt[key] = maesterBlock;\n placed = true;\n } else {\n rebuilt[key] = value;\n }\n }\n if (!placed) {\n rebuilt.maester = maesterBlock;\n }\n return `${JSON.stringify(rebuilt, null, 2)}\\n`;\n}\n\n/**\n * Read the maester block from a `.claude/settings.json` document if any.\n */\nexport function readJsonMaesterKey(\n existingText: string | undefined,\n): Record<string, unknown> | undefined {\n if (!existingText || existingText.trim().length === 0) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(existingText);\n } catch {\n return undefined;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return undefined;\n const block = (parsed as Record<string, unknown>).maester;\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) return undefined;\n return block as Record<string, unknown>;\n}\n","## Citadel awareness\n\nThis repository is a **citadel** — it pulls curated documentation from multiple\nremote sources into a single tree, managed by the `maester` CLI.\n\n- The citadel's aggregated content lives under `{{baseDir}}/` at the repository\n root. Each direct subdirectory of `{{baseDir}}/` corresponds to one remote\n source declared in `citadel.yaml` (`{{baseDir}}/<source-name>/...`).\n- The configuration that declares those sources is in `citadel.yaml` at the\n repository root. It names each source, the git remote it pulls from, and the\n ref it pins to.\n- When answering questions about anything the citadel covers, prefer citing\n files under `{{baseDir}}/` over external knowledge. Cite the file path\n relative to the repository root so the user can open it.\n- Each materialized file may carry a `state` value in its frontmatter or\n inline (see \"State awareness\" below). Surface that state alongside any\n citation so the user knows whether the source is canonical or draft.\n","## Freshness awareness\n\nCitadel content can drift out of date when remote sources advance after the\nlast sync. The Grand Maester is **auto-sync directed**: when the citadel is\nbehind, refresh it before reading rather than relying on stale content.\n\n**Auto-sync policy**\n\nWhen you discover that the citadel is behind — either from the Claude Code\npre-read hook's `additionalContext` message, or from a manual run of\n`npx maester status` — follow these steps without prompting the user:\n\n1. Run `npx maester sync` to refresh every configured source.\n - Exits 0 on success.\n - Exits non-zero if any source failed (missing auth env var, ref typo,\n network error). Report the failure to the user and proceed cautiously.\n2. **Invalidate the pre-read hook's debounce cache** so the next read\n observes fresh state instead of the stale verdict captured before the\n sync:\n ```\n rm -f .maester/.skill-cache.json\n ```\n3. Proceed with the original read of the citadel file.\n\nYou do not need to ask the user before syncing. `maester sync` is read-only\nagainst the remote sources it pulls from; it only materializes content the\n`citadel.yaml` already declared. The same sync the user would run manually.\n\n**Don't loop on failures.** If `maester sync` fails (or the hook reports a\n`failed` verdict from `maester status`), do **not** retry sync repeatedly.\nSurface the failure to the user, proceed with the read, and flag that cited\ncontent may be stale.\n\n**Avoid redundant syncs within a session.** Once you have synced and\ninvalidated the cache, ignore any further \"citadel is behind\" messages that\narrive before you have done another citadel read — they are cached signals\ncaptured before your sync completed.\n\n**Manual status check**\n\n```\nnpx maester status\n```\n\nExit codes:\n\n- **`0`** — every source is up to date.\n- **`1`** — at least one source is behind (remote advanced, manifest\n changed, or never-synced). Run the auto-sync policy above.\n- **`2`** — the status check itself failed. Surface to the user; proceed\n with a caveat that staleness cannot be verified.\n\nFor machine-readable output, pass `--json` and parse the NDJSON stream on\nstdout. The final line contains `{ \"type\": \"summary\", \"upToDate\": N,\n\"behind\": N, \"failed\": N }`.\n\n**On Claude Code specifically**, a `PreToolUse` hook installed by\n`maester skill install` runs the status check automatically before any\n`Read`, `Glob`, or `Grep` targeting a path under `{{baseDir}}/`. The\nhook debounces (default 300s, override with `MAESTER_SKILL_STATUS_TTL`) so\nthe check does not run more than once per session for routine reads.\n","## State awareness (canon vs draft)\n\nEvery citadel file may declare a publication state of `canon` (authoritative)\nor `draft` (work-in-progress). The state lives **inline** in the file using\nthe format's native convention:\n\n- **Markdown / MDX (`.md`, `.mdx`)** — `state` field inside YAML frontmatter\n at the top of the file:\n ```\n ---\n state: canon\n ---\n ```\n- **HTML (`.html`, `.htm`)** — first-line HTML comment:\n `<!-- state: canon -->`\n- **YAML / JSON (`.yaml`, `.yml`, `.json`)** — a top-level `state` key.\n- **Plain text (`.txt`)** — `state: canon` as the very first line.\n\nFiles without inline state default to `draft`.\n\n**Policy when answering from the citadel:**\n\n1. **Prefer `canon` files** as the authoritative source of truth. When a\n `canon` file answers the question, cite it and stop there.\n2. **`draft` files are informational only.** Cite them when no `canon`\n alternative exists, but mark the citation explicitly: \"(draft — work in\n progress)\" alongside the file path so the user knows the source is not yet\n stable.\n3. **Never mix the two without labeling.** If you draw from both canon and\n draft files in one answer, separate the two and tell the user which fact\n came from which kind of source.\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst SKILL_FRONTMATTER_DESCRIPTION =\n \"Citadel-aware guidance for reading aggregated documentation under the citadel base directory. Prefers canon files over draft and runs maester status before substantial citadel reads.\";\n\nexport function renderClaudeSkillBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester (Claude Code skill)\",\n \"\",\n \"Use this guidance whenever you read files under the citadel base directory\",\n `(\\`${opts.baseDir}/\\`) in this repository.`,\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function renderClaudeSkillFile(body: string): string {\n return [\n \"---\",\n \"name: grand-maester\",\n `description: ${SKILL_FRONTMATTER_DESCRIPTION}`,\n \"---\",\n \"\",\n body,\n ].join(\"\\n\");\n}\n\nexport type ClaudeMaesterBlock = {\n version: string;\n hooks: {\n PreToolUse: Array<{\n matcher: string;\n hooks: Array<{ type: \"command\"; command: string }>;\n }>;\n };\n};\n\nexport function buildClaudeMaesterBlock(version: string): ClaudeMaesterBlock {\n return {\n version,\n hooks: {\n PreToolUse: [\n {\n matcher: \"Read|Glob|Grep\",\n hooks: [{ type: \"command\", command: \"npx maester skill runtime preread\" }],\n },\n ],\n },\n };\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport {\n extractMarkdownRegion,\n readJsonMaesterKey,\n replaceJsonMaesterKey,\n replaceMarkdownRegion,\n} from \"../managed-region.js\";\nimport {\n buildClaudeMaesterBlock,\n renderClaudeSkillBody,\n renderClaudeSkillFile,\n} from \"../templates/shells/claude-code.js\";\nimport type { SkillAction, SkillTarget, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nconst SKILL_MD_PATH = \".claude/skills/grand-maester/SKILL.md\";\nconst SETTINGS_JSON_PATH = \".claude/settings.json\";\n\nexport const claudeCodeTarget: SkillTarget = {\n id: \"claude-code\",\n label: \"Claude Code\",\n artifactPaths: [SKILL_MD_PATH, SETTINGS_JSON_PATH],\n writerKey: \"claude-code\",\n write: writeClaudeCode,\n readInstalledVersion,\n};\n\nasync function writeClaudeCode(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const skillResult = await writeSkillMd(input);\n const settingsResult = await writeSettingsJson(input);\n const action = combineActions(skillResult.action, settingsResult.action);\n return {\n action,\n installedVersion: input.skillVersion,\n };\n}\n\nasync function writeSkillMd(input: SkillWriteInput): Promise<{ action: SkillAction }> {\n const filePath = path.join(input.repoRoot, SKILL_MD_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousVersion = existing ? extractMarkdownRegion(existing)?.version : undefined;\n const body = renderClaudeSkillBody({ baseDir: input.citadelBaseDir });\n // Wrap the body in the managed region inside the Claude skill file shape.\n const managedRegion = replaceMarkdownRegion(undefined, body, input.skillVersion).trimEnd();\n const fileContent = existing\n ? replaceMarkdownRegion(existing, body, input.skillVersion)\n : `${renderClaudeSkillFile(managedRegion)}\\n`;\n if (existing === fileContent) return { action: \"unchanged\" };\n await fs.writeFile(filePath, fileContent, \"utf8\");\n if (existing === undefined) return { action: \"installed\" };\n if (previousVersion === undefined) return { action: \"installed\" };\n return { action: \"upgraded\" };\n}\n\nasync function writeSettingsJson(input: SkillWriteInput): Promise<{ action: SkillAction }> {\n const filePath = path.join(input.repoRoot, SETTINGS_JSON_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousBlock = readJsonMaesterKey(existing);\n const previousVersion =\n typeof previousBlock?.version === \"string\" ? previousBlock.version : undefined;\n const block = buildClaudeMaesterBlock(input.skillVersion);\n const next = replaceJsonMaesterKey(existing, block as unknown as Record<string, unknown>);\n if (existing === next) return { action: \"unchanged\" };\n await fs.writeFile(filePath, next, \"utf8\");\n if (existing === undefined || previousBlock === undefined) return { action: \"installed\" };\n if (previousVersion !== input.skillVersion) return { action: \"upgraded\" };\n return { action: \"upgraded\" };\n}\n\nasync function readInstalledVersion(repoRoot: string): Promise<string | undefined> {\n // Source of truth is the SKILL.md begin marker. The settings.json key is the\n // hook wiring; if SKILL.md is absent the skill is not installed even if\n // settings.json has lingering hook config.\n const skillPath = path.join(repoRoot, SKILL_MD_PATH);\n const text = await readTextOrUndefined(skillPath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction combineActions(a: SkillAction, b: SkillAction): SkillAction {\n if (a === \"failed\" || b === \"failed\") return \"failed\";\n if (a === \"installed\" || b === \"installed\") return \"installed\";\n if (a === \"upgraded\" || b === \"upgraded\") return \"upgraded\";\n return \"unchanged\";\n}\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst PREAMBLE = `# AGENTS.md\n\nThis file contains agent instructions for working in this repository. The\nsection between the maester managed-region markers is generated by\n\\`maester skill install\\` and refreshed by \\`maester skill upgrade\\`. Anything\nyou write outside that region is preserved across upgrades.\n`;\n\nexport function renderAgentsMdBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester guidance\",\n \"\",\n \"This repository is set up to aggregate documentation from remote sources\",\n \"into a local citadel. When you reason about citadel content, follow the\",\n \"guidance below.\",\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function agentsMdPreamble(): string {\n return PREAMBLE;\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { extractMarkdownRegion, replaceMarkdownRegion } from \"../managed-region.js\";\nimport { agentsMdPreamble, renderAgentsMdBody } from \"../templates/shells/agents-md.js\";\nimport type { SkillAction, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nexport const AGENTS_MD_ARTIFACT_PATH = \"AGENTS.md\";\n\nexport async function writeAgentsMd(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const filePath = path.join(input.repoRoot, AGENTS_MD_ARTIFACT_PATH);\n const existingText = await readTextOrUndefined(filePath);\n const previousVersion = existingText ? extractMarkdownRegion(existingText)?.version : undefined;\n const body = renderAgentsMdBody({ baseDir: input.citadelBaseDir });\n const next = replaceMarkdownRegion(existingText, body, input.skillVersion, agentsMdPreamble());\n const action = decideAction(existingText, previousVersion, input.skillVersion, next);\n if (action === \"unchanged\") {\n return previousVersion !== undefined\n ? { action, installedVersion: previousVersion }\n : { action };\n }\n await fs.writeFile(filePath, next, \"utf8\");\n return { action, installedVersion: input.skillVersion };\n}\n\nexport async function readAgentsMdInstalledVersion(repoRoot: string): Promise<string | undefined> {\n const filePath = path.join(repoRoot, AGENTS_MD_ARTIFACT_PATH);\n const text = await readTextOrUndefined(filePath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction decideAction(\n existing: string | undefined,\n previousVersion: string | undefined,\n newVersion: string,\n newContent: string,\n): SkillAction {\n if (existing === undefined) return \"installed\";\n if (existing === newContent) return \"unchanged\";\n if (previousVersion === undefined) return \"installed\";\n if (previousVersion !== newVersion) return \"upgraded\";\n return \"upgraded\";\n}\n","import type { SkillTarget } from \"../types.js\";\nimport {\n AGENTS_MD_ARTIFACT_PATH,\n readAgentsMdInstalledVersion,\n writeAgentsMd,\n} from \"./agents-md-writer.js\";\n\nexport const codexTarget: SkillTarget = {\n id: \"codex\",\n label: \"Codex CLI\",\n artifactPaths: [AGENTS_MD_ARTIFACT_PATH],\n writerKey: \"agents-md\",\n write: writeAgentsMd,\n readInstalledVersion: readAgentsMdInstalledVersion,\n};\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport FRESHNESS_AWARENESS from \"../content/freshness-awareness.md\";\nimport STATE_AWARENESS from \"../content/state-awareness.md\";\n\nconst DESCRIPTION =\n \"Citadel-aware guidance for reading aggregated documentation under the citadel base directory.\";\n\nexport function renderCursorRuleBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester (Cursor rule)\",\n \"\",\n \"This rule applies when the user asks about content under the citadel\",\n `base directory (\\`${opts.baseDir}/\\`).`,\n \"\",\n interpolate(CITADEL_AWARENESS, opts),\n \"\",\n interpolate(STATE_AWARENESS, opts),\n \"\",\n interpolate(FRESHNESS_AWARENESS, opts),\n ].join(\"\\n\");\n}\n\nexport function renderCursorRuleFile(body: string, opts: { baseDir: string }): string {\n return [\n \"---\",\n `description: ${DESCRIPTION}`,\n `globs: [\"${opts.baseDir}/**/*\"]`,\n \"alwaysApply: false\",\n \"---\",\n \"\",\n body,\n ].join(\"\\n\");\n}\n\nfunction interpolate(template: string, opts: { baseDir: string }): string {\n return template.replace(/\\{\\{baseDir\\}\\}/g, opts.baseDir);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { extractMarkdownRegion, replaceMarkdownRegion } from \"../managed-region.js\";\nimport { renderCursorRuleBody, renderCursorRuleFile } from \"../templates/shells/cursor.js\";\nimport type { SkillAction, SkillTarget, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nconst CURSOR_RULE_PATH = \".cursor/rules/grand-maester.mdc\";\n\nexport const cursorTarget: SkillTarget = {\n id: \"cursor\",\n label: \"Cursor\",\n artifactPaths: [CURSOR_RULE_PATH],\n writerKey: \"cursor\",\n write: writeCursor,\n readInstalledVersion,\n};\n\nasync function writeCursor(input: SkillWriteInput): Promise<SkillWriteOutcome> {\n const filePath = path.join(input.repoRoot, CURSOR_RULE_PATH);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existing = await readTextOrUndefined(filePath);\n const previousVersion = existing ? extractMarkdownRegion(existing)?.version : undefined;\n const body = renderCursorRuleBody({ baseDir: input.citadelBaseDir });\n const next = existing\n ? replaceMarkdownRegion(existing, body, input.skillVersion)\n : `${renderCursorRuleFile(\n replaceMarkdownRegion(undefined, body, input.skillVersion).trimEnd(),\n {\n baseDir: input.citadelBaseDir,\n },\n )}\\n`;\n const action = decideAction(existing, previousVersion, input.skillVersion, next);\n if (action === \"unchanged\") {\n return previousVersion !== undefined\n ? { action, installedVersion: previousVersion }\n : { action };\n }\n await fs.writeFile(filePath, next, \"utf8\");\n return { action, installedVersion: input.skillVersion };\n}\n\nasync function readInstalledVersion(repoRoot: string): Promise<string | undefined> {\n const filePath = path.join(repoRoot, CURSOR_RULE_PATH);\n const text = await readTextOrUndefined(filePath);\n if (!text) return undefined;\n return extractMarkdownRegion(text)?.version;\n}\n\nasync function readTextOrUndefined(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw err;\n }\n}\n\nfunction decideAction(\n existing: string | undefined,\n previousVersion: string | undefined,\n newVersion: string,\n newContent: string,\n): SkillAction {\n if (existing === undefined) return \"installed\";\n if (existing === newContent) return \"unchanged\";\n if (previousVersion === undefined) return \"installed\";\n if (previousVersion !== newVersion) return \"upgraded\";\n return \"upgraded\";\n}\n","import type { SkillTarget } from \"../types.js\";\nimport {\n AGENTS_MD_ARTIFACT_PATH,\n readAgentsMdInstalledVersion,\n writeAgentsMd,\n} from \"./agents-md-writer.js\";\n\nexport const genericTarget: SkillTarget = {\n id: \"agents-md\",\n label: \"Generic AGENTS.md\",\n artifactPaths: [AGENTS_MD_ARTIFACT_PATH],\n writerKey: \"agents-md\",\n write: writeAgentsMd,\n readInstalledVersion: readAgentsMdInstalledVersion,\n};\n","import type { SkillTarget, SkillTargetId } from \"../types.js\";\nimport { claudeCodeTarget } from \"./claude-code.js\";\nimport { codexTarget } from \"./codex.js\";\nimport { cursorTarget } from \"./cursor.js\";\nimport { genericTarget } from \"./generic.js\";\n\nconst REGISTRY: readonly SkillTarget[] = [\n claudeCodeTarget,\n codexTarget,\n cursorTarget,\n genericTarget,\n];\n\nexport function listSkillTargets(): readonly SkillTarget[] {\n return REGISTRY;\n}\n\nexport function getTarget(id: SkillTargetId): SkillTarget {\n const found = REGISTRY.find((t) => t.id === id);\n if (!found) {\n throw new Error(\n `Unknown skill target '${id}'. Supported: ${REGISTRY.map((t) => t.id).join(\", \")}`,\n );\n }\n return found;\n}\n\n/**\n * Group a selection of targets by their writer so multiple ids that share an\n * output (e.g. `codex` + `agents-md` both write `AGENTS.md`) trigger a single\n * write call. The returned tuples preserve every id label for reporting.\n */\nexport type DedupedTargetGroup = {\n writerKey: string;\n primary: SkillTarget;\n ids: SkillTargetId[];\n labels: string[];\n artifactPaths: readonly string[];\n};\n\nexport function dedupeTargets(targets: readonly SkillTarget[]): DedupedTargetGroup[] {\n const groups = new Map<string, DedupedTargetGroup>();\n for (const target of targets) {\n const existing = groups.get(target.writerKey);\n if (existing) {\n existing.ids.push(target.id);\n existing.labels.push(target.label);\n } else {\n groups.set(target.writerKey, {\n writerKey: target.writerKey,\n primary: target,\n ids: [target.id],\n labels: [target.label],\n artifactPaths: target.artifactPaths,\n });\n }\n }\n return [...groups.values()];\n}\n","{\n \"name\": \"baller-maester\",\n \"version\": \"0.3.0\",\n \"description\": \"A Node CLI for aggregating documentation from many sources into one central knowledge home for developers and AI agents.\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"bin\": {\n \"maester\": \"bin/maester.mjs\"\n },\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"files\": [\"bin\", \"dist\", \"README.md\", \"CHANGELOG.md\", \"LICENSE\"],\n \"sideEffects\": false,\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"format\": \"biome format --write .\",\n \"prepare\": \"simple-git-hooks\",\n \"prepublishOnly\": \"pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build\"\n },\n \"simple-git-hooks\": {\n \"pre-commit\": \"pnpm exec biome check --staged --no-errors-on-unmatched && pnpm exec tsc --noEmit\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\"@biomejs/biome\", \"esbuild\", \"simple-git-hooks\"]\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^0.9.1\",\n \"boxen\": \"^8.0.1\",\n \"chalk\": \"^5.4.1\",\n \"cli-progress\": \"^3.12.0\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"consola\": \"^3.4.0\",\n \"figlet\": \"^1.8.0\",\n \"globby\": \"^14.1.0\",\n \"gray-matter\": \"^4.0.3\",\n \"is-unicode-supported\": \"^2.1.0\",\n \"pathe\": \"^2.0.2\",\n \"picomatch\": \"^4.0.4\",\n \"simple-git\": \"^3.27.0\",\n \"supports-color\": \"^10.0.0\",\n \"terminal-link\": \"^4.0.0\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^1.9.4\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/figlet\": \"^1.7.0\",\n \"@types/node\": \"^22.10.7\",\n \"@types/picomatch\": \"^4.0.3\",\n \"simple-git-hooks\": \"^2.11.1\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^2.1.8\"\n },\n \"keywords\": [\"cli\", \"documentation\", \"aggregation\", \"git\", \"knowledge\", \"monorepo\", \"ai-context\"],\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/gballer77/maester.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/gballer77/maester/issues\"\n },\n \"homepage\": \"https://github.com/gballer77/maester#readme\"\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\n\nexport const PACKAGE_NAME = pkg.name;\nexport const PACKAGE_VERSION = pkg.version;\n","import { PACKAGE_VERSION } from \"../../package-meta.js\";\n\nexport const SKILL_VERSION = PACKAGE_VERSION;\n","import { dedupeTargets, getTarget, listSkillTargets } from \"./targets/index.js\";\nimport type {\n SkillInstallOutcome,\n SkillInstallResult,\n SkillStatusOutcome,\n SkillStatusResult,\n SkillTargetId,\n} from \"./types.js\";\nimport { SKILL_VERSION } from \"./version.js\";\n\nexport type RunSkillInstallOpts = {\n targets: readonly SkillTargetId[];\n mode: \"install\" | \"add-target\";\n citadelBaseDir: string;\n};\n\nexport async function runSkillInstall(\n repoRoot: string,\n opts: RunSkillInstallOpts,\n): Promise<SkillInstallResult> {\n if (opts.targets.length === 0) {\n throw new Error(\"At least one target id must be supplied.\");\n }\n // Validate every requested id before any write.\n const targets = opts.targets.map((id) => getTarget(id));\n const groups = dedupeTargets(targets);\n const outcomes: SkillInstallOutcome[] = [];\n for (const group of groups) {\n const writeOutcome = await safeWrite(group.primary.write, {\n repoRoot,\n skillVersion: SKILL_VERSION,\n citadelBaseDir: opts.citadelBaseDir,\n });\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action: writeOutcome.action,\n ...(writeOutcome.installedVersion !== undefined\n ? { installedVersion: writeOutcome.installedVersion }\n : {}),\n ...(writeOutcome.error !== undefined ? { error: writeOutcome.error } : {}),\n });\n }\n }\n return { outcomes, counts: countOutcomes(outcomes) };\n}\n\nexport type RunSkillUpgradeOpts = {\n check?: boolean;\n citadelBaseDir: string;\n};\n\nexport async function runSkillUpgrade(\n repoRoot: string,\n opts: RunSkillUpgradeOpts,\n): Promise<SkillInstallResult> {\n const installedGroups = await findInstalledGroups(repoRoot);\n if (installedGroups.length === 0) {\n return { outcomes: [], counts: countOutcomes([]) };\n }\n const outcomes: SkillInstallOutcome[] = [];\n for (const group of installedGroups) {\n const installedVersion = await group.primary.readInstalledVersion(repoRoot);\n const isOutdated = installedVersion !== SKILL_VERSION;\n if (opts.check === true) {\n const action = isOutdated ? \"upgraded\" : \"unchanged\";\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action,\n ...(installedVersion !== undefined ? { installedVersion } : {}),\n });\n }\n continue;\n }\n const writeOutcome = await safeWrite(group.primary.write, {\n repoRoot,\n skillVersion: SKILL_VERSION,\n citadelBaseDir: opts.citadelBaseDir,\n });\n for (let i = 0; i < group.ids.length; i += 1) {\n const idValue = group.ids[i];\n const labelValue = group.labels[i];\n if (idValue === undefined || labelValue === undefined) continue;\n outcomes.push({\n id: idValue,\n label: labelValue,\n artifactPaths: group.artifactPaths,\n action: writeOutcome.action,\n ...(writeOutcome.installedVersion !== undefined\n ? { installedVersion: writeOutcome.installedVersion }\n : {}),\n ...(writeOutcome.error !== undefined ? { error: writeOutcome.error } : {}),\n });\n }\n }\n return { outcomes, counts: countOutcomes(outcomes) };\n}\n\nexport async function runSkillStatus(repoRoot: string): Promise<SkillStatusResult> {\n const outcomes: SkillStatusOutcome[] = [];\n let upToDate = 0;\n let outdated = 0;\n let notInstalled = 0;\n for (const target of listSkillTargets()) {\n const installedVersion = await target.readInstalledVersion(repoRoot);\n let state: SkillStatusOutcome[\"state\"];\n if (installedVersion === undefined) {\n state = \"not-installed\";\n notInstalled += 1;\n } else if (installedVersion === SKILL_VERSION) {\n state = \"up-to-date\";\n upToDate += 1;\n } else {\n state = \"outdated\";\n outdated += 1;\n }\n outcomes.push({\n id: target.id,\n label: target.label,\n artifactPaths: target.artifactPaths,\n state,\n ...(installedVersion !== undefined ? { installedVersion } : {}),\n currentVersion: SKILL_VERSION,\n });\n }\n return {\n outcomes,\n counts: { upToDate, outdated, notInstalled },\n };\n}\n\nexport { listSkillTargets } from \"./targets/index.js\";\nexport type {\n SkillInstallOutcome,\n SkillInstallResult,\n SkillStatusOutcome,\n SkillStatusResult,\n SkillTargetId,\n} from \"./types.js\";\n\nasync function safeWrite(\n write: ReturnType<typeof getTarget>[\"write\"],\n input: { repoRoot: string; skillVersion: string; citadelBaseDir: string },\n): Promise<{ action: SkillInstallOutcome[\"action\"]; installedVersion?: string; error?: string }> {\n try {\n return await write(input);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return { action: \"failed\", error: message };\n }\n}\n\nasync function findInstalledGroups(repoRoot: string): Promise<ReturnType<typeof dedupeTargets>> {\n const targets = listSkillTargets();\n const installed = [];\n for (const target of targets) {\n const installedVersion = await target.readInstalledVersion(repoRoot);\n if (installedVersion !== undefined) installed.push(target);\n }\n return dedupeTargets(installed);\n}\n\nfunction countOutcomes(outcomes: readonly SkillInstallOutcome[]): SkillInstallResult[\"counts\"] {\n let installed = 0;\n let upgraded = 0;\n let unchanged = 0;\n let failed = 0;\n for (const o of outcomes) {\n if (o.action === \"installed\") installed += 1;\n else if (o.action === \"upgraded\") upgraded += 1;\n else if (o.action === \"unchanged\") unchanged += 1;\n else if (o.action === \"failed\") failed += 1;\n }\n return { installed, upgraded, unchanged, failed };\n}\n"]}