baller-maester 0.3.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/state/schema.ts","../../src/schemas/citadel.ts","../../src/core/config/paths.ts","../../src/core/errors.ts","../../src/ui/components/banner.ts","../../src/ui/prompts.ts","../../src/ui/theme/detect.ts","../../src/ui/theme/glyphs.ts","../../src/ui/theme/tokens.ts","../../src/ui/theme/resolver.ts","../../src/ui/theme/index.ts","../../src/ui/width.ts","../../src/core/config/writer.ts","../../src/core/repo/gitignore.ts","../../src/core/repo/package-json.ts","../../src/core/init/finalize.ts","../../src/core/init/validators.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","../../src/cli/commands/init.ts","../../src/core/publish/finalize.ts","../../src/core/publish/validators.ts","../../src/cli/commands/publish.ts","../../src/schemas/maester.ts","../../src/core/config/loader.ts","../../src/core/auth/resolver.ts","../../src/core/sync/provenance.ts","../../src/core/git/client.ts","../../src/core/sources/fetcher.ts","../../src/core/status/probe.ts","../../src/core/status/runner.ts","../../src/core/skill/runtime.ts","../../src/cli/commands/skill.ts","../../src/ui/logger.ts","../../src/cli/commands/status.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/stage.ts","../../src/core/sync/runner.ts","../../src/cli/commands/sync.ts","../../src/core/repo/root.ts","../../src/cli/context.ts","../../src/cli/menu.ts","../../src/cli/main.ts"],"names":["z","resolve","result","text","path","existsSync","writeFile","readFile","fs","interpolate","readTextOrUndefined","readInstalledVersion","decideAction","group","write","tags","entries","trimmed","execFileCb","entry","parseDocument","walk","MAESTER_MANIFEST_FILENAME","mkdir","manifestError","rm","EXIT_OK","EXIT_FAILED","parse","splitFirstLine","readdir","marker","DEFAULT_CONCURRENCY","errorMessage","buildJsonOutcome","renderHumanSummary","shortSha"],"mappings":"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","file":"main.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 { 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","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 type { Theming } from \"../theme/index.js\";\n\nconst FULL = `████████████████████████████████████████████████████████████████████████████████████████████████████\n███████████████████████████████████████████▅▄▃▂▁▁▁▂▂▁▁▃▃▅▇██████████████████████████████████████████\n████████████████████████████████████████▆▅▅▄▂ ▁▂▄████████████████████████████████████████\n██████████████████████████████████████▅▄▆▄▅▂▂▁ ▂▇█████████████████████████████████████\n████████████████████████████████████▆▄▇█▆▆▂▂▃▃▁ ▁ ▁▄████████████████████████████████████\n███████████████████████████████████▅▅████▇▅▅▄▃▂▂▁ ▁▁▁▁▂▂▂▂▂▁ ▃▇██████████████████████████████████\n██████████████████████████████████▆▅███████▇▇▇▅▂▂ ▁▂▂▁▃▃▃▃▁▁▁▁ ▄██████████████████████████████████\n██████████████████████████████████▆▇██████▇▁▁▂▃▃▂▃ ▁▁ ▁██████████████████████████████████\n██████████████████████████████████▄▆▇█████▇▂ ▁ ██████████████████████████████████\n█████████████████████████████████▇▃▆██████▂▂▂▁ ▅█████████████████████████████████\n█████████████████████████████████▂▅▇██████▅▂▁ ▁ ▁ ▁▆████████████████████████████████\n█████████████████████████████████▅▇███▇█▇▅▂▃▄▂▁ ▁▁▂ ▂▁▁ ▂▁▁▃▃█████████████████████████████████\n█████████████████████████████████▅███▆▄▃███▆▄▃▂▁▂▃▃▂▂▁▁▂▄▆▇▇▆▁▁▁▂▆▅▅████████████████████████████████\n████████████████████████████████▆▆▇██▃▅▇█████████▆▂▇█████▇▅▄▇▅▁▁▇▄▃▃████████████████████████████████\n███████████████████████████████▇▄█▇██▄▆████▇▇████▃▁▁▇██▇▅▃▄▃▂ ▁▂█▃▃▂▆███████████████████████████████\n███████████████████████████████▆▇████▆▃█▇▆█▇▇▆▇██▄ ▁▂▁▃▆▆▄▂▁ ▂▃▄▃▆▂▂▃▇██████████████████████████████\n██████████████████████████████▇▄▇████▅█▇█▆▄▄▁▂███▃ ▁▂▁ ▁▂▄▅▆█▂▄▄█▂▂▂▅██████████████████████████████\n█████████████████████████████▇▇▅▆████▅█████▇▁▆█▅█▁ ▁▂▇▃ ▅██▄ ▇██▂▃▁▇▆█████████████████████████████\n█████████████████████████████▇▆▆▆████▅███████████▇▆▇█▆▁▃▃ ▁▆▅▁ ▇█▆▂▁▄▄▆▇████████████████████████████\n████████████████████████████▆▆██▆████▅██████▄▅█████▅▁ ▁▂ ▂ ▁█▇▃▁▁▇█▅▃▇███████████████████████████\n██████████████████████████▇▆██████████▅███▇▆▅█████▇█▇▇▅▅▂▁▁ ▅█▅▃▂▄▅██▂▃▅██████████████████████████\n█████████████████████████▄▅████████████▆██▇███████▆▄▄▂▁▂█▂ ▁▅██▅▃▃▅▆██▄▅▂▁▆████████████████████████\n████████████████████████▅▇██████████████▆▆███████▅▄▅▇▇▃▃▄▃▁▂▇████▆▄▄▇█▅█▆▃▄▁▆███████████████████████\n██████████████████████▅▅████████████████████▇▆▆▄▂▂▁ ▁▂▁ ▁▃█▇▇███▇▅▆█▇▇▆▇▆▆▄▅▃▇█████████████████████\n███████████████████▇▇▄███████████████████████▄▃▁▂▃▁▂▁ ▁▁▂▆█▆▇███▇▇▆█▇▇▇▇██▇▇▁ ▂▅▇▇██████████████████\n███████████████▇▇▆▇████████████████████████████▆▅▃▂▂▂▂▃▅███████▆▇▇███▇▇█▇█▇▂▁▁▅▆▃▂▄▆▆███████████████\n████████████▆▇▇██████████████████████████████████▇█▅▅▇███████▇▆████▇█████▇▃▁▄▇▃▃▁▂▃▆▆▆▄▆▇███████████\n█████████▇▇▇███████████████████████████████████████████████▇▆████▇▇▇████▅▃▃▇▆▁ ▂▃▁ ▂▅▂▁▁▄▇▆█████████\n█████▇▇▇▇██████████████████████████████████████████████▇▆▆▆█████▆▇█▅████▇▇█▅ ▁▃▂▂▁▃▂ ▂▃▅██▇▆▆▆█████\n████▅█████████████████████████████████████████▇▇█████▇▆███████▇█▇▆▇█████████▇▇█▆▄▄▁▁▂▃▂▁ ▄█▇▇▇▅▆███\n████▇███████████████████████████████▇████████████████████████▆▆▇▆█████████▇▇███▇█▅▅▅▃▁▁▁▃▅▆▅▄▆█▇████\n██████████████████████████████████████████████████████████▆▇▇█▆██████████████▇█████▇█▇▆▇▇▇▆▄████████\n███████████████████████████████████████▆██████████████▇▇▇▆█▆▇▆███████▇▇████▇█████████▇▇▇▇▆▇█████████\n██████████████████████████████████████████████████▇▇▇▇▇█████▇█████▇▆▇▆█▆▇▇█████████▇▇███████████████\n███████████████████████████████████████▇▇██████████████████▇▆███████▇▅▅▅███▇▇▇▇▇▇▇██████████████████\n██████████████████████████████████████████▆▇█████████████▇██████████████▇▇▅▇████████████████████████\n███████████████████████████████████████████▆█▇███████████▇██████████████████████████████████████████\n████████████████████████████████████████████▇▆█████████▇████████████████████████████████████████████\n█████████████████████████████████████████████▇█▇▆█████▇█████████████████████████████████████████████\n████████████████████████████████████████████████▆▇█▆████████████████████████████████████████████████\n████████████████████████████████████████████████████████████████████████████████████████████████████\n███████████████████████████████████████████████████▇████████████████████████████████████████████████\n███████████████████████████████████████████████████▆████████████████████████████████████████████████\n████████████████████████████████████████████████████████████████████████████████████████████████████`;\n\nconst COMPACT = `█▀▄▀█ ▄▀█ █▀▀ █▀ ▀█▀ █▀▀ █▀█\n█ ▀ █ █▀█ ██▄ ▄█ █ ██▄ █▀▄`;\n\nconst MIN_WIDTH_FOR_FULL = 100;\nconst MIN_WIDTH_FOR_COMPACT = 40;\n\nexport type BannerVariant = \"full\" | \"compact\" | \"suppressed\";\n\nexport function selectBannerVariant(columns: number, isTTY: boolean): BannerVariant {\n if (!isTTY) return \"suppressed\";\n if (columns < MIN_WIDTH_FOR_COMPACT) return \"suppressed\";\n if (columns < MIN_WIDTH_FOR_FULL) return \"compact\";\n return \"full\";\n}\n\nexport function renderBanner(\n theming: Theming,\n variant: BannerVariant,\n opts: { subtitle?: string } = {},\n): string {\n if (variant === \"suppressed\") return \"\";\n const art = variant === \"full\" ? FULL : COMPACT;\n const accentArt = theming.painter.token(\"accent\", art);\n if (!opts.subtitle) return accentArt;\n const subtitle = theming.painter.dim(opts.subtitle);\n return `${accentArt}\\n ${subtitle}`;\n}\n\nexport function bannerForContext(theming: Theming, columns: number, subtitle?: string): string {\n const variant = selectBannerVariant(columns, theming.caps.isTTY);\n return renderBanner(theming, variant, subtitle !== undefined ? { subtitle } : {});\n}\n","import * as clack from \"@clack/prompts\";\nimport type { Theming } from \"./theme/index.js\";\n\nexport class PromptCancelledError extends Error {\n constructor(message = \"Prompt cancelled\") {\n super(message);\n this.name = \"PromptCancelledError\";\n }\n}\n\nfunction ensure<T>(value: T | symbol): T {\n if (clack.isCancel(value)) {\n throw new PromptCancelledError();\n }\n return value;\n}\n\ntype Spinner = ReturnType<typeof clack.spinner>;\n\ntype ClackSelectOpts<T extends string> = Parameters<typeof clack.select<T>>[0];\ntype ClackMultiselectOpts<T extends string> = Parameters<typeof clack.multiselect<T>>[0];\ntype ClackOption<T extends string> = ClackSelectOpts<T>[\"options\"][number];\n\nfunction buildOption<T extends string>(o: {\n value: T;\n label: string;\n hint?: string;\n}): ClackOption<T> {\n const base: { value: T; label: string } = { value: o.value, label: o.label };\n return (o.hint === undefined ? base : { ...base, hint: o.hint }) as ClackOption<T>;\n}\n\nexport type Prompts = {\n intro: (title: string) => void;\n outro: (message: string) => void;\n note: (title: string, body?: string) => void;\n log: {\n message: (m: string) => void;\n success: (m: string) => void;\n warning: (m: string) => void;\n error: (m: string) => void;\n info: (m: string) => void;\n };\n text: (opts: {\n message: string;\n placeholder?: string;\n initialValue?: string;\n validate?: (v: string) => string | undefined;\n }) => Promise<string>;\n confirm: (opts: { message: string; initialValue?: boolean }) => Promise<boolean>;\n select: <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValue?: T;\n }) => Promise<T>;\n multiselect: <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValues?: T[];\n required?: boolean;\n }) => Promise<T[]>;\n group: typeof clack.group;\n spinner: () => Spinner;\n raw: typeof clack;\n};\n\nexport function createPrompts(theming: Theming): Prompts {\n void theming;\n return {\n intro: (title) => clack.intro(title),\n outro: (message) => clack.outro(message),\n note: (title, body) => clack.note(body ?? \"\", title),\n log: {\n message: (m) => clack.log.message(m),\n success: (m) => clack.log.success(m),\n warning: (m) => clack.log.warning(m),\n error: (m) => clack.log.error(m),\n info: (m) => clack.log.info(m),\n },\n text: async (opts) => {\n const validateAdapter = opts.validate\n ? (v: string | undefined) => {\n const result = opts.validate?.(v ?? \"\");\n return result ?? undefined;\n }\n : undefined;\n const baseOpts = {\n message: opts.message,\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n ...(validateAdapter ? { validate: validateAdapter } : {}),\n };\n const result = await clack.text(baseOpts);\n const checked = ensure(result);\n return checked ?? \"\";\n },\n confirm: async (opts) => {\n const result = await clack.confirm({\n message: opts.message,\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n });\n return ensure(result);\n },\n select: async <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValue?: T;\n }) => {\n const options = opts.options.map(buildOption<T>);\n const params = {\n message: opts.message,\n options,\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n } as ClackSelectOpts<T>;\n const result = await clack.select<T>(params);\n return ensure(result);\n },\n multiselect: async <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValues?: T[];\n required?: boolean;\n }) => {\n const options = opts.options.map(buildOption<T>);\n const params = {\n message: opts.message,\n options,\n ...(opts.initialValues !== undefined ? { initialValues: opts.initialValues } : {}),\n ...(opts.required !== undefined ? { required: opts.required } : {}),\n } as ClackMultiselectOpts<T>;\n const result = await clack.multiselect<T>(params);\n return ensure(result);\n },\n group: clack.group,\n spinner: () => clack.spinner(),\n raw: clack,\n };\n}\n","import type { ColorDepth, Theme } from \"./tokens.js\";\n\nexport type TerminalEnv = {\n NO_COLOR?: string | undefined;\n FORCE_COLOR?: string | undefined;\n COLORTERM?: string | undefined;\n TERM?: string | undefined;\n COLORFGBG?: string | undefined;\n MAESTER_THEME?: string | undefined;\n MAESTER_NO_MOTION?: string | undefined;\n MAESTER_NO_WELCOME?: string | undefined;\n LC_CTYPE?: string | undefined;\n LANG?: string | undefined;\n};\n\nexport type TerminalCapabilities = {\n isTTY: boolean;\n colorDepth: ColorDepth;\n theme: Theme;\n unicode: boolean;\n motion: boolean;\n};\n\nexport type DetectOptions = {\n env?: TerminalEnv;\n isTTY?: boolean;\n unicodeOverride?: boolean;\n themeOverride?: Theme;\n forceColor?: \"always\" | \"never\" | \"auto\";\n};\n\nfunction isNonEmpty(value: string | undefined): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\nexport function detectColorDepth(env: TerminalEnv, isTTY: boolean): ColorDepth {\n if (isNonEmpty(env.NO_COLOR)) {\n return \"none\";\n }\n if (isNonEmpty(env.FORCE_COLOR)) {\n const v = env.FORCE_COLOR;\n if (v === \"0\" || v === \"false\") return \"none\";\n if (v === \"1\") return \"ansi16\";\n if (v === \"2\") return \"ansi256\";\n if (v === \"3\" || v === \"true\" || v === \"\") return \"truecolor\";\n return \"truecolor\";\n }\n if (!isTTY) {\n return \"none\";\n }\n const colorTerm = env.COLORTERM ?? \"\";\n if (colorTerm === \"truecolor\" || colorTerm === \"24bit\") {\n return \"truecolor\";\n }\n const term = env.TERM ?? \"\";\n if (term.includes(\"truecolor\") || term.includes(\"24bit\")) {\n return \"truecolor\";\n }\n if (term.includes(\"256color\")) {\n return \"ansi256\";\n }\n if (term === \"dumb\" || term === \"\") {\n return \"none\";\n }\n return \"ansi16\";\n}\n\nexport function detectTheme(env: TerminalEnv, override?: Theme): Theme {\n if (override) return override;\n const fromEnv = env.MAESTER_THEME?.toLowerCase();\n if (fromEnv === \"light\" || fromEnv === \"dark\") return fromEnv;\n const colorFgBg = env.COLORFGBG;\n if (colorFgBg) {\n const parts = colorFgBg.split(\";\");\n const bg = parts.length > 0 ? parts[parts.length - 1] : undefined;\n if (bg !== undefined && /^\\d+$/.test(bg)) {\n const idx = Number(bg);\n if (idx >= 7 && idx <= 15) return \"light\";\n }\n }\n return \"dark\";\n}\n\nexport function detectUnicode(env: TerminalEnv, override?: boolean): boolean {\n if (override !== undefined) return override;\n const lcCtype = env.LC_CTYPE ?? \"\";\n const lang = env.LANG ?? \"\";\n return /UTF-?8/i.test(lcCtype) || /UTF-?8/i.test(lang) || process.platform === \"darwin\";\n}\n\nexport function detectMotion(env: TerminalEnv & { NO_MOTION?: string | undefined }): boolean {\n return !isNonEmpty(env.MAESTER_NO_MOTION) && !isNonEmpty(env.NO_MOTION);\n}\n\nexport function detect(opts: DetectOptions = {}): TerminalCapabilities {\n const env = opts.env ?? (process.env as TerminalEnv);\n const isTTY = opts.isTTY ?? Boolean(process.stdout.isTTY);\n const force = opts.forceColor ?? \"auto\";\n let colorDepth: ColorDepth;\n if (force === \"never\") colorDepth = \"none\";\n else if (force === \"always\")\n colorDepth = detectColorDepth({ ...env, FORCE_COLOR: env.FORCE_COLOR ?? \"3\" }, isTTY);\n else colorDepth = detectColorDepth(env, isTTY);\n return {\n isTTY,\n colorDepth,\n theme: detectTheme(env, opts.themeOverride),\n unicode: detectUnicode(env, opts.unicodeOverride),\n motion: detectMotion(env),\n };\n}\n","import type { PaletteToken } from \"./tokens.js\";\n\nexport type GlyphRole =\n | \"cursor\"\n | \"expand\"\n | \"collapse\"\n | \"checkOff\"\n | \"checkOn\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"bullet\"\n | \"ellipsis\"\n | \"separator\"\n | \"progressFill\"\n | \"progressTrack\";\n\ntype GlyphDef = {\n unicode: string;\n ascii: string;\n token: PaletteToken | undefined;\n};\n\nconst CATALOG: Record<GlyphRole, GlyphDef> = {\n cursor: { unicode: \"▸\", ascii: \">\", token: \"accent\" },\n expand: { unicode: \"▾\", ascii: \"v\", token: \"accent\" },\n collapse: { unicode: \"▴\", ascii: \"^\", token: \"accent\" },\n checkOff: { unicode: \"◯\", ascii: \"[ ]\", token: \"fgMuted\" },\n checkOn: { unicode: \"◉\", ascii: \"[x]\", token: \"accent\" },\n success: { unicode: \"✓\", ascii: \"[ok]\", token: \"success\" },\n warning: { unicode: \"!\", ascii: \"!\", token: \"warning\" },\n error: { unicode: \"✗\", ascii: \"[X]\", token: \"error\" },\n info: { unicode: \"›\", ascii: \">\", token: \"info\" },\n bullet: { unicode: \"·\", ascii: \"-\", token: \"fgMuted\" },\n ellipsis: { unicode: \"…\", ascii: \"...\", token: undefined },\n separator: { unicode: \" · \", ascii: \" - \", token: \"fgMuted\" },\n progressFill: { unicode: \"█\", ascii: \"#\", token: \"accent\" },\n progressTrack: { unicode: \"░\", ascii: \".\", token: \"fgFaint\" },\n};\n\nexport const SPINNER_FRAMES_UNICODE = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"] as const;\nexport const SPINNER_FRAMES_ASCII = [\"|\", \"/\", \"-\", \"\\\\\"] as const;\n\nexport function glyph(\n role: GlyphRole,\n unicode: boolean,\n): { text: string; token: PaletteToken | undefined } {\n const def = CATALOG[role];\n return { text: unicode ? def.unicode : def.ascii, token: def.token };\n}\n\nexport function spinnerFrames(unicode: boolean): readonly string[] {\n return unicode ? SPINNER_FRAMES_UNICODE : SPINNER_FRAMES_ASCII;\n}\n","export const PALETTE = {\n accent: { hex: \"#7CE7C7\", ansi256: 121 },\n accentStrong: { hex: \"#2BA88A\", ansi256: 36 },\n accentAlt: { hex: \"#B197FC\", ansi256: 141 },\n success: { hex: \"#6ED49B\", ansi256: 78 },\n warning: { hex: \"#F0C674\", ansi256: 222 },\n error: { hex: \"#FF6B6B\", ansi256: 203 },\n info: { hex: \"#74A9F0\", ansi256: 111 },\n fgMuted: { hex: \"#8A8A8A\", ansi256: 245 },\n fgFaint: { hex: \"#5A5A5A\", ansi256: 240 },\n} as const;\n\nexport type PaletteToken = keyof typeof PALETTE;\n\nexport const SPACING = {\n xs: 1,\n sm: 2,\n md: 4,\n lg: 1,\n xl: 2,\n} as const;\n\nexport const WIDTH = {\n proseTarget: 72,\n proseHardWrap: 80,\n panelMax: 100,\n minimum: 40,\n compactCeiling: 79,\n full: 80,\n} as const;\n\nexport type Theme = \"dark\" | \"light\";\n\nexport type ColorDepth = \"truecolor\" | \"ansi256\" | \"ansi16\" | \"none\";\n\nexport type ResolvedToken = {\n hex: string;\n ansi256: number;\n ansi16: string;\n};\n\nconst ANSI16_BY_TOKEN: Record<PaletteToken, string> = {\n accent: \"cyanBright\",\n accentStrong: \"cyan\",\n accentAlt: \"magentaBright\",\n success: \"greenBright\",\n warning: \"yellow\",\n error: \"redBright\",\n info: \"blueBright\",\n fgMuted: \"gray\",\n fgFaint: \"gray\",\n};\n\nexport function resolveToken(token: PaletteToken, theme: Theme): ResolvedToken {\n const effective = token === \"accent\" && theme === \"light\" ? \"accentStrong\" : token;\n const palette = PALETTE[effective];\n return {\n hex: palette.hex,\n ansi256: palette.ansi256,\n ansi16: ANSI16_BY_TOKEN[effective] ?? \"white\",\n };\n}\n","import { Chalk, type ChalkInstance } from \"chalk\";\nimport { type ColorDepth, type PaletteToken, type Theme, resolveToken } from \"./tokens.js\";\n\nconst COLOR_LEVEL_BY_DEPTH: Record<ColorDepth, 0 | 1 | 2 | 3> = {\n none: 0,\n ansi16: 1,\n ansi256: 2,\n truecolor: 3,\n};\n\nexport type Painter = {\n token: (token: PaletteToken, text: string) => string;\n bold: (text: string) => string;\n dim: (text: string) => string;\n italic: (text: string) => string;\n underline: (text: string) => string;\n inverse: (text: string) => string;\n raw: (text: string) => string;\n};\n\nexport function createPainter(depth: ColorDepth, theme: Theme): Painter {\n const level = COLOR_LEVEL_BY_DEPTH[depth];\n const instance: ChalkInstance = new Chalk({ level });\n\n function paint(token: PaletteToken, text: string): string {\n if (level === 0) return text;\n const resolved = resolveToken(token, theme);\n if (level >= 3) {\n return instance.hex(resolved.hex)(text);\n }\n if (level === 2) {\n return instance.ansi256(resolved.ansi256)(text);\n }\n const named = resolved.ansi16 as keyof ChalkInstance;\n const fn = instance[named];\n if (typeof fn === \"function\") {\n return (fn as (s: string) => string)(text);\n }\n return text;\n }\n\n return {\n token: paint,\n bold: (text) => (level === 0 ? text : instance.bold(text)),\n dim: (text) => (level === 0 ? text : instance.dim(text)),\n italic: (text) => (level === 0 ? text : instance.italic(text)),\n underline: (text) => (level === 0 ? text : instance.underline(text)),\n inverse: (text) => (level === 0 ? text : instance.inverse(text)),\n raw: (text) => text,\n };\n}\n","import { type DetectOptions, type TerminalCapabilities, detect } from \"./detect.js\";\nimport { type GlyphRole, glyph as glyphFor, spinnerFrames as spinnerFramesFor } from \"./glyphs.js\";\nimport { type Painter, createPainter } from \"./resolver.js\";\nimport type { PaletteToken } from \"./tokens.js\";\n\nexport type Theming = {\n caps: TerminalCapabilities;\n painter: Painter;\n glyph: (role: GlyphRole) => { text: string; token: PaletteToken | undefined };\n paintedGlyph: (role: GlyphRole) => string;\n spinnerFrames: () => readonly string[];\n};\n\nexport function createTheming(opts: DetectOptions = {}): Theming {\n const caps = detect(opts);\n const painter = createPainter(caps.colorDepth, caps.theme);\n return {\n caps,\n painter,\n glyph: (role) => glyphFor(role, caps.unicode),\n paintedGlyph: (role) => {\n const g = glyphFor(role, caps.unicode);\n return g.token ? painter.token(g.token, g.text) : g.text;\n },\n spinnerFrames: () => spinnerFramesFor(caps.unicode),\n };\n}\n\nexport type { TerminalCapabilities, DetectOptions } from \"./detect.js\";\nexport type { Painter } from \"./resolver.js\";\nexport type { GlyphRole } from \"./glyphs.js\";\nexport { PALETTE, SPACING, WIDTH, resolveToken } from \"./tokens.js\";\nexport type { PaletteToken, Theme, ColorDepth, ResolvedToken } from \"./tokens.js\";\n","import { WIDTH } from \"./theme/tokens.js\";\n\nexport type WidthMode = \"tiny\" | \"compact\" | \"default\";\n\nexport type WidthInfo = {\n columns: number;\n mode: WidthMode;\n};\n\nconst DEFAULT_FALLBACK = 80;\n\nexport function readColumns(stream: NodeJS.WriteStream = process.stdout): number {\n if (typeof stream.columns === \"number\" && stream.columns > 0) return stream.columns;\n return DEFAULT_FALLBACK;\n}\n\nexport function classifyWidth(columns: number): WidthMode {\n if (columns < WIDTH.minimum) return \"tiny\";\n if (columns <= WIDTH.compactCeiling) return \"compact\";\n return \"default\";\n}\n\nexport function readWidth(stream: NodeJS.WriteStream = process.stdout): WidthInfo {\n const columns = readColumns(stream);\n return { columns, mode: classifyWidth(columns) };\n}\n\nexport function effectivePanelWidth(columns: number): number {\n return Math.min(columns, WIDTH.panelMax);\n}\n\nexport function effectiveProseWidth(columns: number): number {\n return Math.min(columns, WIDTH.proseHardWrap);\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { stringify } from \"yaml\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport type { MaesterConfig } from \"../../schemas/maester.js\";\nimport { citadelConfigPath, maesterConfigPath } from \"./paths.js\";\n\nconst CITADEL_HEADER = `# citadel.yaml\n#\n# This file declares the remote knowledge sources this repository pulls into\n# a local destination directory.\n#\n# Each source is a git repository. By default, the citadel fetches whatever\n# the source publishes in its own \\`maester.yaml\\` manifest. If a source does\n# not publish a manifest (or you want to override what gets pulled), declare\n# an \\`includes\\` list and the citadel will materialize exactly those paths\n# or globs instead.\n#\n# By default, every source is surfaced at \\`<baseDir>/<source-name>/\\` from the\n# repository root. The optional top-level \\`baseDir\\` field changes that parent\n# folder once for every source; when omitted, the default is \\`citadel\\`. A\n# per-source \\`destination\\` always wins over the configured base.\n#\n# Run \\`maester sync\\` (or \\`npm run maester:sync\\`) to refresh every source in\n# one pass. Generated by \\`npx maester init\\` and safe to commit. Secret\n# values are never stored here — only the names of environment variables\n# that hold them.\n\n`;\n\nconst MAESTER_HEADER = `# maester.yaml\n#\n# This file declares the documents this repository publishes to any citadel\n# that pulls from it. It is a manifest only — the documents themselves live\n# wherever the \\`path\\` fields point, and \\`maester\\` does not modify them.\n#\n# Generated by \\`npx maester publish\\` and safe to commit.\n\n`;\n\nexport async function writeCitadelConfig(repoRoot: string, config: CitadelConfig): Promise<string> {\n const path = citadelConfigPath(repoRoot);\n const ordered = {\n schemaVersion: config.schemaVersion,\n ...(config.baseDir ? { baseDir: config.baseDir } : {}),\n sources: config.sources,\n };\n const body = stringify(ordered, { indent: 2, lineWidth: 100, singleQuote: false });\n await writeFile(path, `${CITADEL_HEADER}${body}`, \"utf8\");\n return path;\n}\n\nexport async function writeMaesterConfig(repoRoot: string, config: MaesterConfig): Promise<string> {\n const path = maesterConfigPath(repoRoot);\n const body = stringify(config, { indent: 2, lineWidth: 100, singleQuote: false });\n await writeFile(path, `${MAESTER_HEADER}${body}`, \"utf8\");\n return path;\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport async function appendMissingGitignoreEntries(\n repoRoot: string,\n entries: readonly string[],\n): Promise<{ added: string[]; alreadyPresent: string[] }> {\n const path = resolve(repoRoot, \".gitignore\");\n let existing = \"\";\n if (existsSync(path)) {\n existing = await readFile(path, \"utf8\");\n }\n\n const existingLines = new Set(\n existing\n .split(/\\r?\\n/)\n .map((l) => l.trim())\n .filter((l) => l.length > 0),\n );\n const added: string[] = [];\n const alreadyPresent: string[] = [];\n\n for (const entry of entries) {\n const normalized = entry.trim();\n if (normalized.length === 0) continue;\n if (existingLines.has(normalized)) {\n alreadyPresent.push(normalized);\n } else {\n added.push(normalized);\n existingLines.add(normalized);\n }\n }\n\n if (added.length === 0) {\n return { added, alreadyPresent };\n }\n\n const needsTrailingNewline = existing.length > 0 && !existing.endsWith(\"\\n\");\n const appendBlock = `${needsTrailingNewline ? \"\\n\" : \"\"}${added.join(\"\\n\")}\\n`;\n await writeFile(path, `${existing}${appendBlock}`, \"utf8\");\n return { added, alreadyPresent };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport async function ensureScript(\n repoRoot: string,\n scriptName: string,\n command: string,\n): Promise<{ added: boolean; reason: \"no-package-json\" | \"already-set\" | \"added\" }> {\n const path = resolve(repoRoot, \"package.json\");\n if (!existsSync(path)) {\n return { added: false, reason: \"no-package-json\" };\n }\n const raw = await readFile(path, \"utf8\");\n const trailingNewline = raw.endsWith(\"\\n\");\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const scripts = (parsed.scripts ?? {}) as Record<string, string>;\n if (scripts[scriptName] === command) {\n return { added: false, reason: \"already-set\" };\n }\n if (typeof scripts[scriptName] === \"string\" && scripts[scriptName] !== command) {\n return { added: false, reason: \"already-set\" };\n }\n scripts[scriptName] = command;\n parsed.scripts = scripts;\n const serialized = JSON.stringify(parsed, null, 2) + (trailingNewline ? \"\\n\" : \"\");\n await writeFile(path, serialized, \"utf8\");\n return { added: true, reason: \"added\" };\n}\n","import { resolve } from \"node:path\";\nimport type { CitadelConfig, Source } from \"../../schemas/citadel.js\";\nimport { CACHE_DIR_NAME, defaultDestinationFor } from \"../config/paths.js\";\nimport { writeCitadelConfig } from \"../config/writer.js\";\nimport { appendMissingGitignoreEntries } from \"../repo/gitignore.js\";\nimport { ensureScript } from \"../repo/package-json.js\";\n\nexport type FinalizeResult = {\n citadelPath: string;\n gitignoreAdded: string[];\n packageJsonScript: \"no-package-json\" | \"already-set\" | \"added\";\n};\n\nexport type FinalizeInput = {\n sources: Source[];\n baseDir?: string;\n};\n\nexport async function finalizeCitadel(\n repoRoot: string,\n input: FinalizeInput,\n): Promise<FinalizeResult> {\n detectDestinationCollisions(repoRoot, input);\n const config: CitadelConfig = {\n schemaVersion: 1,\n ...(input.baseDir ? { baseDir: input.baseDir } : {}),\n sources: input.sources,\n };\n const citadelPath = await writeCitadelConfig(repoRoot, config);\n const gitignore = await appendMissingGitignoreEntries(repoRoot, [`${CACHE_DIR_NAME}/`]);\n const script = await ensureScript(repoRoot, \"maester:sync\", \"maester sync\");\n return {\n citadelPath,\n gitignoreAdded: gitignore.added,\n packageJsonScript: script.reason,\n };\n}\n\ntype EntryDescriptor = {\n name: string;\n destination: string | undefined;\n};\n\nexport function detectDestinationCollisions(\n repoRoot: string,\n input: FinalizeInput | EntryDescriptor[],\n baseDirArg?: string,\n): void {\n const baseDir = Array.isArray(input) ? baseDirArg : input.baseDir;\n const entries: EntryDescriptor[] = Array.isArray(input)\n ? input\n : input.sources.map((s): EntryDescriptor => ({ name: s.name, destination: s.destination }));\n\n const byDest = new Map<string, { name: string }>();\n for (const entry of entries) {\n const dest = entry.destination\n ? resolve(repoRoot, entry.destination)\n : defaultDestinationFor(repoRoot, entry.name, baseDir);\n const prior = byDest.get(dest);\n if (prior) {\n throw new Error(\n `sources '${entry.name}' and '${prior.name}' both resolve to destination '${dest}'. Set a unique destination for one of them.`,\n );\n }\n byDest.set(dest, { name: entry.name });\n }\n}\n","import { ENV_VAR_RE, SLUG_RE } from \"../../schemas/citadel.js\";\n\nexport type ValidationResult = { ok: true } | { ok: false; reason: string };\n\nexport function validateSourceName(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Name cannot be empty.\" };\n if (!SLUG_RE.test(value)) {\n return {\n ok: false,\n reason: \"Name must be a kebab-case slug (lowercase letters, digits, and hyphens).\",\n };\n }\n return { ok: true };\n}\n\nexport function validateGitUrl(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"URL cannot be empty.\" };\n if (/\\s/.test(value)) return { ok: false, reason: \"URL cannot contain whitespace.\" };\n if (value.startsWith(\"https://\") || value.startsWith(\"ssh://\") || value.startsWith(\"file://\")) {\n return { ok: true };\n }\n if (/^git@[^\\s:]+:\\S+$/.test(value)) return { ok: true };\n return {\n ok: false,\n reason: \"URL must start with https://, ssh://, file://, or use the git@host:path form.\",\n };\n}\n\nexport type EnvVarValidation = { ok: true; warning?: string } | { ok: false; reason: string };\n\nexport function validateEnvVarName(value: string): EnvVarValidation {\n if (!value || value.length === 0) {\n return { ok: false, reason: \"Environment variable name cannot be empty.\" };\n }\n if (/\\s/.test(value)) return { ok: false, reason: \"Whitespace is not allowed.\" };\n if (!ENV_VAR_RE.test(value)) {\n return {\n ok: false,\n reason: \"Environment variable name must be UPPER_SNAKE_CASE (e.g. MAESTER_DOCS_TOKEN).\",\n };\n }\n if (value.length >= 32 && !value.includes(\"_\")) {\n return {\n ok: true,\n warning:\n \"That looks unusually long and has no underscores — make sure you entered the NAME of the env var, not its value.\",\n };\n }\n return { ok: true };\n}\n\nexport function validateDestination(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (value.startsWith(\"/\"))\n return { ok: false, reason: \"Destination must be repo-relative (no leading '/').\" };\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Destination cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateBaseDir(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (value.startsWith(\"/\"))\n return { ok: false, reason: \"Base directory must be repo-relative (no leading '/').\" };\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Base directory cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateIncludesEntry(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Includes entry cannot be empty.\" };\n if (/^\\s+$/.test(value)) return { ok: false, reason: \"Includes entry cannot be whitespace.\" };\n if (value.startsWith(\"/\")) {\n return { ok: false, reason: \"Includes entry must be repo-relative (no leading '/').\" };\n }\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Includes entry cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateTag(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Tag cannot be empty.\" };\n if (!SLUG_RE.test(value)) {\n return { ok: false, reason: \"Tag must be a kebab-case slug.\" };\n }\n return { ok: true };\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","import type { Command } from \"commander\";\nimport { detectRoles } from \"../../core/config/paths.js\";\nimport { detectDestinationCollisions, finalizeCitadel } from \"../../core/init/finalize.js\";\nimport {\n validateBaseDir,\n validateDestination,\n validateEnvVarName,\n validateGitUrl,\n validateIncludesEntry,\n validateSourceName,\n validateTag,\n} from \"../../core/init/validators.js\";\nimport { runSkillInstall } from \"../../core/skill/runner.js\";\nimport { listSkillTargets } from \"../../core/skill/targets/index.js\";\nimport type { SkillTargetId } from \"../../core/skill/types.js\";\nimport { SKILL_VERSION } from \"../../core/skill/version.js\";\nimport type { State } from \"../../core/state/schema.js\";\nimport {\n type AuthRef,\n DEFAULT_BASE_DIR,\n type IncludeEntry,\n type Source,\n} from \"../../schemas/citadel.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\nexport function registerInit(program: Command, getContext: () => CliContext): void {\n program\n .command(\"init\")\n .description(\"Initialize this repository as a citadel (walkthrough).\")\n .action(async () => {\n await runInit(getContext());\n });\n}\n\nexport async function runInit(ctx: CliContext): Promise<number> {\n const roles = detectRoles(ctx.repoRoot.path);\n\n if (roles.hasCitadel) {\n ctx.prompts.intro(\"Citadel already initialized\");\n ctx.prompts.log.info(`A citadel config already exists at ${ctx.repoRoot.path}/citadel.yaml.`);\n ctx.prompts.log.message(\"Re-running this flow will not overwrite the existing file.\");\n ctx.prompts.log.message(\n \"To edit the citadel, open citadel.yaml directly (edit verbs coming in a later release).\",\n );\n ctx.prompts.outro(\"Nothing changed.\");\n return 0;\n }\n\n ctx.prompts.intro(\"Initialize a citadel\");\n\n try {\n const shouldProceed = await ctx.prompts.confirm({\n message: `Create a citadel.yaml at ${ctx.repoRoot.path}?`,\n initialValue: true,\n });\n if (!shouldProceed) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const baseDir = await collectBaseDir(ctx);\n const effectiveBaseDir = baseDir ?? DEFAULT_BASE_DIR;\n\n const sources: Source[] = [];\n const reservedNames = (): Set<string> => new Set(sources.map((s) => s.name));\n\n while (true) {\n const source = await collectOneSource(ctx, reservedNames(), effectiveBaseDir);\n sources.push(source);\n const addAnother = await ctx.prompts.confirm({\n message: \"Add another source?\",\n initialValue: false,\n });\n if (!addAnother) break;\n }\n\n try {\n detectDestinationCollisions(ctx.repoRoot.path, {\n sources,\n ...(baseDir ? { baseDir } : {}),\n });\n } catch (err) {\n ctx.prompts.log.error((err as Error).message);\n ctx.prompts.outro(\"Cancelled due to destination collision. Re-run when resolved.\");\n return 1;\n }\n\n const confirmWrite = await ctx.prompts.confirm({\n message: `Write ${sources.length} source(s) to citadel.yaml?`,\n initialValue: true,\n });\n if (!confirmWrite) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const result = await finalizeCitadel(ctx.repoRoot.path, {\n sources,\n ...(baseDir ? { baseDir } : {}),\n });\n ctx.prompts.log.success(`Wrote ${result.citadelPath}`);\n if (result.gitignoreAdded.length > 0) {\n ctx.prompts.log.success(`Appended to .gitignore: ${result.gitignoreAdded.join(\", \")}`);\n }\n if (result.packageJsonScript === \"added\") {\n ctx.prompts.log.success('Added \"maester:sync\" script to package.json.');\n } else if (result.packageJsonScript === \"no-package-json\") {\n ctx.prompts.log.info(\"No package.json found — skipping script wire-up.\");\n }\n const tokenEntries: { name: string; envVar: string }[] = [];\n for (const s of sources) {\n if (s.auth?.type === \"token\") {\n tokenEntries.push({ name: s.name, envVar: s.auth.envVar });\n }\n }\n if (tokenEntries.length > 0) {\n const summary = tokenEntries.map((t) => `${t.name} -> ${t.envVar}`).join(\", \");\n ctx.prompts.log.info(`Remember to set these env vars before syncing: ${summary}`);\n }\n\n await maybeInstallSkill(ctx, baseDir ?? DEFAULT_BASE_DIR);\n\n ctx.prompts.outro(\"Next: run `npx maester sync` to fetch your sources.\");\n return 0;\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 130;\n }\n throw err;\n }\n}\n\nasync function maybeInstallSkill(ctx: CliContext, baseDir: string): Promise<void> {\n let wantsSkill: boolean;\n try {\n wantsSkill = await ctx.prompts.confirm({\n message: \"Install the Grand Maester agent skill? (Recommended)\",\n initialValue: true,\n });\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.log.info(\n \"Skill install cancelled — citadel is configured. Run `maester skill install` later if you change your mind.\",\n );\n return;\n }\n throw err;\n }\n if (!wantsSkill) return;\n\n let targets: SkillTargetId[];\n try {\n targets = await ctx.prompts.multiselect<SkillTargetId>({\n message: \"Which agent(s) should the skill be installed for?\",\n options: listSkillTargets().map((t) => ({ value: t.id, label: t.label })),\n initialValues: [\"claude-code\", \"codex\"] as SkillTargetId[],\n required: true,\n });\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.log.info(\n \"Skill install cancelled — citadel is configured. Run `maester skill install` later if you change your mind.\",\n );\n return;\n }\n throw err;\n }\n if (targets.length === 0) return;\n\n try {\n const result = await runSkillInstall(ctx.repoRoot.path, {\n targets,\n mode: \"install\",\n citadelBaseDir: baseDir,\n });\n for (const outcome of result.outcomes) {\n const artifacts = outcome.artifactPaths.join(\", \");\n if (outcome.action === \"failed\") {\n ctx.prompts.log.error(\n `${outcome.label}: failed${outcome.error ? ` — ${outcome.error}` : \"\"}`,\n );\n } else if (outcome.action === \"installed\" || outcome.action === \"upgraded\") {\n ctx.prompts.log.success(`${outcome.label}: ${outcome.action} → ${artifacts}`);\n } else {\n ctx.prompts.log.info(`${outcome.label}: already up to date (${artifacts})`);\n }\n }\n const total = result.counts.installed + result.counts.upgraded + result.counts.unchanged;\n if (result.counts.failed === 0 && total > 0) {\n ctx.prompts.log.success(\n `Grand Maester installed for ${total} target(s) at v${SKILL_VERSION}.`,\n );\n }\n } catch (err) {\n ctx.prompts.log.error(\n `Skill install failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\nasync function collectOneSource(\n ctx: CliContext,\n reservedNames: Set<string>,\n effectiveBaseDir: string,\n): Promise<Source> {\n const name = await ctx.prompts.text({\n message: \"Source name (short, kebab-case, e.g. 'design-system')\",\n validate: (value) => {\n const trimmed = value.trim();\n const result = validateSourceName(trimmed);\n if (!result.ok) return result.reason;\n if (reservedNames.has(trimmed)) {\n return `Name '${trimmed}' is already used in this citadel.`;\n }\n return undefined;\n },\n });\n\n const url = await ctx.prompts.text({\n message: \"Git URL (https://, ssh://, or git@host:path)\",\n validate: (value) => {\n const result = validateGitUrl(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n\n const ref = await ctx.prompts.text({\n message:\n \"Ref to pin (branch, tag, or commit SHA) — leave blank for the remote's default branch\",\n placeholder: \"main\",\n });\n\n const includes = await collectIncludes(ctx);\n const auth = await collectAuth(ctx);\n const destination = await collectDestination(ctx, name.trim(), effectiveBaseDir);\n\n const description = await ctx.prompts.text({\n message: \"Description (optional — short free text)\",\n placeholder: \"\",\n });\n\n const tagsRaw = await ctx.prompts.text({\n message: \"Tags (optional — comma-separated slugs)\",\n placeholder: \"docs, upstream\",\n validate: (value) => {\n const trimmed = value.trim();\n if (trimmed.length === 0) return undefined;\n const tags = parseTagsEntries(trimmed);\n for (const tag of tags) {\n const result = validateTag(tag);\n if (!result.ok) return `'${tag}': ${result.reason}`;\n }\n return undefined;\n },\n });\n const tags = parseTagsEntries(tagsRaw);\n\n const trimmedRef = ref.trim();\n const trimmedDest = destination.trim();\n const trimmedDesc = description.trim();\n const source: Source = {\n name: name.trim(),\n url: url.trim(),\n ...(trimmedRef ? { ref: trimmedRef } : {}),\n ...(includes.length > 0 ? { includes } : {}),\n ...(auth ? { auth } : {}),\n ...(trimmedDest ? { destination: trimmedDest } : {}),\n ...(trimmedDesc ? { description: trimmedDesc } : {}),\n ...(tags.length > 0 ? { tags } : {}),\n };\n return source;\n}\n\nasync function collectIncludes(ctx: CliContext): Promise<IncludeEntry[]> {\n const useExplicit = await ctx.prompts.confirm({\n message:\n \"Declare an explicit `includes` list? (Skip to let the source's own maester.yaml manifest drive what gets pulled.)\",\n initialValue: false,\n });\n if (!useExplicit) return [];\n\n const raw = await ctx.prompts.text({\n message:\n \"Includes — repo-relative paths or globs, comma- or whitespace-separated. At least one required.\",\n placeholder: \"docs/**/*.md, README.md\",\n validate: (value) => {\n const entries = parseIncludesEntries(value);\n if (entries.length === 0) return \"At least one includes entry is required.\";\n for (const entry of entries) {\n const result = validateIncludesEntry(entry);\n if (!result.ok) return `'${entry}': ${result.reason}`;\n }\n return undefined;\n },\n });\n\n const paths = parseIncludesEntries(raw);\n const entries: IncludeEntry[] = [];\n for (const path of paths) {\n const choice = await ctx.prompts.select<IncludesStateChoice>({\n message: `State for '${path}'?`,\n initialValue: \"file-header\",\n options: [\n { value: \"draft\", label: \"draft\", hint: \"tag this entry as draft\" },\n { value: \"canon\", label: \"canon\", hint: \"tag this entry as canon\" },\n {\n value: \"file-header\",\n label: \"file header\",\n hint: \"no rule; defer to inline state in each file\",\n },\n ],\n });\n entries.push(buildIncludeEntry(path, choice));\n }\n return entries;\n}\n\ntype IncludesStateChoice = \"draft\" | \"canon\" | \"file-header\";\n\nexport function buildIncludeEntry(path: string, choice: IncludesStateChoice): IncludeEntry {\n if (choice === \"file-header\") return path;\n const state: State = choice;\n return { path, state };\n}\n\nasync function collectAuth(ctx: CliContext): Promise<AuthRef | undefined> {\n const authType = await ctx.prompts.select<\"public\" | \"delegated\" | \"token\">({\n message: \"How should this source authenticate?\",\n initialValue: \"public\",\n options: [\n { value: \"public\", label: \"No auth required (public repo)\" },\n {\n value: \"delegated\",\n label: \"Delegate to my local git (SSH key, credential helper, gh auth)\",\n },\n { value: \"token\", label: \"Token via environment variable\" },\n ],\n });\n\n if (authType !== \"token\") return undefined;\n\n while (true) {\n const envVar = await ctx.prompts.text({\n message: \"Enter the NAME of the environment variable (not the token itself)\",\n placeholder: \"MAESTER_DOCS_TOKEN\",\n validate: (value) => {\n const result = validateEnvVarName(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const trimmed = envVar.trim();\n const check = validateEnvVarName(trimmed);\n if (check.ok && check.warning) {\n const proceed = await ctx.prompts.confirm({\n message: `${check.warning}\\n Continue with '${trimmed}' as the env-var name?`,\n initialValue: false,\n });\n if (!proceed) continue;\n }\n return { type: \"token\", envVar: trimmed };\n }\n}\n\nasync function collectDestination(\n ctx: CliContext,\n name: string,\n effectiveBaseDir: string,\n): Promise<string> {\n return ctx.prompts.text({\n message: `Destination override (optional, relative to repo root). Default is ${effectiveBaseDir}/${name}`,\n placeholder: \"\",\n validate: (value) => {\n const result = validateDestination(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n}\n\nasync function collectBaseDir(ctx: CliContext): Promise<string | undefined> {\n const raw = await ctx.prompts.text({\n message: `Base directory for synced sources (each defaults to <baseDir>/<name>). Press Enter to accept the default '${DEFAULT_BASE_DIR}'.`,\n placeholder: DEFAULT_BASE_DIR,\n validate: (value) => {\n const result = validateBaseDir(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const trimmed = raw.trim();\n if (trimmed.length === 0 || trimmed === DEFAULT_BASE_DIR) return undefined;\n return trimmed;\n}\n\nfunction parseIncludesEntries(raw: string): string[] {\n return raw\n .split(/[\\n,]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction parseTagsEntries(raw: string): string[] {\n return raw\n .split(/[,\\s]+/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n}\n","import type { MaesterConfig, PublishedDocument } from \"../../schemas/maester.js\";\nimport { writeMaesterConfig } from \"../config/writer.js\";\n\nexport type PublishFinalizeResult = {\n maesterPath: string;\n documentCount: number;\n};\n\nexport async function finalizeMaesterManifest(\n repoRoot: string,\n documents: PublishedDocument[],\n): Promise<PublishFinalizeResult> {\n detectDuplicatePaths(documents);\n const config: MaesterConfig = { schemaVersion: 1, documents };\n const path = await writeMaesterConfig(repoRoot, config);\n return { maesterPath: path, documentCount: documents.length };\n}\n\nexport function detectDuplicatePaths(documents: readonly PublishedDocument[]): void {\n const seen = new Map<string, number>();\n for (let i = 0; i < documents.length; i++) {\n const p = documents[i]?.path;\n if (!p) continue;\n if (seen.has(p)) {\n throw new Error(`Duplicate path '${p}' (also at index ${seen.get(p)}).`);\n }\n seen.set(p, i);\n }\n}\n","import { SLUG_RE } from \"../../schemas/citadel.js\";\n\nexport type ValidationResult = { ok: true } | { ok: false; reason: string };\n\nexport function validateDocumentPath(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Path cannot be empty.\" };\n if (/^\\s+$/.test(value)) return { ok: false, reason: \"Path cannot be whitespace only.\" };\n if (value.startsWith(\"/\")) {\n return { ok: false, reason: \"Path must be repo-relative (no leading '/').\" };\n }\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Path cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function isGlobPath(value: string): boolean {\n return /[*?[\\]{}]/.test(value);\n}\n\nexport function validateCategory(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (!SLUG_RE.test(value)) {\n return { ok: false, reason: \"Category must be a kebab-case slug.\" };\n }\n return { ok: true };\n}\n\nexport function validateTags(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n for (const tag of tags) {\n if (!SLUG_RE.test(tag)) {\n return { ok: false, reason: `Tag '${tag}' must be a kebab-case slug.` };\n }\n }\n return { ok: true };\n}\n\nexport function parseTags(value: string): string[] {\n return value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { globby } from \"globby\";\nimport { detectRoles } from \"../../core/config/paths.js\";\nimport { detectDuplicatePaths, finalizeMaesterManifest } from \"../../core/publish/finalize.js\";\nimport {\n isGlobPath,\n parseTags,\n validateCategory,\n validateDocumentPath,\n validateTags,\n} from \"../../core/publish/validators.js\";\nimport type { State } from \"../../core/state/schema.js\";\nimport type { PublishedDocument } from \"../../schemas/maester.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\ntype PublishedDocumentStateChoice = \"draft\" | \"canon\" | \"file-header\";\n\nexport function buildPublishedDocumentStateField(\n choice: PublishedDocumentStateChoice,\n): { state: State } | Record<string, never> {\n if (choice === \"file-header\") return {};\n return { state: choice };\n}\n\nasync function askDocumentState(\n ctx: CliContext,\n path: string,\n): Promise<PublishedDocumentStateChoice> {\n return ctx.prompts.select<PublishedDocumentStateChoice>({\n message: `State for '${path}'?`,\n initialValue: \"file-header\",\n options: [\n { value: \"draft\", label: \"draft\", hint: \"tag this entry as draft\" },\n { value: \"canon\", label: \"canon\", hint: \"tag this entry as canon\" },\n {\n value: \"file-header\",\n label: \"file header\",\n hint: \"no rule; defer to inline state in the file\",\n },\n ],\n });\n}\n\nexport function registerPublish(program: Command, getContext: () => CliContext): void {\n program\n .command(\"publish\")\n .description(\"Configure this repository as a maester (walkthrough).\")\n .action(async () => {\n await runPublish(getContext());\n });\n}\n\nexport async function runPublish(ctx: CliContext): Promise<number> {\n const roles = detectRoles(ctx.repoRoot.path);\n\n if (roles.hasMaester) {\n ctx.prompts.intro(\"Maester manifest already configured\");\n ctx.prompts.log.info(`A maester.yaml already exists at ${ctx.repoRoot.path}/maester.yaml.`);\n ctx.prompts.log.message(\"Re-running this flow will not overwrite the existing file.\");\n ctx.prompts.outro(\"Nothing changed.\");\n return 0;\n }\n\n ctx.prompts.intro(\"Configure this repo as a maester\");\n\n const documents: PublishedDocument[] = [];\n const readmePath = resolve(ctx.repoRoot.path, \"README.md\");\n if (existsSync(readmePath)) {\n const useReadme = await ctx.prompts.confirm({\n message: \"Publish README.md (the most common starter document)?\",\n initialValue: true,\n });\n if (useReadme) {\n const stateChoice = await askDocumentState(ctx, \"README.md\");\n documents.push({\n path: \"README.md\",\n category: \"readme\",\n ...buildPublishedDocumentStateField(stateChoice),\n });\n ctx.prompts.log.success(\"Added README.md\");\n }\n }\n\n try {\n while (true) {\n const addMore = await ctx.prompts.confirm({\n message: documents.length === 0 ? \"Add a published document?\" : \"Add another document?\",\n initialValue: documents.length === 0,\n });\n if (!addMore) break;\n const doc = await collectOneDocument(ctx, ctx.repoRoot.path, documents);\n documents.push(doc);\n }\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 130;\n }\n throw err;\n }\n\n if (documents.length === 0) {\n ctx.prompts.log.error(\"A maester manifest must declare at least one document.\");\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 1;\n }\n\n try {\n detectDuplicatePaths(documents);\n } catch (err) {\n ctx.prompts.log.error((err as Error).message);\n ctx.prompts.outro(\"Cancelled.\");\n return 1;\n }\n\n const confirmWrite = await ctx.prompts.confirm({\n message: `Write ${documents.length} document(s) to maester.yaml?`,\n initialValue: true,\n });\n if (!confirmWrite) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const result = await finalizeMaesterManifest(ctx.repoRoot.path, documents);\n ctx.prompts.log.success(`Wrote ${result.maesterPath} (${result.documentCount} document(s))`);\n ctx.prompts.outro(\"Consuming citadels will pick up this manifest at their next `maester sync`.\");\n return 0;\n}\n\nasync function collectOneDocument(\n ctx: CliContext,\n repoRoot: string,\n existing: readonly PublishedDocument[],\n): Promise<PublishedDocument> {\n const path = await ctx.prompts.text({\n message: \"Path or glob (relative to the repo root)\",\n placeholder: \"docs/runbooks/**/*.md\",\n validate: (value) => {\n const trimmed = value.trim();\n const result = validateDocumentPath(trimmed);\n if (!result.ok) return result.reason;\n if (existing.some((d) => d.path === trimmed)) {\n return `Path '${trimmed}' is already declared in this manifest.`;\n }\n return undefined;\n },\n });\n const trimmed = path.trim();\n\n if (isGlobPath(trimmed)) {\n const matches = await globby(trimmed, { cwd: repoRoot, dot: false, gitignore: false });\n ctx.prompts.log.info(`Glob matches ${matches.length} file(s) currently.`);\n } else {\n if (!existsSync(resolve(repoRoot, trimmed))) {\n ctx.prompts.log.warning(`'${trimmed}' does not yet exist in this repo. Saving anyway.`);\n }\n }\n\n const stateChoice = await askDocumentState(ctx, trimmed);\n\n const description = await ctx.prompts.text({\n message: \"Description (optional)\",\n placeholder: \"\",\n });\n const category = await ctx.prompts.text({\n message: \"Category slug (optional, e.g. 'readme', 'adr', 'runbook')\",\n placeholder: \"\",\n validate: (value) => {\n const result = validateCategory(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const tagsRaw = await ctx.prompts.text({\n message: \"Tags (comma-separated, optional)\",\n placeholder: \"\",\n validate: (value) => {\n const result = validateTags(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n\n const trimmedDesc = description.trim();\n const trimmedCat = category.trim();\n const tags = parseTags(tagsRaw.trim());\n\n const doc: PublishedDocument = {\n path: trimmed,\n ...(trimmedDesc ? { description: trimmedDesc } : {}),\n ...(trimmedCat ? { category: trimmedCat } : {}),\n ...(tags.length > 0 ? { tags } : {}),\n ...buildPublishedDocumentStateField(stateChoice),\n };\n return doc;\n}\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","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 { 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 { 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 { 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","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\nimport { loadCitadelConfig } from \"../config/loader.js\";\nimport { runStatus } from \"../status/runner.js\";\nimport type { StatusResult } from \"../status/runner.js\";\n\nconst CACHE_RELATIVE_PATH = \".maester/.skill-cache.json\";\nconst DEFAULT_TTL_SECONDS = 300;\n\nexport type PrereadOptions = {\n repoRoot: string;\n env?: NodeJS.ProcessEnv;\n now?: () => number;\n /** Override for tests: substitute the status runner. */\n runStatus?: typeof runStatus;\n};\n\n/**\n * Implements `maester skill runtime preread`. Reads a Claude Code PreToolUse\n * hook envelope from stdin (passed in as a string), and returns the JSON\n * response body the hook script should write to stdout.\n *\n * Returns \"\" (empty body, no-op) when:\n * - the envelope cannot be parsed,\n * - no file path can be extracted,\n * - no citadel config exists in the repo,\n * - the target path is outside the citadel base directory.\n */\nexport async function runtimePreread(stdinJson: string, opts: PrereadOptions): Promise<string> {\n const envelope = parseEnvelopeSafe(stdinJson);\n if (!envelope) return \"\";\n\n const filePath = extractTargetPath(envelope, opts.repoRoot);\n if (!filePath) return \"\";\n\n let baseDir: string;\n let configForStatus: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n configForStatus = await loadCitadelConfig(opts.repoRoot);\n baseDir = configForStatus.baseDir ?? DEFAULT_BASE_DIR;\n } catch {\n return \"\";\n }\n\n if (!isUnderBaseDir(filePath, opts.repoRoot, baseDir)) return \"\";\n\n const ttlSeconds = readTtlSeconds(opts.env);\n const now = opts.now ?? (() => Date.now());\n const cached = await readCache(opts.repoRoot);\n let verdict: CachedVerdict;\n if (cached && now() - cached.ts < ttlSeconds * 1000) {\n verdict = cached;\n } else {\n const runner = opts.runStatus ?? runStatus;\n try {\n const result = await runner(configForStatus, { repoRoot: opts.repoRoot });\n verdict = {\n ts: now(),\n verdict: classifyVerdict(result),\n summary: summarize(result),\n };\n await writeCache(opts.repoRoot, verdict);\n } catch (err) {\n verdict = {\n ts: now(),\n verdict: \"failed\",\n summary: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n if (verdict.verdict === \"up-to-date\") return \"\";\n return buildHookResponse(verdict);\n}\n\nexport type StatusSummaryOptions = {\n repoRoot: string;\n runStatus?: typeof runStatus;\n};\n\n/**\n * Implements `maester skill runtime status-summary`. Loads the citadel config,\n * runs status, and returns a one-line human-readable summary plus an exit\n * code that mirrors the `maester status` ladder.\n */\nexport async function runtimeStatusSummary(\n opts: StatusSummaryOptions,\n): Promise<{ summary: string; exitCode: 0 | 1 | 2 }> {\n let config: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n config = await loadCitadelConfig(opts.repoRoot);\n } catch (err) {\n return {\n summary: err instanceof Error ? err.message : String(err),\n exitCode: 2,\n };\n }\n const runner = opts.runStatus ?? runStatus;\n try {\n const result = await runner(config, { repoRoot: opts.repoRoot });\n const summary = summarize(result);\n let exitCode: 0 | 1 | 2 = 0;\n if (result.counts.failed > 0) exitCode = 2;\n else if (result.counts.behind > 0) exitCode = 1;\n return { summary, exitCode };\n } catch (err) {\n return {\n summary: err instanceof Error ? err.message : String(err),\n exitCode: 2,\n };\n }\n}\n\ntype CachedVerdict = {\n ts: number;\n verdict: \"up-to-date\" | \"behind\" | \"failed\";\n summary: string;\n};\n\ntype HookEnvelope = {\n cwd?: string;\n tool_name?: string;\n tool_input?: {\n file_path?: string;\n path?: string;\n pattern?: string;\n };\n};\n\nfunction parseEnvelopeSafe(raw: string): HookEnvelope | undefined {\n if (!raw || raw.trim().length === 0) return undefined;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n return parsed as HookEnvelope;\n } catch {\n return undefined;\n }\n}\n\nfunction extractTargetPath(envelope: HookEnvelope, repoRoot: string): string | undefined {\n const input = envelope.tool_input;\n if (!input) return undefined;\n const raw = input.file_path ?? input.path ?? input.pattern;\n if (typeof raw !== \"string\" || raw.length === 0) return undefined;\n const cwd = typeof envelope.cwd === \"string\" ? envelope.cwd : repoRoot;\n return path.isAbsolute(raw) ? raw : path.resolve(cwd, raw);\n}\n\nfunction isUnderBaseDir(targetPath: string, repoRoot: string, baseDir: string): boolean {\n const base = path.resolve(repoRoot, baseDir);\n const rel = path.relative(base, targetPath);\n if (rel === \"\") return true;\n return !rel.startsWith(\"..\") && !path.isAbsolute(rel);\n}\n\nfunction readTtlSeconds(env: NodeJS.ProcessEnv | undefined): number {\n const raw = (env ?? process.env).MAESTER_SKILL_STATUS_TTL;\n if (!raw) return DEFAULT_TTL_SECONDS;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_TTL_SECONDS;\n return parsed;\n}\n\nasync function readCache(repoRoot: string): Promise<CachedVerdict | undefined> {\n try {\n const raw = await fs.readFile(path.join(repoRoot, CACHE_RELATIVE_PATH), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n const candidate = parsed as Partial<CachedVerdict>;\n if (\n typeof candidate.ts !== \"number\" ||\n (candidate.verdict !== \"up-to-date\" &&\n candidate.verdict !== \"behind\" &&\n candidate.verdict !== \"failed\") ||\n typeof candidate.summary !== \"string\"\n ) {\n return undefined;\n }\n return {\n ts: candidate.ts,\n verdict: candidate.verdict,\n summary: candidate.summary,\n };\n } catch {\n return undefined;\n }\n}\n\nasync function writeCache(repoRoot: string, verdict: CachedVerdict): Promise<void> {\n const finalPath = path.join(repoRoot, CACHE_RELATIVE_PATH);\n await fs.mkdir(path.dirname(finalPath), { recursive: true });\n const tempPath = `${finalPath}.tmp-${Math.floor(Math.random() * 1e9)}`;\n await fs.writeFile(tempPath, `${JSON.stringify(verdict)}\\n`, \"utf8\");\n await fs.rename(tempPath, finalPath);\n}\n\nfunction classifyVerdict(result: StatusResult): CachedVerdict[\"verdict\"] {\n if (result.counts.failed > 0) return \"failed\";\n if (result.counts.behind > 0) return \"behind\";\n return \"up-to-date\";\n}\n\nfunction summarize(result: StatusResult): string {\n const { upToDate, behind, failed } = result.counts;\n const total = upToDate + behind + failed;\n if (total === 0) return \"no sources configured\";\n if (behind === 0 && failed === 0) return `all ${upToDate} sources up to date`;\n const parts: string[] = [];\n if (behind > 0) parts.push(`${behind} behind`);\n if (failed > 0) parts.push(`${failed} failed`);\n if (upToDate > 0) parts.push(`${upToDate} up to date`);\n return parts.join(\", \");\n}\n\nfunction buildHookResponse(verdict: CachedVerdict): string {\n const detail =\n verdict.verdict === \"failed\"\n ? `Citadel status check failed: ${verdict.summary}. Proceed with the read and flag that cited content may be stale; do not retry sync in a loop.`\n : `Citadel is behind (${verdict.summary}). Auto-sync policy: run \\`npx maester sync\\`, then \\`rm -f .maester/.skill-cache.json\\` to invalidate this hook's cache, then proceed with the read. Do not prompt the user — sync is read-only against the configured remotes.`;\n const response = {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n additionalContext: detail,\n },\n };\n return `${JSON.stringify(response)}\\n`;\n}\n","import type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport {\n type SkillInstallOutcome,\n type SkillInstallResult,\n type SkillStatusResult,\n type SkillTargetId,\n listSkillTargets,\n runSkillInstall,\n runSkillStatus,\n runSkillUpgrade,\n} from \"../../core/skill/runner.js\";\nimport { runtimePreread, runtimeStatusSummary } from \"../../core/skill/runtime.js\";\nimport { SKILL_VERSION } from \"../../core/skill/version.js\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\nconst EXIT_OK = 0;\nconst EXIT_OUTDATED_OR_BEHIND = 1;\nconst EXIT_FAILED = 2;\n\nconst SUPPORTED_IDS: readonly SkillTargetId[] = [\"claude-code\", \"codex\", \"cursor\", \"agents-md\"];\n\nexport function registerSkill(program: Command, getContext: () => CliContext): void {\n const group = program\n .command(\"skill\")\n .description(\"Install and manage the Grand Maester agent skill in this repository.\");\n\n group\n .command(\"install\")\n .description(\"Install the Grand Maester skill for one or more agent targets.\")\n .option(\n \"--target <id>\",\n \"Agent target id (repeatable). Skips the interactive picker.\",\n collectTarget,\n [] as SkillTargetId[],\n )\n .action(async (options: { target: SkillTargetId[] }) => {\n process.exitCode = await runSkillInstallCommand(getContext(), options.target, \"install\");\n });\n\n group\n .command(\"upgrade\")\n .description(\"Refresh every installed target's content to match the running maester version.\")\n .option(\"--check\", \"Report which targets are outdated without writing.\")\n .action(async (options: { check?: boolean }) => {\n process.exitCode = await runSkillUpgradeCommand(getContext(), options.check === true);\n });\n\n group\n .command(\"add-target <id>\")\n .description(\"Install the skill for an additional agent target.\")\n .action(async (id: string) => {\n if (!isSupportedId(id)) {\n const ctx = getContext();\n ctx.logger.error(`Unknown target '${id}'. Supported: ${SUPPORTED_IDS.join(\", \")}`);\n process.exitCode = EXIT_FAILED;\n return;\n }\n process.exitCode = await runSkillInstallCommand(getContext(), [id], \"add-target\");\n });\n\n group\n .command(\"status\")\n .description(\n \"Show which agent targets have the Grand Maester installed and whether each is up to date.\",\n )\n .action(async () => {\n process.exitCode = await runSkillStatusCommand(getContext());\n });\n\n const runtime = group\n .command(\"runtime\")\n .description(\"Internal helpers invoked by installed agent hooks.\");\n\n runtime\n .command(\"preread\")\n .description(\n \"Read a Claude Code PreToolUse hook envelope from stdin; emit a hook response. Always exits 0.\",\n )\n .action(async () => {\n process.exitCode = await runRuntimePrereadCommand(getContext());\n });\n\n runtime\n .command(\"status-summary\")\n .description(\"Print a one-line citadel-status summary. Exit ladder mirrors `maester status`.\")\n .action(async () => {\n process.exitCode = await runRuntimeStatusSummaryCommand(getContext());\n });\n}\n\nexport async function runSkillInstallCommand(\n ctx: CliContext,\n flagTargets: readonly SkillTargetId[],\n mode: \"install\" | \"add-target\",\n): Promise<number> {\n const baseDir = await loadBaseDir(ctx);\n if (baseDir === null) return EXIT_FAILED;\n\n let targets: SkillTargetId[];\n if (flagTargets.length > 0) {\n targets = [...flagTargets];\n } else {\n try {\n targets = await pickTargetsInteractively(ctx);\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no skill artifacts written.\");\n return 130;\n }\n throw err;\n }\n if (targets.length === 0) {\n ctx.logger.warning(\"No targets selected — nothing to install.\");\n return EXIT_OK;\n }\n }\n\n let result: SkillInstallResult;\n try {\n result = await runSkillInstall(ctx.repoRoot.path, {\n targets,\n mode,\n citadelBaseDir: baseDir,\n });\n } catch (err) {\n ctx.logger.error(err instanceof Error ? err.message : String(err));\n return EXIT_FAILED;\n }\n\n renderInstallResult(ctx, result, mode);\n return result.counts.failed > 0 ? EXIT_FAILED : EXIT_OK;\n}\n\nexport async function runSkillUpgradeCommand(ctx: CliContext, check: boolean): Promise<number> {\n const baseDir = await loadBaseDir(ctx);\n if (baseDir === null) return EXIT_FAILED;\n\n let result: SkillInstallResult;\n try {\n result = await runSkillUpgrade(ctx.repoRoot.path, { check, citadelBaseDir: baseDir });\n } catch (err) {\n ctx.logger.error(err instanceof Error ? err.message : String(err));\n return EXIT_FAILED;\n }\n\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No Grand Maester targets are installed. Run `maester skill install` first.\");\n return check ? EXIT_OK : EXIT_OK;\n }\n\n for (const outcome of result.outcomes) {\n renderInstallOutcome(ctx, outcome);\n }\n ctx.logger.blank();\n const upgradedOrPending = result.counts.upgraded;\n if (result.counts.failed > 0) {\n ctx.logger.error(`${result.counts.failed} target(s) failed. See errors above.`);\n return EXIT_FAILED;\n }\n if (check && upgradedOrPending > 0) {\n ctx.logger.warning(\n `${upgradedOrPending} target(s) are outdated. Run \\`maester skill upgrade\\` to refresh.`,\n );\n return EXIT_OUTDATED_OR_BEHIND;\n }\n if (upgradedOrPending > 0) {\n ctx.logger.success(`Upgraded ${upgradedOrPending} target(s) to v${SKILL_VERSION}.`);\n } else {\n ctx.logger.success(`All ${result.outcomes.length} installed target(s) up to date.`);\n }\n return EXIT_OK;\n}\n\nexport async function runSkillStatusCommand(ctx: CliContext): Promise<number> {\n const result = await runSkillStatus(ctx.repoRoot.path);\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(outcome)}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n } else {\n renderStatusResult(ctx, result);\n }\n\n if (result.counts.upToDate + result.counts.outdated === 0) return EXIT_FAILED;\n if (result.counts.outdated > 0) return EXIT_OUTDATED_OR_BEHIND;\n return EXIT_OK;\n}\n\nexport async function runRuntimePrereadCommand(ctx: CliContext): Promise<number> {\n const stdin = await readAllStdin();\n const out = await runtimePreread(stdin, { repoRoot: ctx.repoRoot.path });\n if (out.length > 0) process.stdout.write(out);\n return EXIT_OK;\n}\n\nexport async function runRuntimeStatusSummaryCommand(ctx: CliContext): Promise<number> {\n const { summary, exitCode } = await runtimeStatusSummary({ repoRoot: ctx.repoRoot.path });\n process.stdout.write(`${summary}\\n`);\n return exitCode;\n}\n\nasync function pickTargetsInteractively(ctx: CliContext): Promise<SkillTargetId[]> {\n ctx.prompts.intro(\"Install the Grand Maester\");\n const choices = listSkillTargets().map((t) => ({\n value: t.id,\n label: t.label,\n }));\n const picked = await ctx.prompts.multiselect<SkillTargetId>({\n message: \"Which agent(s) should the skill be installed for?\",\n options: choices,\n initialValues: [\"claude-code\", \"codex\"] as SkillTargetId[],\n required: true,\n });\n return picked;\n}\n\nasync function loadBaseDir(ctx: CliContext): Promise<string | null> {\n try {\n const config = await loadCitadelConfig(ctx.repoRoot.path);\n return config.baseDir ?? DEFAULT_BASE_DIR;\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return null;\n }\n}\n\nfunction renderInstallResult(\n ctx: CliContext,\n result: SkillInstallResult,\n mode: \"install\" | \"add-target\",\n): void {\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(outcome)}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n return;\n }\n for (const outcome of result.outcomes) {\n renderInstallOutcome(ctx, outcome);\n }\n ctx.logger.blank();\n const action = mode === \"add-target\" ? \"Added\" : \"Installed\";\n const total = result.counts.installed + result.counts.upgraded + result.counts.unchanged;\n if (result.counts.failed > 0) {\n ctx.logger.error(`${result.counts.failed} target(s) failed. See errors above.`);\n return;\n }\n ctx.logger.success(`${action} Grand Maester for ${total} target(s) at v${SKILL_VERSION}.`);\n}\n\nfunction renderInstallOutcome(ctx: CliContext, outcome: SkillInstallOutcome): void {\n const artifacts = outcome.artifactPaths.join(\", \");\n switch (outcome.action) {\n case \"installed\":\n ctx.logger.success(`${outcome.label}: installed → ${artifacts}`);\n break;\n case \"upgraded\":\n ctx.logger.success(`${outcome.label}: upgraded → ${artifacts}`);\n break;\n case \"unchanged\":\n ctx.logger.info(`${outcome.label}: already up to date (${artifacts})`);\n break;\n case \"failed\":\n ctx.logger.error(`${outcome.label}: failed${outcome.error ? ` — ${outcome.error}` : \"\"}`);\n break;\n }\n}\n\nfunction renderStatusResult(ctx: CliContext, result: SkillStatusResult): void {\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No skill targets registered.\");\n return;\n }\n for (const outcome of result.outcomes) {\n switch (outcome.state) {\n case \"up-to-date\":\n ctx.logger.success(`${outcome.label}: v${outcome.installedVersion ?? \"?\"} (up to date)`);\n break;\n case \"outdated\":\n ctx.logger.warning(\n `${outcome.label}: v${outcome.installedVersion ?? \"?\"} (latest v${outcome.currentVersion})`,\n );\n break;\n case \"not-installed\":\n ctx.logger.info(`${outcome.label}: not installed`);\n break;\n }\n }\n ctx.logger.blank();\n const { upToDate, outdated, notInstalled } = result.counts;\n if (upToDate + outdated === 0) {\n ctx.logger.info(\"No Grand Maester targets installed. Run `maester skill install` to add one.\");\n return;\n }\n if (outdated > 0) {\n ctx.logger.warning(`${outdated} target(s) outdated. Run \\`maester skill upgrade\\`.`);\n return;\n }\n ctx.logger.success(`${upToDate} target(s) up to date; ${notInstalled} available to install.`);\n}\n\nfunction collectTarget(value: string, prev: SkillTargetId[]): SkillTargetId[] {\n if (!isSupportedId(value)) {\n throw new Error(`Unknown target '${value}'. Supported: ${SUPPORTED_IDS.join(\", \")}`);\n }\n return [...prev, value];\n}\n\nfunction isSupportedId(id: string): id is SkillTargetId {\n return (SUPPORTED_IDS as readonly string[]).includes(id);\n}\n\nasync function readAllStdin(): Promise<string> {\n if (process.stdin.isTTY) return \"\";\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n","import { type ConsolaInstance, createConsola } from \"consola\";\nimport type { Theming } from \"./theme/index.js\";\n\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"verbose\";\n\nexport type LoggerOptions = {\n theming: Theming;\n level?: LogLevel;\n json?: boolean;\n stdout?: NodeJS.WritableStream;\n stderr?: NodeJS.WritableStream;\n};\n\nexport type Logger = {\n level: LogLevel;\n json: boolean;\n success: (message: string, meta?: Record<string, unknown>) => void;\n warning: (message: string, meta?: Record<string, unknown>) => void;\n error: (message: string, meta?: Record<string, unknown>) => void;\n info: (message: string, meta?: Record<string, unknown>) => void;\n verbose: (message: string, meta?: Record<string, unknown>) => void;\n log: (message: string) => void;\n blank: () => void;\n};\n\ntype Severity = \"success\" | \"warning\" | \"error\" | \"info\" | \"verbose\";\n\nconst SEVERITY_TO_GLYPH = {\n success: \"success\",\n warning: \"warning\",\n error: \"error\",\n info: \"info\",\n verbose: \"info\",\n} as const;\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n silent: -1,\n error: 0,\n warn: 1,\n info: 2,\n verbose: 3,\n};\n\nfunction severityMeetsLevel(sev: Severity, level: LogLevel): boolean {\n if (level === \"silent\") return false;\n const need: LogLevel =\n sev === \"error\" ? \"error\" : sev === \"warning\" ? \"warn\" : sev === \"verbose\" ? \"verbose\" : \"info\";\n return LEVEL_RANK[need] <= LEVEL_RANK[level];\n}\n\nexport function createLogger(opts: LoggerOptions): Logger {\n const level: LogLevel = opts.level ?? \"info\";\n const json = opts.json ?? false;\n const stdout = opts.stdout ?? process.stdout;\n const stderr = opts.stderr ?? process.stderr;\n const { theming } = opts;\n\n const consola: ConsolaInstance = createConsola({\n level: level === \"silent\" ? -1 : LEVEL_RANK[level],\n formatOptions: { colors: false, date: false, compact: true },\n });\n void consola;\n\n function writeJson(sev: Severity, message: string, meta?: Record<string, unknown>): void {\n const payload = { level: sev, message, ...(meta ?? {}) };\n const stream = sev === \"error\" ? stderr : stdout;\n stream.write(`${JSON.stringify(payload)}\\n`);\n }\n\n function writeHuman(sev: Severity, message: string): void {\n const role = SEVERITY_TO_GLYPH[sev];\n const g = theming.glyph(role);\n const paintedGlyph = g.token ? theming.painter.token(g.token, g.text) : g.text;\n const line = `${paintedGlyph} ${message}`;\n const stream = sev === \"error\" ? stderr : stdout;\n stream.write(`${line}\\n`);\n }\n\n function emit(sev: Severity, message: string, meta?: Record<string, unknown>): void {\n if (!severityMeetsLevel(sev, level)) return;\n if (json) {\n writeJson(sev, message, meta);\n } else {\n writeHuman(sev, message);\n }\n }\n\n return {\n level,\n json,\n success: (m, meta) => emit(\"success\", m, meta),\n warning: (m, meta) => emit(\"warning\", m, meta),\n error: (m, meta) => emit(\"error\", m, meta),\n info: (m, meta) => emit(\"info\", m, meta),\n verbose: (m, meta) => emit(\"verbose\", m, meta),\n log: (message) => {\n if (level === \"silent\") return;\n if (json) {\n stdout.write(`${JSON.stringify({ level: \"info\", message })}\\n`);\n } else {\n stdout.write(`${message}\\n`);\n }\n },\n blank: () => {\n if (level === \"silent\" || json) return;\n stdout.write(\"\\n\");\n },\n };\n}\n\nexport function redactUrl(value: string): string {\n return value.replace(/https?:\\/\\/([^:@/\\s]+):([^@\\s]+)@/g, (_, user) => `https://${user}:***@`);\n}\n","import type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport {\n type BehindReason,\n type StatusOutcome,\n type StatusResult,\n runStatus,\n} from \"../../core/status/runner.js\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport { redactUrl } from \"../../ui/logger.js\";\nimport type { CliContext } from \"../context.js\";\n\nconst EXIT_OK = 0;\nconst EXIT_BEHIND = 1;\nconst EXIT_FAILED = 2;\n\nexport function registerStatus(program: Command, getContext: () => CliContext): void {\n program\n .command(\"status\")\n .description(\n \"Check whether configured sources are up to date with their remotes. Exit codes: 0 (all up to date), 1 (any behind), 2 (any failed or config error).\",\n )\n .argument(\"[names...]\", \"Optional source names to scope the run\")\n .option(\"--concurrency <n>\", \"Override the per-run source concurrency (default: 4)\", (v) =>\n Number(v),\n )\n .action(async (names: string[], options: { concurrency?: number }) => {\n const code = await runStatusCommand(getContext(), names, options.concurrency);\n process.exitCode = code;\n });\n}\n\nexport async function runStatusCommand(\n ctx: CliContext,\n scope: readonly string[],\n concurrency?: number,\n): Promise<number> {\n let config: CitadelConfig;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return EXIT_FAILED;\n }\n\n let result: StatusResult;\n try {\n result = await runStatus(config, {\n repoRoot: ctx.repoRoot.path,\n ...(scope.length > 0 ? { scope } : {}),\n ...(concurrency !== undefined && Number.isFinite(concurrency) ? { concurrency } : {}),\n });\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return EXIT_FAILED;\n }\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(buildJsonOutcome(outcome))}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n } else {\n renderHumanSummary(ctx, result);\n }\n\n if (result.counts.failed > 0) return EXIT_FAILED;\n if (result.counts.behind > 0) return EXIT_BEHIND;\n return EXIT_OK;\n}\n\nfunction buildJsonOutcome(outcome: StatusOutcome): Record<string, unknown> {\n if (outcome.verdict === \"up-to-date\") {\n return { name: outcome.name, verdict: outcome.verdict, commitSha: outcome.commitSha };\n }\n if (outcome.verdict === \"behind\") {\n const base: Record<string, unknown> = {\n name: outcome.name,\n verdict: outcome.verdict,\n reasons: outcome.reasons,\n };\n if (outcome.commitSha !== undefined) base.commitSha = outcome.commitSha;\n if (outcome.resolvedSha !== undefined) base.resolvedSha = outcome.resolvedSha;\n return base;\n }\n return { name: outcome.name, verdict: outcome.verdict, error: redactUrl(outcome.error) };\n}\n\nfunction renderHumanSummary(ctx: CliContext, result: StatusResult): void {\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No sources configured.\");\n return;\n }\n for (const outcome of result.outcomes) {\n switch (outcome.verdict) {\n case \"up-to-date\":\n ctx.logger.success(`${outcome.name}: up to date (${shortSha(outcome.commitSha)})`);\n break;\n case \"behind\":\n ctx.logger.warning(`${outcome.name}: behind — ${formatReasons(outcome)}`);\n break;\n case \"failed\":\n ctx.logger.error(`${outcome.name}: failed — ${redactUrl(outcome.error)}`);\n break;\n }\n }\n ctx.logger.blank();\n renderSummaryLine(ctx, result);\n}\n\nfunction renderSummaryLine(ctx: CliContext, result: StatusResult): void {\n const { upToDate, behind, failed } = result.counts;\n if (failed > 0) {\n ctx.logger.error(\n `${failed} source(s) failed, ${behind} behind, ${upToDate} up to date. See errors above.`,\n );\n return;\n }\n if (behind > 0) {\n ctx.logger.warning(\n `${behind} of ${result.outcomes.length} source(s) behind. Run \\`maester sync\\` to refresh.`,\n );\n return;\n }\n ctx.logger.success(`All ${result.outcomes.length} source(s) up to date.`);\n}\n\nfunction formatReasons(outcome: Extract<StatusOutcome, { verdict: \"behind\" }>): string {\n const parts: string[] = [];\n for (const reason of outcome.reasons) {\n parts.push(formatReason(reason, outcome));\n }\n return parts.join(\"; \");\n}\n\nfunction formatReason(\n reason: BehindReason,\n outcome: Extract<StatusOutcome, { verdict: \"behind\" }>,\n): string {\n switch (reason) {\n case \"never-synced\":\n return \"never synced (run `maester sync` to populate this destination)\";\n case \"remote-ref-advanced\": {\n const recorded = outcome.commitSha ? shortSha(outcome.commitSha) : \"—\";\n const remote = outcome.resolvedSha ? shortSha(outcome.resolvedSha) : \"—\";\n return `remote ref advanced (recorded ${recorded}, remote ${remote})`;\n }\n case \"manifest-changed\":\n return \"remote maester.yaml publish surface changed\";\n }\n}\n\nfunction shortSha(sha: string): string {\n return sha.slice(0, 7);\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 { 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 type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport type { FetchWarning } from \"../../core/sources/fetcher.js\";\nimport type { StateWarning } from \"../../core/state/applier.js\";\nimport { type SyncOutcome, type SyncResult, runSync } from \"../../core/sync/runner.js\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport { redactUrl } from \"../../ui/logger.js\";\nimport type { CliContext } from \"../context.js\";\n\nexport function registerSync(program: Command, getContext: () => CliContext): void {\n program\n .command(\"sync\")\n .description(\"Fetch all configured sources into the local citadel.\")\n .argument(\"[names...]\", \"Optional source names to scope the run\")\n .option(\"--concurrency <n>\", \"Override the per-run source concurrency (default: 4)\", (v) =>\n Number(v),\n )\n .action(async (names: string[], options: { concurrency?: number }) => {\n const code = await runSyncCommand(getContext(), names, options.concurrency);\n process.exitCode = code;\n });\n}\n\nexport async function runSyncCommand(\n ctx: CliContext,\n scope: readonly string[],\n concurrency?: number,\n): Promise<number> {\n let config: CitadelConfig;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return 1;\n }\n\n if (!ctx.flags.json) {\n const totalConfigured = config.sources.length;\n ctx.logger.info(`Syncing ${scope.length > 0 ? scope.length : totalConfigured} source(s)…`);\n }\n\n const result = await runSync(config, {\n repoRoot: ctx.repoRoot.path,\n ...(scope.length > 0 ? { scope } : {}),\n ...(concurrency !== undefined && Number.isFinite(concurrency) ? { concurrency } : {}),\n onProgress: (event) => {\n if (!ctx.flags.json) return;\n process.stdout.write(`${JSON.stringify({ event: event.type, ...event })}\\n`);\n },\n });\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(buildJsonOutcome(outcome))}\\n`);\n }\n } else {\n renderHumanSummary(ctx, result);\n }\n return result.failed > 0 ? 1 : 0;\n}\n\nfunction buildJsonOutcome(outcome: SyncOutcome): Record<string, unknown> {\n const base: Record<string, unknown> = {\n name: outcome.name,\n status: outcome.status,\n destination: outcome.destination,\n };\n if (outcome.ref !== undefined) base.ref = outcome.ref;\n if (outcome.commitSha !== undefined) base.commitSha = outcome.commitSha;\n if (outcome.warnings.length > 0) {\n base.warnings = outcome.warnings.map(serializeWarning);\n }\n if (outcome.stateBreakdown !== undefined) {\n base.stateBreakdown = outcome.stateBreakdown;\n }\n if (outcome.stateWarnings && outcome.stateWarnings.length > 0) {\n base.stateWarnings = outcome.stateWarnings;\n }\n if (outcome.error !== undefined) base.error = redactUrl(outcome.error);\n return base;\n}\n\nfunction serializeWarning(warning: FetchWarning): Record<string, unknown> {\n return {\n type: warning.type,\n name: warning.name,\n includes: warning.includes,\n };\n}\n\nfunction renderHumanSummary(ctx: CliContext, result: SyncResult): void {\n for (const outcome of result.outcomes) {\n const shortSha = outcome.commitSha?.slice(0, 7) ?? \"—\";\n const stateSuffix = formatStateBreakdownSuffix(outcome);\n switch (outcome.status) {\n case \"added\":\n ctx.logger.success(`${outcome.name}: added (${shortSha})${stateSuffix}`);\n break;\n case \"updated\":\n ctx.logger.success(`${outcome.name}: updated (${shortSha})${stateSuffix}`);\n break;\n case \"unchanged\":\n ctx.logger.info(`${outcome.name}: unchanged`);\n break;\n case \"failed\":\n ctx.logger.error(\n `${outcome.name}: failed — ${redactUrl(outcome.error ?? \"unknown error\")}`,\n );\n break;\n }\n for (const warning of outcome.warnings) {\n ctx.logger.warning(` ${formatWarning(warning)}`);\n }\n for (const stateWarning of outcome.stateWarnings ?? []) {\n ctx.logger.warning(` ${formatStateWarning(stateWarning)}`);\n }\n if (ctx.flags.verbose && outcome.stateDetails && outcome.stateDetails.length > 0) {\n for (const detail of outcome.stateDetails) {\n ctx.logger.verbose(` ${detail.file} — state=${detail.state} (${detail.sourceOfTruth})`);\n }\n }\n }\n ctx.logger.blank();\n if (result.failed > 0) {\n ctx.logger.error(`${result.failed} source(s) failed.`);\n return;\n }\n ctx.logger.success(`All ${result.outcomes.length} source(s) up to date.`);\n}\n\nfunction formatWarning(warning: FetchWarning): string {\n return `no files matched includes — citadel-side filter set may need updating (${warning.includes.join(\", \")})`;\n}\n\nfunction formatStateBreakdownSuffix(outcome: SyncOutcome): string {\n const b = outcome.stateBreakdown;\n if (!b) return \"\";\n return ` canon: ${b.canon} · draft: ${b.draft} · untagged: ${b.untagged}`;\n}\n\nfunction formatStateWarning(warning: StateWarning): string {\n if (warning.type === \"bad-inline-state\") {\n return `${warning.file}: inline state '${warning.raw}' is not in {draft, canon} — treated as missing`;\n }\n return `${warning.file}: inline state '${warning.inline}' overrides rule state '${warning.rule}'`;\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport type RepoRoot = {\n path: string;\n hasGit: boolean;\n hasPackageJson: boolean;\n};\n\nexport function getRepoRoot(start: string = process.cwd()): RepoRoot {\n const path = resolve(start);\n return {\n path,\n hasGit: existsSync(resolve(path, \".git\")),\n hasPackageJson: existsSync(resolve(path, \"package.json\")),\n };\n}\n","import { type RepoRoot, getRepoRoot } from \"../core/repo/root.js\";\nimport { type LogLevel, type Logger, createLogger } from \"../ui/logger.js\";\nimport { type Prompts, createPrompts } from \"../ui/prompts.js\";\nimport { type Theming, createTheming } from \"../ui/theme/index.js\";\n\nexport type GlobalFlags = {\n verbose?: boolean;\n quiet?: boolean;\n json?: boolean;\n color?: \"auto\" | \"always\" | \"never\";\n theme?: \"dark\" | \"light\";\n noWelcome?: boolean;\n};\n\nexport type CliContext = {\n flags: GlobalFlags;\n theming: Theming;\n logger: Logger;\n prompts: Prompts;\n repoRoot: RepoRoot;\n};\n\nexport function buildContext(flags: GlobalFlags, cwd: string = process.cwd()): CliContext {\n const theming = createTheming({\n forceColor: flags.color ?? \"auto\",\n ...(flags.theme !== undefined ? { themeOverride: flags.theme } : {}),\n });\n const level: LogLevel = flags.quiet ? \"error\" : flags.verbose ? \"verbose\" : \"info\";\n const logger = createLogger({ theming, level, json: flags.json ?? false });\n const prompts = createPrompts(theming);\n const repoRoot = getRepoRoot(cwd);\n return { flags, theming, logger, prompts, repoRoot };\n}\n","import { detectRoles } from \"../core/config/paths.js\";\nimport type { CliContext } from \"./context.js\";\n\nexport type MenuChoice = \"init\" | \"publish\" | \"status\" | \"exit\";\n\nexport async function showTopLevelMenu(ctx: CliContext): Promise<MenuChoice> {\n const roles = detectRoles(ctx.repoRoot.path);\n const citadelLabel = roles.hasCitadel ? \"View citadel\" : \"Initialize a citadel\";\n const citadelHint = roles.hasCitadel\n ? \"summary of the existing config\"\n : \"this repo pulls from remote knowledge sources\";\n const maesterLabel = roles.hasMaester\n ? \"View maester manifest\"\n : \"Configure this repo as a maester\";\n const maesterHint = roles.hasMaester\n ? \"summary of the existing manifest\"\n : \"this repo publishes documents\";\n\n return ctx.prompts.select<MenuChoice>({\n message: \"What would you like to do?\",\n options: [\n { value: \"init\", label: citadelLabel, hint: citadelHint },\n { value: \"publish\", label: maesterLabel, hint: maesterHint },\n {\n value: \"status\",\n label: \"Show status\",\n hint: \"check whether configured sources are up to date\",\n },\n { value: \"exit\", label: \"Exit\" },\n ],\n });\n}\n","import { Command, type OptionValues } from \"commander\";\nimport { detectRoles } from \"../core/config/paths.js\";\nimport { MaesterError } from \"../core/errors.js\";\nimport { bannerForContext } from \"../ui/components/banner.js\";\nimport { PromptCancelledError } from \"../ui/prompts.js\";\nimport { createTheming } from \"../ui/theme/index.js\";\nimport { readColumns } from \"../ui/width.js\";\nimport { registerInit, runInit } from \"./commands/init.js\";\nimport { registerPublish, runPublish } from \"./commands/publish.js\";\nimport { registerSkill } from \"./commands/skill.js\";\nimport { registerStatus, runStatusCommand } from \"./commands/status.js\";\nimport { registerSync } from \"./commands/sync.js\";\nimport { type CliContext, type GlobalFlags, buildContext } from \"./context.js\";\nimport { showTopLevelMenu } from \"./menu.js\";\n\nexport async function run(argv: readonly string[] = process.argv): Promise<void> {\n const code = await runMain(argv);\n process.exitCode = code;\n}\n\nexport async function runMain(argv: readonly string[] = process.argv): Promise<number> {\n maybeRenderHelpVersionBanner(argv);\n const program = buildProgram();\n try {\n await program.parseAsync(argv as string[]);\n return toExitCode(process.exitCode);\n } catch (err) {\n if (err instanceof PromptCancelledError) return 130;\n if (err instanceof MaesterError) {\n process.stderr.write(`${err.message}\\n`);\n return 1;\n }\n process.stderr.write(`${err instanceof Error ? (err.stack ?? err.message) : String(err)}\\n`);\n return 1;\n }\n}\n\nfunction maybeRenderHelpVersionBanner(argv: readonly string[]): void {\n if (!process.stdout.isTTY) return;\n const tail = argv.slice(2);\n const wantsHelp = tail.includes(\"--help\") || tail.includes(\"-h\");\n const wantsVersion = tail.includes(\"--version\") || tail.includes(\"-V\");\n if (!wantsHelp && !wantsVersion) return;\n const theming = createTheming();\n const subtitle = wantsVersion ? \"v0.1.0 · living specs\" : \"living specs · v0.1.0\";\n const banner = bannerForContext(theming, readColumns(), subtitle);\n if (banner.length > 0) {\n process.stdout.write(`${banner}\\n\\n`);\n }\n}\n\nfunction toExitCode(value: string | number | null | undefined): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n}\n\nfunction buildProgram(): Command {\n const program = new Command();\n program\n .name(\"maester\")\n .description(\"Aggregate documentation from many sources into one citadel.\")\n .version(\"0.1.0\", \"-V, --version\", \"Print the maester version.\")\n .option(\"--verbose\", \"Show verbose output\")\n .option(\"--quiet\", \"Suppress all output except errors\")\n .option(\"--json\", \"Emit machine-readable JSON output (one object per line)\")\n .option(\"--color\", \"Force colored output (overrides auto-detection)\")\n .option(\"--no-color\", \"Disable colored output (overrides auto-detection)\")\n .option(\"--theme <theme>\", \"Theme override: 'dark' or 'light'\")\n .option(\"--no-welcome\", \"Suppress the first-run welcome banner\")\n .enablePositionalOptions(false)\n .allowExcessArguments(false);\n\n registerInit(program, () => buildContext(extractFlags(program.opts())));\n registerPublish(program, () => buildContext(extractFlags(program.opts())));\n registerSkill(program, () => buildContext(extractFlags(program.opts())));\n registerStatus(program, () => buildContext(extractFlags(program.opts())));\n registerSync(program, () => buildContext(extractFlags(program.opts())));\n\n program.action(async () => {\n const ctx = buildContext(extractFlags(program.opts()));\n const code = await runNoArgs(ctx);\n process.exitCode = code;\n });\n\n return program;\n}\n\nfunction extractFlags(opts: OptionValues): GlobalFlags {\n let color: \"auto\" | \"always\" | \"never\" = \"auto\";\n if (opts.color === true) color = \"always\";\n if (opts.color === false) color = \"never\";\n const theme =\n typeof opts.theme === \"string\" && (opts.theme === \"light\" || opts.theme === \"dark\")\n ? (opts.theme as \"light\" | \"dark\")\n : undefined;\n const envNoWelcome =\n typeof process.env.MAESTER_NO_WELCOME === \"string\" && process.env.MAESTER_NO_WELCOME.length > 0;\n return {\n verbose: opts.verbose === true,\n quiet: opts.quiet === true,\n json: opts.json === true,\n color,\n ...(theme ? { theme } : {}),\n noWelcome: opts.welcome === false || envNoWelcome,\n };\n}\n\nasync function runNoArgs(ctx: CliContext): Promise<number> {\n if (!process.stdout.isTTY) {\n process.stdout.write(\"Run `maester --help` to see available commands.\\n\");\n return 0;\n }\n const roles = detectRoles(ctx.repoRoot.path);\n const showWelcome = !roles.hasCitadel && !roles.hasMaester && !ctx.flags.noWelcome;\n if (showWelcome) {\n const banner = bannerForContext(ctx.theming, readColumns(), \"living specs · v0.1.0\");\n if (banner.length > 0) {\n process.stdout.write(`${banner}\\n\\n`);\n }\n ctx.prompts.intro(\"Welcome to maester\");\n ctx.prompts.log.message(\"This repository has no citadel or maester config yet.\");\n }\n try {\n const choice = await showTopLevelMenu(ctx);\n switch (choice) {\n case \"init\":\n return runInit(ctx);\n case \"publish\":\n return runPublish(ctx);\n case \"status\":\n return runStatusCommand(ctx, []);\n case \"exit\":\n ctx.prompts.outro(\"Goodbye.\");\n return 0;\n }\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n process.stdout.write(\"\\n\");\n return 130;\n }\n throw err;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/connectors/types.ts","../../src/core/connectors/errors.ts","../../src/core/connectors/types/gitlab-issues/errors.ts","../../src/core/connectors/types/gitlab-issues/output.ts","../../src/core/connectors/types/gitlab-issues/client.ts","../../src/core/connectors/types/gitlab-issues/operations.ts","../../src/core/connectors/types/gitlab-issues/schema.ts","../../src/core/connectors/types/gitlab-issues/index.ts","../../src/core/connectors/registry.ts","../../src/core/state/schema.ts","../../src/schemas/citadel.ts","../../src/core/config/paths.ts","../../src/core/errors.ts","../../src/ui/components/banner.ts","../../src/ui/prompts.ts","../../src/ui/theme/detect.ts","../../src/ui/theme/glyphs.ts","../../src/ui/theme/tokens.ts","../../src/ui/theme/resolver.ts","../../src/ui/theme/index.ts","../../src/ui/width.ts","../../src/schemas/maester.ts","../../src/core/config/loader.ts","../../src/core/auth/resolver.ts","../../src/core/connectors/envelope.ts","../../src/core/connectors/input-schema.ts","../../src/core/connectors/tool-name.ts","../../src/core/connectors/dispatch.ts","../../src/core/config/writer.ts","../../src/core/init/connector-writer.ts","../../src/core/skill/managed-region.ts","../../src/core/skill/templates/content/citadel-awareness.md","../../src/core/skill/templates/content/connector-policy.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/codex.ts","../../src/core/skill/targets/codex.ts","../../src/core/skill/templates/shells/cursor.ts","../../src/core/skill/targets/cursor.ts","../../src/core/skill/templates/content/connector-policy-fallback.md","../../src/core/skill/templates/shells/agents-md.ts","../../src/core/skill/targets/agents-md-writer.ts","../../src/core/skill/targets/generic.ts","../../src/core/skill/targets/index.ts","../../src/core/mcp/registrations/command.ts","../../src/core/mcp/registrations/claude-code.ts","../../src/core/mcp/registrations/codex.ts","../../src/core/mcp/registrations/cursor.ts","../../src/core/mcp/registrations/index.ts","../../src/cli/commands/connector.ts","../../src/core/repo/gitignore.ts","../../src/core/repo/package-json.ts","../../src/core/init/finalize.ts","../../src/core/init/validators.ts","../../package.json","../../src/package-meta.ts","../../src/core/skill/version.ts","../../src/core/skill/runner.ts","../../src/cli/commands/init.ts","../../src/core/mcp/transport.ts","../../src/core/mcp/server.ts","../../src/cli/commands/mcp.ts","../../src/core/publish/finalize.ts","../../src/core/publish/validators.ts","../../src/cli/commands/publish.ts","../../src/core/sync/provenance.ts","../../src/core/git/client.ts","../../src/core/sources/fetcher.ts","../../src/core/status/probe.ts","../../src/core/status/runner.ts","../../src/core/skill/runtime.ts","../../src/cli/commands/skill.ts","../../src/ui/logger.ts","../../src/cli/commands/status.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/stage.ts","../../src/core/sync/runner.ts","../../src/cli/commands/sync.ts","../../src/core/repo/root.ts","../../src/cli/context.ts","../../src/cli/menu.ts","../../src/cli/main.ts"],"names":["z","resolve","result","text","path","existsSync","maesterBlock","fs","SKILL_FRONTMATTER_DESCRIPTION","interpolate","SKILL_MD_PATH","readInstalledVersion","readTextOrUndefined","decideAction","REGISTRY","readOrUndefined","MCP_FILE","group","readFile","writeFile","write","installed","tags","entries","trimmed","execFileCb","entry","parseDocument","walk","MAESTER_MANIFEST_FILENAME","mkdir","manifestError","rm","EXIT_OK","EXIT_FAILED","parse","splitFirstLine","readdir","marker","DEFAULT_CONCURRENCY","errorMessage","buildJsonOutcome","renderHumanSummary","shortSha"],"mappings":"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","file":"main.js","sourcesContent":["import type { z } from \"zod\";\nimport type { ResolvedAuth } from \"../auth/resolver.js\";\n\nexport const ENVELOPE_SCHEMA_VERSION = 1 as const;\n\nexport type ConnectorErrorCode =\n | \"missing-env-var\"\n | \"connector-not-found\"\n | \"unknown-operation\"\n | \"invalid-argument\"\n | \"auth-failed\"\n | \"remote-error\"\n | \"internal-error\";\n\nexport const CONNECTOR_ERROR_CODES: readonly ConnectorErrorCode[] = [\n \"missing-env-var\",\n \"connector-not-found\",\n \"unknown-operation\",\n \"invalid-argument\",\n \"auth-failed\",\n \"remote-error\",\n \"internal-error\",\n];\n\n/**\n * Context passed to a connector operation handler. The dispatcher resolves the\n * per-type config and auth before invocation; the handler never reads env vars\n * or parses the raw connector entry.\n */\nexport type ConnectorContext<TConfig = unknown> = {\n /** Validated per-type config (already parsed by the type's configSchema). */\n readonly config: TConfig;\n /** Auth token value when the entry declared token auth; undefined otherwise. */\n readonly token: string | undefined;\n /** Resolved auth descriptor for handlers that need to know the mode. */\n readonly auth: ResolvedAuth;\n};\n\n/**\n * One operation exposed by a connector type. The same definition drives MCP\n * tool registration (via argsSchema → JSON Schema) and runtime dispatch.\n */\nexport type ConnectorOperation<TConfig = unknown, TArgs = unknown, TData = unknown> = {\n /** Operation name, kebab-case (e.g. `list-issues`). */\n readonly name: string;\n /**\n * Validates the operation's args object. Used for both runtime + inputSchema.\n * The third generic is intentionally `unknown` so schemas with `.default()`\n * or `.optional()` (where the input type differs from the output type) are\n * accepted — the dispatcher always parses `unknown` input.\n */\n readonly argsSchema: z.ZodType<TArgs, z.ZodTypeDef, unknown>;\n /** Per-type data shape version embedded in success payloads. */\n readonly dataSchemaVersion: number;\n /** Pure handler — receives validated args + context; returns `{ data }` or throws. */\n readonly handler: (args: TArgs, ctx: ConnectorContext<TConfig>) => Promise<{ data: TData }>;\n};\n\n/**\n * A connector type registered with the framework. The registry is the only\n * place that imports per-type modules; everything else consults the registry.\n *\n * `operations` is intentionally an `any`-bounded record: each entry has its\n * own concrete TArgs/TData via `defineConnectorOperation`, and the framework\n * never touches the per-operation types directly — it routes through the\n * operation's `argsSchema` for validation and its `handler` for execution.\n */\n// biome-ignore lint/suspicious/noExplicitAny: heterogeneous operation map; per-operation types live inside each operation's handler.\ntype AnyOperation<TConfig> = ConnectorOperation<TConfig, any, any>;\n\nexport type ConnectorType<TConfig = unknown> = {\n /** Stable identifier used as the `type` value in citadel.yaml. */\n readonly id: string;\n /** Short human-readable name (e.g. \"GitLab Issues\"). */\n readonly label: string;\n /**\n * Validates one connector entry's per-type config object. Input is\n * intentionally `unknown` so schemas with `.default()` are accepted — the\n * citadel-schema `.superRefine` always parses `unknown` config payloads.\n */\n readonly configSchema: z.ZodType<TConfig, z.ZodTypeDef, unknown>;\n /** Map of operation name → operation definition. */\n readonly operations: Readonly<Record<string, AnyOperation<TConfig>>>;\n /**\n * Returns the per-operation description rendered into `tools/list`. The\n * framework prepends the connector entry's `description` (when set) — types\n * do not do that composition themselves.\n */\n readonly describeTool: (operation: AnyOperation<TConfig>, resolvedConfig: TConfig) => string;\n};\n\n/**\n * The success envelope shared by MCP tool results and the fallback CLI.\n */\nexport type ConnectorSuccessEnvelope<TData = unknown> = {\n readonly schema: typeof ENVELOPE_SCHEMA_VERSION;\n readonly connector: string;\n readonly operation: string;\n readonly ok: true;\n readonly data: TData & { readonly dataSchema: number };\n};\n\nexport type ConnectorErrorPayload = {\n readonly code: ConnectorErrorCode;\n readonly message: string;\n readonly details?: Record<string, unknown>;\n};\n\nexport type ConnectorFailureEnvelope = {\n readonly schema: typeof ENVELOPE_SCHEMA_VERSION;\n readonly connector: string;\n readonly operation: string;\n readonly ok: false;\n readonly error: ConnectorErrorPayload;\n};\n\nexport type ConnectorResultEnvelope<TData = unknown> =\n | ConnectorSuccessEnvelope<TData>\n | ConnectorFailureEnvelope;\n\n/**\n * Shape of a single MCP tool descriptor returned to clients during `tools/list`.\n * The framework owns this composition; types provide pieces.\n */\nexport type ConnectorToolDescriptor = {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: Record<string, unknown>;\n};\n\n/**\n * Helper for declaring an operation with TypeScript inference for args / data\n * types — `ConnectorOperation` defaults the generics to `unknown`, which\n * defeats inference at the call site. Use this in per-type modules instead of\n * the bare object literal.\n */\nexport function defineConnectorOperation<TConfig, TArgs, TData>(opts: {\n name: string;\n argsSchema: z.ZodType<TArgs, z.ZodTypeDef, unknown>;\n dataSchemaVersion: number;\n handler: (args: TArgs, ctx: ConnectorContext<TConfig>) => Promise<{ data: TData }>;\n}): ConnectorOperation<TConfig, TArgs, TData> {\n return opts;\n}\n","import type { ConnectorErrorCode } from \"./types.js\";\n\n/**\n * Error thrown by connector handlers to signal a known failure mode. The\n * dispatcher catches it and wraps it in the documented error envelope. Any\n * other exception is treated as `internal-error`.\n */\nexport class ConnectorError extends Error {\n readonly code: ConnectorErrorCode;\n readonly details: Record<string, unknown> | undefined;\n\n constructor(code: ConnectorErrorCode, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = \"ConnectorError\";\n this.code = code;\n this.details = details;\n }\n}\n","import { ConnectorError } from \"../../errors.js\";\n\n/**\n * Map a GitLab API HTTP response onto the framework's bounded error-code set.\n * Body is read by the caller and passed in as text so we can include a\n * truncated excerpt in `details.body` for `unexpected` responses without\n * burdening the caller with re-reading the response.\n */\nexport function mapGitLabHttpError(input: {\n status: number;\n body: string;\n headers: Headers;\n host: string;\n envVarName: string | undefined;\n context: { project: string; iid?: number };\n}): ConnectorError {\n const { status, body, headers, host, envVarName, context } = input;\n\n if (status === 401 || status === 403) {\n return new ConnectorError(\n \"auth-failed\",\n envVarName\n ? `GitLab rejected the token from ${envVarName} (HTTP ${status}) on ${host}.`\n : `GitLab returned HTTP ${status} on ${host}.`,\n {\n status,\n ...(envVarName ? { envVar: envVarName } : {}),\n host,\n },\n );\n }\n\n if (status === 404) {\n const message =\n context.iid !== undefined\n ? `Issue ${context.iid} not found in project '${context.project}' on ${host}.`\n : `Project '${context.project}' not found on ${host}.`;\n return new ConnectorError(\"remote-error\", message, {\n kind: \"not-found\",\n status,\n project: context.project,\n ...(context.iid !== undefined ? { iid: context.iid } : {}),\n });\n }\n\n if (status === 429) {\n const retryAfter = headers.get(\"retry-after\");\n return new ConnectorError(\n \"remote-error\",\n `GitLab rate-limited the request (HTTP 429) on ${host}.${retryAfter ? ` Retry after ${retryAfter}s.` : \"\"}`,\n {\n kind: \"rate-limited\",\n status,\n ...(retryAfter ? { retryAfter } : {}),\n },\n );\n }\n\n if (status >= 500 && status <= 599) {\n return new ConnectorError(\"remote-error\", `GitLab returned HTTP ${status} on ${host}.`, {\n kind: \"transport\",\n status,\n });\n }\n\n return new ConnectorError(\"remote-error\", `Unexpected HTTP ${status} from GitLab on ${host}.`, {\n kind: \"unexpected\",\n status,\n body: truncateBody(body),\n });\n}\n\n/**\n * Map a thrown fetch/network exception onto a `transport` ConnectorError.\n * Used by the client when `fetch` itself rejects (DNS, TLS, refused, etc.).\n */\nexport function mapTransportError(err: unknown, host: string): ConnectorError {\n const message = err instanceof Error ? err.message : String(err);\n return new ConnectorError(\"remote-error\", `Failed to reach GitLab at ${host}: ${message}`, {\n kind: \"transport\",\n cause: message,\n });\n}\n\nconst BODY_EXCERPT_MAX = 1024;\n\nfunction truncateBody(body: string): string {\n if (body.length <= BODY_EXCERPT_MAX) return body;\n return `${body.slice(0, BODY_EXCERPT_MAX)}…`;\n}\n","/**\n * Per-type data shape version embedded in success payloads from this connector.\n * Increments only on incompatible changes to the issue object shape or the\n * list-issues `meta` shape. Independent of the framework's envelope schema.\n */\nexport const GITLAB_ISSUES_DATA_SCHEMA = 1 as const;\n\nexport type IssueAssignee = {\n username: string;\n name: string;\n};\n\nexport type IssueMilestone = {\n title: string;\n state: string;\n};\n\n/**\n * Stable, versioned subset of the GitLab Issue object surfaced to agents.\n * Fields not listed here are intentionally dropped — adding fields is additive\n * and does NOT require a `dataSchema` bump; removing or renaming any field\n * DOES require a bump.\n */\nexport type IssueOutput = {\n iid: number;\n id: number;\n title: string;\n description: string | null;\n state: string;\n labels: string[];\n assignees: IssueAssignee[];\n milestone: IssueMilestone | null;\n web_url: string;\n created_at: string;\n updated_at: string;\n closed_at: string | null;\n};\n\nexport type ListIssuesMeta = {\n page: number;\n per_page: number;\n total_pages: number | null;\n total: number | null;\n clamped: boolean;\n};\n\nexport type ListIssuesData = {\n issues: IssueOutput[];\n meta: ListIssuesMeta;\n};\n\nexport type GetIssueData = {\n issue: IssueOutput;\n};\n\n/**\n * Map a raw GitLab issue object to the framework's stable IssueOutput shape.\n * Unknown fields are dropped; nullable fields default to `null`.\n */\nexport function projectIssue(raw: unknown): IssueOutput {\n if (typeof raw !== \"object\" || raw === null) {\n throw new Error(\"Expected GitLab issue payload to be a JSON object.\");\n }\n const r = raw as Record<string, unknown>;\n return {\n iid: requireNumber(r.iid, \"iid\"),\n id: requireNumber(r.id, \"id\"),\n title: requireString(r.title, \"title\"),\n description: optionalString(r.description),\n state: requireString(r.state, \"state\"),\n labels: projectLabels(r.labels),\n assignees: projectAssignees(r.assignees),\n milestone: projectMilestone(r.milestone),\n web_url: requireString(r.web_url, \"web_url\"),\n created_at: requireString(r.created_at, \"created_at\"),\n updated_at: requireString(r.updated_at, \"updated_at\"),\n closed_at: optionalString(r.closed_at),\n };\n}\n\nfunction requireNumber(value: unknown, field: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(`Expected GitLab issue field '${field}' to be a number.`);\n }\n return value;\n}\n\nfunction requireString(value: unknown, field: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`Expected GitLab issue field '${field}' to be a string.`);\n }\n return value;\n}\n\nfunction optionalString(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n if (typeof value !== \"string\") return null;\n return value;\n}\n\nfunction projectLabels(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((v): v is string => typeof v === \"string\").map((v) => v);\n}\n\nfunction projectAssignees(value: unknown): IssueAssignee[] {\n if (!Array.isArray(value)) return [];\n const out: IssueAssignee[] = [];\n for (const entry of value) {\n if (typeof entry !== \"object\" || entry === null) continue;\n const r = entry as Record<string, unknown>;\n const username = typeof r.username === \"string\" ? r.username : null;\n const name = typeof r.name === \"string\" ? r.name : null;\n if (username === null || name === null) continue;\n out.push({ username, name });\n }\n return out;\n}\n\nfunction projectMilestone(value: unknown): IssueMilestone | null {\n if (typeof value !== \"object\" || value === null) return null;\n const r = value as Record<string, unknown>;\n const title = typeof r.title === \"string\" ? r.title : null;\n const state = typeof r.state === \"string\" ? r.state : null;\n if (title === null || state === null) return null;\n return { title, state };\n}\n","import { ConnectorError } from \"../../errors.js\";\nimport { mapGitLabHttpError, mapTransportError } from \"./errors.js\";\nimport { type IssueOutput, projectIssue } from \"./output.js\";\n\n/**\n * Thin native-`fetch` facade over GitLab's REST API. v1 supports the two\n * issue endpoints we expose as MCP tools; no SDK dependency.\n *\n * Per Gap 45: a `project` value that is all digits is treated as a numeric\n * project ID and passed verbatim; anything else is URL-encoded as a path.\n */\nconst NUMERIC_ID_RE = /^\\d+$/;\n\nexport type GitLabClientOptions = {\n host: string;\n project: string;\n /** Personal access token; when undefined, the request is made without auth. */\n token: string | undefined;\n /** Env-var name surfaced in 401/403 error messages. Pure UX. */\n envVarName: string | undefined;\n /** Override fetch for tests. Defaults to the global fetch. */\n fetchImpl?: typeof fetch;\n};\n\nexport type ListIssuesParams = {\n state: \"opened\" | \"closed\" | \"all\";\n labels?: string;\n assignee?: string;\n milestone?: string;\n search?: string;\n page: number;\n per_page: number;\n};\n\nexport type ListIssuesResponse = {\n issues: IssueOutput[];\n /** From `X-Total-Pages` header; null when GitLab omits the header. */\n totalPages: number | null;\n /** From `X-Total` header; null when GitLab omits the header. */\n total: number | null;\n};\n\n/**\n * GET /api/v4/projects/:project/issues\n */\nexport async function listIssues(\n opts: GitLabClientOptions,\n params: ListIssuesParams,\n): Promise<ListIssuesResponse> {\n const url = buildIssuesListUrl(opts, params);\n const response = await performRequest(opts, url);\n const issuesRaw = (await response.json()) as unknown;\n if (!Array.isArray(issuesRaw)) {\n throw new ConnectorError(\"remote-error\", \"GitLab list-issues response was not a JSON array.\", {\n kind: \"unexpected\",\n });\n }\n const issues = issuesRaw.map((raw) => projectIssue(raw));\n return {\n issues,\n totalPages: readIntegerHeader(response.headers, \"x-total-pages\"),\n total: readIntegerHeader(response.headers, \"x-total\"),\n };\n}\n\n/**\n * GET /api/v4/projects/:project/issues/:iid\n */\nexport async function getIssue(opts: GitLabClientOptions, iid: number): Promise<IssueOutput> {\n const url = buildIssueUrl(opts, iid);\n const response = await performRequest(opts, url, { iid });\n const raw = (await response.json()) as unknown;\n return projectIssue(raw);\n}\n\nfunction buildIssuesListUrl(opts: GitLabClientOptions, params: ListIssuesParams): URL {\n const url = new URL(`${opts.host}/api/v4/projects/${encodeProjectSegment(opts.project)}/issues`);\n url.searchParams.set(\"state\", params.state);\n url.searchParams.set(\"page\", String(params.page));\n url.searchParams.set(\"per_page\", String(params.per_page));\n if (params.labels !== undefined) url.searchParams.set(\"labels\", params.labels);\n if (params.assignee !== undefined) {\n const param = gitlabAssigneeParam(params.assignee);\n url.searchParams.set(param.key, param.value);\n }\n if (params.milestone !== undefined) url.searchParams.set(\"milestone\", params.milestone);\n if (params.search !== undefined) url.searchParams.set(\"search\", params.search);\n return url;\n}\n\nfunction buildIssueUrl(opts: GitLabClientOptions, iid: number): URL {\n return new URL(\n `${opts.host}/api/v4/projects/${encodeProjectSegment(opts.project)}/issues/${iid}`,\n );\n}\n\n/**\n * Encode the project identifier for use in a URL path segment.\n *\n * Per the framework architecture (Gap 45): purely-numeric values are treated\n * as project IDs and used verbatim; anything else is URL-encoded as a path\n * (forward slashes become `%2F`).\n */\nexport function encodeProjectSegment(project: string): string {\n if (NUMERIC_ID_RE.test(project)) return project;\n return encodeURIComponent(project);\n}\n\nasync function performRequest(\n opts: GitLabClientOptions,\n url: URL,\n context: { iid?: number } = {},\n): Promise<Response> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n };\n if (opts.token !== undefined) {\n headers[\"PRIVATE-TOKEN\"] = opts.token;\n }\n const fetchImpl = opts.fetchImpl ?? fetch;\n let response: Response;\n try {\n response = await fetchImpl(url, { method: \"GET\", headers });\n } catch (err) {\n throw mapTransportError(err, opts.host);\n }\n if (!response.ok) {\n const body = await response.text().catch(() => \"\");\n throw mapGitLabHttpError({\n status: response.status,\n body,\n headers: response.headers,\n host: opts.host,\n envVarName: opts.envVarName,\n context: {\n project: opts.project,\n ...(context.iid !== undefined ? { iid: context.iid } : {}),\n },\n });\n }\n return response;\n}\n\nfunction readIntegerHeader(headers: Headers, name: string): number | null {\n const raw = headers.get(name);\n if (raw === null || raw.length === 0) return null;\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\n/**\n * GitLab's `assignee_username` and `assignee_id` parameters accept the\n * special values `None` and `Any` via the singular form. We surface the\n * detail to callers via a small mapping so the agent-facing schema can use\n * the simpler `assignee` argument name.\n */\nfunction gitlabAssigneeParam(value: string): { key: string; value: string } {\n return { key: \"assignee_username\", value };\n}\n","import { z } from \"zod\";\nimport { defineConnectorOperation } from \"../../types.js\";\nimport { type GitLabClientOptions, type ListIssuesParams, getIssue, listIssues } from \"./client.js\";\nimport { GITLAB_ISSUES_DATA_SCHEMA, type GetIssueData, type ListIssuesData } from \"./output.js\";\nimport type { GitLabIssuesConfig } from \"./schema.js\";\n\n/**\n * Hard cap on `per_page`. GitLab's documented maximum is 100; values above\n * are clamped (with `meta.clamped = true`).\n */\nexport const PER_PAGE_CAP = 100;\n\nconst listIssuesArgsSchema = z\n .object({\n state: z.enum([\"opened\", \"closed\", \"all\"]).default(\"opened\"),\n labels: z.string().min(1).optional(),\n assignee: z.string().min(1).optional(),\n milestone: z.string().min(1).optional(),\n search: z.string().min(1).optional(),\n page: z.coerce.number().int().positive(\"page must be a positive integer\").default(1),\n per_page: z.coerce.number().int().positive(\"per_page must be a positive integer\").default(20),\n })\n .strict();\n\nconst getIssueArgsSchema = z\n .object({\n iid: z.coerce.number().int().positive(\"iid must be a positive integer\"),\n })\n .strict();\n\ntype ListIssuesArgs = z.infer<typeof listIssuesArgsSchema>;\ntype GetIssueArgs = z.infer<typeof getIssueArgsSchema>;\n\nexport const listIssuesOperation = defineConnectorOperation<\n GitLabIssuesConfig,\n ListIssuesArgs,\n ListIssuesData\n>({\n name: \"list-issues\",\n argsSchema: listIssuesArgsSchema,\n dataSchemaVersion: GITLAB_ISSUES_DATA_SCHEMA,\n handler: async (args, ctx) => {\n const requestedPerPage = args.per_page;\n const clamped = requestedPerPage > PER_PAGE_CAP;\n const effectivePerPage = clamped ? PER_PAGE_CAP : requestedPerPage;\n const params: ListIssuesParams = {\n state: args.state,\n page: args.page,\n per_page: effectivePerPage,\n ...(args.labels !== undefined ? { labels: args.labels } : {}),\n ...(args.assignee !== undefined ? { assignee: args.assignee } : {}),\n ...(args.milestone !== undefined ? { milestone: args.milestone } : {}),\n ...(args.search !== undefined ? { search: args.search } : {}),\n };\n const client = clientFromContext(ctx);\n const response = await listIssues(client, params);\n return {\n data: {\n issues: response.issues,\n meta: {\n page: args.page,\n per_page: effectivePerPage,\n total_pages: response.totalPages,\n total: response.total,\n clamped,\n },\n },\n };\n },\n});\n\nexport const getIssueOperation = defineConnectorOperation<\n GitLabIssuesConfig,\n GetIssueArgs,\n GetIssueData\n>({\n name: \"get-issue\",\n argsSchema: getIssueArgsSchema,\n dataSchemaVersion: GITLAB_ISSUES_DATA_SCHEMA,\n handler: async (args, ctx) => {\n const client = clientFromContext(ctx);\n const issue = await getIssue(client, args.iid);\n return { data: { issue } };\n },\n});\n\n/**\n * Build the per-request client options bag from the dispatcher's context.\n * The dispatcher already resolved the per-type config and auth; we just\n * thread them through.\n */\nfunction clientFromContext(ctx: {\n config: GitLabIssuesConfig;\n token: string | undefined;\n auth: { type: \"delegated\" } | { type: \"token\"; value: string; envVar: string };\n}): GitLabClientOptions {\n return {\n host: ctx.config.host,\n project: ctx.config.project,\n token: ctx.token,\n envVarName: ctx.auth.type === \"token\" ? ctx.auth.envVar : undefined,\n };\n}\n\n/**\n * For tests that want to wire in a fetch mock without exporting the whole\n * dispatcher path. Production code goes through `invokeOperation` and never\n * calls this.\n */\nexport function __clientFromConfigForTests(\n config: GitLabIssuesConfig,\n token: string | undefined,\n envVarName: string | undefined,\n fetchImpl?: typeof fetch,\n): GitLabClientOptions {\n return {\n host: config.host,\n project: config.project,\n token,\n envVarName,\n ...(fetchImpl ? { fetchImpl } : {}),\n };\n}\n\n// Surface the args schemas so tests can validate against them.\nexport {\n listIssuesArgsSchema as listIssuesArgsSchemaForTests,\n getIssueArgsSchema as getIssueArgsSchemaForTests,\n};\n","import { z } from \"zod\";\n\nconst DEFAULT_HOST = \"https://gitlab.com\";\n\nfunction isHttpsUrl(value: string): boolean {\n if (/\\s/.test(value)) return false;\n if (!/^https:\\/\\/[^/]+/i.test(value)) return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Trim a trailing slash so the request builder can concatenate\n * `${host}/api/v4/...` without producing `//`.\n */\nfunction normalizeHost(value: string): string {\n return value.endsWith(\"/\") ? value.slice(0, -1) : value;\n}\n\nexport const GITLAB_DEFAULT_HOST = DEFAULT_HOST;\n\nexport const GitLabIssuesConfigSchema = z\n .object({\n host: z\n .string()\n .refine(isHttpsUrl, \"host must be an HTTPS URL (e.g. https://gitlab.com)\")\n .transform(normalizeHost)\n .optional()\n .default(DEFAULT_HOST),\n project: z\n .string()\n .min(1, \"project is required\")\n .refine((v) => !/\\s/.test(v), \"project must not contain whitespace\"),\n apiVersion: z.literal(4).optional().default(4),\n })\n .strict();\n\nexport type GitLabIssuesConfig = z.infer<typeof GitLabIssuesConfigSchema>;\n","import type { ConnectorType } from \"../../types.js\";\nimport { getIssueOperation, listIssuesOperation } from \"./operations.js\";\nimport type { GitLabIssuesConfig } from \"./schema.js\";\nimport { GitLabIssuesConfigSchema } from \"./schema.js\";\n\nexport const GITLAB_ISSUES_TYPE_ID = \"gitlab-issues\" as const;\n\nexport const gitlabIssuesType: ConnectorType<GitLabIssuesConfig> = {\n id: GITLAB_ISSUES_TYPE_ID,\n label: \"GitLab Issues\",\n configSchema: GitLabIssuesConfigSchema,\n operations: {\n [listIssuesOperation.name]: listIssuesOperation,\n [getIssueOperation.name]: getIssueOperation,\n },\n describeTool: (operation, resolvedConfig) => {\n const host = stripScheme(resolvedConfig.host);\n const project = resolvedConfig.project;\n switch (operation.name) {\n case \"list-issues\":\n return `List GitLab issues for project ${project} on ${host}. Supports filtering by state (opened/closed/all), labels, assignee, milestone, free-text search, and page/per_page pagination. Returns at most 100 issues per call.`;\n case \"get-issue\":\n return `Fetch a single GitLab issue from project ${project} on ${host} by its project-scoped iid. Returns the issue's title, description, state, labels, assignees, milestone, timestamps, and web_url.`;\n default:\n return `GitLab Issues operation '${operation.name}' for project ${project} on ${host}.`;\n }\n },\n};\n\nfunction stripScheme(host: string): string {\n return host.replace(/^https?:\\/\\//i, \"\");\n}\n","import type { ConnectorType } from \"./types.js\";\nimport { gitlabIssuesType } from \"./types/gitlab-issues/index.js\";\n\n/**\n * Compile-time registry of supported connector types. This module is the only\n * place that imports per-type modules; adding a new type is a one-line change.\n *\n * Tests register short-lived fixture types via `__registerTestType` below.\n */\nconst REGISTRY = new Map<string, ConnectorType<unknown>>();\n\n// First-party connector types ship registered.\nREGISTRY.set(gitlabIssuesType.id, gitlabIssuesType as unknown as ConnectorType<unknown>);\n\nexport function listConnectorTypes(): ConnectorType<unknown>[] {\n return [...REGISTRY.values()];\n}\n\nexport function lookupConnectorType(id: string): ConnectorType<unknown> | undefined {\n return REGISTRY.get(id);\n}\n\nexport function hasConnectorType(id: string): boolean {\n return REGISTRY.has(id);\n}\n\n/**\n * Add a type to the production registry. Called once per type from a per-type\n * module's top-level import effect (e.g. `src/core/connectors/types/<id>/index.ts`).\n * Re-registering the same id throws — type identifiers are write-once.\n */\nexport function registerConnectorType<T>(type: ConnectorType<T>): void {\n if (REGISTRY.has(type.id)) {\n throw new Error(`Connector type '${type.id}' is already registered.`);\n }\n // Generic erasure is safe — dispatch.ts re-parses the config through the\n // type's own `configSchema` at the chokepoint, restoring concrete typing\n // for the handler call.\n REGISTRY.set(type.id, type as unknown as ConnectorType<unknown>);\n}\n\n/**\n * Test-only: register a fixture type and return a disposer that removes it.\n * Production code MUST NOT call this — use `registerConnectorType` instead.\n * Marker prefix (`__`) makes accidental use obvious in reviews.\n */\nexport function __registerTestType<T>(type: ConnectorType<T>): () => void {\n REGISTRY.set(type.id, type as unknown as ConnectorType<unknown>);\n return () => {\n REGISTRY.delete(type.id);\n };\n}\n","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 { lookupConnectorType } from \"../core/connectors/registry.js\";\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\n/**\n * Per-connector entry in `CitadelConfig.connectors`. Per-type `config` payload\n * is validated by the registered type's `configSchema` in `.superRefine` below.\n */\nexport const ConnectorBaseSchema = 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 type: z.string().min(1),\n auth: AuthRefSchema.optional(),\n description: z.string().min(1).optional(),\n config: z.unknown().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 connectors?: z.infer<typeof ConnectorBaseSchema>[];\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 const connectorNames = new Map<string, number>();\n const connectors = data.connectors ?? [];\n for (let i = 0; i < connectors.length; i++) {\n const entry = connectors[i];\n if (!entry?.name) continue;\n\n const priorIndex = connectorNames.get(entry.name);\n if (priorIndex !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `duplicate connector name '${entry.name}' — also used by connectors[${priorIndex}]`,\n path: [\"connectors\", i, \"name\"],\n });\n } else {\n connectorNames.set(entry.name, i);\n }\n\n const type = lookupConnectorType(entry.type);\n if (!type) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `unknown connector type '${entry.type}' for connector '${entry.name}'`,\n path: [\"connectors\", i, \"type\"],\n });\n continue;\n }\n\n const configResult = type.configSchema.safeParse(entry.config ?? {});\n if (!configResult.success) {\n for (const issue of configResult.error.issues) {\n ctx.addIssue({\n ...issue,\n path: [\"connectors\", i, \"config\", ...issue.path],\n });\n }\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 connectors: z.array(ConnectorBaseSchema).optional(),\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 Connector = z.infer<typeof ConnectorBaseSchema>;\nexport type CitadelConfig = z.infer<typeof CitadelConfigSchema>;\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","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 type { Theming } from \"../theme/index.js\";\n\nconst FULL = `████████████████████████████████████████████████████████████████████████████████████████████████████\n███████████████████████████████████████████▅▄▃▂▁▁▁▂▂▁▁▃▃▅▇██████████████████████████████████████████\n████████████████████████████████████████▆▅▅▄▂ ▁▂▄████████████████████████████████████████\n██████████████████████████████████████▅▄▆▄▅▂▂▁ ▂▇█████████████████████████████████████\n████████████████████████████████████▆▄▇█▆▆▂▂▃▃▁ ▁ ▁▄████████████████████████████████████\n███████████████████████████████████▅▅████▇▅▅▄▃▂▂▁ ▁▁▁▁▂▂▂▂▂▁ ▃▇██████████████████████████████████\n██████████████████████████████████▆▅███████▇▇▇▅▂▂ ▁▂▂▁▃▃▃▃▁▁▁▁ ▄██████████████████████████████████\n██████████████████████████████████▆▇██████▇▁▁▂▃▃▂▃ ▁▁ ▁██████████████████████████████████\n██████████████████████████████████▄▆▇█████▇▂ ▁ ██████████████████████████████████\n█████████████████████████████████▇▃▆██████▂▂▂▁ ▅█████████████████████████████████\n█████████████████████████████████▂▅▇██████▅▂▁ ▁ ▁ ▁▆████████████████████████████████\n█████████████████████████████████▅▇███▇█▇▅▂▃▄▂▁ ▁▁▂ ▂▁▁ ▂▁▁▃▃█████████████████████████████████\n█████████████████████████████████▅███▆▄▃███▆▄▃▂▁▂▃▃▂▂▁▁▂▄▆▇▇▆▁▁▁▂▆▅▅████████████████████████████████\n████████████████████████████████▆▆▇██▃▅▇█████████▆▂▇█████▇▅▄▇▅▁▁▇▄▃▃████████████████████████████████\n███████████████████████████████▇▄█▇██▄▆████▇▇████▃▁▁▇██▇▅▃▄▃▂ ▁▂█▃▃▂▆███████████████████████████████\n███████████████████████████████▆▇████▆▃█▇▆█▇▇▆▇██▄ ▁▂▁▃▆▆▄▂▁ ▂▃▄▃▆▂▂▃▇██████████████████████████████\n██████████████████████████████▇▄▇████▅█▇█▆▄▄▁▂███▃ ▁▂▁ ▁▂▄▅▆█▂▄▄█▂▂▂▅██████████████████████████████\n█████████████████████████████▇▇▅▆████▅█████▇▁▆█▅█▁ ▁▂▇▃ ▅██▄ ▇██▂▃▁▇▆█████████████████████████████\n█████████████████████████████▇▆▆▆████▅███████████▇▆▇█▆▁▃▃ ▁▆▅▁ ▇█▆▂▁▄▄▆▇████████████████████████████\n████████████████████████████▆▆██▆████▅██████▄▅█████▅▁ ▁▂ ▂ ▁█▇▃▁▁▇█▅▃▇███████████████████████████\n██████████████████████████▇▆██████████▅███▇▆▅█████▇█▇▇▅▅▂▁▁ ▅█▅▃▂▄▅██▂▃▅██████████████████████████\n█████████████████████████▄▅████████████▆██▇███████▆▄▄▂▁▂█▂ ▁▅██▅▃▃▅▆██▄▅▂▁▆████████████████████████\n████████████████████████▅▇██████████████▆▆███████▅▄▅▇▇▃▃▄▃▁▂▇████▆▄▄▇█▅█▆▃▄▁▆███████████████████████\n██████████████████████▅▅████████████████████▇▆▆▄▂▂▁ ▁▂▁ ▁▃█▇▇███▇▅▆█▇▇▆▇▆▆▄▅▃▇█████████████████████\n███████████████████▇▇▄███████████████████████▄▃▁▂▃▁▂▁ ▁▁▂▆█▆▇███▇▇▆█▇▇▇▇██▇▇▁ ▂▅▇▇██████████████████\n███████████████▇▇▆▇████████████████████████████▆▅▃▂▂▂▂▃▅███████▆▇▇███▇▇█▇█▇▂▁▁▅▆▃▂▄▆▆███████████████\n████████████▆▇▇██████████████████████████████████▇█▅▅▇███████▇▆████▇█████▇▃▁▄▇▃▃▁▂▃▆▆▆▄▆▇███████████\n█████████▇▇▇███████████████████████████████████████████████▇▆████▇▇▇████▅▃▃▇▆▁ ▂▃▁ ▂▅▂▁▁▄▇▆█████████\n█████▇▇▇▇██████████████████████████████████████████████▇▆▆▆█████▆▇█▅████▇▇█▅ ▁▃▂▂▁▃▂ ▂▃▅██▇▆▆▆█████\n████▅█████████████████████████████████████████▇▇█████▇▆███████▇█▇▆▇█████████▇▇█▆▄▄▁▁▂▃▂▁ ▄█▇▇▇▅▆███\n████▇███████████████████████████████▇████████████████████████▆▆▇▆█████████▇▇███▇█▅▅▅▃▁▁▁▃▅▆▅▄▆█▇████\n██████████████████████████████████████████████████████████▆▇▇█▆██████████████▇█████▇█▇▆▇▇▇▆▄████████\n███████████████████████████████████████▆██████████████▇▇▇▆█▆▇▆███████▇▇████▇█████████▇▇▇▇▆▇█████████\n██████████████████████████████████████████████████▇▇▇▇▇█████▇█████▇▆▇▆█▆▇▇█████████▇▇███████████████\n███████████████████████████████████████▇▇██████████████████▇▆███████▇▅▅▅███▇▇▇▇▇▇▇██████████████████\n██████████████████████████████████████████▆▇█████████████▇██████████████▇▇▅▇████████████████████████\n███████████████████████████████████████████▆█▇███████████▇██████████████████████████████████████████\n████████████████████████████████████████████▇▆█████████▇████████████████████████████████████████████\n█████████████████████████████████████████████▇█▇▆█████▇█████████████████████████████████████████████\n████████████████████████████████████████████████▆▇█▆████████████████████████████████████████████████\n████████████████████████████████████████████████████████████████████████████████████████████████████\n███████████████████████████████████████████████████▇████████████████████████████████████████████████\n███████████████████████████████████████████████████▆████████████████████████████████████████████████\n████████████████████████████████████████████████████████████████████████████████████████████████████`;\n\nconst COMPACT = `█▀▄▀█ ▄▀█ █▀▀ █▀ ▀█▀ █▀▀ █▀█\n█ ▀ █ █▀█ ██▄ ▄█ █ ██▄ █▀▄`;\n\nconst MIN_WIDTH_FOR_FULL = 100;\nconst MIN_WIDTH_FOR_COMPACT = 40;\n\nexport type BannerVariant = \"full\" | \"compact\" | \"suppressed\";\n\nexport function selectBannerVariant(columns: number, isTTY: boolean): BannerVariant {\n if (!isTTY) return \"suppressed\";\n if (columns < MIN_WIDTH_FOR_COMPACT) return \"suppressed\";\n if (columns < MIN_WIDTH_FOR_FULL) return \"compact\";\n return \"full\";\n}\n\nexport function renderBanner(\n theming: Theming,\n variant: BannerVariant,\n opts: { subtitle?: string } = {},\n): string {\n if (variant === \"suppressed\") return \"\";\n const art = variant === \"full\" ? FULL : COMPACT;\n const accentArt = theming.painter.token(\"accent\", art);\n if (!opts.subtitle) return accentArt;\n const subtitle = theming.painter.dim(opts.subtitle);\n return `${accentArt}\\n ${subtitle}`;\n}\n\nexport function bannerForContext(theming: Theming, columns: number, subtitle?: string): string {\n const variant = selectBannerVariant(columns, theming.caps.isTTY);\n return renderBanner(theming, variant, subtitle !== undefined ? { subtitle } : {});\n}\n","import * as clack from \"@clack/prompts\";\nimport type { Theming } from \"./theme/index.js\";\n\nexport class PromptCancelledError extends Error {\n constructor(message = \"Prompt cancelled\") {\n super(message);\n this.name = \"PromptCancelledError\";\n }\n}\n\nfunction ensure<T>(value: T | symbol): T {\n if (clack.isCancel(value)) {\n throw new PromptCancelledError();\n }\n return value;\n}\n\ntype Spinner = ReturnType<typeof clack.spinner>;\n\ntype ClackSelectOpts<T extends string> = Parameters<typeof clack.select<T>>[0];\ntype ClackMultiselectOpts<T extends string> = Parameters<typeof clack.multiselect<T>>[0];\ntype ClackOption<T extends string> = ClackSelectOpts<T>[\"options\"][number];\n\nfunction buildOption<T extends string>(o: {\n value: T;\n label: string;\n hint?: string;\n}): ClackOption<T> {\n const base: { value: T; label: string } = { value: o.value, label: o.label };\n return (o.hint === undefined ? base : { ...base, hint: o.hint }) as ClackOption<T>;\n}\n\nexport type Prompts = {\n intro: (title: string) => void;\n outro: (message: string) => void;\n note: (title: string, body?: string) => void;\n log: {\n message: (m: string) => void;\n success: (m: string) => void;\n warning: (m: string) => void;\n error: (m: string) => void;\n info: (m: string) => void;\n };\n text: (opts: {\n message: string;\n placeholder?: string;\n initialValue?: string;\n validate?: (v: string) => string | undefined;\n }) => Promise<string>;\n confirm: (opts: { message: string; initialValue?: boolean }) => Promise<boolean>;\n select: <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValue?: T;\n }) => Promise<T>;\n multiselect: <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValues?: T[];\n required?: boolean;\n }) => Promise<T[]>;\n group: typeof clack.group;\n spinner: () => Spinner;\n raw: typeof clack;\n};\n\nexport function createPrompts(theming: Theming): Prompts {\n void theming;\n return {\n intro: (title) => clack.intro(title),\n outro: (message) => clack.outro(message),\n note: (title, body) => clack.note(body ?? \"\", title),\n log: {\n message: (m) => clack.log.message(m),\n success: (m) => clack.log.success(m),\n warning: (m) => clack.log.warning(m),\n error: (m) => clack.log.error(m),\n info: (m) => clack.log.info(m),\n },\n text: async (opts) => {\n const validateAdapter = opts.validate\n ? (v: string | undefined) => {\n const result = opts.validate?.(v ?? \"\");\n return result ?? undefined;\n }\n : undefined;\n const baseOpts = {\n message: opts.message,\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n ...(validateAdapter ? { validate: validateAdapter } : {}),\n };\n const result = await clack.text(baseOpts);\n const checked = ensure(result);\n return checked ?? \"\";\n },\n confirm: async (opts) => {\n const result = await clack.confirm({\n message: opts.message,\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n });\n return ensure(result);\n },\n select: async <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValue?: T;\n }) => {\n const options = opts.options.map(buildOption<T>);\n const params = {\n message: opts.message,\n options,\n ...(opts.initialValue !== undefined ? { initialValue: opts.initialValue } : {}),\n } as ClackSelectOpts<T>;\n const result = await clack.select<T>(params);\n return ensure(result);\n },\n multiselect: async <T extends string>(opts: {\n message: string;\n options: { value: T; label: string; hint?: string }[];\n initialValues?: T[];\n required?: boolean;\n }) => {\n const options = opts.options.map(buildOption<T>);\n const params = {\n message: opts.message,\n options,\n ...(opts.initialValues !== undefined ? { initialValues: opts.initialValues } : {}),\n ...(opts.required !== undefined ? { required: opts.required } : {}),\n } as ClackMultiselectOpts<T>;\n const result = await clack.multiselect<T>(params);\n return ensure(result);\n },\n group: clack.group,\n spinner: () => clack.spinner(),\n raw: clack,\n };\n}\n","import type { ColorDepth, Theme } from \"./tokens.js\";\n\nexport type TerminalEnv = {\n NO_COLOR?: string | undefined;\n FORCE_COLOR?: string | undefined;\n COLORTERM?: string | undefined;\n TERM?: string | undefined;\n COLORFGBG?: string | undefined;\n MAESTER_THEME?: string | undefined;\n MAESTER_NO_MOTION?: string | undefined;\n MAESTER_NO_WELCOME?: string | undefined;\n LC_CTYPE?: string | undefined;\n LANG?: string | undefined;\n};\n\nexport type TerminalCapabilities = {\n isTTY: boolean;\n colorDepth: ColorDepth;\n theme: Theme;\n unicode: boolean;\n motion: boolean;\n};\n\nexport type DetectOptions = {\n env?: TerminalEnv;\n isTTY?: boolean;\n unicodeOverride?: boolean;\n themeOverride?: Theme;\n forceColor?: \"always\" | \"never\" | \"auto\";\n};\n\nfunction isNonEmpty(value: string | undefined): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\nexport function detectColorDepth(env: TerminalEnv, isTTY: boolean): ColorDepth {\n if (isNonEmpty(env.NO_COLOR)) {\n return \"none\";\n }\n if (isNonEmpty(env.FORCE_COLOR)) {\n const v = env.FORCE_COLOR;\n if (v === \"0\" || v === \"false\") return \"none\";\n if (v === \"1\") return \"ansi16\";\n if (v === \"2\") return \"ansi256\";\n if (v === \"3\" || v === \"true\" || v === \"\") return \"truecolor\";\n return \"truecolor\";\n }\n if (!isTTY) {\n return \"none\";\n }\n const colorTerm = env.COLORTERM ?? \"\";\n if (colorTerm === \"truecolor\" || colorTerm === \"24bit\") {\n return \"truecolor\";\n }\n const term = env.TERM ?? \"\";\n if (term.includes(\"truecolor\") || term.includes(\"24bit\")) {\n return \"truecolor\";\n }\n if (term.includes(\"256color\")) {\n return \"ansi256\";\n }\n if (term === \"dumb\" || term === \"\") {\n return \"none\";\n }\n return \"ansi16\";\n}\n\nexport function detectTheme(env: TerminalEnv, override?: Theme): Theme {\n if (override) return override;\n const fromEnv = env.MAESTER_THEME?.toLowerCase();\n if (fromEnv === \"light\" || fromEnv === \"dark\") return fromEnv;\n const colorFgBg = env.COLORFGBG;\n if (colorFgBg) {\n const parts = colorFgBg.split(\";\");\n const bg = parts.length > 0 ? parts[parts.length - 1] : undefined;\n if (bg !== undefined && /^\\d+$/.test(bg)) {\n const idx = Number(bg);\n if (idx >= 7 && idx <= 15) return \"light\";\n }\n }\n return \"dark\";\n}\n\nexport function detectUnicode(env: TerminalEnv, override?: boolean): boolean {\n if (override !== undefined) return override;\n const lcCtype = env.LC_CTYPE ?? \"\";\n const lang = env.LANG ?? \"\";\n return /UTF-?8/i.test(lcCtype) || /UTF-?8/i.test(lang) || process.platform === \"darwin\";\n}\n\nexport function detectMotion(env: TerminalEnv & { NO_MOTION?: string | undefined }): boolean {\n return !isNonEmpty(env.MAESTER_NO_MOTION) && !isNonEmpty(env.NO_MOTION);\n}\n\nexport function detect(opts: DetectOptions = {}): TerminalCapabilities {\n const env = opts.env ?? (process.env as TerminalEnv);\n const isTTY = opts.isTTY ?? Boolean(process.stdout.isTTY);\n const force = opts.forceColor ?? \"auto\";\n let colorDepth: ColorDepth;\n if (force === \"never\") colorDepth = \"none\";\n else if (force === \"always\")\n colorDepth = detectColorDepth({ ...env, FORCE_COLOR: env.FORCE_COLOR ?? \"3\" }, isTTY);\n else colorDepth = detectColorDepth(env, isTTY);\n return {\n isTTY,\n colorDepth,\n theme: detectTheme(env, opts.themeOverride),\n unicode: detectUnicode(env, opts.unicodeOverride),\n motion: detectMotion(env),\n };\n}\n","import type { PaletteToken } from \"./tokens.js\";\n\nexport type GlyphRole =\n | \"cursor\"\n | \"expand\"\n | \"collapse\"\n | \"checkOff\"\n | \"checkOn\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"bullet\"\n | \"ellipsis\"\n | \"separator\"\n | \"progressFill\"\n | \"progressTrack\";\n\ntype GlyphDef = {\n unicode: string;\n ascii: string;\n token: PaletteToken | undefined;\n};\n\nconst CATALOG: Record<GlyphRole, GlyphDef> = {\n cursor: { unicode: \"▸\", ascii: \">\", token: \"accent\" },\n expand: { unicode: \"▾\", ascii: \"v\", token: \"accent\" },\n collapse: { unicode: \"▴\", ascii: \"^\", token: \"accent\" },\n checkOff: { unicode: \"◯\", ascii: \"[ ]\", token: \"fgMuted\" },\n checkOn: { unicode: \"◉\", ascii: \"[x]\", token: \"accent\" },\n success: { unicode: \"✓\", ascii: \"[ok]\", token: \"success\" },\n warning: { unicode: \"!\", ascii: \"!\", token: \"warning\" },\n error: { unicode: \"✗\", ascii: \"[X]\", token: \"error\" },\n info: { unicode: \"›\", ascii: \">\", token: \"info\" },\n bullet: { unicode: \"·\", ascii: \"-\", token: \"fgMuted\" },\n ellipsis: { unicode: \"…\", ascii: \"...\", token: undefined },\n separator: { unicode: \" · \", ascii: \" - \", token: \"fgMuted\" },\n progressFill: { unicode: \"█\", ascii: \"#\", token: \"accent\" },\n progressTrack: { unicode: \"░\", ascii: \".\", token: \"fgFaint\" },\n};\n\nexport const SPINNER_FRAMES_UNICODE = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"] as const;\nexport const SPINNER_FRAMES_ASCII = [\"|\", \"/\", \"-\", \"\\\\\"] as const;\n\nexport function glyph(\n role: GlyphRole,\n unicode: boolean,\n): { text: string; token: PaletteToken | undefined } {\n const def = CATALOG[role];\n return { text: unicode ? def.unicode : def.ascii, token: def.token };\n}\n\nexport function spinnerFrames(unicode: boolean): readonly string[] {\n return unicode ? SPINNER_FRAMES_UNICODE : SPINNER_FRAMES_ASCII;\n}\n","export const PALETTE = {\n accent: { hex: \"#7CE7C7\", ansi256: 121 },\n accentStrong: { hex: \"#2BA88A\", ansi256: 36 },\n accentAlt: { hex: \"#B197FC\", ansi256: 141 },\n success: { hex: \"#6ED49B\", ansi256: 78 },\n warning: { hex: \"#F0C674\", ansi256: 222 },\n error: { hex: \"#FF6B6B\", ansi256: 203 },\n info: { hex: \"#74A9F0\", ansi256: 111 },\n fgMuted: { hex: \"#8A8A8A\", ansi256: 245 },\n fgFaint: { hex: \"#5A5A5A\", ansi256: 240 },\n} as const;\n\nexport type PaletteToken = keyof typeof PALETTE;\n\nexport const SPACING = {\n xs: 1,\n sm: 2,\n md: 4,\n lg: 1,\n xl: 2,\n} as const;\n\nexport const WIDTH = {\n proseTarget: 72,\n proseHardWrap: 80,\n panelMax: 100,\n minimum: 40,\n compactCeiling: 79,\n full: 80,\n} as const;\n\nexport type Theme = \"dark\" | \"light\";\n\nexport type ColorDepth = \"truecolor\" | \"ansi256\" | \"ansi16\" | \"none\";\n\nexport type ResolvedToken = {\n hex: string;\n ansi256: number;\n ansi16: string;\n};\n\nconst ANSI16_BY_TOKEN: Record<PaletteToken, string> = {\n accent: \"cyanBright\",\n accentStrong: \"cyan\",\n accentAlt: \"magentaBright\",\n success: \"greenBright\",\n warning: \"yellow\",\n error: \"redBright\",\n info: \"blueBright\",\n fgMuted: \"gray\",\n fgFaint: \"gray\",\n};\n\nexport function resolveToken(token: PaletteToken, theme: Theme): ResolvedToken {\n const effective = token === \"accent\" && theme === \"light\" ? \"accentStrong\" : token;\n const palette = PALETTE[effective];\n return {\n hex: palette.hex,\n ansi256: palette.ansi256,\n ansi16: ANSI16_BY_TOKEN[effective] ?? \"white\",\n };\n}\n","import { Chalk, type ChalkInstance } from \"chalk\";\nimport { type ColorDepth, type PaletteToken, type Theme, resolveToken } from \"./tokens.js\";\n\nconst COLOR_LEVEL_BY_DEPTH: Record<ColorDepth, 0 | 1 | 2 | 3> = {\n none: 0,\n ansi16: 1,\n ansi256: 2,\n truecolor: 3,\n};\n\nexport type Painter = {\n token: (token: PaletteToken, text: string) => string;\n bold: (text: string) => string;\n dim: (text: string) => string;\n italic: (text: string) => string;\n underline: (text: string) => string;\n inverse: (text: string) => string;\n raw: (text: string) => string;\n};\n\nexport function createPainter(depth: ColorDepth, theme: Theme): Painter {\n const level = COLOR_LEVEL_BY_DEPTH[depth];\n const instance: ChalkInstance = new Chalk({ level });\n\n function paint(token: PaletteToken, text: string): string {\n if (level === 0) return text;\n const resolved = resolveToken(token, theme);\n if (level >= 3) {\n return instance.hex(resolved.hex)(text);\n }\n if (level === 2) {\n return instance.ansi256(resolved.ansi256)(text);\n }\n const named = resolved.ansi16 as keyof ChalkInstance;\n const fn = instance[named];\n if (typeof fn === \"function\") {\n return (fn as (s: string) => string)(text);\n }\n return text;\n }\n\n return {\n token: paint,\n bold: (text) => (level === 0 ? text : instance.bold(text)),\n dim: (text) => (level === 0 ? text : instance.dim(text)),\n italic: (text) => (level === 0 ? text : instance.italic(text)),\n underline: (text) => (level === 0 ? text : instance.underline(text)),\n inverse: (text) => (level === 0 ? text : instance.inverse(text)),\n raw: (text) => text,\n };\n}\n","import { type DetectOptions, type TerminalCapabilities, detect } from \"./detect.js\";\nimport { type GlyphRole, glyph as glyphFor, spinnerFrames as spinnerFramesFor } from \"./glyphs.js\";\nimport { type Painter, createPainter } from \"./resolver.js\";\nimport type { PaletteToken } from \"./tokens.js\";\n\nexport type Theming = {\n caps: TerminalCapabilities;\n painter: Painter;\n glyph: (role: GlyphRole) => { text: string; token: PaletteToken | undefined };\n paintedGlyph: (role: GlyphRole) => string;\n spinnerFrames: () => readonly string[];\n};\n\nexport function createTheming(opts: DetectOptions = {}): Theming {\n const caps = detect(opts);\n const painter = createPainter(caps.colorDepth, caps.theme);\n return {\n caps,\n painter,\n glyph: (role) => glyphFor(role, caps.unicode),\n paintedGlyph: (role) => {\n const g = glyphFor(role, caps.unicode);\n return g.token ? painter.token(g.token, g.text) : g.text;\n },\n spinnerFrames: () => spinnerFramesFor(caps.unicode),\n };\n}\n\nexport type { TerminalCapabilities, DetectOptions } from \"./detect.js\";\nexport type { Painter } from \"./resolver.js\";\nexport type { GlyphRole } from \"./glyphs.js\";\nexport { PALETTE, SPACING, WIDTH, resolveToken } from \"./tokens.js\";\nexport type { PaletteToken, Theme, ColorDepth, ResolvedToken } from \"./tokens.js\";\n","import { WIDTH } from \"./theme/tokens.js\";\n\nexport type WidthMode = \"tiny\" | \"compact\" | \"default\";\n\nexport type WidthInfo = {\n columns: number;\n mode: WidthMode;\n};\n\nconst DEFAULT_FALLBACK = 80;\n\nexport function readColumns(stream: NodeJS.WriteStream = process.stdout): number {\n if (typeof stream.columns === \"number\" && stream.columns > 0) return stream.columns;\n return DEFAULT_FALLBACK;\n}\n\nexport function classifyWidth(columns: number): WidthMode {\n if (columns < WIDTH.minimum) return \"tiny\";\n if (columns <= WIDTH.compactCeiling) return \"compact\";\n return \"default\";\n}\n\nexport function readWidth(stream: NodeJS.WriteStream = process.stdout): WidthInfo {\n const columns = readColumns(stream);\n return { columns, mode: classifyWidth(columns) };\n}\n\nexport function effectivePanelWidth(columns: number): number {\n return Math.min(columns, WIDTH.panelMax);\n}\n\nexport function effectiveProseWidth(columns: number): number {\n return Math.min(columns, WIDTH.proseHardWrap);\n}\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","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; envVar: 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, envVar: auth.envVar };\n}\n","import {\n type ConnectorErrorCode,\n type ConnectorFailureEnvelope,\n type ConnectorSuccessEnvelope,\n ENVELOPE_SCHEMA_VERSION,\n} from \"./types.js\";\n\nexport type SuccessInput<TData> = {\n connector: string;\n operation: string;\n data: TData;\n dataSchemaVersion: number;\n};\n\nexport type FailureInput = {\n connector: string;\n operation: string;\n code: ConnectorErrorCode;\n message: string;\n details?: Record<string, unknown>;\n};\n\n/**\n * Single chokepoint for building success envelopes. Both the MCP server and\n * the fallback CLI must use this — assembling the envelope by hand would\n * drift the two surfaces apart.\n */\nexport function buildSuccessEnvelope<TData extends Record<string, unknown>>(\n input: SuccessInput<TData>,\n): ConnectorSuccessEnvelope<TData> {\n return {\n schema: ENVELOPE_SCHEMA_VERSION,\n connector: input.connector,\n operation: input.operation,\n ok: true,\n data: { ...input.data, dataSchema: input.dataSchemaVersion },\n } as ConnectorSuccessEnvelope<TData>;\n}\n\n/**\n * Single chokepoint for building failure envelopes.\n */\nexport function buildFailureEnvelope(input: FailureInput): ConnectorFailureEnvelope {\n return {\n schema: ENVELOPE_SCHEMA_VERSION,\n connector: input.connector,\n operation: input.operation,\n ok: false,\n error: {\n code: input.code,\n message: input.message,\n ...(input.details ? { details: input.details } : {}),\n },\n };\n}\n","import type { z } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\n/**\n * Convert a zod schema to a JSON Schema for use as an MCP tool's `inputSchema`\n * (Gap 38). Pinned to a minimal subset — no `$defs`, no `$ref`, no `$schema`\n * — so every MCP host parses it the same way.\n */\nexport function argsSchemaToJsonSchema(schema: z.ZodType): Record<string, unknown> {\n const raw = zodToJsonSchema(schema, {\n $refStrategy: \"none\",\n target: \"jsonSchema7\",\n }) as Record<string, unknown>;\n const {\n $schema: _omitSchema,\n definitions: _omitDefs,\n ...rest\n } = raw as Record<string, unknown> & {\n $schema?: unknown;\n definitions?: unknown;\n };\n return rest;\n}\n","const VALID_TOOL_NAME_RE = /^[a-z][a-z0-9_]*$/;\n\n/**\n * Build the MCP tool name for a (connector, operation) pair per architecture\n * Gap 37: lowercase both halves, replace every '-' with '_', join with '__',\n * validate against `^[a-z][a-z0-9_]*$`.\n *\n * A failed validation is a programmer error (the connector or operation name\n * would have been rejected by the schema before reaching this point); the\n * thrown error halts MCP server startup with a clear stderr message.\n */\nexport function toolName(connectorName: string, operationName: string): string {\n const left = normalize(connectorName);\n const right = normalize(operationName);\n const result = `${left}__${right}`;\n if (!VALID_TOOL_NAME_RE.test(result)) {\n throw new Error(\n `Invalid MCP tool name '${result}' (from connector '${connectorName}', operation '${operationName}'). Names must match /^[a-z][a-z0-9_]*$/ after normalization.`,\n );\n }\n return result;\n}\n\nfunction normalize(part: string): string {\n return part.toLowerCase().replace(/-/g, \"_\");\n}\n","import { z } from \"zod\";\nimport type { CitadelConfig, Connector } from \"../../schemas/citadel.js\";\nimport { resolveAuth } from \"../auth/resolver.js\";\nimport { AuthError } from \"../errors.js\";\nimport { buildFailureEnvelope, buildSuccessEnvelope } from \"./envelope.js\";\nimport { ConnectorError } from \"./errors.js\";\nimport { argsSchemaToJsonSchema } from \"./input-schema.js\";\nimport { lookupConnectorType } from \"./registry.js\";\nimport { toolName } from \"./tool-name.js\";\nimport type {\n ConnectorOperation,\n ConnectorResultEnvelope,\n ConnectorToolDescriptor,\n ConnectorType,\n} from \"./types.js\";\n\nexport type InvokeOperationInput = {\n /** The connector entry from `citadel.yaml` (already validated). */\n connector: Connector;\n /** Operation name as it appears on the type (kebab-case, e.g. \"list-issues\"). */\n operationName: string;\n /** Raw arguments object supplied by the caller (MCP `arguments` or CLI flags). */\n args: unknown;\n /** Optional environment override — defaults to `process.env`. */\n env?: NodeJS.ProcessEnv;\n};\n\n/**\n * The only call path that runs a connector handler. Both the MCP server\n * (`src/core/mcp/server.ts`) and the fallback CLI (`src/cli/commands/connector.ts`)\n * go through it. Every outcome is wrapped in the documented envelope.\n */\nexport async function invokeOperation(\n input: InvokeOperationInput,\n): Promise<ConnectorResultEnvelope> {\n const { connector, operationName, args, env } = input;\n const type = lookupConnectorType(connector.type);\n if (!type) {\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"connector-not-found\",\n message: `No registered connector type '${connector.type}' for connector '${connector.name}'.`,\n });\n }\n\n const operation = type.operations[operationName];\n if (!operation) {\n const known = Object.keys(type.operations).sort();\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"unknown-operation\",\n message: `Connector '${connector.name}' (type '${type.id}') has no operation '${operationName}'. Known operations: ${known.join(\", \") || \"(none)\"}.`,\n });\n }\n\n let resolvedConfig: unknown;\n try {\n resolvedConfig = type.configSchema.parse(connector.config);\n } catch (err) {\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"invalid-argument\",\n message: `Connector '${connector.name}' has invalid per-type config for type '${type.id}'.`,\n details: { cause: zodIssueDetails(err) },\n });\n }\n\n let parsedArgs: unknown;\n try {\n parsedArgs = operation.argsSchema.parse(args ?? {});\n } catch (err) {\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"invalid-argument\",\n message: `Invalid arguments for operation '${operationName}'.`,\n details: { cause: zodIssueDetails(err) },\n });\n }\n\n let auth: Awaited<ReturnType<typeof resolveAuth>>;\n try {\n auth = resolveAuth(connector.auth, env ?? process.env);\n } catch (err) {\n if (err instanceof AuthError) {\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"missing-env-var\",\n message: `Environment variable '${err.envVar}' is not set; required by connector '${connector.name}'.`,\n details: { envVar: err.envVar },\n });\n }\n throw err;\n }\n\n try {\n const result = await operation.handler(parsedArgs, {\n config: resolvedConfig,\n token: auth.type === \"token\" ? auth.value : undefined,\n auth,\n });\n return buildSuccessEnvelope({\n connector: connector.name,\n operation: operationName,\n data: result.data as Record<string, unknown>,\n dataSchemaVersion: operation.dataSchemaVersion,\n });\n } catch (err) {\n if (err instanceof ConnectorError) {\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: err.code,\n message: err.message,\n ...(err.details ? { details: err.details } : {}),\n });\n }\n process.stderr.write(\n `[maester] internal error in connector '${connector.name}'.${operationName}: ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\\n`,\n );\n return buildFailureEnvelope({\n connector: connector.name,\n operation: operationName,\n code: \"internal-error\",\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * Compose the human/agent-facing description for a single connector operation.\n * Per Gap 48: if the entry carries a `description`, prepend it (trimmed) with\n * a single space separator; otherwise return the type's description alone.\n */\nexport function buildToolDescription(\n connector: Connector,\n operation: ConnectorOperation,\n resolvedConfig: unknown,\n type: ConnectorType,\n): string {\n const typeDescription = type.describeTool(operation, resolvedConfig);\n const entryDescription = connector.description?.trim();\n return entryDescription ? `${entryDescription} ${typeDescription}` : typeDescription;\n}\n\n/**\n * Build the full `tools/list` descriptor set from a validated citadel config.\n * Used by both the MCP server (live) and `maester connector list` (debug).\n *\n * Configs with unknown connector types or per-type config validation failures\n * are surfaced as `Error` throws — the citadel schema's `.superRefine` should\n * have caught these at load time; reaching this function with an unknown type\n * means a registry mutation happened after load.\n */\nexport function listConnectorTools(config: CitadelConfig): ConnectorToolDescriptor[] {\n const descriptors: ConnectorToolDescriptor[] = [];\n const connectors = config.connectors ?? [];\n for (const connector of connectors) {\n const type = lookupConnectorType(connector.type);\n if (!type) {\n throw new Error(\n `Connector '${connector.name}' references unregistered type '${connector.type}'. This indicates registry mutation after config load.`,\n );\n }\n const resolvedConfig = type.configSchema.parse(connector.config);\n for (const operation of Object.values(type.operations)) {\n descriptors.push({\n name: toolName(connector.name, operation.name),\n description: buildToolDescription(connector, operation, resolvedConfig, type),\n inputSchema: argsSchemaToJsonSchema(operation.argsSchema),\n });\n }\n }\n return descriptors;\n}\n\n/**\n * Helper: find a connector and operation by their `(connectorName, operationName)`\n * pair without dispatching. Used by the MCP server's `tools/call` handler to\n * resolve the tool name back to a connector before invoking it.\n *\n * Returns `undefined` when either side is unknown — callers turn that into the\n * appropriate `connector-not-found` / `unknown-operation` envelope.\n */\nexport function findOperationByToolName(\n config: CitadelConfig,\n candidateToolName: string,\n): { connector: Connector; operationName: string; type: ConnectorType } | undefined {\n const connectors = config.connectors ?? [];\n for (const connector of connectors) {\n const type = lookupConnectorType(connector.type);\n if (!type) continue;\n for (const operation of Object.values(type.operations)) {\n if (toolName(connector.name, operation.name) === candidateToolName) {\n return { connector, operationName: operation.name, type };\n }\n }\n }\n return undefined;\n}\n\nfunction zodIssueDetails(err: unknown): unknown {\n if (err instanceof z.ZodError) {\n return err.issues.map((issue) => ({\n path: issue.path,\n message: issue.message,\n code: issue.code,\n }));\n }\n return err instanceof Error ? err.message : String(err);\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { stringify } from \"yaml\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport type { MaesterConfig } from \"../../schemas/maester.js\";\nimport { citadelConfigPath, maesterConfigPath } from \"./paths.js\";\n\nconst CITADEL_HEADER = `# citadel.yaml\n#\n# This file declares the remote knowledge sources this repository pulls into\n# a local destination directory.\n#\n# Each source is a git repository. By default, the citadel fetches whatever\n# the source publishes in its own \\`maester.yaml\\` manifest. If a source does\n# not publish a manifest (or you want to override what gets pulled), declare\n# an \\`includes\\` list and the citadel will materialize exactly those paths\n# or globs instead.\n#\n# By default, every source is surfaced at \\`<baseDir>/<source-name>/\\` from the\n# repository root. The optional top-level \\`baseDir\\` field changes that parent\n# folder once for every source; when omitted, the default is \\`citadel\\`. A\n# per-source \\`destination\\` always wins over the configured base.\n#\n# Run \\`maester sync\\` (or \\`npm run maester:sync\\`) to refresh every source in\n# one pass. Generated by \\`npx maester init\\` and safe to commit. Secret\n# values are never stored here — only the names of environment variables\n# that hold them.\n\n`;\n\nconst MAESTER_HEADER = `# maester.yaml\n#\n# This file declares the documents this repository publishes to any citadel\n# that pulls from it. It is a manifest only — the documents themselves live\n# wherever the \\`path\\` fields point, and \\`maester\\` does not modify them.\n#\n# Generated by \\`npx maester publish\\` and safe to commit.\n\n`;\n\nexport async function writeCitadelConfig(repoRoot: string, config: CitadelConfig): Promise<string> {\n const path = citadelConfigPath(repoRoot);\n const ordered = {\n schemaVersion: config.schemaVersion,\n ...(config.baseDir ? { baseDir: config.baseDir } : {}),\n sources: config.sources,\n ...(config.connectors && config.connectors.length > 0 ? { connectors: config.connectors } : {}),\n };\n const body = stringify(ordered, { indent: 2, lineWidth: 100, singleQuote: false });\n await writeFile(path, `${CITADEL_HEADER}${body}`, \"utf8\");\n return path;\n}\n\nexport async function writeMaesterConfig(repoRoot: string, config: MaesterConfig): Promise<string> {\n const path = maesterConfigPath(repoRoot);\n const body = stringify(config, { indent: 2, lineWidth: 100, singleQuote: false });\n await writeFile(path, `${MAESTER_HEADER}${body}`, \"utf8\");\n return path;\n}\n","import type { CitadelConfig, Connector } from \"../../schemas/citadel.js\";\nimport { loadCitadelConfig } from \"../config/loader.js\";\nimport { writeCitadelConfig } from \"../config/writer.js\";\nimport { MaesterError } from \"../errors.js\";\n\nexport class ConnectorNotFoundError extends MaesterError {\n readonly connectorName: string;\n constructor(name: string) {\n super(\"CONNECTOR_NOT_FOUND\", `No connector named '${name}' is configured in citadel.yaml.`);\n this.name = \"ConnectorNotFoundError\";\n this.connectorName = name;\n }\n}\n\nexport class DuplicateConnectorError extends MaesterError {\n readonly connectorName: string;\n constructor(name: string) {\n super(\n \"DUPLICATE_CONNECTOR\",\n `A connector named '${name}' is already declared in citadel.yaml.`,\n );\n this.name = \"DuplicateConnectorError\";\n this.connectorName = name;\n }\n}\n\n/**\n * Append `connector` to the citadel's connectors array and write the file\n * back. Rejects when a connector with the same name already exists. The\n * citadel config is re-validated on read; downstream errors (unknown type,\n * invalid per-type config, duplicate names) surface from `loadCitadelConfig`.\n */\nexport async function addConnectorToCitadel(\n repoRoot: string,\n connector: Connector,\n): Promise<{ filePath: string; config: CitadelConfig }> {\n const config = await loadCitadelConfig(repoRoot);\n const existing = config.connectors ?? [];\n if (existing.some((c) => c.name === connector.name)) {\n throw new DuplicateConnectorError(connector.name);\n }\n const next: CitadelConfig = {\n ...config,\n connectors: [...existing, connector],\n };\n const filePath = await writeCitadelConfig(repoRoot, next);\n return { filePath, config: next };\n}\n\n/**\n * Remove the connector named `name` and write the file back. Throws\n * `ConnectorNotFoundError` if no entry matches.\n */\nexport async function removeConnectorFromCitadel(\n repoRoot: string,\n name: string,\n): Promise<{ filePath: string; config: CitadelConfig }> {\n const config = await loadCitadelConfig(repoRoot);\n const existing = config.connectors ?? [];\n const index = existing.findIndex((c) => c.name === name);\n if (index === -1) {\n throw new ConnectorNotFoundError(name);\n }\n const next: CitadelConfig = {\n ...config,\n connectors: existing.filter((_, i) => i !== index),\n };\n const filePath = await writeCitadelConfig(repoRoot, next);\n return { filePath, config: next };\n}\n\n/**\n * Read connectors from the citadel without mutating anything. Returns the\n * empty array when no connectors are declared.\n */\nexport async function listConnectorsFromCitadel(repoRoot: string): Promise<Connector[]> {\n const config = await loadCitadelConfig(repoRoot);\n return [...(config.connectors ?? [])];\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","## Connector tools (traveling maesters)\n\nThis citadel may expose one or more **traveling maesters** as MCP tools whose\nnames begin with the connector slug (e.g. `team_gl__list_issues`).\n\n- Their output is **live, point-in-time data** from an external service. Cite\n specific identifiers (issue iids, ticket numbers) when surfacing it, do not\n treat it as a stable corpus, and flag the **freshness verdict** in your\n answer when it is not `up-to-date`.\n- The tools' arguments and return shapes are described in MCP `tools/list`;\n do not assume undocumented fields.\n- Connector tool results are JSON envelopes carrying a `dataSchema` version\n alongside the payload — if your reading of the data depends on a specific\n shape, branch on `dataSchema`.\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 CONNECTOR_POLICY from \"../content/connector-policy.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 \"\",\n interpolate(CONNECTOR_POLICY, 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 CONNECTOR_POLICY from \"../content/connector-policy.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 renderCodexSkillBody(opts: { baseDir: string }): string {\n return [\n \"# Grand Maester (Codex CLI 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 \"\",\n interpolate(CONNECTOR_POLICY, opts),\n ].join(\"\\n\");\n}\n\nexport function renderCodexSkillFile(body: string): string {\n return [\n \"---\",\n \"name: grand-maester\",\n `description: ${SKILL_FRONTMATTER_DESCRIPTION}`,\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 { renderCodexSkillBody, renderCodexSkillFile } from \"../templates/shells/codex.js\";\nimport type { SkillAction, SkillTarget, SkillWriteInput, SkillWriteOutcome } from \"../types.js\";\n\nconst SKILL_MD_PATH = \".agents/skills/grand-maester/SKILL.md\";\n\nexport const codexTarget: SkillTarget = {\n id: \"codex\",\n label: \"Codex CLI\",\n artifactPaths: [SKILL_MD_PATH],\n writerKey: \"codex\",\n write: writeCodex,\n readInstalledVersion,\n};\n\nasync function writeCodex(input: SkillWriteInput): Promise<SkillWriteOutcome> {\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 = renderCodexSkillBody({ baseDir: input.citadelBaseDir });\n const managedRegion = replaceMarkdownRegion(undefined, body, input.skillVersion).trimEnd();\n const fileContent = existing\n ? replaceMarkdownRegion(existing, body, input.skillVersion)\n : `${renderCodexSkillFile(managedRegion)}\\n`;\n const action = decideAction(existing, previousVersion, input.skillVersion, fileContent);\n if (action === \"unchanged\") {\n return previousVersion !== undefined\n ? { action, installedVersion: previousVersion }\n : { action };\n }\n await fs.writeFile(filePath, fileContent, \"utf8\");\n return { action, installedVersion: input.skillVersion };\n}\n\nasync function readInstalledVersion(repoRoot: string): Promise<string | undefined> {\n const filePath = path.join(repoRoot, SKILL_MD_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 CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport CONNECTOR_POLICY from \"../content/connector-policy.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 \"\",\n interpolate(CONNECTOR_POLICY, 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","## Connector tools (traveling maesters)\n\nThis citadel may expose one or more **traveling maesters** as connectors. Your\nagent platform does not speak MCP, so connector operations are reached via the\nfallback CLI:\n\n```\nnpx maester connector list\nnpx maester connector exec <connector-name> <operation> [--key value]...\n```\n\n- `connector list` prints the configured connectors and the operations they\n expose.\n- `connector exec` invokes an operation and writes a JSON envelope to stdout.\n Exit code `0` is success, `1` is a connector-level failure (auth, remote\n error, invalid args), `2` is an invocation-level error (no such connector,\n no citadel.yaml).\n\nTreat the data the same way as MCP tool output: live, point-in-time, cite\nspecific identifiers, flag freshness when it isn't `up-to-date`, and don't\nassume undocumented fields.\n","import CITADEL_AWARENESS from \"../content/citadel-awareness.md\";\nimport CONNECTOR_POLICY_FALLBACK from \"../content/connector-policy-fallback.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 \"\",\n interpolate(CONNECTOR_POLICY_FALLBACK, 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 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 trigger a single write call. The returned tuples preserve every id\n * 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 * Resolve the command line that a host MCP registration should embed to launch\n * `maester mcp`. We use the standard MCP-ecosystem convention\n * (`npx -y baller-maester mcp`) so the registration is portable across machines\n * and self-updates on the next `npm publish`:\n *\n * - Works for users who `npm i -g baller-maester` (npx finds the global)\n * - Works for users who never install at all (npx pulls from the registry on\n * first spawn and caches for subsequent calls)\n * - Works after a `baller-maester` version bump without re-running\n * `maester connector refresh` (npx resolves the latest cached version)\n *\n * The `-y` flag skips npx's first-run confirmation, which would otherwise\n * stall the MCP handshake.\n *\n * Note: during local pre-publish development (e.g. when iterating via\n * `pnpm link --global`), this default emits a config that won't work because\n * `baller-maester` isn't on the registry yet. Manually swap to\n * `command = \"maester\"` (bare bin name) for local testing until 0.4.0 ships.\n */\nexport type MaesterLaunchCommand = { command: string; args: string[] };\n\nexport function resolveMaesterLaunchCommand(): MaesterLaunchCommand {\n return { command: \"npx\", args: [\"-y\", \"baller-maester\", \"mcp\"] };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { type MaesterLaunchCommand, resolveMaesterLaunchCommand } from \"./command.js\";\n\nconst MCP_FILE = \".mcp.json\";\n\nexport type WriteOutcome = { filePath: string; action: \"written\" | \"unchanged\" };\n\nexport type WriteOptions = {\n /**\n * Override the launch command embedded in the registration. Primarily a test\n * escape hatch — production callers should rely on the default.\n */\n launch?: MaesterLaunchCommand;\n};\n\nfunction maesterEntry(launch: MaesterLaunchCommand): Record<string, unknown> {\n return { command: launch.command, args: [...launch.args] };\n}\n\n/**\n * Write or refresh the `mcpServers.maester` entry inside `<repo>/.mcp.json`.\n * Round-trips every other top-level key and every other entry under\n * `mcpServers`. Idempotent — running twice produces byte-identical output.\n *\n * The `command` field embeds the absolute path to the running `maester`\n * binary (`process.argv[1]`) rather than `npx maester`, because `npx`\n * resolves by npm package name and our package is `baller-maester`.\n */\nexport async function writeClaudeCodeMcpEntry(\n repoRoot: string,\n options: WriteOptions = {},\n): Promise<WriteOutcome> {\n const launch = options.launch ?? resolveMaesterLaunchCommand();\n return writeJsonMcpFile(path.join(repoRoot, MCP_FILE), launch);\n}\n\nexport async function writeJsonMcpFile(\n filePath: string,\n launch: MaesterLaunchCommand,\n): Promise<WriteOutcome> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existingText = await readOrUndefined(filePath);\n const newText = renderJsonWithMaesterEntry(existingText, launch);\n if (existingText === newText) {\n return { filePath, action: \"unchanged\" };\n }\n await fs.writeFile(filePath, newText, \"utf8\");\n return { filePath, action: \"written\" };\n}\n\nexport function renderJsonWithMaesterEntry(\n existingText: string | undefined,\n launch: MaesterLaunchCommand,\n): string {\n const parsed = parseOrEmpty(existingText);\n const rebuilt: Record<string, unknown> = {};\n let placed = false;\n for (const [key, value] of Object.entries(parsed)) {\n if (key === \"mcpServers\") {\n rebuilt[key] = mutateMcpServers(value, launch);\n placed = true;\n } else {\n rebuilt[key] = value;\n }\n }\n if (!placed) {\n rebuilt.mcpServers = mutateMcpServers(undefined, launch);\n }\n return `${JSON.stringify(rebuilt, null, 2)}\\n`;\n}\n\nfunction mutateMcpServers(\n existing: unknown,\n launch: MaesterLaunchCommand,\n): Record<string, unknown> {\n const map = isPlainObject(existing) ? { ...existing } : {};\n const rebuilt: Record<string, unknown> = {};\n let placed = false;\n for (const [key, value] of Object.entries(map)) {\n if (key === \"maester\") {\n rebuilt[key] = maesterEntry(launch);\n placed = true;\n } else {\n rebuilt[key] = value;\n }\n }\n if (!placed) {\n rebuilt.maester = maesterEntry(launch);\n }\n return rebuilt;\n}\n\nfunction parseOrEmpty(text: string | undefined): Record<string, unknown> {\n if (!text || text.trim().length === 0) return {};\n const parsed = JSON.parse(text);\n if (!isPlainObject(parsed)) {\n throw new Error(\"Expected MCP config to be a JSON object at the top level.\");\n }\n return parsed;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function readOrUndefined(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","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport TOML from \"@iarna/toml\";\nimport { type MaesterLaunchCommand, resolveMaesterLaunchCommand } from \"./command.js\";\n\nconst CONFIG_FILE = path.join(\".codex\", \"config.toml\");\n\nfunction maesterBlock(repoRoot: string, launch: MaesterLaunchCommand): TOML.JsonMap {\n return { command: launch.command, args: [...launch.args], cwd: repoRoot };\n}\n\nexport type WriteOutcome = { filePath: string; action: \"written\" | \"unchanged\" };\n\nexport type WriteOptions = {\n /**\n * Override the launch command embedded in the registration. Primarily a test\n * escape hatch — production callers should rely on the default\n * (`process.argv[1] mcp`).\n */\n launch?: MaesterLaunchCommand;\n};\n\n/**\n * Write or refresh `[mcp_servers.maester]` inside `<repo>/.codex/config.toml`.\n * Includes a `cwd = \"<absolute-citadel-path>\"` field because Codex spawns MCP\n * subprocesses with `cwd = /` regardless of which config supplied the entry —\n * without it the server boots in `/` and exits looking for `citadel.yaml`.\n *\n * The block's `command` field embeds the absolute path to the running\n * `maester` binary (`process.argv[1]`) rather than `npx maester`, because\n * `npx` resolves by npm package name and the package is `baller-maester`.\n *\n * Codex CLI reads `<repo>/.codex/config.toml` for trusted projects and\n * merges it with the user-global `~/.codex/config.toml` (verified on Codex\n * v0.132). The user must have `[projects.\"<repo-root>\"] trust_level =\n * \"trusted\"` in their global config for this file to load.\n *\n * Other tables in the file are preserved (the TOML library doesn't preserve\n * comments — accepted tradeoff per architecture Gap 39). Idempotent.\n */\nexport async function writeCodexMcpEntry(\n repoRoot: string,\n options: WriteOptions = {},\n): Promise<WriteOutcome> {\n const filePath = path.join(repoRoot, CONFIG_FILE);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n const existingText = await readOrUndefined(filePath);\n const launch = options.launch ?? resolveMaesterLaunchCommand();\n const newText = renderTomlWithMaesterBlock(existingText, repoRoot, launch);\n if (existingText === newText) {\n return { filePath, action: \"unchanged\" };\n }\n await fs.writeFile(filePath, newText, \"utf8\");\n return { filePath, action: \"written\" };\n}\n\nexport function renderTomlWithMaesterBlock(\n existingText: string | undefined,\n repoRoot: string,\n launch: MaesterLaunchCommand,\n): string {\n const parsed: TOML.JsonMap =\n existingText && existingText.trim().length > 0\n ? TOML.parse(existingText)\n : ({} as TOML.JsonMap);\n const mcpServers: TOML.JsonMap = isJsonMap(parsed.mcp_servers) ? { ...parsed.mcp_servers } : {};\n mcpServers.maester = maesterBlock(repoRoot, launch);\n const next: TOML.JsonMap = { ...parsed, mcp_servers: mcpServers };\n return TOML.stringify(next);\n}\n\nfunction isJsonMap(value: unknown): value is TOML.JsonMap {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function readOrUndefined(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","import path from \"node:path\";\nimport { type WriteOptions, type WriteOutcome, writeJsonMcpFile } from \"./claude-code.js\";\nimport { resolveMaesterLaunchCommand } from \"./command.js\";\n\nconst MCP_FILE = path.join(\".cursor\", \"mcp.json\");\n\n/**\n * Cursor adopted Anthropic's project-level MCP shape — same JSON structure\n * as `.mcp.json`, just nested under `.cursor/`.\n */\nexport async function writeCursorMcpEntry(\n repoRoot: string,\n options: WriteOptions = {},\n): Promise<WriteOutcome> {\n const launch = options.launch ?? resolveMaesterLaunchCommand();\n return writeJsonMcpFile(path.join(repoRoot, MCP_FILE), launch);\n}\n","import { listSkillTargets } from \"../../skill/targets/index.js\";\nimport type { SkillTarget, SkillTargetId } from \"../../skill/types.js\";\nimport { writeClaudeCodeMcpEntry } from \"./claude-code.js\";\nimport { writeCodexMcpEntry } from \"./codex.js\";\nimport { writeCursorMcpEntry } from \"./cursor.js\";\n\nexport type McpRegistrationAction = \"written\" | \"unchanged\" | \"skipped\" | \"failed\";\n\nexport type McpRegistrationOutcome = {\n host: SkillTargetId;\n filePath: string;\n action: McpRegistrationAction;\n error?: string;\n};\n\nexport type RefreshOptions = {\n /**\n * Restrict the refresh to a subset of Grand Maester targets. Useful in tests\n * and during init when only some targets were selected. When omitted, every\n * installed MCP-capable target is refreshed.\n */\n scopeTo?: readonly SkillTargetId[];\n};\n\n/**\n * Iterates installed Grand Maester targets and writes/refreshes the per-host\n * MCP server registration for each MCP-capable host (Claude Code, Cursor,\n * Codex CLI). The Generic `AGENTS.md` target is not an MCP host and is\n * skipped. A target whose skill artifact does not exist on disk is skipped\n * with `action: \"skipped\"`.\n */\nexport async function refreshMcpRegistrations(\n repoRoot: string,\n options: RefreshOptions = {},\n): Promise<McpRegistrationOutcome[]> {\n const targets = listSkillTargets().filter(\n (t) => isMcpHost(t.id) && (!options.scopeTo || options.scopeTo.includes(t.id)),\n );\n\n const outcomes: McpRegistrationOutcome[] = [];\n for (const target of targets) {\n const installedVersion = await target.readInstalledVersion(repoRoot);\n if (installedVersion === undefined && !options.scopeTo?.includes(target.id)) {\n // Skill not installed; skip silently. Init / install flows scope\n // explicitly so a fresh install still writes the MCP entry.\n continue;\n }\n const outcome = await runWriter(target, repoRoot);\n outcomes.push(outcome);\n }\n return outcomes;\n}\n\nfunction isMcpHost(id: SkillTargetId): boolean {\n return id === \"claude-code\" || id === \"cursor\" || id === \"codex\";\n}\n\nasync function runWriter(target: SkillTarget, repoRoot: string): Promise<McpRegistrationOutcome> {\n try {\n switch (target.id) {\n case \"claude-code\": {\n const r = await writeClaudeCodeMcpEntry(repoRoot);\n return { host: \"claude-code\", filePath: r.filePath, action: r.action };\n }\n case \"cursor\": {\n const r = await writeCursorMcpEntry(repoRoot);\n return { host: \"cursor\", filePath: r.filePath, action: r.action };\n }\n case \"codex\": {\n const r = await writeCodexMcpEntry(repoRoot);\n return { host: \"codex\", filePath: r.filePath, action: r.action };\n }\n default:\n return {\n host: target.id,\n filePath: \"\",\n action: \"skipped\",\n };\n }\n } catch (err) {\n return {\n host: target.id,\n filePath: \"\",\n action: \"failed\",\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n","import type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { invokeOperation } from \"../../core/connectors/dispatch.js\";\nimport { hasConnectorType, listConnectorTypes } from \"../../core/connectors/registry.js\";\nimport { toolName } from \"../../core/connectors/tool-name.js\";\nimport { ConfigError, MaesterError } from \"../../core/errors.js\";\nimport {\n ConnectorNotFoundError,\n addConnectorToCitadel,\n listConnectorsFromCitadel,\n removeConnectorFromCitadel,\n} from \"../../core/init/connector-writer.js\";\nimport { refreshMcpRegistrations } from \"../../core/mcp/registrations/index.js\";\nimport { type Connector, ENV_VAR_RE, SLUG_RE } from \"../../schemas/citadel.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\nconst EXIT_OK = 0;\nconst EXIT_FALLBACK_FAILURE = 1;\nconst EXIT_INVOCATION_ERROR = 2;\n\nexport function registerConnector(program: Command, getContext: () => CliContext): void {\n const group = program\n .command(\"connector\")\n .description(\n \"Manage citadel connectors (traveling maesters) and dispatch operations for non-MCP agents.\",\n );\n\n group\n .command(\"list\")\n .description(\"Print the configured connectors and the tool names the MCP server exposes.\")\n .action(async () => {\n process.exitCode = await runList(getContext());\n });\n\n group\n .command(\"add\")\n .description(\n \"Register a new connector with this citadel. Interactive when no flags are passed.\",\n )\n .option(\"--type <type>\", \"Connector type identifier (e.g. gitlab-issues).\")\n .option(\"--name <name>\", \"Unique connector name (kebab-case slug).\")\n .option(\"--env-var <name>\", \"Environment variable that holds the connector's auth token.\")\n .option(\n \"--config <json>\",\n \"Per-type config as a JSON string. Required when --type is supplied.\",\n )\n .option(\n \"--description <text>\",\n \"Optional short description (prepended to MCP tool descriptions).\",\n )\n .action(async (options: AddOptions) => {\n process.exitCode = await runAdd(getContext(), options);\n });\n\n group\n .command(\"remove <name>\")\n .description(\"Remove the named connector from citadel.yaml and refresh per-host MCP entries.\")\n .option(\"--yes\", \"Skip the confirmation prompt.\")\n .action(async (name: string, options: { yes?: boolean }) => {\n process.exitCode = await runRemove(getContext(), name, options.yes === true);\n });\n\n group\n .command(\"refresh\")\n .description(\n \"Re-validate citadel.yaml and refresh per-host MCP registrations. Use this after editing citadel.yaml by hand.\",\n )\n .action(async () => {\n process.exitCode = await runRefresh(getContext());\n });\n\n group\n .command(\"exec <name> <operation> [args...]\")\n .description(\n \"Fallback dispatch for non-MCP agent hosts. Invokes the named operation; prints the JSON envelope on stdout.\",\n )\n .allowUnknownOption(true)\n .action(async (name: string, operation: string, args: string[]) => {\n process.exitCode = await runExec(getContext(), name, operation, args);\n });\n}\n\nasync function runList(ctx: CliContext): Promise<number> {\n let connectors: Connector[];\n try {\n connectors = await listConnectorsFromCitadel(ctx.repoRoot.path);\n } catch (err) {\n return handleCitadelLoadError(ctx, err);\n }\n if (connectors.length === 0) {\n ctx.prompts.log.info(\"No connectors configured. Add one with `maester connector add`.\");\n return EXIT_OK;\n }\n for (const c of connectors) {\n const tools = toolNamesFor(c);\n const lines = [`• ${c.name} (type: ${c.type})`];\n for (const t of tools) {\n lines.push(` ${t}`);\n }\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\n }\n return EXIT_OK;\n}\n\ntype AddOptions = {\n type?: string;\n name?: string;\n envVar?: string;\n config?: string;\n description?: string;\n};\n\nasync function runAdd(ctx: CliContext, options: AddOptions): Promise<number> {\n const isFlagDriven = Boolean(options.type || options.name);\n if (isFlagDriven) {\n return runAddFlagDriven(ctx, options);\n }\n return runAddInteractive(ctx);\n}\n\nasync function runAddFlagDriven(ctx: CliContext, options: AddOptions): Promise<number> {\n if (!options.type) {\n ctx.logger.error(\"--type is required when running connector add non-interactively.\");\n return EXIT_INVOCATION_ERROR;\n }\n if (!options.name) {\n ctx.logger.error(\"--name is required when running connector add non-interactively.\");\n return EXIT_INVOCATION_ERROR;\n }\n if (!SLUG_RE.test(options.name)) {\n ctx.logger.error(`--name must be kebab-case (matched ${SLUG_RE}).`);\n return EXIT_INVOCATION_ERROR;\n }\n if (!hasConnectorType(options.type)) {\n const known = listConnectorTypes().map((t) => t.id);\n ctx.logger.error(\n `Unknown connector type '${options.type}'.${known.length > 0 ? ` Known types: ${known.join(\", \")}` : \" No types are registered in this build.\"}`,\n );\n return EXIT_INVOCATION_ERROR;\n }\n if (options.envVar && !ENV_VAR_RE.test(options.envVar)) {\n ctx.logger.error(\"--env-var must be UPPER_SNAKE_CASE (matched ^[A-Z][A-Z0-9_]*$).\");\n return EXIT_INVOCATION_ERROR;\n }\n let parsedConfig: unknown = {};\n if (options.config) {\n try {\n parsedConfig = JSON.parse(options.config);\n } catch (err) {\n ctx.logger.error(\n `--config must be valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n );\n return EXIT_INVOCATION_ERROR;\n }\n }\n const connector: Connector = {\n name: options.name,\n type: options.type,\n ...(options.description ? { description: options.description } : {}),\n ...(options.envVar ? { auth: { type: \"token\" as const, envVar: options.envVar } } : {}),\n config: parsedConfig,\n };\n return writeAddAndRefresh(ctx, connector);\n}\n\nasync function runAddInteractive(ctx: CliContext): Promise<number> {\n const types = listConnectorTypes();\n if (types.length === 0) {\n ctx.prompts.log.warning(\n \"No connector types are registered in this build of maester. Cannot add a connector interactively.\",\n );\n return EXIT_INVOCATION_ERROR;\n }\n try {\n const typeId = await ctx.prompts.select({\n message: \"Connector type\",\n options: types.map((t) => ({ value: t.id, label: t.label })),\n });\n const name = await ctx.prompts.text({\n message: \"Connector name (unique slug)\",\n validate: (v) => (SLUG_RE.test(v) ? undefined : \"Must be a kebab-case slug.\"),\n });\n const description = await ctx.prompts.text({\n message: \"Optional description (press enter to skip)\",\n initialValue: \"\",\n });\n const envVar = await ctx.prompts.text({\n message: \"Auth env var name (press enter to skip if no auth required)\",\n initialValue: \"\",\n validate: (v) => (!v || ENV_VAR_RE.test(v) ? undefined : \"Must be UPPER_SNAKE_CASE.\"),\n });\n // Per-type config: prompt for raw JSON for now. Each type's prompt module\n // will hook in here once concrete types land. We keep the surface simple.\n const configJson = await ctx.prompts.text({\n message: \"Per-type config (JSON)\",\n initialValue: \"{}\",\n validate: (v) => {\n try {\n JSON.parse(v);\n return undefined;\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n },\n });\n const connector: Connector = {\n name,\n type: typeId as string,\n ...(description ? { description } : {}),\n ...(envVar ? { auth: { type: \"token\" as const, envVar } } : {}),\n config: JSON.parse(configJson) as unknown,\n };\n return writeAddAndRefresh(ctx, connector);\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no connector added.\");\n return EXIT_INVOCATION_ERROR;\n }\n throw err;\n }\n}\n\nasync function writeAddAndRefresh(ctx: CliContext, connector: Connector): Promise<number> {\n try {\n const result = await addConnectorToCitadel(ctx.repoRoot.path, connector);\n ctx.prompts.log.success(`Wrote connector '${connector.name}' to ${result.filePath}.`);\n // Gap 47: warn when connector name shadows an existing source name.\n if (result.config.sources.some((s) => s.name === connector.name)) {\n ctx.prompts.log.warning(\n `Connector '${connector.name}' shadows a source with the same name. The two namespaces are separate but reading citadel.yaml may confuse future maintainers.`,\n );\n }\n const refreshOutcomes = await refreshMcpRegistrations(ctx.repoRoot.path);\n reportRefresh(ctx, refreshOutcomes);\n return EXIT_OK;\n } catch (err) {\n return handleCitadelLoadError(ctx, err);\n }\n}\n\nasync function runRemove(ctx: CliContext, name: string, yes: boolean): Promise<number> {\n if (!yes) {\n try {\n const confirmed = await ctx.prompts.confirm({\n message: `Remove connector '${name}' from citadel.yaml?`,\n initialValue: false,\n });\n if (!confirmed) {\n ctx.prompts.outro(\"Cancelled — citadel.yaml not modified.\");\n return EXIT_OK;\n }\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled.\");\n return EXIT_OK;\n }\n throw err;\n }\n }\n try {\n const result = await removeConnectorFromCitadel(ctx.repoRoot.path, name);\n ctx.prompts.log.success(`Removed connector '${name}' from ${result.filePath}.`);\n const refreshOutcomes = await refreshMcpRegistrations(ctx.repoRoot.path);\n reportRefresh(ctx, refreshOutcomes);\n return EXIT_OK;\n } catch (err) {\n if (err instanceof ConnectorNotFoundError) {\n ctx.logger.error(err.message);\n return EXIT_INVOCATION_ERROR;\n }\n return handleCitadelLoadError(ctx, err);\n }\n}\n\nasync function runRefresh(ctx: CliContext): Promise<number> {\n let config: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n return handleCitadelLoadError(ctx, err);\n }\n const count = config.connectors?.length ?? 0;\n ctx.prompts.log.info(\n count === 0\n ? \"citadel.yaml has no connectors. Refreshing per-host MCP entries anyway so the maester server stays registered.\"\n : `citadel.yaml lists ${count} connector${count === 1 ? \"\" : \"s\"}. Refreshing per-host MCP entries.`,\n );\n const outcomes = await refreshMcpRegistrations(ctx.repoRoot.path);\n reportRefresh(ctx, outcomes);\n return EXIT_OK;\n}\n\nasync function runExec(\n ctx: CliContext,\n name: string,\n operation: string,\n rawArgs: string[],\n): Promise<number> {\n let config: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n return handleCitadelLoadError(ctx, err);\n }\n const connector = (config.connectors ?? []).find((c) => c.name === name);\n if (!connector) {\n ctx.logger.error(`No connector named '${name}' is configured in citadel.yaml.`);\n return EXIT_INVOCATION_ERROR;\n }\n let args: Record<string, unknown>;\n try {\n args = parseExecArgs(rawArgs);\n } catch (err) {\n ctx.logger.error(err instanceof Error ? err.message : String(err));\n return EXIT_INVOCATION_ERROR;\n }\n const envelope = await invokeOperation({\n connector,\n operationName: operation,\n args,\n });\n process.stdout.write(`${JSON.stringify(envelope)}\\n`);\n return envelope.ok ? EXIT_OK : EXIT_FALLBACK_FAILURE;\n}\n\n/**\n * Parse the trailing `--key value` (or `--key=value`) pairs after `exec name op`\n * into an args object. Repeated keys become arrays. Bare flags become `true`.\n */\nfunction parseExecArgs(raw: string[]): Record<string, unknown> {\n const args: Record<string, unknown> = {};\n let i = 0;\n while (i < raw.length) {\n const token = raw[i];\n if (token === undefined) {\n i += 1;\n continue;\n }\n if (!token.startsWith(\"--\")) {\n throw new Error(`Unexpected positional argument '${token}'. Use --key value form.`);\n }\n const eqIndex = token.indexOf(\"=\");\n let key: string;\n let value: string | true;\n if (eqIndex >= 0) {\n key = token.slice(2, eqIndex);\n value = token.slice(eqIndex + 1);\n i += 1;\n } else {\n key = token.slice(2);\n const next = raw[i + 1];\n if (next === undefined || next.startsWith(\"--\")) {\n value = true;\n i += 1;\n } else {\n value = next;\n i += 2;\n }\n }\n const existing = args[key];\n if (existing === undefined) {\n args[key] = value;\n } else if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n args[key] = [existing, value];\n }\n }\n return args;\n}\n\nfunction reportRefresh(\n ctx: CliContext,\n outcomes: ReadonlyArray<{ host: string; filePath: string; action: string; error?: string }>,\n): void {\n if (outcomes.length === 0) {\n ctx.prompts.log.info(\n \"No MCP-capable Grand Maester targets installed — skipping MCP config refresh.\",\n );\n return;\n }\n for (const o of outcomes) {\n if (o.action === \"failed\") {\n ctx.prompts.log.error(`MCP refresh failed for ${o.host}${o.error ? `: ${o.error}` : \"\"}`);\n } else {\n ctx.prompts.log.success(`MCP entry ${o.action} → ${o.filePath}`);\n }\n }\n ctx.prompts.log.info(\n \"Restart your agent session to pick up the new tool surface (most host platforms restart MCP servers automatically when their config changes).\",\n );\n}\n\nfunction handleCitadelLoadError(ctx: CliContext, err: unknown): number {\n if (err instanceof ConfigError) {\n ctx.logger.error(err.message);\n return EXIT_INVOCATION_ERROR;\n }\n if (err instanceof MaesterError) {\n ctx.logger.error(err.message);\n return EXIT_INVOCATION_ERROR;\n }\n throw err;\n}\n\nfunction toolNamesFor(connector: Connector): string[] {\n if (!hasConnectorType(connector.type)) {\n return [`(unregistered type: ${connector.type})`];\n }\n const type = listConnectorTypes().find((t) => t.id === connector.type);\n if (!type) return [];\n return Object.values(type.operations).map((op) => toolName(connector.name, op.name));\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport async function appendMissingGitignoreEntries(\n repoRoot: string,\n entries: readonly string[],\n): Promise<{ added: string[]; alreadyPresent: string[] }> {\n const path = resolve(repoRoot, \".gitignore\");\n let existing = \"\";\n if (existsSync(path)) {\n existing = await readFile(path, \"utf8\");\n }\n\n const existingLines = new Set(\n existing\n .split(/\\r?\\n/)\n .map((l) => l.trim())\n .filter((l) => l.length > 0),\n );\n const added: string[] = [];\n const alreadyPresent: string[] = [];\n\n for (const entry of entries) {\n const normalized = entry.trim();\n if (normalized.length === 0) continue;\n if (existingLines.has(normalized)) {\n alreadyPresent.push(normalized);\n } else {\n added.push(normalized);\n existingLines.add(normalized);\n }\n }\n\n if (added.length === 0) {\n return { added, alreadyPresent };\n }\n\n const needsTrailingNewline = existing.length > 0 && !existing.endsWith(\"\\n\");\n const appendBlock = `${needsTrailingNewline ? \"\\n\" : \"\"}${added.join(\"\\n\")}\\n`;\n await writeFile(path, `${existing}${appendBlock}`, \"utf8\");\n return { added, alreadyPresent };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nexport async function ensureScript(\n repoRoot: string,\n scriptName: string,\n command: string,\n): Promise<{ added: boolean; reason: \"no-package-json\" | \"already-set\" | \"added\" }> {\n const path = resolve(repoRoot, \"package.json\");\n if (!existsSync(path)) {\n return { added: false, reason: \"no-package-json\" };\n }\n const raw = await readFile(path, \"utf8\");\n const trailingNewline = raw.endsWith(\"\\n\");\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const scripts = (parsed.scripts ?? {}) as Record<string, string>;\n if (scripts[scriptName] === command) {\n return { added: false, reason: \"already-set\" };\n }\n if (typeof scripts[scriptName] === \"string\" && scripts[scriptName] !== command) {\n return { added: false, reason: \"already-set\" };\n }\n scripts[scriptName] = command;\n parsed.scripts = scripts;\n const serialized = JSON.stringify(parsed, null, 2) + (trailingNewline ? \"\\n\" : \"\");\n await writeFile(path, serialized, \"utf8\");\n return { added: true, reason: \"added\" };\n}\n","import { resolve } from \"node:path\";\nimport type { CitadelConfig, Connector, Source } from \"../../schemas/citadel.js\";\nimport { CACHE_DIR_NAME, defaultDestinationFor } from \"../config/paths.js\";\nimport { writeCitadelConfig } from \"../config/writer.js\";\nimport { appendMissingGitignoreEntries } from \"../repo/gitignore.js\";\nimport { ensureScript } from \"../repo/package-json.js\";\n\nexport type FinalizeResult = {\n citadelPath: string;\n gitignoreAdded: string[];\n packageJsonScript: \"no-package-json\" | \"already-set\" | \"added\";\n};\n\nexport type FinalizeInput = {\n sources: Source[];\n baseDir?: string;\n connectors?: Connector[];\n};\n\nexport async function finalizeCitadel(\n repoRoot: string,\n input: FinalizeInput,\n): Promise<FinalizeResult> {\n detectDestinationCollisions(repoRoot, input);\n const config: CitadelConfig = {\n schemaVersion: 1,\n ...(input.baseDir ? { baseDir: input.baseDir } : {}),\n sources: input.sources,\n ...(input.connectors && input.connectors.length > 0 ? { connectors: input.connectors } : {}),\n };\n const citadelPath = await writeCitadelConfig(repoRoot, config);\n const gitignore = await appendMissingGitignoreEntries(repoRoot, [`${CACHE_DIR_NAME}/`]);\n const script = await ensureScript(repoRoot, \"maester:sync\", \"maester sync\");\n return {\n citadelPath,\n gitignoreAdded: gitignore.added,\n packageJsonScript: script.reason,\n };\n}\n\ntype EntryDescriptor = {\n name: string;\n destination: string | undefined;\n};\n\nexport function detectDestinationCollisions(\n repoRoot: string,\n input: FinalizeInput | EntryDescriptor[],\n baseDirArg?: string,\n): void {\n const baseDir = Array.isArray(input) ? baseDirArg : input.baseDir;\n const entries: EntryDescriptor[] = Array.isArray(input)\n ? input\n : input.sources.map((s): EntryDescriptor => ({ name: s.name, destination: s.destination }));\n\n const byDest = new Map<string, { name: string }>();\n for (const entry of entries) {\n const dest = entry.destination\n ? resolve(repoRoot, entry.destination)\n : defaultDestinationFor(repoRoot, entry.name, baseDir);\n const prior = byDest.get(dest);\n if (prior) {\n throw new Error(\n `sources '${entry.name}' and '${prior.name}' both resolve to destination '${dest}'. Set a unique destination for one of them.`,\n );\n }\n byDest.set(dest, { name: entry.name });\n }\n}\n","import { ENV_VAR_RE, SLUG_RE } from \"../../schemas/citadel.js\";\n\nexport type ValidationResult = { ok: true } | { ok: false; reason: string };\n\nexport function validateSourceName(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Name cannot be empty.\" };\n if (!SLUG_RE.test(value)) {\n return {\n ok: false,\n reason: \"Name must be a kebab-case slug (lowercase letters, digits, and hyphens).\",\n };\n }\n return { ok: true };\n}\n\nexport function validateGitUrl(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"URL cannot be empty.\" };\n if (/\\s/.test(value)) return { ok: false, reason: \"URL cannot contain whitespace.\" };\n if (value.startsWith(\"https://\") || value.startsWith(\"ssh://\") || value.startsWith(\"file://\")) {\n return { ok: true };\n }\n if (/^git@[^\\s:]+:\\S+$/.test(value)) return { ok: true };\n return {\n ok: false,\n reason: \"URL must start with https://, ssh://, file://, or use the git@host:path form.\",\n };\n}\n\nexport type EnvVarValidation = { ok: true; warning?: string } | { ok: false; reason: string };\n\nexport function validateEnvVarName(value: string): EnvVarValidation {\n if (!value || value.length === 0) {\n return { ok: false, reason: \"Environment variable name cannot be empty.\" };\n }\n if (/\\s/.test(value)) return { ok: false, reason: \"Whitespace is not allowed.\" };\n if (!ENV_VAR_RE.test(value)) {\n return {\n ok: false,\n reason: \"Environment variable name must be UPPER_SNAKE_CASE (e.g. MAESTER_DOCS_TOKEN).\",\n };\n }\n if (value.length >= 32 && !value.includes(\"_\")) {\n return {\n ok: true,\n warning:\n \"That looks unusually long and has no underscores — make sure you entered the NAME of the env var, not its value.\",\n };\n }\n return { ok: true };\n}\n\nexport function validateDestination(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (value.startsWith(\"/\"))\n return { ok: false, reason: \"Destination must be repo-relative (no leading '/').\" };\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Destination cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateBaseDir(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (value.startsWith(\"/\"))\n return { ok: false, reason: \"Base directory must be repo-relative (no leading '/').\" };\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Base directory cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateIncludesEntry(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Includes entry cannot be empty.\" };\n if (/^\\s+$/.test(value)) return { ok: false, reason: \"Includes entry cannot be whitespace.\" };\n if (value.startsWith(\"/\")) {\n return { ok: false, reason: \"Includes entry must be repo-relative (no leading '/').\" };\n }\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Includes entry cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function validateTag(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Tag cannot be empty.\" };\n if (!SLUG_RE.test(value)) {\n return { ok: false, reason: \"Tag must be a kebab-case slug.\" };\n }\n return { ok: true };\n}\n","{\n \"name\": \"baller-maester\",\n \"version\": \"0.4.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 \"@iarna/toml\": \"^2.2.5\",\n \"@modelcontextprotocol/sdk\": \"^1.29.0\",\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 \"zod-to-json-schema\": \"^3.25.2\"\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 { refreshMcpRegistrations } from \"../mcp/registrations/index.js\";\nimport { 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\nconst MCP_HOST_IDS: readonly SkillTargetId[] = [\"claude-code\", \"cursor\", \"codex\"];\n\nfunction selectMcpHosts(targetIds: readonly SkillTargetId[]): SkillTargetId[] {\n return targetIds.filter((id): id is SkillTargetId => MCP_HOST_IDS.includes(id));\n}\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 const mcpHosts = selectMcpHosts(opts.targets);\n const mcpRegistrations =\n mcpHosts.length > 0 ? await refreshMcpRegistrations(repoRoot, { scopeTo: mcpHosts }) : [];\n return { outcomes, counts: countOutcomes(outcomes), mcpRegistrations };\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([]), mcpRegistrations: [] };\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 // Refresh MCP registrations for every installed MCP-capable host —\n // upgrade can run after a connector was added between sessions.\n const mcpRegistrations = opts.check === true ? [] : await refreshMcpRegistrations(repoRoot);\n return { outcomes, counts: countOutcomes(outcomes), mcpRegistrations };\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","import type { Command } from \"commander\";\nimport { detectRoles } from \"../../core/config/paths.js\";\nimport { listConnectorTypes } from \"../../core/connectors/registry.js\";\nimport { detectDestinationCollisions, finalizeCitadel } from \"../../core/init/finalize.js\";\nimport {\n validateBaseDir,\n validateDestination,\n validateEnvVarName,\n validateGitUrl,\n validateIncludesEntry,\n validateSourceName,\n validateTag,\n} from \"../../core/init/validators.js\";\nimport { runSkillInstall } from \"../../core/skill/runner.js\";\nimport { listSkillTargets } from \"../../core/skill/targets/index.js\";\nimport type { SkillTargetId } from \"../../core/skill/types.js\";\nimport { SKILL_VERSION } from \"../../core/skill/version.js\";\nimport type { State } from \"../../core/state/schema.js\";\nimport {\n type AuthRef,\n type Connector,\n DEFAULT_BASE_DIR,\n type IncludeEntry,\n type Source,\n} from \"../../schemas/citadel.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\nexport function registerInit(program: Command, getContext: () => CliContext): void {\n program\n .command(\"init\")\n .description(\"Initialize this repository as a citadel (walkthrough).\")\n .action(async () => {\n await runInit(getContext());\n });\n}\n\nexport async function runInit(ctx: CliContext): Promise<number> {\n const roles = detectRoles(ctx.repoRoot.path);\n\n if (roles.hasCitadel) {\n ctx.prompts.intro(\"Citadel already initialized\");\n ctx.prompts.log.info(`A citadel config already exists at ${ctx.repoRoot.path}/citadel.yaml.`);\n ctx.prompts.log.message(\"Re-running this flow will not overwrite the existing file.\");\n ctx.prompts.log.message(\n \"To edit the citadel, open citadel.yaml directly (edit verbs coming in a later release).\",\n );\n ctx.prompts.outro(\"Nothing changed.\");\n return 0;\n }\n\n ctx.prompts.intro(\"Initialize a citadel\");\n\n try {\n const shouldProceed = await ctx.prompts.confirm({\n message: `Create a citadel.yaml at ${ctx.repoRoot.path}?`,\n initialValue: true,\n });\n if (!shouldProceed) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const baseDir = await collectBaseDir(ctx);\n const effectiveBaseDir = baseDir ?? DEFAULT_BASE_DIR;\n\n const sources: Source[] = [];\n const reservedNames = (): Set<string> => new Set(sources.map((s) => s.name));\n\n while (true) {\n const source = await collectOneSource(ctx, reservedNames(), effectiveBaseDir);\n sources.push(source);\n const addAnother = await ctx.prompts.confirm({\n message: \"Add another source?\",\n initialValue: false,\n });\n if (!addAnother) break;\n }\n\n try {\n detectDestinationCollisions(ctx.repoRoot.path, {\n sources,\n ...(baseDir ? { baseDir } : {}),\n });\n } catch (err) {\n ctx.prompts.log.error((err as Error).message);\n ctx.prompts.outro(\"Cancelled due to destination collision. Re-run when resolved.\");\n return 1;\n }\n\n const connectors = await collectConnectors(ctx);\n\n const confirmWrite = await ctx.prompts.confirm({\n message: `Write ${sources.length} source(s)${connectors.length > 0 ? ` and ${connectors.length} connector(s)` : \"\"} to citadel.yaml?`,\n initialValue: true,\n });\n if (!confirmWrite) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const result = await finalizeCitadel(ctx.repoRoot.path, {\n sources,\n ...(baseDir ? { baseDir } : {}),\n ...(connectors.length > 0 ? { connectors } : {}),\n });\n ctx.prompts.log.success(`Wrote ${result.citadelPath}`);\n if (result.gitignoreAdded.length > 0) {\n ctx.prompts.log.success(`Appended to .gitignore: ${result.gitignoreAdded.join(\", \")}`);\n }\n if (result.packageJsonScript === \"added\") {\n ctx.prompts.log.success('Added \"maester:sync\" script to package.json.');\n } else if (result.packageJsonScript === \"no-package-json\") {\n ctx.prompts.log.info(\"No package.json found — skipping script wire-up.\");\n }\n const tokenEntries: { name: string; envVar: string }[] = [];\n for (const s of sources) {\n if (s.auth?.type === \"token\") {\n tokenEntries.push({ name: s.name, envVar: s.auth.envVar });\n }\n }\n if (tokenEntries.length > 0) {\n const summary = tokenEntries.map((t) => `${t.name} -> ${t.envVar}`).join(\", \");\n ctx.prompts.log.info(`Remember to set these env vars before syncing: ${summary}`);\n }\n\n await maybeInstallSkill(ctx, baseDir ?? DEFAULT_BASE_DIR);\n\n ctx.prompts.outro(\"Next: run `npx maester sync` to fetch your sources.\");\n return 0;\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 130;\n }\n throw err;\n }\n}\n\nasync function maybeInstallSkill(ctx: CliContext, baseDir: string): Promise<void> {\n let wantsSkill: boolean;\n try {\n wantsSkill = await ctx.prompts.confirm({\n message: \"Install the Grand Maester agent skill? (Recommended)\",\n initialValue: true,\n });\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.log.info(\n \"Skill install cancelled — citadel is configured. Run `maester skill install` later if you change your mind.\",\n );\n return;\n }\n throw err;\n }\n if (!wantsSkill) return;\n\n let targets: SkillTargetId[];\n try {\n targets = await ctx.prompts.multiselect<SkillTargetId>({\n message: \"Which agent(s) should the skill be installed for?\",\n options: listSkillTargets().map((t) => ({ value: t.id, label: t.label })),\n initialValues: [\"claude-code\", \"codex\"] as SkillTargetId[],\n required: true,\n });\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.log.info(\n \"Skill install cancelled — citadel is configured. Run `maester skill install` later if you change your mind.\",\n );\n return;\n }\n throw err;\n }\n if (targets.length === 0) return;\n\n try {\n const result = await runSkillInstall(ctx.repoRoot.path, {\n targets,\n mode: \"install\",\n citadelBaseDir: baseDir,\n });\n for (const outcome of result.outcomes) {\n const artifacts = outcome.artifactPaths.join(\", \");\n if (outcome.action === \"failed\") {\n ctx.prompts.log.error(\n `${outcome.label}: failed${outcome.error ? ` — ${outcome.error}` : \"\"}`,\n );\n } else if (outcome.action === \"installed\" || outcome.action === \"upgraded\") {\n ctx.prompts.log.success(`${outcome.label}: ${outcome.action} → ${artifacts}`);\n } else {\n ctx.prompts.log.info(`${outcome.label}: already up to date (${artifacts})`);\n }\n }\n const total = result.counts.installed + result.counts.upgraded + result.counts.unchanged;\n if (result.counts.failed === 0 && total > 0) {\n ctx.prompts.log.success(\n `Grand Maester installed for ${total} target(s) at v${SKILL_VERSION}.`,\n );\n }\n } catch (err) {\n ctx.prompts.log.error(\n `Skill install failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\nasync function collectOneSource(\n ctx: CliContext,\n reservedNames: Set<string>,\n effectiveBaseDir: string,\n): Promise<Source> {\n const name = await ctx.prompts.text({\n message: \"Source name (short, kebab-case, e.g. 'design-system')\",\n validate: (value) => {\n const trimmed = value.trim();\n const result = validateSourceName(trimmed);\n if (!result.ok) return result.reason;\n if (reservedNames.has(trimmed)) {\n return `Name '${trimmed}' is already used in this citadel.`;\n }\n return undefined;\n },\n });\n\n const url = await ctx.prompts.text({\n message: \"Git URL (https://, ssh://, or git@host:path)\",\n validate: (value) => {\n const result = validateGitUrl(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n\n const ref = await ctx.prompts.text({\n message:\n \"Ref to pin (branch, tag, or commit SHA) — leave blank for the remote's default branch\",\n placeholder: \"main\",\n });\n\n const includes = await collectIncludes(ctx);\n const auth = await collectAuth(ctx);\n const destination = await collectDestination(ctx, name.trim(), effectiveBaseDir);\n\n const description = await ctx.prompts.text({\n message: \"Description (optional — short free text)\",\n placeholder: \"\",\n });\n\n const tagsRaw = await ctx.prompts.text({\n message: \"Tags (optional — comma-separated slugs)\",\n placeholder: \"docs, upstream\",\n validate: (value) => {\n const trimmed = value.trim();\n if (trimmed.length === 0) return undefined;\n const tags = parseTagsEntries(trimmed);\n for (const tag of tags) {\n const result = validateTag(tag);\n if (!result.ok) return `'${tag}': ${result.reason}`;\n }\n return undefined;\n },\n });\n const tags = parseTagsEntries(tagsRaw);\n\n const trimmedRef = ref.trim();\n const trimmedDest = destination.trim();\n const trimmedDesc = description.trim();\n const source: Source = {\n name: name.trim(),\n url: url.trim(),\n ...(trimmedRef ? { ref: trimmedRef } : {}),\n ...(includes.length > 0 ? { includes } : {}),\n ...(auth ? { auth } : {}),\n ...(trimmedDest ? { destination: trimmedDest } : {}),\n ...(trimmedDesc ? { description: trimmedDesc } : {}),\n ...(tags.length > 0 ? { tags } : {}),\n };\n return source;\n}\n\nasync function collectIncludes(ctx: CliContext): Promise<IncludeEntry[]> {\n const useExplicit = await ctx.prompts.confirm({\n message:\n \"Declare an explicit `includes` list? (Skip to let the source's own maester.yaml manifest drive what gets pulled.)\",\n initialValue: false,\n });\n if (!useExplicit) return [];\n\n const raw = await ctx.prompts.text({\n message:\n \"Includes — repo-relative paths or globs, comma- or whitespace-separated. At least one required.\",\n placeholder: \"docs/**/*.md, README.md\",\n validate: (value) => {\n const entries = parseIncludesEntries(value);\n if (entries.length === 0) return \"At least one includes entry is required.\";\n for (const entry of entries) {\n const result = validateIncludesEntry(entry);\n if (!result.ok) return `'${entry}': ${result.reason}`;\n }\n return undefined;\n },\n });\n\n const paths = parseIncludesEntries(raw);\n const entries: IncludeEntry[] = [];\n for (const path of paths) {\n const choice = await ctx.prompts.select<IncludesStateChoice>({\n message: `State for '${path}'?`,\n initialValue: \"file-header\",\n options: [\n { value: \"draft\", label: \"draft\", hint: \"tag this entry as draft\" },\n { value: \"canon\", label: \"canon\", hint: \"tag this entry as canon\" },\n {\n value: \"file-header\",\n label: \"file header\",\n hint: \"no rule; defer to inline state in each file\",\n },\n ],\n });\n entries.push(buildIncludeEntry(path, choice));\n }\n return entries;\n}\n\ntype IncludesStateChoice = \"draft\" | \"canon\" | \"file-header\";\n\nexport function buildIncludeEntry(path: string, choice: IncludesStateChoice): IncludeEntry {\n if (choice === \"file-header\") return path;\n const state: State = choice;\n return { path, state };\n}\n\nasync function collectAuth(ctx: CliContext): Promise<AuthRef | undefined> {\n const authType = await ctx.prompts.select<\"public\" | \"delegated\" | \"token\">({\n message: \"How should this source authenticate?\",\n initialValue: \"public\",\n options: [\n { value: \"public\", label: \"No auth required (public repo)\" },\n {\n value: \"delegated\",\n label: \"Delegate to my local git (SSH key, credential helper, gh auth)\",\n },\n { value: \"token\", label: \"Token via environment variable\" },\n ],\n });\n\n if (authType !== \"token\") return undefined;\n\n while (true) {\n const envVar = await ctx.prompts.text({\n message: \"Enter the NAME of the environment variable (not the token itself)\",\n placeholder: \"MAESTER_DOCS_TOKEN\",\n validate: (value) => {\n const result = validateEnvVarName(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const trimmed = envVar.trim();\n const check = validateEnvVarName(trimmed);\n if (check.ok && check.warning) {\n const proceed = await ctx.prompts.confirm({\n message: `${check.warning}\\n Continue with '${trimmed}' as the env-var name?`,\n initialValue: false,\n });\n if (!proceed) continue;\n }\n return { type: \"token\", envVar: trimmed };\n }\n}\n\nasync function collectDestination(\n ctx: CliContext,\n name: string,\n effectiveBaseDir: string,\n): Promise<string> {\n return ctx.prompts.text({\n message: `Destination override (optional, relative to repo root). Default is ${effectiveBaseDir}/${name}`,\n placeholder: \"\",\n validate: (value) => {\n const result = validateDestination(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n}\n\nasync function collectBaseDir(ctx: CliContext): Promise<string | undefined> {\n const raw = await ctx.prompts.text({\n message: `Base directory for synced sources (each defaults to <baseDir>/<name>). Press Enter to accept the default '${DEFAULT_BASE_DIR}'.`,\n placeholder: DEFAULT_BASE_DIR,\n validate: (value) => {\n const result = validateBaseDir(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const trimmed = raw.trim();\n if (trimmed.length === 0 || trimmed === DEFAULT_BASE_DIR) return undefined;\n return trimmed;\n}\n\nfunction parseIncludesEntries(raw: string): string[] {\n return raw\n .split(/[\\n,]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction parseTagsEntries(raw: string): string[] {\n return raw\n .split(/[,\\s]+/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n}\n\n/**\n * Collect connector entries during init (Gap 42 — connector-registration step\n * sits between source registration and the Grand Maester offer). When no\n * connector types are registered in this build, the loop short-circuits with\n * an info log and returns an empty array. When concrete types land (e.g.\n * GitLab Issues), each type's prompt sequence plugs in here.\n */\nasync function collectConnectors(ctx: CliContext): Promise<Connector[]> {\n const types = listConnectorTypes();\n if (types.length === 0) {\n return [];\n }\n // Future: when a registered type exists, ask the user whether they want to\n // register one or more connectors and dispatch to per-type prompt modules.\n // The framework is in place but no concrete type ships in this run.\n ctx.prompts.log.info(\n `${types.length} connector type(s) available, but interactive registration during init is wired in a follow-on feature. Use \\`maester connector add\\` after init.`,\n );\n return [];\n}\n","import { type ConsolaInstance, consola } from \"consola\";\n\n/**\n * MCP servers own stdout — every line is a JSON-RPC frame. Any unrelated\n * write to stdout corrupts the wire and kills the host's parser. Per Gap 41,\n * this module is the only place we boot the SDK from.\n *\n * Call `setupStdioForMcp()` once, before constructing any MCP Server, to:\n *\n * - reconfigure the shared `consola` logger so its output goes to stderr,\n * - silence prompt / progress layers that might otherwise write to stdout.\n *\n * The function is idempotent — second and later calls are no-ops.\n */\nlet installed = false;\n\nexport function setupStdioForMcp(): void {\n if (installed) return;\n installed = true;\n const logger = consola as ConsolaInstance & { setReporters?: (r: unknown[]) => void };\n if (typeof logger.setReporters === \"function\") {\n logger.setReporters([\n {\n log(logObj: { type?: string; args?: unknown[] }) {\n const text = formatConsolaLogObj(logObj);\n process.stderr.write(text);\n },\n },\n ]);\n }\n}\n\nfunction formatConsolaLogObj(logObj: { type?: string; args?: unknown[] }): string {\n const prefix = logObj.type ? `[${logObj.type}] ` : \"\";\n const body = (logObj.args ?? [])\n .map((arg) => (typeof arg === \"string\" ? arg : JSON.stringify(arg)))\n .join(\" \");\n return `${prefix}${body}\\n`;\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { CallToolRequestSchema, ListToolsRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport { loadCitadelConfig } from \"../config/loader.js\";\nimport {\n findOperationByToolName,\n invokeOperation,\n listConnectorTools,\n} from \"../connectors/dispatch.js\";\nimport { type FailureInput, buildFailureEnvelope } from \"../connectors/envelope.js\";\nimport { ConfigError } from \"../errors.js\";\nimport { setupStdioForMcp } from \"./transport.js\";\n\nexport const MCP_SERVER_NAME = \"maester\";\n\nexport type McpBootResult =\n | { ok: true; toolCount: number; server: Server }\n | { ok: false; exitCode: number; message: string };\n\n/**\n * Boot the stdio-based MCP server for the citadel at `repoRoot`. On a fatal\n * startup failure (no citadel.yaml, invalid config, unknown connector type)\n * the function returns `{ ok: false }` so the CLI command can write the\n * message to stderr and exit non-zero — the server is never partially up.\n *\n * On success, `connect()` is invoked with `StdioServerTransport` and the\n * function resolves. The process keeps running until the host closes stdin.\n */\nexport async function bootMcpServer(\n repoRoot: string,\n serverVersion: string,\n): Promise<McpBootResult> {\n // Make sure no shared-logger writes corrupt the JSON-RPC stream.\n setupStdioForMcp();\n\n let citadelConfig: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n citadelConfig = await loadCitadelConfig(repoRoot);\n } catch (err) {\n if (err instanceof ConfigError) {\n return { ok: false, exitCode: 2, message: err.message };\n }\n return {\n ok: false,\n exitCode: 2,\n message: err instanceof Error ? err.message : String(err),\n };\n }\n\n let tools: ReturnType<typeof listConnectorTools>;\n try {\n tools = listConnectorTools(citadelConfig);\n } catch (err) {\n return {\n ok: false,\n exitCode: 2,\n message:\n err instanceof Error\n ? `Failed to build connector tool surface: ${err.message}`\n : String(err),\n };\n }\n\n const server = new Server(\n { name: MCP_SERVER_NAME, version: serverVersion },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: tools.map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema as { [k: string]: unknown },\n })),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const requestedName = request.params.name;\n const args = request.params.arguments ?? {};\n const match = findOperationByToolName(citadelConfig, requestedName);\n let envelope: Awaited<ReturnType<typeof invokeOperation>>;\n if (!match) {\n const failure: FailureInput = {\n connector: requestedName.split(\"__\")[0] ?? requestedName,\n operation: requestedName.split(\"__\").slice(1).join(\"__\") || \"(unknown)\",\n code: \"unknown-operation\",\n message: `No tool named '${requestedName}' is registered. Run \\`maester connector list\\` to see configured tools.`,\n };\n envelope = buildFailureEnvelope(failure);\n } else {\n envelope = await invokeOperation({\n connector: match.connector,\n operationName: match.operationName,\n args,\n });\n }\n const text = JSON.stringify(envelope);\n if (envelope.ok) {\n return {\n content: [{ type: \"text\", text }],\n };\n }\n return {\n isError: true,\n content: [{ type: \"text\", text }],\n };\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n return { ok: true, toolCount: tools.length, server };\n}\n","import type { Command } from \"commander\";\nimport { bootMcpServer } from \"../../core/mcp/server.js\";\nimport { PACKAGE_VERSION } from \"../../package-meta.js\";\nimport type { CliContext } from \"../context.js\";\n\nexport function registerMcp(program: Command, getContext: () => CliContext): void {\n program\n .command(\"mcp\")\n .description(\n \"Run the stdio MCP server for this citadel. Intended to be spawned by an agent host (Claude Code, Cursor, Codex CLI) via project-level MCP config.\",\n )\n .action(async () => {\n process.exitCode = await runMcpCommand(getContext());\n });\n}\n\nasync function runMcpCommand(ctx: CliContext): Promise<number> {\n // The MCP server owns stdout for JSON-RPC frames — diagnostics go to stderr.\n // The boot helper calls `setupStdioForMcp()` itself, so console-style writes\n // inside the SDK are redirected before the server is constructed.\n const result = await bootMcpServer(ctx.repoRoot.path, PACKAGE_VERSION);\n if (!result.ok) {\n process.stderr.write(`maester mcp: ${result.message}\\n`);\n return result.exitCode;\n }\n // The transport keeps the process alive until the host closes stdin.\n return 0;\n}\n","import type { MaesterConfig, PublishedDocument } from \"../../schemas/maester.js\";\nimport { writeMaesterConfig } from \"../config/writer.js\";\n\nexport type PublishFinalizeResult = {\n maesterPath: string;\n documentCount: number;\n};\n\nexport async function finalizeMaesterManifest(\n repoRoot: string,\n documents: PublishedDocument[],\n): Promise<PublishFinalizeResult> {\n detectDuplicatePaths(documents);\n const config: MaesterConfig = { schemaVersion: 1, documents };\n const path = await writeMaesterConfig(repoRoot, config);\n return { maesterPath: path, documentCount: documents.length };\n}\n\nexport function detectDuplicatePaths(documents: readonly PublishedDocument[]): void {\n const seen = new Map<string, number>();\n for (let i = 0; i < documents.length; i++) {\n const p = documents[i]?.path;\n if (!p) continue;\n if (seen.has(p)) {\n throw new Error(`Duplicate path '${p}' (also at index ${seen.get(p)}).`);\n }\n seen.set(p, i);\n }\n}\n","import { SLUG_RE } from \"../../schemas/citadel.js\";\n\nexport type ValidationResult = { ok: true } | { ok: false; reason: string };\n\nexport function validateDocumentPath(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: false, reason: \"Path cannot be empty.\" };\n if (/^\\s+$/.test(value)) return { ok: false, reason: \"Path cannot be whitespace only.\" };\n if (value.startsWith(\"/\")) {\n return { ok: false, reason: \"Path must be repo-relative (no leading '/').\" };\n }\n if (value.split(/[\\\\/]+/).some((seg) => seg === \"..\")) {\n return { ok: false, reason: \"Path cannot contain '..' segments.\" };\n }\n return { ok: true };\n}\n\nexport function isGlobPath(value: string): boolean {\n return /[*?[\\]{}]/.test(value);\n}\n\nexport function validateCategory(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n if (!SLUG_RE.test(value)) {\n return { ok: false, reason: \"Category must be a kebab-case slug.\" };\n }\n return { ok: true };\n}\n\nexport function validateTags(value: string): ValidationResult {\n if (!value || value.length === 0) return { ok: true };\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n for (const tag of tags) {\n if (!SLUG_RE.test(tag)) {\n return { ok: false, reason: `Tag '${tag}' must be a kebab-case slug.` };\n }\n }\n return { ok: true };\n}\n\nexport function parseTags(value: string): string[] {\n return value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { globby } from \"globby\";\nimport { detectRoles } from \"../../core/config/paths.js\";\nimport { detectDuplicatePaths, finalizeMaesterManifest } from \"../../core/publish/finalize.js\";\nimport {\n isGlobPath,\n parseTags,\n validateCategory,\n validateDocumentPath,\n validateTags,\n} from \"../../core/publish/validators.js\";\nimport type { State } from \"../../core/state/schema.js\";\nimport type { PublishedDocument } from \"../../schemas/maester.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\ntype PublishedDocumentStateChoice = \"draft\" | \"canon\" | \"file-header\";\n\nexport function buildPublishedDocumentStateField(\n choice: PublishedDocumentStateChoice,\n): { state: State } | Record<string, never> {\n if (choice === \"file-header\") return {};\n return { state: choice };\n}\n\nasync function askDocumentState(\n ctx: CliContext,\n path: string,\n): Promise<PublishedDocumentStateChoice> {\n return ctx.prompts.select<PublishedDocumentStateChoice>({\n message: `State for '${path}'?`,\n initialValue: \"file-header\",\n options: [\n { value: \"draft\", label: \"draft\", hint: \"tag this entry as draft\" },\n { value: \"canon\", label: \"canon\", hint: \"tag this entry as canon\" },\n {\n value: \"file-header\",\n label: \"file header\",\n hint: \"no rule; defer to inline state in the file\",\n },\n ],\n });\n}\n\nexport function registerPublish(program: Command, getContext: () => CliContext): void {\n program\n .command(\"publish\")\n .description(\"Configure this repository as a maester (walkthrough).\")\n .action(async () => {\n await runPublish(getContext());\n });\n}\n\nexport async function runPublish(ctx: CliContext): Promise<number> {\n const roles = detectRoles(ctx.repoRoot.path);\n\n if (roles.hasMaester) {\n ctx.prompts.intro(\"Maester manifest already configured\");\n ctx.prompts.log.info(`A maester.yaml already exists at ${ctx.repoRoot.path}/maester.yaml.`);\n ctx.prompts.log.message(\"Re-running this flow will not overwrite the existing file.\");\n ctx.prompts.outro(\"Nothing changed.\");\n return 0;\n }\n\n ctx.prompts.intro(\"Configure this repo as a maester\");\n\n const documents: PublishedDocument[] = [];\n const readmePath = resolve(ctx.repoRoot.path, \"README.md\");\n if (existsSync(readmePath)) {\n const useReadme = await ctx.prompts.confirm({\n message: \"Publish README.md (the most common starter document)?\",\n initialValue: true,\n });\n if (useReadme) {\n const stateChoice = await askDocumentState(ctx, \"README.md\");\n documents.push({\n path: \"README.md\",\n category: \"readme\",\n ...buildPublishedDocumentStateField(stateChoice),\n });\n ctx.prompts.log.success(\"Added README.md\");\n }\n }\n\n try {\n while (true) {\n const addMore = await ctx.prompts.confirm({\n message: documents.length === 0 ? \"Add a published document?\" : \"Add another document?\",\n initialValue: documents.length === 0,\n });\n if (!addMore) break;\n const doc = await collectOneDocument(ctx, ctx.repoRoot.path, documents);\n documents.push(doc);\n }\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 130;\n }\n throw err;\n }\n\n if (documents.length === 0) {\n ctx.prompts.log.error(\"A maester manifest must declare at least one document.\");\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 1;\n }\n\n try {\n detectDuplicatePaths(documents);\n } catch (err) {\n ctx.prompts.log.error((err as Error).message);\n ctx.prompts.outro(\"Cancelled.\");\n return 1;\n }\n\n const confirmWrite = await ctx.prompts.confirm({\n message: `Write ${documents.length} document(s) to maester.yaml?`,\n initialValue: true,\n });\n if (!confirmWrite) {\n ctx.prompts.outro(\"Cancelled — no files written.\");\n return 0;\n }\n\n const result = await finalizeMaesterManifest(ctx.repoRoot.path, documents);\n ctx.prompts.log.success(`Wrote ${result.maesterPath} (${result.documentCount} document(s))`);\n ctx.prompts.outro(\"Consuming citadels will pick up this manifest at their next `maester sync`.\");\n return 0;\n}\n\nasync function collectOneDocument(\n ctx: CliContext,\n repoRoot: string,\n existing: readonly PublishedDocument[],\n): Promise<PublishedDocument> {\n const path = await ctx.prompts.text({\n message: \"Path or glob (relative to the repo root)\",\n placeholder: \"docs/runbooks/**/*.md\",\n validate: (value) => {\n const trimmed = value.trim();\n const result = validateDocumentPath(trimmed);\n if (!result.ok) return result.reason;\n if (existing.some((d) => d.path === trimmed)) {\n return `Path '${trimmed}' is already declared in this manifest.`;\n }\n return undefined;\n },\n });\n const trimmed = path.trim();\n\n if (isGlobPath(trimmed)) {\n const matches = await globby(trimmed, { cwd: repoRoot, dot: false, gitignore: false });\n ctx.prompts.log.info(`Glob matches ${matches.length} file(s) currently.`);\n } else {\n if (!existsSync(resolve(repoRoot, trimmed))) {\n ctx.prompts.log.warning(`'${trimmed}' does not yet exist in this repo. Saving anyway.`);\n }\n }\n\n const stateChoice = await askDocumentState(ctx, trimmed);\n\n const description = await ctx.prompts.text({\n message: \"Description (optional)\",\n placeholder: \"\",\n });\n const category = await ctx.prompts.text({\n message: \"Category slug (optional, e.g. 'readme', 'adr', 'runbook')\",\n placeholder: \"\",\n validate: (value) => {\n const result = validateCategory(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n const tagsRaw = await ctx.prompts.text({\n message: \"Tags (comma-separated, optional)\",\n placeholder: \"\",\n validate: (value) => {\n const result = validateTags(value.trim());\n return result.ok ? undefined : result.reason;\n },\n });\n\n const trimmedDesc = description.trim();\n const trimmedCat = category.trim();\n const tags = parseTags(tagsRaw.trim());\n\n const doc: PublishedDocument = {\n path: trimmed,\n ...(trimmedDesc ? { description: trimmedDesc } : {}),\n ...(trimmedCat ? { category: trimmedCat } : {}),\n ...(tags.length > 0 ? { tags } : {}),\n ...buildPublishedDocumentStateField(stateChoice),\n };\n return doc;\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 { 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 { 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","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\nimport { loadCitadelConfig } from \"../config/loader.js\";\nimport { runStatus } from \"../status/runner.js\";\nimport type { StatusResult } from \"../status/runner.js\";\n\nconst CACHE_RELATIVE_PATH = \".maester/.skill-cache.json\";\nconst DEFAULT_TTL_SECONDS = 300;\n\nexport type PrereadOptions = {\n repoRoot: string;\n env?: NodeJS.ProcessEnv;\n now?: () => number;\n /** Override for tests: substitute the status runner. */\n runStatus?: typeof runStatus;\n};\n\n/**\n * Implements `maester skill runtime preread`. Reads a Claude Code PreToolUse\n * hook envelope from stdin (passed in as a string), and returns the JSON\n * response body the hook script should write to stdout.\n *\n * Returns \"\" (empty body, no-op) when:\n * - the envelope cannot be parsed,\n * - no file path can be extracted,\n * - no citadel config exists in the repo,\n * - the target path is outside the citadel base directory.\n */\nexport async function runtimePreread(stdinJson: string, opts: PrereadOptions): Promise<string> {\n const envelope = parseEnvelopeSafe(stdinJson);\n if (!envelope) return \"\";\n\n const filePath = extractTargetPath(envelope, opts.repoRoot);\n if (!filePath) return \"\";\n\n let baseDir: string;\n let configForStatus: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n configForStatus = await loadCitadelConfig(opts.repoRoot);\n baseDir = configForStatus.baseDir ?? DEFAULT_BASE_DIR;\n } catch {\n return \"\";\n }\n\n if (!isUnderBaseDir(filePath, opts.repoRoot, baseDir)) return \"\";\n\n const ttlSeconds = readTtlSeconds(opts.env);\n const now = opts.now ?? (() => Date.now());\n const cached = await readCache(opts.repoRoot);\n let verdict: CachedVerdict;\n if (cached && now() - cached.ts < ttlSeconds * 1000) {\n verdict = cached;\n } else {\n const runner = opts.runStatus ?? runStatus;\n try {\n const result = await runner(configForStatus, { repoRoot: opts.repoRoot });\n verdict = {\n ts: now(),\n verdict: classifyVerdict(result),\n summary: summarize(result),\n };\n await writeCache(opts.repoRoot, verdict);\n } catch (err) {\n verdict = {\n ts: now(),\n verdict: \"failed\",\n summary: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n if (verdict.verdict === \"up-to-date\") return \"\";\n return buildHookResponse(verdict);\n}\n\nexport type StatusSummaryOptions = {\n repoRoot: string;\n runStatus?: typeof runStatus;\n};\n\n/**\n * Implements `maester skill runtime status-summary`. Loads the citadel config,\n * runs status, and returns a one-line human-readable summary plus an exit\n * code that mirrors the `maester status` ladder.\n */\nexport async function runtimeStatusSummary(\n opts: StatusSummaryOptions,\n): Promise<{ summary: string; exitCode: 0 | 1 | 2 }> {\n let config: Awaited<ReturnType<typeof loadCitadelConfig>>;\n try {\n config = await loadCitadelConfig(opts.repoRoot);\n } catch (err) {\n return {\n summary: err instanceof Error ? err.message : String(err),\n exitCode: 2,\n };\n }\n const runner = opts.runStatus ?? runStatus;\n try {\n const result = await runner(config, { repoRoot: opts.repoRoot });\n const summary = summarize(result);\n let exitCode: 0 | 1 | 2 = 0;\n if (result.counts.failed > 0) exitCode = 2;\n else if (result.counts.behind > 0) exitCode = 1;\n return { summary, exitCode };\n } catch (err) {\n return {\n summary: err instanceof Error ? err.message : String(err),\n exitCode: 2,\n };\n }\n}\n\ntype CachedVerdict = {\n ts: number;\n verdict: \"up-to-date\" | \"behind\" | \"failed\";\n summary: string;\n};\n\ntype HookEnvelope = {\n cwd?: string;\n tool_name?: string;\n tool_input?: {\n file_path?: string;\n path?: string;\n pattern?: string;\n };\n};\n\nfunction parseEnvelopeSafe(raw: string): HookEnvelope | undefined {\n if (!raw || raw.trim().length === 0) return undefined;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n return parsed as HookEnvelope;\n } catch {\n return undefined;\n }\n}\n\nfunction extractTargetPath(envelope: HookEnvelope, repoRoot: string): string | undefined {\n const input = envelope.tool_input;\n if (!input) return undefined;\n const raw = input.file_path ?? input.path ?? input.pattern;\n if (typeof raw !== \"string\" || raw.length === 0) return undefined;\n const cwd = typeof envelope.cwd === \"string\" ? envelope.cwd : repoRoot;\n return path.isAbsolute(raw) ? raw : path.resolve(cwd, raw);\n}\n\nfunction isUnderBaseDir(targetPath: string, repoRoot: string, baseDir: string): boolean {\n const base = path.resolve(repoRoot, baseDir);\n const rel = path.relative(base, targetPath);\n if (rel === \"\") return true;\n return !rel.startsWith(\"..\") && !path.isAbsolute(rel);\n}\n\nfunction readTtlSeconds(env: NodeJS.ProcessEnv | undefined): number {\n const raw = (env ?? process.env).MAESTER_SKILL_STATUS_TTL;\n if (!raw) return DEFAULT_TTL_SECONDS;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_TTL_SECONDS;\n return parsed;\n}\n\nasync function readCache(repoRoot: string): Promise<CachedVerdict | undefined> {\n try {\n const raw = await fs.readFile(path.join(repoRoot, CACHE_RELATIVE_PATH), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n const candidate = parsed as Partial<CachedVerdict>;\n if (\n typeof candidate.ts !== \"number\" ||\n (candidate.verdict !== \"up-to-date\" &&\n candidate.verdict !== \"behind\" &&\n candidate.verdict !== \"failed\") ||\n typeof candidate.summary !== \"string\"\n ) {\n return undefined;\n }\n return {\n ts: candidate.ts,\n verdict: candidate.verdict,\n summary: candidate.summary,\n };\n } catch {\n return undefined;\n }\n}\n\nasync function writeCache(repoRoot: string, verdict: CachedVerdict): Promise<void> {\n const finalPath = path.join(repoRoot, CACHE_RELATIVE_PATH);\n await fs.mkdir(path.dirname(finalPath), { recursive: true });\n const tempPath = `${finalPath}.tmp-${Math.floor(Math.random() * 1e9)}`;\n await fs.writeFile(tempPath, `${JSON.stringify(verdict)}\\n`, \"utf8\");\n await fs.rename(tempPath, finalPath);\n}\n\nfunction classifyVerdict(result: StatusResult): CachedVerdict[\"verdict\"] {\n if (result.counts.failed > 0) return \"failed\";\n if (result.counts.behind > 0) return \"behind\";\n return \"up-to-date\";\n}\n\nfunction summarize(result: StatusResult): string {\n const { upToDate, behind, failed } = result.counts;\n const total = upToDate + behind + failed;\n if (total === 0) return \"no sources configured\";\n if (behind === 0 && failed === 0) return `all ${upToDate} sources up to date`;\n const parts: string[] = [];\n if (behind > 0) parts.push(`${behind} behind`);\n if (failed > 0) parts.push(`${failed} failed`);\n if (upToDate > 0) parts.push(`${upToDate} up to date`);\n return parts.join(\", \");\n}\n\nfunction buildHookResponse(verdict: CachedVerdict): string {\n const detail =\n verdict.verdict === \"failed\"\n ? `Citadel status check failed: ${verdict.summary}. Proceed with the read and flag that cited content may be stale; do not retry sync in a loop.`\n : `Citadel is behind (${verdict.summary}). Auto-sync policy: run \\`npx maester sync\\`, then \\`rm -f .maester/.skill-cache.json\\` to invalidate this hook's cache, then proceed with the read. Do not prompt the user — sync is read-only against the configured remotes.`;\n const response = {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n additionalContext: detail,\n },\n };\n return `${JSON.stringify(response)}\\n`;\n}\n","import type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport {\n type SkillInstallOutcome,\n type SkillInstallResult,\n type SkillStatusResult,\n type SkillTargetId,\n listSkillTargets,\n runSkillInstall,\n runSkillStatus,\n runSkillUpgrade,\n} from \"../../core/skill/runner.js\";\nimport { runtimePreread, runtimeStatusSummary } from \"../../core/skill/runtime.js\";\nimport { SKILL_VERSION } from \"../../core/skill/version.js\";\nimport { DEFAULT_BASE_DIR } from \"../../schemas/citadel.js\";\nimport { PromptCancelledError } from \"../../ui/prompts.js\";\nimport type { CliContext } from \"../context.js\";\n\nconst EXIT_OK = 0;\nconst EXIT_OUTDATED_OR_BEHIND = 1;\nconst EXIT_FAILED = 2;\n\nconst SUPPORTED_IDS: readonly SkillTargetId[] = [\"claude-code\", \"codex\", \"cursor\", \"agents-md\"];\n\nexport function registerSkill(program: Command, getContext: () => CliContext): void {\n const group = program\n .command(\"skill\")\n .description(\"Install and manage the Grand Maester agent skill in this repository.\");\n\n group\n .command(\"install\")\n .description(\"Install the Grand Maester skill for one or more agent targets.\")\n .option(\n \"--target <id>\",\n \"Agent target id (repeatable). Skips the interactive picker.\",\n collectTarget,\n [] as SkillTargetId[],\n )\n .action(async (options: { target: SkillTargetId[] }) => {\n process.exitCode = await runSkillInstallCommand(getContext(), options.target, \"install\");\n });\n\n group\n .command(\"upgrade\")\n .description(\"Refresh every installed target's content to match the running maester version.\")\n .option(\"--check\", \"Report which targets are outdated without writing.\")\n .action(async (options: { check?: boolean }) => {\n process.exitCode = await runSkillUpgradeCommand(getContext(), options.check === true);\n });\n\n group\n .command(\"add-target <id>\")\n .description(\"Install the skill for an additional agent target.\")\n .action(async (id: string) => {\n if (!isSupportedId(id)) {\n const ctx = getContext();\n ctx.logger.error(`Unknown target '${id}'. Supported: ${SUPPORTED_IDS.join(\", \")}`);\n process.exitCode = EXIT_FAILED;\n return;\n }\n process.exitCode = await runSkillInstallCommand(getContext(), [id], \"add-target\");\n });\n\n group\n .command(\"status\")\n .description(\n \"Show which agent targets have the Grand Maester installed and whether each is up to date.\",\n )\n .action(async () => {\n process.exitCode = await runSkillStatusCommand(getContext());\n });\n\n const runtime = group\n .command(\"runtime\")\n .description(\"Internal helpers invoked by installed agent hooks.\");\n\n runtime\n .command(\"preread\")\n .description(\n \"Read a Claude Code PreToolUse hook envelope from stdin; emit a hook response. Always exits 0.\",\n )\n .action(async () => {\n process.exitCode = await runRuntimePrereadCommand(getContext());\n });\n\n runtime\n .command(\"status-summary\")\n .description(\"Print a one-line citadel-status summary. Exit ladder mirrors `maester status`.\")\n .action(async () => {\n process.exitCode = await runRuntimeStatusSummaryCommand(getContext());\n });\n}\n\nexport async function runSkillInstallCommand(\n ctx: CliContext,\n flagTargets: readonly SkillTargetId[],\n mode: \"install\" | \"add-target\",\n): Promise<number> {\n const baseDir = await loadBaseDir(ctx);\n if (baseDir === null) return EXIT_FAILED;\n\n let targets: SkillTargetId[];\n if (flagTargets.length > 0) {\n targets = [...flagTargets];\n } else {\n try {\n targets = await pickTargetsInteractively(ctx);\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n ctx.prompts.outro(\"Cancelled — no skill artifacts written.\");\n return 130;\n }\n throw err;\n }\n if (targets.length === 0) {\n ctx.logger.warning(\"No targets selected — nothing to install.\");\n return EXIT_OK;\n }\n }\n\n let result: SkillInstallResult;\n try {\n result = await runSkillInstall(ctx.repoRoot.path, {\n targets,\n mode,\n citadelBaseDir: baseDir,\n });\n } catch (err) {\n ctx.logger.error(err instanceof Error ? err.message : String(err));\n return EXIT_FAILED;\n }\n\n renderInstallResult(ctx, result, mode);\n return result.counts.failed > 0 ? EXIT_FAILED : EXIT_OK;\n}\n\nexport async function runSkillUpgradeCommand(ctx: CliContext, check: boolean): Promise<number> {\n const baseDir = await loadBaseDir(ctx);\n if (baseDir === null) return EXIT_FAILED;\n\n let result: SkillInstallResult;\n try {\n result = await runSkillUpgrade(ctx.repoRoot.path, { check, citadelBaseDir: baseDir });\n } catch (err) {\n ctx.logger.error(err instanceof Error ? err.message : String(err));\n return EXIT_FAILED;\n }\n\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No Grand Maester targets are installed. Run `maester skill install` first.\");\n return check ? EXIT_OK : EXIT_OK;\n }\n\n for (const outcome of result.outcomes) {\n renderInstallOutcome(ctx, outcome);\n }\n ctx.logger.blank();\n const upgradedOrPending = result.counts.upgraded;\n if (result.counts.failed > 0) {\n ctx.logger.error(`${result.counts.failed} target(s) failed. See errors above.`);\n return EXIT_FAILED;\n }\n if (check && upgradedOrPending > 0) {\n ctx.logger.warning(\n `${upgradedOrPending} target(s) are outdated. Run \\`maester skill upgrade\\` to refresh.`,\n );\n return EXIT_OUTDATED_OR_BEHIND;\n }\n if (upgradedOrPending > 0) {\n ctx.logger.success(`Upgraded ${upgradedOrPending} target(s) to v${SKILL_VERSION}.`);\n } else {\n ctx.logger.success(`All ${result.outcomes.length} installed target(s) up to date.`);\n }\n return EXIT_OK;\n}\n\nexport async function runSkillStatusCommand(ctx: CliContext): Promise<number> {\n const result = await runSkillStatus(ctx.repoRoot.path);\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(outcome)}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n } else {\n renderStatusResult(ctx, result);\n }\n\n if (result.counts.upToDate + result.counts.outdated === 0) return EXIT_FAILED;\n if (result.counts.outdated > 0) return EXIT_OUTDATED_OR_BEHIND;\n return EXIT_OK;\n}\n\nexport async function runRuntimePrereadCommand(ctx: CliContext): Promise<number> {\n const stdin = await readAllStdin();\n const out = await runtimePreread(stdin, { repoRoot: ctx.repoRoot.path });\n if (out.length > 0) process.stdout.write(out);\n return EXIT_OK;\n}\n\nexport async function runRuntimeStatusSummaryCommand(ctx: CliContext): Promise<number> {\n const { summary, exitCode } = await runtimeStatusSummary({ repoRoot: ctx.repoRoot.path });\n process.stdout.write(`${summary}\\n`);\n return exitCode;\n}\n\nasync function pickTargetsInteractively(ctx: CliContext): Promise<SkillTargetId[]> {\n ctx.prompts.intro(\"Install the Grand Maester\");\n const choices = listSkillTargets().map((t) => ({\n value: t.id,\n label: t.label,\n }));\n const picked = await ctx.prompts.multiselect<SkillTargetId>({\n message: \"Which agent(s) should the skill be installed for?\",\n options: choices,\n initialValues: [\"claude-code\", \"codex\"] as SkillTargetId[],\n required: true,\n });\n return picked;\n}\n\nasync function loadBaseDir(ctx: CliContext): Promise<string | null> {\n try {\n const config = await loadCitadelConfig(ctx.repoRoot.path);\n return config.baseDir ?? DEFAULT_BASE_DIR;\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return null;\n }\n}\n\nfunction renderInstallResult(\n ctx: CliContext,\n result: SkillInstallResult,\n mode: \"install\" | \"add-target\",\n): void {\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(outcome)}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n return;\n }\n for (const outcome of result.outcomes) {\n renderInstallOutcome(ctx, outcome);\n }\n for (const reg of result.mcpRegistrations) {\n if (reg.action === \"failed\") {\n ctx.logger.error(`MCP refresh failed for ${reg.host}${reg.error ? `: ${reg.error}` : \"\"}`);\n } else if (reg.action !== \"skipped\") {\n ctx.logger.success(`MCP entry ${reg.action} → ${reg.filePath}`);\n }\n }\n ctx.logger.blank();\n const action = mode === \"add-target\" ? \"Added\" : \"Installed\";\n const total = result.counts.installed + result.counts.upgraded + result.counts.unchanged;\n if (result.counts.failed > 0) {\n ctx.logger.error(`${result.counts.failed} target(s) failed. See errors above.`);\n return;\n }\n ctx.logger.success(`${action} Grand Maester for ${total} target(s) at v${SKILL_VERSION}.`);\n}\n\nfunction renderInstallOutcome(ctx: CliContext, outcome: SkillInstallOutcome): void {\n const artifacts = outcome.artifactPaths.join(\", \");\n switch (outcome.action) {\n case \"installed\":\n ctx.logger.success(`${outcome.label}: installed → ${artifacts}`);\n break;\n case \"upgraded\":\n ctx.logger.success(`${outcome.label}: upgraded → ${artifacts}`);\n break;\n case \"unchanged\":\n ctx.logger.info(`${outcome.label}: already up to date (${artifacts})`);\n break;\n case \"failed\":\n ctx.logger.error(`${outcome.label}: failed${outcome.error ? ` — ${outcome.error}` : \"\"}`);\n break;\n }\n}\n\nfunction renderStatusResult(ctx: CliContext, result: SkillStatusResult): void {\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No skill targets registered.\");\n return;\n }\n for (const outcome of result.outcomes) {\n switch (outcome.state) {\n case \"up-to-date\":\n ctx.logger.success(`${outcome.label}: v${outcome.installedVersion ?? \"?\"} (up to date)`);\n break;\n case \"outdated\":\n ctx.logger.warning(\n `${outcome.label}: v${outcome.installedVersion ?? \"?\"} (latest v${outcome.currentVersion})`,\n );\n break;\n case \"not-installed\":\n ctx.logger.info(`${outcome.label}: not installed`);\n break;\n }\n }\n ctx.logger.blank();\n const { upToDate, outdated, notInstalled } = result.counts;\n if (upToDate + outdated === 0) {\n ctx.logger.info(\"No Grand Maester targets installed. Run `maester skill install` to add one.\");\n return;\n }\n if (outdated > 0) {\n ctx.logger.warning(`${outdated} target(s) outdated. Run \\`maester skill upgrade\\`.`);\n return;\n }\n ctx.logger.success(`${upToDate} target(s) up to date; ${notInstalled} available to install.`);\n}\n\nfunction collectTarget(value: string, prev: SkillTargetId[]): SkillTargetId[] {\n if (!isSupportedId(value)) {\n throw new Error(`Unknown target '${value}'. Supported: ${SUPPORTED_IDS.join(\", \")}`);\n }\n return [...prev, value];\n}\n\nfunction isSupportedId(id: string): id is SkillTargetId {\n return (SUPPORTED_IDS as readonly string[]).includes(id);\n}\n\nasync function readAllStdin(): Promise<string> {\n if (process.stdin.isTTY) return \"\";\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n","import { type ConsolaInstance, createConsola } from \"consola\";\nimport type { Theming } from \"./theme/index.js\";\n\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"verbose\";\n\nexport type LoggerOptions = {\n theming: Theming;\n level?: LogLevel;\n json?: boolean;\n stdout?: NodeJS.WritableStream;\n stderr?: NodeJS.WritableStream;\n};\n\nexport type Logger = {\n level: LogLevel;\n json: boolean;\n success: (message: string, meta?: Record<string, unknown>) => void;\n warning: (message: string, meta?: Record<string, unknown>) => void;\n error: (message: string, meta?: Record<string, unknown>) => void;\n info: (message: string, meta?: Record<string, unknown>) => void;\n verbose: (message: string, meta?: Record<string, unknown>) => void;\n log: (message: string) => void;\n blank: () => void;\n};\n\ntype Severity = \"success\" | \"warning\" | \"error\" | \"info\" | \"verbose\";\n\nconst SEVERITY_TO_GLYPH = {\n success: \"success\",\n warning: \"warning\",\n error: \"error\",\n info: \"info\",\n verbose: \"info\",\n} as const;\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n silent: -1,\n error: 0,\n warn: 1,\n info: 2,\n verbose: 3,\n};\n\nfunction severityMeetsLevel(sev: Severity, level: LogLevel): boolean {\n if (level === \"silent\") return false;\n const need: LogLevel =\n sev === \"error\" ? \"error\" : sev === \"warning\" ? \"warn\" : sev === \"verbose\" ? \"verbose\" : \"info\";\n return LEVEL_RANK[need] <= LEVEL_RANK[level];\n}\n\nexport function createLogger(opts: LoggerOptions): Logger {\n const level: LogLevel = opts.level ?? \"info\";\n const json = opts.json ?? false;\n const stdout = opts.stdout ?? process.stdout;\n const stderr = opts.stderr ?? process.stderr;\n const { theming } = opts;\n\n const consola: ConsolaInstance = createConsola({\n level: level === \"silent\" ? -1 : LEVEL_RANK[level],\n formatOptions: { colors: false, date: false, compact: true },\n });\n void consola;\n\n function writeJson(sev: Severity, message: string, meta?: Record<string, unknown>): void {\n const payload = { level: sev, message, ...(meta ?? {}) };\n const stream = sev === \"error\" ? stderr : stdout;\n stream.write(`${JSON.stringify(payload)}\\n`);\n }\n\n function writeHuman(sev: Severity, message: string): void {\n const role = SEVERITY_TO_GLYPH[sev];\n const g = theming.glyph(role);\n const paintedGlyph = g.token ? theming.painter.token(g.token, g.text) : g.text;\n const line = `${paintedGlyph} ${message}`;\n const stream = sev === \"error\" ? stderr : stdout;\n stream.write(`${line}\\n`);\n }\n\n function emit(sev: Severity, message: string, meta?: Record<string, unknown>): void {\n if (!severityMeetsLevel(sev, level)) return;\n if (json) {\n writeJson(sev, message, meta);\n } else {\n writeHuman(sev, message);\n }\n }\n\n return {\n level,\n json,\n success: (m, meta) => emit(\"success\", m, meta),\n warning: (m, meta) => emit(\"warning\", m, meta),\n error: (m, meta) => emit(\"error\", m, meta),\n info: (m, meta) => emit(\"info\", m, meta),\n verbose: (m, meta) => emit(\"verbose\", m, meta),\n log: (message) => {\n if (level === \"silent\") return;\n if (json) {\n stdout.write(`${JSON.stringify({ level: \"info\", message })}\\n`);\n } else {\n stdout.write(`${message}\\n`);\n }\n },\n blank: () => {\n if (level === \"silent\" || json) return;\n stdout.write(\"\\n\");\n },\n };\n}\n\nexport function redactUrl(value: string): string {\n return value.replace(/https?:\\/\\/([^:@/\\s]+):([^@\\s]+)@/g, (_, user) => `https://${user}:***@`);\n}\n","import type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport {\n type BehindReason,\n type StatusOutcome,\n type StatusResult,\n runStatus,\n} from \"../../core/status/runner.js\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport { redactUrl } from \"../../ui/logger.js\";\nimport type { CliContext } from \"../context.js\";\n\nconst EXIT_OK = 0;\nconst EXIT_BEHIND = 1;\nconst EXIT_FAILED = 2;\n\nexport function registerStatus(program: Command, getContext: () => CliContext): void {\n program\n .command(\"status\")\n .description(\n \"Check whether configured sources are up to date with their remotes. Exit codes: 0 (all up to date), 1 (any behind), 2 (any failed or config error).\",\n )\n .argument(\"[names...]\", \"Optional source names to scope the run\")\n .option(\"--concurrency <n>\", \"Override the per-run source concurrency (default: 4)\", (v) =>\n Number(v),\n )\n .action(async (names: string[], options: { concurrency?: number }) => {\n const code = await runStatusCommand(getContext(), names, options.concurrency);\n process.exitCode = code;\n });\n}\n\nexport async function runStatusCommand(\n ctx: CliContext,\n scope: readonly string[],\n concurrency?: number,\n): Promise<number> {\n let config: CitadelConfig;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return EXIT_FAILED;\n }\n\n let result: StatusResult;\n try {\n result = await runStatus(config, {\n repoRoot: ctx.repoRoot.path,\n ...(scope.length > 0 ? { scope } : {}),\n ...(concurrency !== undefined && Number.isFinite(concurrency) ? { concurrency } : {}),\n });\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return EXIT_FAILED;\n }\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(buildJsonOutcome(outcome))}\\n`);\n }\n process.stdout.write(`${JSON.stringify({ type: \"summary\", ...result.counts })}\\n`);\n } else {\n renderHumanSummary(ctx, result);\n }\n\n if (result.counts.failed > 0) return EXIT_FAILED;\n if (result.counts.behind > 0) return EXIT_BEHIND;\n return EXIT_OK;\n}\n\nfunction buildJsonOutcome(outcome: StatusOutcome): Record<string, unknown> {\n if (outcome.verdict === \"up-to-date\") {\n return { name: outcome.name, verdict: outcome.verdict, commitSha: outcome.commitSha };\n }\n if (outcome.verdict === \"behind\") {\n const base: Record<string, unknown> = {\n name: outcome.name,\n verdict: outcome.verdict,\n reasons: outcome.reasons,\n };\n if (outcome.commitSha !== undefined) base.commitSha = outcome.commitSha;\n if (outcome.resolvedSha !== undefined) base.resolvedSha = outcome.resolvedSha;\n return base;\n }\n return { name: outcome.name, verdict: outcome.verdict, error: redactUrl(outcome.error) };\n}\n\nfunction renderHumanSummary(ctx: CliContext, result: StatusResult): void {\n if (result.outcomes.length === 0) {\n ctx.logger.info(\"No sources configured.\");\n return;\n }\n for (const outcome of result.outcomes) {\n switch (outcome.verdict) {\n case \"up-to-date\":\n ctx.logger.success(`${outcome.name}: up to date (${shortSha(outcome.commitSha)})`);\n break;\n case \"behind\":\n ctx.logger.warning(`${outcome.name}: behind — ${formatReasons(outcome)}`);\n break;\n case \"failed\":\n ctx.logger.error(`${outcome.name}: failed — ${redactUrl(outcome.error)}`);\n break;\n }\n }\n ctx.logger.blank();\n renderSummaryLine(ctx, result);\n}\n\nfunction renderSummaryLine(ctx: CliContext, result: StatusResult): void {\n const { upToDate, behind, failed } = result.counts;\n if (failed > 0) {\n ctx.logger.error(\n `${failed} source(s) failed, ${behind} behind, ${upToDate} up to date. See errors above.`,\n );\n return;\n }\n if (behind > 0) {\n ctx.logger.warning(\n `${behind} of ${result.outcomes.length} source(s) behind. Run \\`maester sync\\` to refresh.`,\n );\n return;\n }\n ctx.logger.success(`All ${result.outcomes.length} source(s) up to date.`);\n}\n\nfunction formatReasons(outcome: Extract<StatusOutcome, { verdict: \"behind\" }>): string {\n const parts: string[] = [];\n for (const reason of outcome.reasons) {\n parts.push(formatReason(reason, outcome));\n }\n return parts.join(\"; \");\n}\n\nfunction formatReason(\n reason: BehindReason,\n outcome: Extract<StatusOutcome, { verdict: \"behind\" }>,\n): string {\n switch (reason) {\n case \"never-synced\":\n return \"never synced (run `maester sync` to populate this destination)\";\n case \"remote-ref-advanced\": {\n const recorded = outcome.commitSha ? shortSha(outcome.commitSha) : \"—\";\n const remote = outcome.resolvedSha ? shortSha(outcome.resolvedSha) : \"—\";\n return `remote ref advanced (recorded ${recorded}, remote ${remote})`;\n }\n case \"manifest-changed\":\n return \"remote maester.yaml publish surface changed\";\n }\n}\n\nfunction shortSha(sha: string): string {\n return sha.slice(0, 7);\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 { 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 type { Command } from \"commander\";\nimport { loadCitadelConfig } from \"../../core/config/loader.js\";\nimport { MaesterError } from \"../../core/errors.js\";\nimport type { FetchWarning } from \"../../core/sources/fetcher.js\";\nimport type { StateWarning } from \"../../core/state/applier.js\";\nimport { type SyncOutcome, type SyncResult, runSync } from \"../../core/sync/runner.js\";\nimport type { CitadelConfig } from \"../../schemas/citadel.js\";\nimport { redactUrl } from \"../../ui/logger.js\";\nimport type { CliContext } from \"../context.js\";\n\nexport function registerSync(program: Command, getContext: () => CliContext): void {\n program\n .command(\"sync\")\n .description(\"Fetch all configured sources into the local citadel.\")\n .argument(\"[names...]\", \"Optional source names to scope the run\")\n .option(\"--concurrency <n>\", \"Override the per-run source concurrency (default: 4)\", (v) =>\n Number(v),\n )\n .action(async (names: string[], options: { concurrency?: number }) => {\n const code = await runSyncCommand(getContext(), names, options.concurrency);\n process.exitCode = code;\n });\n}\n\nexport async function runSyncCommand(\n ctx: CliContext,\n scope: readonly string[],\n concurrency?: number,\n): Promise<number> {\n let config: CitadelConfig;\n try {\n config = await loadCitadelConfig(ctx.repoRoot.path);\n } catch (err) {\n const message =\n err instanceof MaesterError ? err.message : err instanceof Error ? err.message : String(err);\n ctx.logger.error(message);\n return 1;\n }\n\n if (!ctx.flags.json) {\n const totalConfigured = config.sources.length;\n ctx.logger.info(`Syncing ${scope.length > 0 ? scope.length : totalConfigured} source(s)…`);\n }\n\n const result = await runSync(config, {\n repoRoot: ctx.repoRoot.path,\n ...(scope.length > 0 ? { scope } : {}),\n ...(concurrency !== undefined && Number.isFinite(concurrency) ? { concurrency } : {}),\n onProgress: (event) => {\n if (!ctx.flags.json) return;\n process.stdout.write(`${JSON.stringify({ event: event.type, ...event })}\\n`);\n },\n });\n\n if (ctx.flags.json) {\n for (const outcome of result.outcomes) {\n process.stdout.write(`${JSON.stringify(buildJsonOutcome(outcome))}\\n`);\n }\n } else {\n renderHumanSummary(ctx, result);\n }\n return result.failed > 0 ? 1 : 0;\n}\n\nfunction buildJsonOutcome(outcome: SyncOutcome): Record<string, unknown> {\n const base: Record<string, unknown> = {\n name: outcome.name,\n status: outcome.status,\n destination: outcome.destination,\n };\n if (outcome.ref !== undefined) base.ref = outcome.ref;\n if (outcome.commitSha !== undefined) base.commitSha = outcome.commitSha;\n if (outcome.warnings.length > 0) {\n base.warnings = outcome.warnings.map(serializeWarning);\n }\n if (outcome.stateBreakdown !== undefined) {\n base.stateBreakdown = outcome.stateBreakdown;\n }\n if (outcome.stateWarnings && outcome.stateWarnings.length > 0) {\n base.stateWarnings = outcome.stateWarnings;\n }\n if (outcome.error !== undefined) base.error = redactUrl(outcome.error);\n return base;\n}\n\nfunction serializeWarning(warning: FetchWarning): Record<string, unknown> {\n return {\n type: warning.type,\n name: warning.name,\n includes: warning.includes,\n };\n}\n\nfunction renderHumanSummary(ctx: CliContext, result: SyncResult): void {\n for (const outcome of result.outcomes) {\n const shortSha = outcome.commitSha?.slice(0, 7) ?? \"—\";\n const stateSuffix = formatStateBreakdownSuffix(outcome);\n switch (outcome.status) {\n case \"added\":\n ctx.logger.success(`${outcome.name}: added (${shortSha})${stateSuffix}`);\n break;\n case \"updated\":\n ctx.logger.success(`${outcome.name}: updated (${shortSha})${stateSuffix}`);\n break;\n case \"unchanged\":\n ctx.logger.info(`${outcome.name}: unchanged`);\n break;\n case \"failed\":\n ctx.logger.error(\n `${outcome.name}: failed — ${redactUrl(outcome.error ?? \"unknown error\")}`,\n );\n break;\n }\n for (const warning of outcome.warnings) {\n ctx.logger.warning(` ${formatWarning(warning)}`);\n }\n for (const stateWarning of outcome.stateWarnings ?? []) {\n ctx.logger.warning(` ${formatStateWarning(stateWarning)}`);\n }\n if (ctx.flags.verbose && outcome.stateDetails && outcome.stateDetails.length > 0) {\n for (const detail of outcome.stateDetails) {\n ctx.logger.verbose(` ${detail.file} — state=${detail.state} (${detail.sourceOfTruth})`);\n }\n }\n }\n ctx.logger.blank();\n if (result.failed > 0) {\n ctx.logger.error(`${result.failed} source(s) failed.`);\n return;\n }\n ctx.logger.success(`All ${result.outcomes.length} source(s) up to date.`);\n}\n\nfunction formatWarning(warning: FetchWarning): string {\n return `no files matched includes — citadel-side filter set may need updating (${warning.includes.join(\", \")})`;\n}\n\nfunction formatStateBreakdownSuffix(outcome: SyncOutcome): string {\n const b = outcome.stateBreakdown;\n if (!b) return \"\";\n return ` canon: ${b.canon} · draft: ${b.draft} · untagged: ${b.untagged}`;\n}\n\nfunction formatStateWarning(warning: StateWarning): string {\n if (warning.type === \"bad-inline-state\") {\n return `${warning.file}: inline state '${warning.raw}' is not in {draft, canon} — treated as missing`;\n }\n return `${warning.file}: inline state '${warning.inline}' overrides rule state '${warning.rule}'`;\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport type RepoRoot = {\n path: string;\n hasGit: boolean;\n hasPackageJson: boolean;\n};\n\nexport function getRepoRoot(start: string = process.cwd()): RepoRoot {\n const path = resolve(start);\n return {\n path,\n hasGit: existsSync(resolve(path, \".git\")),\n hasPackageJson: existsSync(resolve(path, \"package.json\")),\n };\n}\n","import { type RepoRoot, getRepoRoot } from \"../core/repo/root.js\";\nimport { type LogLevel, type Logger, createLogger } from \"../ui/logger.js\";\nimport { type Prompts, createPrompts } from \"../ui/prompts.js\";\nimport { type Theming, createTheming } from \"../ui/theme/index.js\";\n\nexport type GlobalFlags = {\n verbose?: boolean;\n quiet?: boolean;\n json?: boolean;\n color?: \"auto\" | \"always\" | \"never\";\n theme?: \"dark\" | \"light\";\n noWelcome?: boolean;\n};\n\nexport type CliContext = {\n flags: GlobalFlags;\n theming: Theming;\n logger: Logger;\n prompts: Prompts;\n repoRoot: RepoRoot;\n};\n\nexport function buildContext(flags: GlobalFlags, cwd: string = process.cwd()): CliContext {\n const theming = createTheming({\n forceColor: flags.color ?? \"auto\",\n ...(flags.theme !== undefined ? { themeOverride: flags.theme } : {}),\n });\n const level: LogLevel = flags.quiet ? \"error\" : flags.verbose ? \"verbose\" : \"info\";\n const logger = createLogger({ theming, level, json: flags.json ?? false });\n const prompts = createPrompts(theming);\n const repoRoot = getRepoRoot(cwd);\n return { flags, theming, logger, prompts, repoRoot };\n}\n","import { detectRoles } from \"../core/config/paths.js\";\nimport type { CliContext } from \"./context.js\";\n\nexport type MenuChoice = \"init\" | \"publish\" | \"status\" | \"exit\";\n\nexport async function showTopLevelMenu(ctx: CliContext): Promise<MenuChoice> {\n const roles = detectRoles(ctx.repoRoot.path);\n const citadelLabel = roles.hasCitadel ? \"View citadel\" : \"Initialize a citadel\";\n const citadelHint = roles.hasCitadel\n ? \"summary of the existing config\"\n : \"this repo pulls from remote knowledge sources\";\n const maesterLabel = roles.hasMaester\n ? \"View maester manifest\"\n : \"Configure this repo as a maester\";\n const maesterHint = roles.hasMaester\n ? \"summary of the existing manifest\"\n : \"this repo publishes documents\";\n\n return ctx.prompts.select<MenuChoice>({\n message: \"What would you like to do?\",\n options: [\n { value: \"init\", label: citadelLabel, hint: citadelHint },\n { value: \"publish\", label: maesterLabel, hint: maesterHint },\n {\n value: \"status\",\n label: \"Show status\",\n hint: \"check whether configured sources are up to date\",\n },\n { value: \"exit\", label: \"Exit\" },\n ],\n });\n}\n","import { Command, type OptionValues } from \"commander\";\nimport { detectRoles } from \"../core/config/paths.js\";\nimport { MaesterError } from \"../core/errors.js\";\nimport { bannerForContext } from \"../ui/components/banner.js\";\nimport { PromptCancelledError } from \"../ui/prompts.js\";\nimport { createTheming } from \"../ui/theme/index.js\";\nimport { readColumns } from \"../ui/width.js\";\nimport { registerConnector } from \"./commands/connector.js\";\nimport { registerInit, runInit } from \"./commands/init.js\";\nimport { registerMcp } from \"./commands/mcp.js\";\nimport { registerPublish, runPublish } from \"./commands/publish.js\";\nimport { registerSkill } from \"./commands/skill.js\";\nimport { registerStatus, runStatusCommand } from \"./commands/status.js\";\nimport { registerSync } from \"./commands/sync.js\";\nimport { type CliContext, type GlobalFlags, buildContext } from \"./context.js\";\nimport { showTopLevelMenu } from \"./menu.js\";\n\nexport async function run(argv: readonly string[] = process.argv): Promise<void> {\n const code = await runMain(argv);\n process.exitCode = code;\n}\n\nexport async function runMain(argv: readonly string[] = process.argv): Promise<number> {\n maybeRenderHelpVersionBanner(argv);\n const program = buildProgram();\n try {\n await program.parseAsync(argv as string[]);\n return toExitCode(process.exitCode);\n } catch (err) {\n if (err instanceof PromptCancelledError) return 130;\n if (err instanceof MaesterError) {\n process.stderr.write(`${err.message}\\n`);\n return 1;\n }\n process.stderr.write(`${err instanceof Error ? (err.stack ?? err.message) : String(err)}\\n`);\n return 1;\n }\n}\n\nfunction maybeRenderHelpVersionBanner(argv: readonly string[]): void {\n if (!process.stdout.isTTY) return;\n const tail = argv.slice(2);\n const wantsHelp = tail.includes(\"--help\") || tail.includes(\"-h\");\n const wantsVersion = tail.includes(\"--version\") || tail.includes(\"-V\");\n if (!wantsHelp && !wantsVersion) return;\n const theming = createTheming();\n const subtitle = wantsVersion ? \"v0.4.0 · living specs\" : \"living specs · v0.4.0\";\n const banner = bannerForContext(theming, readColumns(), subtitle);\n if (banner.length > 0) {\n process.stdout.write(`${banner}\\n\\n`);\n }\n}\n\nfunction toExitCode(value: string | number | null | undefined): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n}\n\nfunction buildProgram(): Command {\n const program = new Command();\n program\n .name(\"maester\")\n .description(\"Aggregate documentation from many sources into one citadel.\")\n .version(\"0.4.0\", \"-V, --version\", \"Print the maester version.\")\n .option(\"--verbose\", \"Show verbose output\")\n .option(\"--quiet\", \"Suppress all output except errors\")\n .option(\"--json\", \"Emit machine-readable JSON output (one object per line)\")\n .option(\"--color\", \"Force colored output (overrides auto-detection)\")\n .option(\"--no-color\", \"Disable colored output (overrides auto-detection)\")\n .option(\"--theme <theme>\", \"Theme override: 'dark' or 'light'\")\n .option(\"--no-welcome\", \"Suppress the first-run welcome banner\")\n .enablePositionalOptions(false)\n .allowExcessArguments(false);\n\n registerConnector(program, () => buildContext(extractFlags(program.opts())));\n registerInit(program, () => buildContext(extractFlags(program.opts())));\n registerMcp(program, () => buildContext(extractFlags(program.opts())));\n registerPublish(program, () => buildContext(extractFlags(program.opts())));\n registerSkill(program, () => buildContext(extractFlags(program.opts())));\n registerStatus(program, () => buildContext(extractFlags(program.opts())));\n registerSync(program, () => buildContext(extractFlags(program.opts())));\n\n program.action(async () => {\n const ctx = buildContext(extractFlags(program.opts()));\n const code = await runNoArgs(ctx);\n process.exitCode = code;\n });\n\n return program;\n}\n\nfunction extractFlags(opts: OptionValues): GlobalFlags {\n let color: \"auto\" | \"always\" | \"never\" = \"auto\";\n if (opts.color === true) color = \"always\";\n if (opts.color === false) color = \"never\";\n const theme =\n typeof opts.theme === \"string\" && (opts.theme === \"light\" || opts.theme === \"dark\")\n ? (opts.theme as \"light\" | \"dark\")\n : undefined;\n const envNoWelcome =\n typeof process.env.MAESTER_NO_WELCOME === \"string\" && process.env.MAESTER_NO_WELCOME.length > 0;\n return {\n verbose: opts.verbose === true,\n quiet: opts.quiet === true,\n json: opts.json === true,\n color,\n ...(theme ? { theme } : {}),\n noWelcome: opts.welcome === false || envNoWelcome,\n };\n}\n\nasync function runNoArgs(ctx: CliContext): Promise<number> {\n if (!process.stdout.isTTY) {\n process.stdout.write(\"Run `maester --help` to see available commands.\\n\");\n return 0;\n }\n const roles = detectRoles(ctx.repoRoot.path);\n const showWelcome = !roles.hasCitadel && !roles.hasMaester && !ctx.flags.noWelcome;\n if (showWelcome) {\n const banner = bannerForContext(ctx.theming, readColumns(), \"living specs · v0.4.0\");\n if (banner.length > 0) {\n process.stdout.write(`${banner}\\n\\n`);\n }\n ctx.prompts.intro(\"Welcome to maester\");\n ctx.prompts.log.message(\"This repository has no citadel or maester config yet.\");\n }\n try {\n const choice = await showTopLevelMenu(ctx);\n switch (choice) {\n case \"init\":\n return runInit(ctx);\n case \"publish\":\n return runPublish(ctx);\n case \"status\":\n return runStatusCommand(ctx, []);\n case \"exit\":\n ctx.prompts.outro(\"Goodbye.\");\n return 0;\n }\n } catch (err) {\n if (err instanceof PromptCancelledError) {\n process.stdout.write(\"\\n\");\n return 130;\n }\n throw err;\n }\n}\n"]}