{"version":3,"file":"bin.mjs","names":[],"sources":["../../src/cli/defaults.ts","../../src/cli/commands/ai.ts","../../src/cli/commands/create.ts","../../src/cli/commands/skills.ts","../../src/cli/commands/templates.ts","../../src/cli/commands/validate.ts","../../src/cli/bin.ts"],"sourcesContent":["/**\n * Read project-level defaults for the pagesmith-core CLI.\n *\n * Precedence (highest first):\n *   1. Command-line flags.\n *   2. `pagesmith-core.config.{ts,json5}` at the project root.\n *   3. `pagesmith.config.{ts,mts,js,mjs,json5,json}` `cli.core` block.\n *   4. Built-in defaults.\n *\n * The loader is async so it can read TypeScript configs via the shared\n * `loadPagesmithConfig` helper from `@pagesmith/core/cli-kit`.\n */\n\nimport { existsSync, readFileSync } from \"fs\";\nimport JSON5 from \"json5\";\nimport { resolve } from \"path\";\nimport { loadPagesmithConfig } from \"../cli-kit/load-config.js\";\n\nexport type CoreCliDefaults = {\n  ai?: {\n    assistants?: Array<\"claude\" | \"codex\" | \"gemini\">;\n    scope?: \"project\" | \"user\";\n    profile?: \"default\" | \"docs\";\n    skillName?: string;\n    includeLlms?: boolean;\n  };\n  create?: {\n    template?: string;\n  };\n  skills?: {\n    packages?: string[];\n    target?: string;\n  };\n};\n\nfunction readJson5(path: string): unknown {\n  try {\n    return JSON5.parse(readFileSync(path, \"utf-8\"));\n  } catch {\n    return undefined;\n  }\n}\n\nfunction pickCliCore(config: Record<string, unknown> | undefined): CoreCliDefaults | undefined {\n  if (!config) return undefined;\n  const cli = config.cli as { core?: CoreCliDefaults } | undefined;\n  return cli?.core;\n}\n\nexport async function readCoreCliDefaults(cwd = process.cwd()): Promise<CoreCliDefaults> {\n  const dedicated = resolve(cwd, \"pagesmith-core.config.json5\");\n  if (existsSync(dedicated)) {\n    const parsed = readJson5(dedicated);\n    if (parsed && typeof parsed === \"object\") return parsed as CoreCliDefaults;\n  }\n\n  const dedicatedTs = resolve(cwd, \"pagesmith-core.config.ts\");\n  if (existsSync(dedicatedTs)) {\n    // For dedicated .ts overrides, still go through the unified loader so we\n    // get the same TS resolution semantics as the main pagesmith.config.ts.\n    const result = await loadPagesmithConfig({ cwd, explicitPath: dedicatedTs });\n    if (result.config) return result.config as CoreCliDefaults;\n  }\n\n  const shared = await loadPagesmithConfig({ cwd });\n  return pickCliCore(shared.config) ?? {};\n}\n","import type { Command } from \"cac\";\nimport { installAiArtifacts } from \"../../ai/index.js\";\nimport {\n  intro,\n  log,\n  note,\n  outro,\n  promptConfirm,\n  promptMultiselect,\n  promptSelect,\n  resolveInteractive,\n  withInteractivityFlags,\n} from \"../../cli-kit/index.js\";\nimport { readCoreCliDefaults } from \"../defaults.js\";\n\ntype Assistant = \"claude\" | \"codex\" | \"gemini\";\ntype Scope = \"project\" | \"user\";\ntype Profile = \"default\" | \"docs\";\n\ntype AiOpts = {\n  assistant?: string | string[];\n  scope?: string;\n  profile?: string;\n  cwd?: string;\n  homeDir?: string;\n  skillName?: string;\n  llms?: boolean;\n  dryRun?: boolean;\n  yes?: boolean;\n  nonInteractive?: boolean;\n  interactive?: boolean;\n};\n\nfunction asAssistant(value: string): Assistant {\n  if (value === \"claude\" || value === \"codex\" || value === \"gemini\") return value;\n  throw new Error(`--assistant must be one of: claude, codex, gemini (got \"${value}\")`);\n}\n\nfunction asScope(value: string | undefined): Scope | undefined {\n  if (value === undefined) return undefined;\n  if (value === \"project\" || value === \"user\") return value;\n  throw new Error(`--scope must be one of: project, user (got \"${value}\")`);\n}\n\nfunction asProfile(value: string | undefined): Profile | undefined {\n  if (value === undefined) return undefined;\n  if (value === \"default\" || value === \"docs\") return value;\n  throw new Error(`--profile must be one of: default, docs (got \"${value}\")`);\n}\n\nfunction normalizeAssistants(input: AiOpts[\"assistant\"]): Assistant[] | undefined {\n  if (!input) return undefined;\n  const list = Array.isArray(input) ? input : [input];\n  if (list.length === 0) return undefined;\n  return list.map(asAssistant);\n}\n\nexport function registerAiCommand(command: Command): Command {\n  return withInteractivityFlags(command)\n    .option(\"--assistant <name>\", \"claude|codex|gemini (repeatable; default: all)\")\n    .option(\"--scope <scope>\", \"project|user (default: project)\")\n    .option(\"--profile <profile>\", \"default|docs (default: default)\")\n    .option(\"--cwd <path>\", \"Project directory for project-scope installs\")\n    .option(\"--home-dir <path>\", \"Home directory override for user-scope installs\")\n    .option(\"--skill-name <name>\", \"Custom skill/command name\")\n    .option(\"--no-llms\", \"Skip llms.txt / llms-full.txt generation\")\n    .option(\"--dry-run\", \"Show planned writes without changing files\")\n    .action(async (options: AiOpts) => {\n      const defaults = (await readCoreCliDefaults()).ai ?? {};\n      const { interactive } = resolveInteractive(options);\n\n      let assistants = normalizeAssistants(options.assistant) ?? defaults.assistants;\n      let scope: Scope | undefined = asScope(options.scope) ?? defaults.scope;\n      let profile: Profile | undefined = asProfile(options.profile) ?? defaults.profile;\n      const skillName = options.skillName ?? defaults.skillName;\n      let includeLlms = options.llms ?? defaults.includeLlms;\n\n      if (interactive) {\n        intro(\"Pagesmith — install AI artifacts\");\n        if (!assistants || assistants.length === 0) {\n          assistants = await promptMultiselect<Assistant>({\n            message: \"Which assistants?\",\n            options: [\n              { value: \"claude\", label: \"Claude\" },\n              { value: \"codex\", label: \"Codex\" },\n              { value: \"gemini\", label: \"Gemini\" },\n            ],\n            initialValues: [\"claude\", \"codex\", \"gemini\"],\n            required: true,\n          });\n        }\n        if (!scope) {\n          scope = await promptSelect<Scope>({\n            message: \"Scope\",\n            options: [\n              { value: \"project\", label: \"Project\", hint: \"write into the current repo\" },\n              { value: \"user\", label: \"User\", hint: \"write into the user home directory\" },\n            ],\n            initialValue: \"project\",\n          });\n        }\n        if (!profile) {\n          profile = await promptSelect<Profile>({\n            message: \"Profile\",\n            options: [\n              { value: \"default\", label: \"Default\" },\n              { value: \"docs\", label: \"Docs\", hint: \"optimized for @pagesmith/docs projects\" },\n            ],\n            initialValue: \"default\",\n          });\n        }\n        if (includeLlms === undefined && scope === \"project\") {\n          includeLlms = await promptConfirm({\n            message: \"Generate llms.txt / llms-full.txt?\",\n            initialValue: true,\n          });\n        }\n      } else if (!assistants || assistants.length === 0) {\n        log.warn(\n          \"No --assistant flag in non-interactive mode; defaulting to all (claude, codex, gemini).\",\n        );\n      }\n\n      const results = installAiArtifacts({\n        assistants,\n        scope,\n        profile,\n        cwd: options.cwd,\n        homeDir: options.homeDir,\n        skillName,\n        includeLlms,\n        dryRun: options.dryRun,\n      });\n\n      const summary = results\n        .map((result) => `${result.status}: ${result.label} -> ${result.path}`)\n        .join(\"\\n\");\n      if (interactive) {\n        note(summary || \"(no artifacts)\", options.dryRun ? \"Dry run summary\" : \"Installed\");\n        outro(options.dryRun ? \"Dry run complete.\" : \"AI artifacts installed.\");\n      } else {\n        for (const result of results) {\n          console.info(`${result.status}: ${result.label} -> ${result.path}`);\n        }\n      }\n    });\n}\n","import type { Command } from \"cac\";\nimport { createProject, listTemplates } from \"../../create/index.js\";\nimport {\n  CliError,\n  assertValue,\n  intro,\n  outro,\n  promptSelect,\n  promptText,\n  resolveInteractive,\n  withInteractivityFlags,\n} from \"../../cli-kit/index.js\";\nimport { readCoreCliDefaults } from \"../defaults.js\";\n\ntype CreateOpts = {\n  template?: string;\n  yes?: boolean;\n  nonInteractive?: boolean;\n  interactive?: boolean;\n};\n\nexport function registerCreateCommand(command: Command): Command {\n  return withInteractivityFlags(command)\n    .option(\"--template <name>\", \"Template name\")\n    .action(async (projectName: string | undefined, options: CreateOpts) => {\n      const defaults = await readCoreCliDefaults();\n      const { interactive } = resolveInteractive(options);\n\n      let finalName = projectName;\n      let finalTemplate = options.template ?? defaults.create?.template;\n\n      if (interactive) {\n        intro(\"Pagesmith — create project\");\n        if (!finalName) {\n          finalName = await promptText({\n            message: \"Project name\",\n            placeholder: \"my-site\",\n            validate: (v) => (v && v.trim() ? undefined : \"Project name is required\"),\n          });\n        }\n        if (!finalTemplate) {\n          const templateNames = listTemplates()\n            .split(\"\\n\")\n            .map((line) => line.replace(/^\\s*-\\s*/, \"\").trim())\n            .filter(Boolean);\n          finalTemplate = await promptSelect({\n            message: \"Template\",\n            options: templateNames.map((name) => ({ value: name, label: name })),\n            initialValue: defaults.create?.template,\n          });\n        }\n      }\n\n      const name = assertValue(finalName, {\n        label: \"Project name\",\n        flag: \"<project-name>\",\n      });\n      const template = assertValue(finalTemplate, {\n        label: \"--template\",\n        flag: \"--template\",\n        configKey: \"cli.core.create.template\",\n      });\n\n      try {\n        await createProject(name, template);\n      } catch (error) {\n        throw new CliError(error instanceof Error ? error.message : String(error), {\n          cause: error,\n        });\n      }\n\n      if (interactive) outro(\"Project created.\");\n    });\n}\n","import type { Command } from \"cac\";\nimport { runSkillsInstallCli, toList } from \"../skills-install.js\";\n\ntype SkillsOpts = {\n  package?: string | string[];\n  dir?: string;\n  cwd?: string;\n  harness?: string | string[];\n  only?: string | string[];\n  check?: boolean;\n  dryRun?: boolean;\n  json?: boolean;\n};\n\nconst DEPRECATION_NOTE =\n  '[deprecated] \"pagesmith-core skills\" is deprecated and will be removed in a future ' +\n  'minor. Use \"pagesmith skills install\" instead. Forwarding to the pointer installer.';\n\n/**\n * Deprecated alias for the umbrella `pagesmith skills install`. It forwards to\n * the exact same versioned-pointer installer, printing a one-line deprecation\n * note to stderr first. Retained for one minor version of back-compat.\n */\nexport function registerSkillsCommand(command: Command): Command {\n  return command\n    .option(\n      \"--package <pkg>\",\n      \"Pagesmith package to install skills from (repeatable; default: all resolvable)\",\n    )\n    .option(\"--dir <path>\", \"Target repo directory (default: cwd)\")\n    .option(\n      \"--harness <list>\",\n      \"Harnesses to mirror into: claude,cursor,codex,continue (default: auto-detect)\",\n    )\n    .option(\"--only <name>\", \"Restrict to specific skills (repeatable or comma-separated)\")\n    .option(\"--check\", \"Verify only — nonzero exit on missing/stale/orphaned stubs\")\n    .option(\"--dry-run\", \"Show planned changes without writing\")\n    .option(\"--json\", \"Emit a machine-readable result\")\n    .action((options: SkillsOpts) => {\n      const code = runSkillsInstallCli({\n        cwd: options.dir ?? options.cwd,\n        packages: toList(options.package),\n        harnesses: toList(options.harness),\n        only: toList(options.only),\n        check: options.check,\n        dryRun: options.dryRun,\n        json: options.json,\n        deprecationNote: DEPRECATION_NOTE,\n      });\n      if (code !== 0) process.exit(code);\n    });\n}\n","import type { Command } from \"cac\";\nimport { listTemplates } from \"../../create/index.js\";\nimport { note } from \"../../cli-kit/index.js\";\n\nexport function registerTemplatesCommand(command: Command): Command {\n  return command.action(() => {\n    note(listTemplates(), \"Available templates\");\n  });\n}\n","import type { Command } from \"cac\";\nimport { existsSync } from \"fs\";\nimport { resolve } from \"path\";\nimport {\n  formatContentValidationReport,\n  validateContent,\n} from \"../../validation/content-validator.js\";\nimport { CliError } from \"../../cli-kit/index.js\";\n\ntype ValidateOpts = {\n  root?: string;\n  basePath?: string;\n  include?: string | string[];\n  exclude?: string | string[];\n  checkExternal?: boolean;\n  timeoutMs?: number;\n  concurrency?: number;\n  showClean?: boolean;\n};\n\nfunction normalize(input: string | string[] | undefined): string[] | undefined {\n  if (!input) return undefined;\n  return Array.isArray(input) ? input : [input];\n}\n\nexport function registerValidateCommand(command: Command): Command {\n  return command\n    .option(\n      \"--root <path>\",\n      \"Content root for resolving absolute-path links (default: the provided content-dir)\",\n    )\n    .option(\"--base-path <path>\", \"Site base path (e.g. /pagesmith)\")\n    .option(\"--include <glob>\", \"Include pattern (repeatable, default: **/*.md, **/*.mdx)\")\n    .option(\"--exclude <glob>\", \"Exclude pattern (repeatable)\")\n    .option(\"--check-external\", \"Fetch external URLs and report non-2xx as warnings\")\n    .option(\"--timeout-ms <number>\", \"Fetch timeout (default: 10000)\")\n    .option(\"--concurrency <number>\", \"Fetch concurrency (default: 8)\")\n    .option(\"--show-clean\", \"Also list files that pass validation\")\n    .action(async (contentDirInput: string | undefined, options: ValidateOpts) => {\n      if (!contentDirInput) {\n        throw new CliError(\"pagesmith-core validate requires a content directory.\", {\n          hint: \"Example: pagesmith-core validate ./docs\",\n        });\n      }\n      const contentDir = resolve(contentDirInput);\n      if (!existsSync(contentDir)) {\n        throw new CliError(`Content directory not found: ${contentDir}`);\n      }\n      const rootDir = options.root ? resolve(options.root) : contentDir;\n\n      const summary = await validateContent({\n        contentDir,\n        include: normalize(options.include),\n        exclude: normalize(options.exclude),\n        linkValidator: {\n          rootDir,\n          basePath: options.basePath,\n          checkExternalReachability: options.checkExternal,\n          fetchTimeoutMs: options.timeoutMs,\n          fetchConcurrency: options.concurrency,\n        },\n      });\n\n      console.info(formatContentValidationReport(summary, { showClean: options.showClean }));\n      if (summary.errors > 0) process.exit(1);\n    });\n}\n","#!/usr/bin/env node\n\nimport { defineCli, readPackageVersion } from \"../cli-kit/index.js\";\nimport { registerAiCommand } from \"./commands/ai.js\";\nimport { registerCreateCommand } from \"./commands/create.js\";\nimport { registerSkillsCommand } from \"./commands/skills.js\";\nimport { registerTemplatesCommand } from \"./commands/templates.js\";\nimport { registerValidateCommand } from \"./commands/validate.js\";\n\nconst version = readPackageVersion(import.meta.dirname);\n\nconst cliInstance = defineCli({\n  name: \"pagesmith-core\",\n  version,\n  description:\n    \"@pagesmith/core CLI — templates, project scaffolding, AI artifacts, and content validation\",\n});\nconst { cli } = cliInstance;\n\ncli.usage(`<command> [options]\n\nInteractive mode is automatic when stdout is a TTY and --yes / --non-interactive\nis not passed. Set CI=1 or PAGESMITH_NON_INTERACTIVE=1 to force non-interactive\nmode.\n\nProject defaults: values in pagesmith-core.config.{ts,json5} (or the cli.core\nblock of pagesmith.config.{ts,json5,...}) are used as prompt defaults.`);\n\nregisterTemplatesCommand(cli.command(\"templates\", \"List available starter templates\"));\nregisterCreateCommand(cli.command(\"create [project-name]\", \"Create a starter project\"));\nregisterAiCommand(cli.command(\"ai\", \"Install Pagesmith AI memory/skill artifacts\"));\nregisterSkillsCommand(cli.command(\"skills\", \"Install consumer skills from Pagesmith packages\"));\nregisterValidateCommand(\n  cli.command(\"validate [content-dir]\", \"Validate markdown content (frontmatter, links, images)\"),\n);\n\nconst exitCode = await cliInstance.run();\nif (exitCode !== 0) process.exit(exitCode);\n"],"mappings":"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"}