@agents-inc/cli 0.84.1 → 0.86.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.
Files changed (123) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{chunk-6VGBO6SZ.js → chunk-5M6Q5UQO.js} +2 -2
  3. package/dist/{chunk-YJ2URWF7.js → chunk-B6MYECV6.js} +2 -2
  4. package/dist/{chunk-FT46LN7K.js → chunk-BV2MIQ3O.js} +7 -8
  5. package/dist/chunk-BV2MIQ3O.js.map +1 -0
  6. package/dist/{chunk-G2MINRWX.js → chunk-C5IYJ42F.js} +2 -2
  7. package/dist/{chunk-7UZUDHP7.js → chunk-CXWBVBDM.js} +2 -2
  8. package/dist/chunk-DCVCFBQ7.js +1800 -0
  9. package/dist/chunk-DCVCFBQ7.js.map +1 -0
  10. package/dist/{chunk-CYPCJ536.js → chunk-FBZR46GC.js} +92 -92
  11. package/dist/chunk-FBZR46GC.js.map +1 -0
  12. package/dist/{chunk-TXW257CU.js → chunk-GED2F75H.js} +90 -167
  13. package/dist/chunk-GED2F75H.js.map +1 -0
  14. package/dist/{chunk-LTFGEVTM.js → chunk-HH3AWXF4.js} +3 -3
  15. package/dist/{chunk-2XVLQDNI.js → chunk-HSLVCKVQ.js} +3 -3
  16. package/dist/{chunk-TAQGYJIS.js → chunk-HZ2IBXVQ.js} +3 -3
  17. package/dist/{chunk-LN76TJJP.js → chunk-HZQOFFKA.js} +10 -10
  18. package/dist/{chunk-W7LHI54P.js → chunk-I44YG6VI.js} +2 -2
  19. package/dist/{chunk-L7COG2EX.js → chunk-LZ7XQ3IU.js} +2 -2
  20. package/dist/{chunk-LMR7VAP3.js → chunk-MMTMXLI4.js} +2 -2
  21. package/dist/chunk-N6A7A4RA.js +16 -0
  22. package/dist/chunk-N6A7A4RA.js.map +1 -0
  23. package/dist/{chunk-WJKD6EGK.js → chunk-NUU3U43A.js} +5 -6
  24. package/dist/chunk-NUU3U43A.js.map +1 -0
  25. package/dist/chunk-O5ZWS26C.js +166 -0
  26. package/dist/chunk-O5ZWS26C.js.map +1 -0
  27. package/dist/{chunk-YYIWB42G.js → chunk-Q4DMIPZB.js} +2 -2
  28. package/dist/{chunk-YSLDMYWP.js → chunk-SGZOFIFF.js} +2 -2
  29. package/dist/{chunk-FKXD3EXJ.js → chunk-TMTUTUEV.js} +42 -228
  30. package/dist/chunk-TMTUTUEV.js.map +1 -0
  31. package/dist/{chunk-WCCWQ56J.js → chunk-UNEJKTLP.js} +3 -3
  32. package/dist/chunk-XQK4S22C.js +202 -0
  33. package/dist/chunk-XQK4S22C.js.map +1 -0
  34. package/dist/{chunk-ZGD7PLLC.js → chunk-ZOWRO7UQ.js} +3 -3
  35. package/dist/commands/build/marketplace.js +3 -3
  36. package/dist/commands/build/plugins.js +5 -5
  37. package/dist/commands/build/stack.js +5 -5
  38. package/dist/commands/compile.js +63 -163
  39. package/dist/commands/compile.js.map +1 -1
  40. package/dist/commands/config/index.js +5 -5
  41. package/dist/commands/config/path.js +4 -4
  42. package/dist/commands/config/show.js +5 -5
  43. package/dist/commands/diff.js +27 -632
  44. package/dist/commands/diff.js.map +1 -1
  45. package/dist/commands/doctor.js +41 -28
  46. package/dist/commands/doctor.js.map +1 -1
  47. package/dist/commands/edit.js +128 -194
  48. package/dist/commands/edit.js.map +1 -1
  49. package/dist/commands/eject.js +58 -126
  50. package/dist/commands/eject.js.map +1 -1
  51. package/dist/commands/import/skill.js +15 -148
  52. package/dist/commands/import/skill.js.map +1 -1
  53. package/dist/commands/info.js +34 -85
  54. package/dist/commands/info.js.map +1 -1
  55. package/dist/commands/init.js +23 -17
  56. package/dist/commands/list.js +4 -4
  57. package/dist/commands/new/agent.js +23 -97
  58. package/dist/commands/new/agent.js.map +1 -1
  59. package/dist/commands/new/marketplace.js +9 -9
  60. package/dist/commands/new/marketplace.js.map +1 -1
  61. package/dist/commands/new/skill.js +169 -20
  62. package/dist/commands/new/skill.js.map +1 -1
  63. package/dist/commands/outdated.js +18 -24
  64. package/dist/commands/outdated.js.map +1 -1
  65. package/dist/commands/search.js +37 -100
  66. package/dist/commands/search.js.map +1 -1
  67. package/dist/commands/uninstall.js +39 -156
  68. package/dist/commands/uninstall.js.map +1 -1
  69. package/dist/commands/update.js +49 -99
  70. package/dist/commands/update.js.map +1 -1
  71. package/dist/commands/validate.js +4 -4
  72. package/dist/components/skill-search/skill-search.js +2 -1
  73. package/dist/components/wizard/category-grid.test.js +4 -4
  74. package/dist/components/wizard/domain-selection.js +5 -5
  75. package/dist/components/wizard/help-modal.js +5 -5
  76. package/dist/components/wizard/source-grid.test.js +4 -4
  77. package/dist/components/wizard/stack-selection.js +5 -5
  78. package/dist/components/wizard/step-agents.js +5 -5
  79. package/dist/components/wizard/step-agents.test.js +5 -5
  80. package/dist/components/wizard/step-build.js +5 -5
  81. package/dist/components/wizard/step-build.test.js +5 -5
  82. package/dist/components/wizard/step-confirm.test.js +4 -4
  83. package/dist/components/wizard/step-settings.js +4 -4
  84. package/dist/components/wizard/step-settings.test.js +7 -7
  85. package/dist/components/wizard/step-sources.js +5 -5
  86. package/dist/components/wizard/step-sources.test.js +5 -5
  87. package/dist/components/wizard/step-stack.js +6 -6
  88. package/dist/components/wizard/step-stack.test.js +6 -6
  89. package/dist/components/wizard/wizard-layout.js +6 -6
  90. package/dist/components/wizard/wizard.js +14 -14
  91. package/dist/hooks/init.js +21 -16
  92. package/dist/hooks/init.js.map +1 -1
  93. package/dist/{loader-GT2A7R7U.js → loader-GSEGPK64.js} +3 -3
  94. package/dist/{source-loader-TNQW4P47.js → source-loader-OGFTIRIX.js} +4 -4
  95. package/dist/{source-manager-INRXRFJE.js → source-manager-FMMDDVZA.js} +4 -4
  96. package/dist/stores/wizard-store.js +4 -4
  97. package/dist/stores/wizard-store.test.js +4 -4
  98. package/package.json +1 -1
  99. package/dist/chunk-AABH2HSE.js +0 -340
  100. package/dist/chunk-AABH2HSE.js.map +0 -1
  101. package/dist/chunk-CYPCJ536.js.map +0 -1
  102. package/dist/chunk-FKXD3EXJ.js.map +0 -1
  103. package/dist/chunk-FT46LN7K.js.map +0 -1
  104. package/dist/chunk-TXW257CU.js.map +0 -1
  105. package/dist/chunk-WJKD6EGK.js.map +0 -1
  106. /package/dist/{chunk-6VGBO6SZ.js.map → chunk-5M6Q5UQO.js.map} +0 -0
  107. /package/dist/{chunk-YJ2URWF7.js.map → chunk-B6MYECV6.js.map} +0 -0
  108. /package/dist/{chunk-G2MINRWX.js.map → chunk-C5IYJ42F.js.map} +0 -0
  109. /package/dist/{chunk-7UZUDHP7.js.map → chunk-CXWBVBDM.js.map} +0 -0
  110. /package/dist/{chunk-LTFGEVTM.js.map → chunk-HH3AWXF4.js.map} +0 -0
  111. /package/dist/{chunk-2XVLQDNI.js.map → chunk-HSLVCKVQ.js.map} +0 -0
  112. /package/dist/{chunk-TAQGYJIS.js.map → chunk-HZ2IBXVQ.js.map} +0 -0
  113. /package/dist/{chunk-LN76TJJP.js.map → chunk-HZQOFFKA.js.map} +0 -0
  114. /package/dist/{chunk-W7LHI54P.js.map → chunk-I44YG6VI.js.map} +0 -0
  115. /package/dist/{chunk-L7COG2EX.js.map → chunk-LZ7XQ3IU.js.map} +0 -0
  116. /package/dist/{chunk-LMR7VAP3.js.map → chunk-MMTMXLI4.js.map} +0 -0
  117. /package/dist/{chunk-YYIWB42G.js.map → chunk-Q4DMIPZB.js.map} +0 -0
  118. /package/dist/{chunk-YSLDMYWP.js.map → chunk-SGZOFIFF.js.map} +0 -0
  119. /package/dist/{chunk-WCCWQ56J.js.map → chunk-UNEJKTLP.js.map} +0 -0
  120. /package/dist/{chunk-ZGD7PLLC.js.map → chunk-ZOWRO7UQ.js.map} +0 -0
  121. /package/dist/{loader-GT2A7R7U.js.map → loader-GSEGPK64.js.map} +0 -0
  122. /package/dist/{source-loader-TNQW4P47.js.map → source-loader-OGFTIRIX.js.map} +0 -0
  123. /package/dist/{source-manager-INRXRFJE.js.map → source-manager-FMMDDVZA.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/diff.ts","../../node_modules/chalk/source/index.js","../../node_modules/chalk/source/vendor/ansi-styles/index.js","../../node_modules/chalk/source/vendor/supports-color/index.js","../../node_modules/chalk/source/utilities.js"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport chalk from \"chalk\";\nimport os from \"os\";\nimport path from \"path\";\nimport { createTwoFilesPatch } from \"diff\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { loadSkillsMatrixFromSource } from \"../lib/loading/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { readForkedFromMetadata, type ForkedFromMetadata } from \"../lib/skills/index.js\";\nimport { fileExists, readFile, listDirectories } from \"../utils/fs.js\";\nimport { CLI_BIN_NAME, LOCAL_SKILLS_PATH, STANDARD_FILES } from \"../consts.js\";\n\ntype SkillDiffResult = {\n skillDirName: string;\n forkedFrom: ForkedFromMetadata | null;\n hasDiff: boolean;\n diffOutput: string;\n};\n\nfunction colorDiff(diffText: string): string {\n return diffText\n .split(\"\\n\")\n .map((line) => {\n if (line.startsWith(\"+++\") || line.startsWith(\"---\")) {\n return chalk.bold(line);\n }\n if (line.startsWith(\"+\")) {\n return chalk.green(line);\n }\n if (line.startsWith(\"-\")) {\n return chalk.red(line);\n }\n if (line.startsWith(\"@@\")) {\n return chalk.cyan(line);\n }\n return line;\n })\n .join(\"\\n\");\n}\n\nasync function diffSkill(\n localSkillsPath: string,\n skillDirName: string,\n sourcePath: string,\n sourceSkills: Record<string, { path: string }>,\n): Promise<SkillDiffResult> {\n const skillDir = path.join(localSkillsPath, skillDirName);\n const forkedFrom = await readForkedFromMetadata(skillDir);\n\n if (!forkedFrom) {\n return {\n skillDirName,\n forkedFrom: null,\n hasDiff: false,\n diffOutput: \"\",\n };\n }\n\n const sourceSkill = sourceSkills[forkedFrom.skillId];\n\n if (!sourceSkill) {\n return {\n skillDirName,\n forkedFrom,\n hasDiff: false,\n diffOutput: `Source skill '${forkedFrom.skillId}' no longer exists`,\n };\n }\n\n const sourceSkillMdPath = path.join(sourcePath, \"src\", sourceSkill.path, STANDARD_FILES.SKILL_MD);\n\n if (!(await fileExists(sourceSkillMdPath))) {\n return {\n skillDirName,\n forkedFrom,\n hasDiff: false,\n diffOutput: `Source ${STANDARD_FILES.SKILL_MD} not found at ${sourceSkillMdPath}`,\n };\n }\n\n const sourceContent = await readFile(sourceSkillMdPath);\n\n const localSkillMdPath = path.join(skillDir, STANDARD_FILES.SKILL_MD);\n\n if (!(await fileExists(localSkillMdPath))) {\n return {\n skillDirName,\n forkedFrom,\n hasDiff: false,\n diffOutput: `Local ${STANDARD_FILES.SKILL_MD} not found at ${localSkillMdPath}`,\n };\n }\n\n const localContent = await readFile(localSkillMdPath);\n\n const sourceLabel = `source/${sourceSkill.path}/SKILL.md`;\n const localLabel = `local/${LOCAL_SKILLS_PATH}/${skillDirName}/SKILL.md`;\n\n const diff = createTwoFilesPatch(\n sourceLabel,\n localLabel,\n sourceContent,\n localContent,\n \"\", // No source header\n \"\", // No local header\n );\n\n const hasDiff = diff.split(\"\\n\").some((line) => {\n return (\n (line.startsWith(\"+\") || line.startsWith(\"-\")) &&\n !line.startsWith(\"+++\") &&\n !line.startsWith(\"---\")\n );\n });\n\n return {\n skillDirName,\n forkedFrom,\n hasDiff,\n diffOutput: diff,\n };\n}\n\nexport default class Diff extends BaseCommand {\n static summary = \"Show differences between local forked skills and their source versions\";\n static description =\n \"Compare local forked skills with their source versions and display differences using unified diff format with colored output\";\n\n static examples = [\n {\n description: \"Show diffs for all forked skills\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Show diff for a specific skill\",\n command: \"<%= config.bin %> <%= command.id %> my-skill\",\n },\n {\n description: \"Check for diffs without output (exit code only)\",\n command: \"<%= config.bin %> <%= command.id %> --quiet\",\n },\n ];\n\n static args = {\n skill: Args.string({\n description: \"Show diff for specific skill only\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n quiet: Flags.boolean({\n char: \"q\",\n description: \"Suppress output, only return exit code\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Diff);\n const projectDir = process.cwd();\n const homeDir = os.homedir();\n const projectLocalPath = path.join(projectDir, LOCAL_SKILLS_PATH);\n const globalLocalPath = path.join(homeDir, LOCAL_SKILLS_PATH);\n const hasProject = await fileExists(projectLocalPath);\n const hasGlobal = projectDir !== homeDir && (await fileExists(globalLocalPath));\n\n if (!hasProject && !hasGlobal) {\n if (!flags.quiet) {\n this.warn(\n `No local skills found. Run '${CLI_BIN_NAME} init' or '${CLI_BIN_NAME} edit' first.`,\n );\n }\n return;\n }\n\n try {\n if (!flags.quiet) {\n this.log(\"Loading skills...\");\n }\n\n const { matrix, sourcePath, isLocal } = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n });\n\n if (!flags.quiet) {\n this.log(chalk.dim(`Loaded from ${isLocal ? \"local\" : \"remote\"}: ${sourcePath}`));\n }\n\n const sourceSkills: Record<string, { path: string }> = {};\n for (const [skillId, skill] of Object.entries(matrix.skills)) {\n if (!skill) continue;\n if (!skill.local) {\n sourceSkills[skillId] = { path: skill.path };\n }\n }\n\n // Collect skill dirs from both project and global scopes\n type ScopedSkillDir = { dirName: string; localSkillsPath: string };\n const scopedDirs: ScopedSkillDir[] = [];\n if (hasProject) {\n for (const dirName of await listDirectories(projectLocalPath)) {\n scopedDirs.push({ dirName, localSkillsPath: projectLocalPath });\n }\n }\n if (hasGlobal) {\n const projectDirNames = new Set(scopedDirs.map((d) => d.dirName));\n for (const dirName of await listDirectories(globalLocalPath)) {\n // Project-scoped takes precedence\n if (!projectDirNames.has(dirName)) {\n scopedDirs.push({ dirName, localSkillsPath: globalLocalPath });\n }\n }\n }\n\n if (args.skill) {\n const filtered = scopedDirs.filter((d) => d.dirName === args.skill);\n if (filtered.length === 0) {\n if (!flags.quiet) {\n this.error(`Skill '${args.skill}' not found in local skills`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n scopedDirs.length = 0;\n scopedDirs.push(...filtered);\n }\n\n const results: SkillDiffResult[] = [];\n const skillsWithoutForkedFrom: string[] = [];\n\n for (const { dirName, localSkillsPath } of scopedDirs) {\n const result = await diffSkill(localSkillsPath, dirName, sourcePath, sourceSkills);\n results.push(result);\n\n if (!result.forkedFrom) {\n skillsWithoutForkedFrom.push(dirName);\n }\n }\n\n const skillsWithDiffs = results.filter((r) => r.hasDiff);\n\n if (!flags.quiet) {\n this.log(\"\");\n\n if (skillsWithoutForkedFrom.length > 0) {\n for (const skillName of skillsWithoutForkedFrom) {\n this.warn(`Skill '${skillName}' has no forkedFrom metadata - cannot compare`);\n }\n this.log(\"\");\n }\n\n const forkedSkills = results.filter((r) => r.forkedFrom);\n\n if (forkedSkills.length === 0) {\n this.logInfo(\"No forked skills to compare.\");\n } else if (skillsWithDiffs.length === 0) {\n this.logSuccess(`All ${forkedSkills.length} forked skill(s) are up to date with source.`);\n } else {\n for (const result of skillsWithDiffs) {\n this.log(\n chalk.bold(\n `\\n=== ${result.skillDirName} (forked from ${result.forkedFrom?.skillId}) ===\\n`,\n ),\n );\n this.log(colorDiff(result.diffOutput));\n }\n\n this.log(\"\");\n this.logInfo(\n `Found differences in ${chalk.yellow(String(skillsWithDiffs.length))} skill(s).`,\n );\n }\n\n this.log(\"\");\n }\n\n if (skillsWithDiffs.length > 0) {\n this.exit(EXIT_CODES.ERROR);\n }\n this.exit(EXIT_CODES.SUCCESS);\n } catch (error) {\n if (!flags.quiet) {\n const message = getErrorMessage(error);\n this.error(`Failed to compare skills: ${message}`, {\n exit: EXIT_CODES.ERROR,\n });\n } else {\n this.exit(EXIT_CODES.ERROR);\n }\n }\n }\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n"],"mappings":"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","names":["process","styles","chalk","styles","os","os"]}
1
+ {"version":3,"sources":["../../src/cli/commands/diff.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport chalk from \"chalk\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport {\n loadSource,\n buildSourceSkillsMap,\n collectScopedSkillDirs,\n generateSkillDiff,\n formatColoredDiff,\n type SkillDiffResult,\n} from \"../lib/operations/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { CLI_BIN_NAME } from \"../consts.js\";\n\nexport default class Diff extends BaseCommand {\n static summary = \"Show differences between local forked skills and their source versions\";\n static description =\n \"Compare local forked skills with their source versions and display differences using unified diff format with colored output\";\n\n static examples = [\n {\n description: \"Show diffs for all forked skills\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Show diff for a specific skill\",\n command: \"<%= config.bin %> <%= command.id %> my-skill\",\n },\n {\n description: \"Check for diffs without output (exit code only)\",\n command: \"<%= config.bin %> <%= command.id %> --quiet\",\n },\n ];\n\n static args = {\n skill: Args.string({\n description: \"Show diff for specific skill only\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n quiet: Flags.boolean({\n char: \"q\",\n description: \"Suppress output, only return exit code\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Diff);\n const projectDir = process.cwd();\n const { dirs: scopedDirs, hasProject, hasGlobal } = await collectScopedSkillDirs(projectDir);\n\n if (!hasProject && !hasGlobal) {\n if (!flags.quiet) {\n this.warn(\n `No local skills found. Run '${CLI_BIN_NAME} init' or '${CLI_BIN_NAME} edit' first.`,\n );\n }\n return;\n }\n\n try {\n if (!flags.quiet) {\n this.log(\"Loading skills...\");\n }\n\n const { sourceResult } = await loadSource({\n sourceFlag: flags.source,\n projectDir,\n });\n const { matrix, sourcePath, isLocal } = sourceResult;\n\n if (!flags.quiet) {\n this.log(chalk.dim(`Loaded from ${isLocal ? \"local\" : \"remote\"}: ${sourcePath}`));\n }\n\n const sourceSkills = buildSourceSkillsMap(matrix);\n\n let filteredDirs = scopedDirs;\n if (args.skill) {\n filteredDirs = scopedDirs.filter((d) => d.dirName === args.skill);\n if (filteredDirs.length === 0) {\n if (!flags.quiet) {\n this.error(`Skill '${args.skill}' not found in local skills`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n const results: SkillDiffResult[] = [];\n const skillsWithoutForkedFrom: string[] = [];\n\n for (const { dirName, localSkillsPath } of filteredDirs) {\n const result = await generateSkillDiff(localSkillsPath, dirName, sourcePath, sourceSkills);\n results.push(result);\n\n if (!result.forkedFrom) {\n skillsWithoutForkedFrom.push(dirName);\n }\n }\n\n const skillsWithDiffs = results.filter((r) => r.hasDiff);\n\n if (!flags.quiet) {\n this.log(\"\");\n\n if (skillsWithoutForkedFrom.length > 0) {\n for (const skillName of skillsWithoutForkedFrom) {\n this.warn(`Skill '${skillName}' has no forkedFrom metadata - cannot compare`);\n }\n this.log(\"\");\n }\n\n const forkedSkills = results.filter((r) => r.forkedFrom);\n\n if (forkedSkills.length === 0) {\n this.logInfo(\"No forked skills to compare.\");\n } else if (skillsWithDiffs.length === 0) {\n this.logSuccess(`All ${forkedSkills.length} forked skill(s) are up to date with source.`);\n } else {\n for (const result of skillsWithDiffs) {\n this.log(\n chalk.bold(\n `\\n=== ${result.skillDirName} (forked from ${result.forkedFrom?.skillId}) ===\\n`,\n ),\n );\n this.log(formatColoredDiff(result.diffOutput));\n }\n\n this.log(\"\");\n this.logInfo(\n `Found differences in ${chalk.yellow(String(skillsWithDiffs.length))} skill(s).`,\n );\n }\n\n this.log(\"\");\n }\n\n if (skillsWithDiffs.length > 0) {\n this.exit(EXIT_CODES.ERROR);\n }\n this.exit(EXIT_CODES.SUCCESS);\n } catch (error) {\n if (!flags.quiet) {\n const message = getErrorMessage(error);\n this.error(`Failed to compare skills: ${message}`, {\n exit: EXIT_CODES.ERROR,\n });\n } else {\n this.exit(EXIT_CODES.ERROR);\n }\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,26 +1,32 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ detectProject,
4
+ loadSource
5
+ } from "../chunk-DCVCFBQ7.js";
6
+ import "../chunk-N6A7A4RA.js";
7
+ import "../chunk-O5ZWS26C.js";
8
+ import "../chunk-XQK4S22C.js";
9
+ import "../chunk-FBZR46GC.js";
2
10
  import {
3
11
  discoverLocalSkills,
4
12
  getStackSkillIds,
5
- loadProjectConfig,
6
- loadSkillsMatrixFromSource,
7
13
  validateProjectConfig
8
- } from "../chunk-FKXD3EXJ.js";
9
- import "../chunk-YJ2URWF7.js";
14
+ } from "../chunk-TMTUTUEV.js";
15
+ import "../chunk-B6MYECV6.js";
10
16
  import {
11
17
  matrix
12
18
  } from "../chunk-ANXHMG32.js";
13
19
  import {
14
20
  BaseCommand,
15
21
  EXIT_CODES
16
- } from "../chunk-LMR7VAP3.js";
22
+ } from "../chunk-MMTMXLI4.js";
17
23
  import {
18
24
  directoryExists,
19
25
  fileExists,
20
26
  getErrorMessage,
21
27
  glob,
22
28
  setVerbose
23
- } from "../chunk-WJKD6EGK.js";
29
+ } from "../chunk-NUU3U43A.js";
24
30
  import "../chunk-6XWHJHNZ.js";
25
31
  import {
26
32
  CLAUDE_DIR,
@@ -39,33 +45,44 @@ init_esm_shims();
39
45
  import { Flags } from "@oclif/core";
40
46
  import os from "os";
41
47
  import path from "path";
42
- async function checkConfigValid(projectDir) {
43
- const loaded = await loadProjectConfig(projectDir);
44
- if (!loaded) {
48
+ function checkConfigValid(config) {
49
+ if (!config) {
45
50
  return {
46
- status: "fail",
47
- message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} not found`,
48
- details: [`Run '${CLI_BIN_NAME} init' to create a configuration`]
51
+ result: {
52
+ status: "fail",
53
+ message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} not found`,
54
+ details: [`Run '${CLI_BIN_NAME} init' to create a configuration`]
55
+ },
56
+ config: null
49
57
  };
50
58
  }
51
- const validation = validateProjectConfig(loaded.config);
59
+ const validation = validateProjectConfig(config);
52
60
  if (!validation.valid) {
53
61
  return {
54
- status: "fail",
55
- message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has errors`,
56
- details: validation.errors
62
+ result: {
63
+ status: "fail",
64
+ message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has errors`,
65
+ details: validation.errors
66
+ },
67
+ config: null
57
68
  };
58
69
  }
59
70
  if (validation.warnings.length > 0) {
60
71
  return {
61
- status: "warn",
62
- message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has warnings`,
63
- details: validation.warnings
72
+ result: {
73
+ status: "warn",
74
+ message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has warnings`,
75
+ details: validation.warnings
76
+ },
77
+ config
64
78
  };
65
79
  }
66
80
  return {
67
- status: "pass",
68
- message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} is valid`
81
+ result: {
82
+ status: "pass",
83
+ message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} is valid`
84
+ },
85
+ config
69
86
  };
70
87
  }
71
88
  async function checkSkillsResolved(config, matrix2, projectDir) {
@@ -168,7 +185,7 @@ async function checkNoOrphans(config, projectDir) {
168
185
  }
169
186
  async function checkSourceReachable(sourceFlag, projectDir) {
170
187
  try {
171
- const result = await loadSkillsMatrixFromSource({
188
+ const { sourceResult: result } = await loadSource({
172
189
  sourceFlag,
173
190
  projectDir
174
191
  });
@@ -304,14 +321,10 @@ var Doctor = class _Doctor extends BaseCommand {
304
321
  this.log(" Checking configuration health...");
305
322
  this.log("");
306
323
  const results = [];
307
- const configResult = await checkConfigValid(projectDir);
324
+ const detected = await detectProject(projectDir);
325
+ const { result: configResult, config } = checkConfigValid(detected?.config ?? null);
308
326
  results.push(configResult);
309
327
  formatCheckLine("Config Valid", configResult, flags.verbose).forEach((line) => this.log(line));
310
- let config = null;
311
- if (configResult.status !== "fail") {
312
- const loaded = await loadProjectConfig(projectDir);
313
- config = loaded?.config ?? null;
314
- }
315
328
  const sourceResult = await checkSourceReachable(flags.source, projectDir);
316
329
  if (config) {
317
330
  const skillsResult = await checkSkillsResolved(config, matrix, projectDir);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/doctor.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { loadProjectConfig, validateProjectConfig } from \"../lib/configuration\";\nimport { loadSkillsMatrixFromSource } from \"../lib/loading\";\nimport { matrix } from \"../lib/matrix/matrix-provider\";\nimport { discoverLocalSkills } from \"../lib/skills\";\nimport { getStackSkillIds } from \"../lib/stacks\";\nimport type { AgentName, MergedSkillsMatrix, ProjectConfig, SkillId } from \"../types\";\nimport { fileExists, glob, directoryExists } from \"../utils/fs\";\nimport {\n CLAUDE_DIR,\n CLAUDE_SRC_DIR,\n CLI_BIN_NAME,\n DEFAULT_BRANDING,\n STANDARD_FILES,\n} from \"../consts\";\nimport { setVerbose } from \"../utils/logger\";\n\ntype CheckResult = {\n status: \"pass\" | \"fail\" | \"warn\" | \"skip\";\n message: string;\n details?: string[];\n};\n\nasync function checkConfigValid(projectDir: string): Promise<CheckResult> {\n const loaded = await loadProjectConfig(projectDir);\n\n if (!loaded) {\n return {\n status: \"fail\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} not found`,\n details: [`Run '${CLI_BIN_NAME} init' to create a configuration`],\n };\n }\n\n const validation = validateProjectConfig(loaded.config);\n\n if (!validation.valid) {\n return {\n status: \"fail\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has errors`,\n details: validation.errors,\n };\n }\n\n if (validation.warnings.length > 0) {\n return {\n status: \"warn\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has warnings`,\n details: validation.warnings,\n };\n }\n\n return {\n status: \"pass\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} is valid`,\n };\n}\n\nasync function checkSkillsResolved(\n config: ProjectConfig,\n matrix: MergedSkillsMatrix,\n projectDir: string,\n): Promise<CheckResult> {\n const uniqueSkills = config.stack ? getStackSkillIds(config.stack) : [];\n\n if (uniqueSkills.length === 0) {\n return {\n status: \"pass\",\n message: \"No skills configured\",\n };\n }\n\n const localResult = await discoverLocalSkills(projectDir);\n const globalResult = projectDir !== os.homedir() ? await discoverLocalSkills(os.homedir()) : null;\n const localSkillIds = new Set([\n ...(localResult?.skills.map((s) => s.id) ?? []),\n ...(globalResult?.skills.map((s) => s.id) ?? []),\n ]);\n\n const missingSkills: string[] = [];\n for (const skillId of uniqueSkills) {\n const inMatrix = skillId in matrix.skills;\n const inLocal = localSkillIds.has(skillId);\n if (!inMatrix && !inLocal) {\n missingSkills.push(skillId);\n }\n }\n\n if (missingSkills.length > 0) {\n return {\n status: \"fail\",\n message: `${uniqueSkills.length - missingSkills.length}/${uniqueSkills.length} skills found`,\n details: missingSkills.map((s) => `- ${s} (not found)`),\n };\n }\n\n return {\n status: \"pass\",\n message: `${uniqueSkills.length}/${uniqueSkills.length} skills found`,\n };\n}\n\nasync function checkAgentsCompiled(\n config: ProjectConfig,\n projectDir: string,\n): Promise<CheckResult> {\n const agents = config.agents ?? [];\n\n if (agents.length === 0) {\n return {\n status: \"pass\",\n message: \"No agents configured\",\n };\n }\n\n const projectAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const globalAgentsDir = path.join(os.homedir(), CLAUDE_DIR, \"agents\");\n const missingAgents: string[] = [];\n\n for (const agent of agents) {\n // Check scope-appropriate directory for the agent\n const agentsDir = agent.scope === \"global\" ? globalAgentsDir : projectAgentsDir;\n const agentPath = path.join(agentsDir, `${agent.name}.md`);\n if (!(await fileExists(agentPath))) {\n missingAgents.push(agent.name);\n }\n }\n\n if (missingAgents.length > 0) {\n return {\n status: \"warn\",\n message: `${missingAgents.length} agent${missingAgents.length === 1 ? \"\" : \"s\"} need${missingAgents.length === 1 ? \"s\" : \"\"} recompilation`,\n details: missingAgents.map((a) => `- ${a} (missing)`),\n };\n }\n\n return {\n status: \"pass\",\n message: `${agents.length}/${agents.length} agents compiled`,\n };\n}\n\nasync function checkNoOrphans(config: ProjectConfig, projectDir: string): Promise<CheckResult> {\n const projectAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const globalAgentsDir = path.join(os.homedir(), CLAUDE_DIR, \"agents\");\n\n const projectExists = await directoryExists(projectAgentsDir);\n const globalExists = projectDir !== os.homedir() && (await directoryExists(globalAgentsDir));\n\n if (!projectExists && !globalExists) {\n return {\n status: \"pass\",\n message: \"No agents directory\",\n };\n }\n\n const projectMdFiles = projectExists ? await glob(\"*.md\", projectAgentsDir) : [];\n const globalMdFiles = globalExists ? await glob(\"*.md\", globalAgentsDir) : [];\n const mdFiles = [...new Set([...projectMdFiles, ...globalMdFiles])];\n const configAgentNames: Set<string> = new Set((config.agents ?? []).map((a) => a.name));\n\n const orphanedFiles: string[] = [];\n for (const file of mdFiles) {\n const agentName = file.replace(/\\.md$/, \"\");\n if (!configAgentNames.has(agentName)) {\n orphanedFiles.push(agentName);\n }\n }\n\n if (orphanedFiles.length > 0) {\n return {\n status: \"warn\",\n message: `${orphanedFiles.length} orphaned agent file${orphanedFiles.length === 1 ? \"\" : \"s\"}`,\n details: orphanedFiles.map((f) => `- ${f}.md (not in config)`),\n };\n }\n\n return {\n status: \"pass\",\n message: \"No orphaned agent files\",\n };\n}\n\nasync function checkSourceReachable(\n sourceFlag: string | undefined,\n projectDir: string,\n): Promise<CheckResult> {\n try {\n const result = await loadSkillsMatrixFromSource({\n sourceFlag,\n projectDir,\n });\n\n const skillCount = Object.keys(matrix.skills).length;\n const sourceLabel = result.isLocal ? \"local\" : \"remote\";\n\n return {\n status: \"pass\",\n message: `Connected to ${sourceLabel}: ${result.sourcePath}`,\n details: [`${skillCount} skills available`],\n };\n } catch (error) {\n const message = getErrorMessage(error);\n return {\n status: \"fail\",\n message: \"Failed to load source\",\n details: [message],\n };\n }\n}\n\nconst CHECK_WIDTH = 20;\n\nfunction formatCheckName(name: string): string {\n return name.padEnd(CHECK_WIDTH);\n}\n\nfunction formatStatus(status: CheckResult[\"status\"]): string {\n switch (status) {\n case \"pass\":\n return \"\\u2713\"; // ✓\n case \"fail\":\n return \"\\u2717\"; // ✗\n case \"warn\":\n return \"!\";\n case \"skip\":\n return \"-\";\n default:\n return \"?\";\n }\n}\n\nfunction formatCheckLine(name: string, result: CheckResult, verbose: boolean): string[] {\n const statusIcon = formatStatus(result.status);\n const nameFormatted = formatCheckName(name);\n const lines: string[] = [];\n\n lines.push(` ${nameFormatted}${statusIcon} ${result.message}`);\n\n const shouldShowDetails =\n result.details &&\n result.details.length > 0 &&\n (verbose || result.status === \"fail\" || result.status === \"warn\");\n\n if (shouldShowDetails) {\n for (const detail of result.details!) {\n lines.push(` ${\" \".repeat(CHECK_WIDTH)} ${detail}`);\n }\n }\n\n return lines;\n}\n\nfunction formatSummary(results: CheckResult[]): string {\n let passed = 0;\n let warnings = 0;\n let errors = 0;\n\n for (const result of results) {\n switch (result.status) {\n case \"pass\":\n passed++;\n break;\n case \"warn\":\n warnings++;\n break;\n case \"fail\":\n errors++;\n break;\n // skip doesn't count\n default:\n break;\n }\n }\n\n const parts: string[] = [];\n parts.push(`${passed} passed`);\n\n if (warnings > 0) {\n parts.push(`${warnings} warning${warnings === 1 ? \"\" : \"s\"}`);\n } else {\n parts.push(`0 warnings`);\n }\n\n if (errors > 0) {\n parts.push(`${errors} error${errors === 1 ? \"\" : \"s\"}`);\n } else {\n parts.push(`0 errors`);\n }\n\n return ` Summary: ${parts.join(\", \")}`;\n}\n\nfunction formatTips(results: CheckResult[]): string[] {\n const hasAgentWarning = results.some(\n (r) => r.status === \"warn\" && r.message.includes(\"recompilation\"),\n );\n const hasConfigError = results.some((r) => r.status === \"fail\" && r.message.includes(\"config\"));\n const hasSkillError = results.some(\n (r) => r.status === \"fail\" && r.message.includes(\"skills found\"),\n );\n\n const tips: string[] = [];\n\n if (hasAgentWarning) {\n tips.push(` Tip: Run '${CLI_BIN_NAME} compile' to generate missing agent files`);\n }\n if (hasConfigError) {\n tips.push(` Tip: Run '${CLI_BIN_NAME} init' to create or fix configuration`);\n }\n if (hasSkillError) {\n tips.push(\" Tip: Check skill IDs in config match available skills\");\n }\n\n return tips;\n}\n\nexport default class Doctor extends BaseCommand {\n static summary = \"Diagnose common configuration issues\";\n\n static description = `Run diagnostic checks on your ${DEFAULT_BRANDING.NAME} configuration to identify issues with config validity, skill resolution, agent compilation, and source connectivity.`;\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n \"<%= config.bin %> <%= command.id %> --source /path/to/marketplace\",\n ];\n\n static flags = {\n source: Flags.string({\n char: \"s\",\n description: \"Skills source path or URL\",\n }),\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Show detailed output\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Doctor);\n\n setVerbose(flags.verbose);\n\n const projectDir = process.cwd();\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} Doctor`);\n this.log(\"\");\n this.log(\" Checking configuration health...\");\n this.log(\"\");\n\n const results: CheckResult[] = [];\n\n const configResult = await checkConfigValid(projectDir);\n results.push(configResult);\n formatCheckLine(\"Config Valid\", configResult, flags.verbose).forEach((line) => this.log(line));\n\n let config: ProjectConfig | null = null;\n\n if (configResult.status !== \"fail\") {\n const loaded = await loadProjectConfig(projectDir);\n config = loaded?.config ?? null;\n }\n\n const sourceResult = await checkSourceReachable(flags.source, projectDir);\n\n // loadSkillsMatrixFromSource (called by checkSourceReachable) populates the matrix automatically\n if (config) {\n const skillsResult = await checkSkillsResolved(config, matrix, projectDir);\n results.push(skillsResult);\n formatCheckLine(\"Skills Resolved\", skillsResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"Skills Resolved\", skipResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n }\n\n if (config) {\n const agentsResult = await checkAgentsCompiled(config, projectDir);\n results.push(agentsResult);\n formatCheckLine(\"Agents Compiled\", agentsResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"Agents Compiled\", skipResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n }\n\n if (config) {\n const orphansResult = await checkNoOrphans(config, projectDir);\n results.push(orphansResult);\n formatCheckLine(\"No Orphans\", orphansResult, flags.verbose).forEach((line) => this.log(line));\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"No Orphans\", skipResult, flags.verbose).forEach((line) => this.log(line));\n }\n\n results.push(sourceResult);\n formatCheckLine(\"Source Reachable\", sourceResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n\n this.log(\"\");\n this.log(formatSummary(results));\n\n const tips = formatTips(results);\n if (tips.length > 0) {\n this.log(\"\");\n tips.forEach((tip) => this.log(tip));\n }\n\n this.log(\"\");\n\n const hasErrors = results.some((r) => r.status === \"fail\");\n if (hasErrors) {\n this.exit(EXIT_CODES.ERROR);\n }\n }\n}\n"],"mappings":"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","names":["matrix"]}
1
+ {"version":3,"sources":["../../src/cli/commands/doctor.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { validateProjectConfig } from \"../lib/configuration\";\nimport { loadSource, detectProject } from \"../lib/operations\";\nimport { matrix } from \"../lib/matrix/matrix-provider\";\nimport { discoverLocalSkills } from \"../lib/skills\";\nimport { getStackSkillIds } from \"../lib/stacks\";\nimport type { MergedSkillsMatrix, ProjectConfig } from \"../types\";\nimport { fileExists, glob, directoryExists } from \"../utils/fs\";\nimport {\n CLAUDE_DIR,\n CLAUDE_SRC_DIR,\n CLI_BIN_NAME,\n DEFAULT_BRANDING,\n STANDARD_FILES,\n} from \"../consts\";\nimport { setVerbose } from \"../utils/logger\";\n\ntype CheckResult = {\n status: \"pass\" | \"fail\" | \"warn\" | \"skip\";\n message: string;\n details?: string[];\n};\n\ntype ConfigCheckOutput = {\n result: CheckResult;\n config: ProjectConfig | null;\n};\n\nfunction checkConfigValid(config: ProjectConfig | null): ConfigCheckOutput {\n if (!config) {\n return {\n result: {\n status: \"fail\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} not found`,\n details: [`Run '${CLI_BIN_NAME} init' to create a configuration`],\n },\n config: null,\n };\n }\n\n const validation = validateProjectConfig(config);\n\n if (!validation.valid) {\n return {\n result: {\n status: \"fail\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has errors`,\n details: validation.errors,\n },\n config: null,\n };\n }\n\n if (validation.warnings.length > 0) {\n return {\n result: {\n status: \"warn\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} has warnings`,\n details: validation.warnings,\n },\n config,\n };\n }\n\n return {\n result: {\n status: \"pass\",\n message: `${CLAUDE_SRC_DIR}/${STANDARD_FILES.CONFIG_TS} is valid`,\n },\n config,\n };\n}\n\nasync function checkSkillsResolved(\n config: ProjectConfig,\n matrix: MergedSkillsMatrix,\n projectDir: string,\n): Promise<CheckResult> {\n const uniqueSkills = config.stack ? getStackSkillIds(config.stack) : [];\n\n if (uniqueSkills.length === 0) {\n return {\n status: \"pass\",\n message: \"No skills configured\",\n };\n }\n\n const localResult = await discoverLocalSkills(projectDir);\n const globalResult = projectDir !== os.homedir() ? await discoverLocalSkills(os.homedir()) : null;\n const localSkillIds = new Set([\n ...(localResult?.skills.map((s) => s.id) ?? []),\n ...(globalResult?.skills.map((s) => s.id) ?? []),\n ]);\n\n const missingSkills: string[] = [];\n for (const skillId of uniqueSkills) {\n const inMatrix = skillId in matrix.skills;\n const inLocal = localSkillIds.has(skillId);\n if (!inMatrix && !inLocal) {\n missingSkills.push(skillId);\n }\n }\n\n if (missingSkills.length > 0) {\n return {\n status: \"fail\",\n message: `${uniqueSkills.length - missingSkills.length}/${uniqueSkills.length} skills found`,\n details: missingSkills.map((s) => `- ${s} (not found)`),\n };\n }\n\n return {\n status: \"pass\",\n message: `${uniqueSkills.length}/${uniqueSkills.length} skills found`,\n };\n}\n\nasync function checkAgentsCompiled(\n config: ProjectConfig,\n projectDir: string,\n): Promise<CheckResult> {\n const agents = config.agents ?? [];\n\n if (agents.length === 0) {\n return {\n status: \"pass\",\n message: \"No agents configured\",\n };\n }\n\n const projectAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const globalAgentsDir = path.join(os.homedir(), CLAUDE_DIR, \"agents\");\n const missingAgents: string[] = [];\n\n for (const agent of agents) {\n // Check scope-appropriate directory for the agent\n const agentsDir = agent.scope === \"global\" ? globalAgentsDir : projectAgentsDir;\n const agentPath = path.join(agentsDir, `${agent.name}.md`);\n if (!(await fileExists(agentPath))) {\n missingAgents.push(agent.name);\n }\n }\n\n if (missingAgents.length > 0) {\n return {\n status: \"warn\",\n message: `${missingAgents.length} agent${missingAgents.length === 1 ? \"\" : \"s\"} need${missingAgents.length === 1 ? \"s\" : \"\"} recompilation`,\n details: missingAgents.map((a) => `- ${a} (missing)`),\n };\n }\n\n return {\n status: \"pass\",\n message: `${agents.length}/${agents.length} agents compiled`,\n };\n}\n\nasync function checkNoOrphans(config: ProjectConfig, projectDir: string): Promise<CheckResult> {\n const projectAgentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const globalAgentsDir = path.join(os.homedir(), CLAUDE_DIR, \"agents\");\n\n const projectExists = await directoryExists(projectAgentsDir);\n const globalExists = projectDir !== os.homedir() && (await directoryExists(globalAgentsDir));\n\n if (!projectExists && !globalExists) {\n return {\n status: \"pass\",\n message: \"No agents directory\",\n };\n }\n\n const projectMdFiles = projectExists ? await glob(\"*.md\", projectAgentsDir) : [];\n const globalMdFiles = globalExists ? await glob(\"*.md\", globalAgentsDir) : [];\n const mdFiles = [...new Set([...projectMdFiles, ...globalMdFiles])];\n const configAgentNames: Set<string> = new Set((config.agents ?? []).map((a) => a.name));\n\n const orphanedFiles: string[] = [];\n for (const file of mdFiles) {\n const agentName = file.replace(/\\.md$/, \"\");\n if (!configAgentNames.has(agentName)) {\n orphanedFiles.push(agentName);\n }\n }\n\n if (orphanedFiles.length > 0) {\n return {\n status: \"warn\",\n message: `${orphanedFiles.length} orphaned agent file${orphanedFiles.length === 1 ? \"\" : \"s\"}`,\n details: orphanedFiles.map((f) => `- ${f}.md (not in config)`),\n };\n }\n\n return {\n status: \"pass\",\n message: \"No orphaned agent files\",\n };\n}\n\nasync function checkSourceReachable(\n sourceFlag: string | undefined,\n projectDir: string,\n): Promise<CheckResult> {\n try {\n const { sourceResult: result } = await loadSource({\n sourceFlag,\n projectDir,\n });\n\n const skillCount = Object.keys(matrix.skills).length;\n const sourceLabel = result.isLocal ? \"local\" : \"remote\";\n\n return {\n status: \"pass\",\n message: `Connected to ${sourceLabel}: ${result.sourcePath}`,\n details: [`${skillCount} skills available`],\n };\n } catch (error) {\n const message = getErrorMessage(error);\n return {\n status: \"fail\",\n message: \"Failed to load source\",\n details: [message],\n };\n }\n}\n\nconst CHECK_WIDTH = 20;\n\nfunction formatCheckName(name: string): string {\n return name.padEnd(CHECK_WIDTH);\n}\n\nfunction formatStatus(status: CheckResult[\"status\"]): string {\n switch (status) {\n case \"pass\":\n return \"\\u2713\"; // ✓\n case \"fail\":\n return \"\\u2717\"; // ✗\n case \"warn\":\n return \"!\";\n case \"skip\":\n return \"-\";\n default:\n return \"?\";\n }\n}\n\nfunction formatCheckLine(name: string, result: CheckResult, verbose: boolean): string[] {\n const statusIcon = formatStatus(result.status);\n const nameFormatted = formatCheckName(name);\n const lines: string[] = [];\n\n lines.push(` ${nameFormatted}${statusIcon} ${result.message}`);\n\n const shouldShowDetails =\n result.details &&\n result.details.length > 0 &&\n (verbose || result.status === \"fail\" || result.status === \"warn\");\n\n if (shouldShowDetails) {\n for (const detail of result.details!) {\n lines.push(` ${\" \".repeat(CHECK_WIDTH)} ${detail}`);\n }\n }\n\n return lines;\n}\n\nfunction formatSummary(results: CheckResult[]): string {\n let passed = 0;\n let warnings = 0;\n let errors = 0;\n\n for (const result of results) {\n switch (result.status) {\n case \"pass\":\n passed++;\n break;\n case \"warn\":\n warnings++;\n break;\n case \"fail\":\n errors++;\n break;\n // skip doesn't count\n default:\n break;\n }\n }\n\n const parts: string[] = [];\n parts.push(`${passed} passed`);\n\n if (warnings > 0) {\n parts.push(`${warnings} warning${warnings === 1 ? \"\" : \"s\"}`);\n } else {\n parts.push(`0 warnings`);\n }\n\n if (errors > 0) {\n parts.push(`${errors} error${errors === 1 ? \"\" : \"s\"}`);\n } else {\n parts.push(`0 errors`);\n }\n\n return ` Summary: ${parts.join(\", \")}`;\n}\n\nfunction formatTips(results: CheckResult[]): string[] {\n const hasAgentWarning = results.some(\n (r) => r.status === \"warn\" && r.message.includes(\"recompilation\"),\n );\n const hasConfigError = results.some((r) => r.status === \"fail\" && r.message.includes(\"config\"));\n const hasSkillError = results.some(\n (r) => r.status === \"fail\" && r.message.includes(\"skills found\"),\n );\n\n const tips: string[] = [];\n\n if (hasAgentWarning) {\n tips.push(` Tip: Run '${CLI_BIN_NAME} compile' to generate missing agent files`);\n }\n if (hasConfigError) {\n tips.push(` Tip: Run '${CLI_BIN_NAME} init' to create or fix configuration`);\n }\n if (hasSkillError) {\n tips.push(\" Tip: Check skill IDs in config match available skills\");\n }\n\n return tips;\n}\n\nexport default class Doctor extends BaseCommand {\n static summary = \"Diagnose common configuration issues\";\n\n static description = `Run diagnostic checks on your ${DEFAULT_BRANDING.NAME} configuration to identify issues with config validity, skill resolution, agent compilation, and source connectivity.`;\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n \"<%= config.bin %> <%= command.id %> --source /path/to/marketplace\",\n ];\n\n static flags = {\n source: Flags.string({\n char: \"s\",\n description: \"Skills source path or URL\",\n }),\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Show detailed output\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Doctor);\n\n setVerbose(flags.verbose);\n\n const projectDir = process.cwd();\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} Doctor`);\n this.log(\"\");\n this.log(\" Checking configuration health...\");\n this.log(\"\");\n\n const results: CheckResult[] = [];\n\n // Use detectProject operation to get installation + config in one call\n const detected = await detectProject(projectDir);\n const { result: configResult, config } = checkConfigValid(detected?.config ?? null);\n results.push(configResult);\n formatCheckLine(\"Config Valid\", configResult, flags.verbose).forEach((line) => this.log(line));\n\n const sourceResult = await checkSourceReachable(flags.source, projectDir);\n\n // loadSource (called by checkSourceReachable) populates the matrix automatically\n if (config) {\n const skillsResult = await checkSkillsResolved(config, matrix, projectDir);\n results.push(skillsResult);\n formatCheckLine(\"Skills Resolved\", skillsResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"Skills Resolved\", skipResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n }\n\n if (config) {\n const agentsResult = await checkAgentsCompiled(config, projectDir);\n results.push(agentsResult);\n formatCheckLine(\"Agents Compiled\", agentsResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"Agents Compiled\", skipResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n }\n\n if (config) {\n const orphansResult = await checkNoOrphans(config, projectDir);\n results.push(orphansResult);\n formatCheckLine(\"No Orphans\", orphansResult, flags.verbose).forEach((line) => this.log(line));\n } else {\n const skipResult: CheckResult = {\n status: \"skip\",\n message: \"Skipped (config invalid)\",\n };\n results.push(skipResult);\n formatCheckLine(\"No Orphans\", skipResult, flags.verbose).forEach((line) => this.log(line));\n }\n\n results.push(sourceResult);\n formatCheckLine(\"Source Reachable\", sourceResult, flags.verbose).forEach((line) =>\n this.log(line),\n );\n\n this.log(\"\");\n this.log(formatSummary(results));\n\n const tips = formatTips(results);\n if (tips.length > 0) {\n this.log(\"\");\n tips.forEach((tip) => this.log(tip));\n }\n\n this.log(\"\");\n\n const hasErrors = results.some((r) => r.status === \"fail\");\n if (hasErrors) {\n this.exit(EXIT_CODES.ERROR);\n }\n }\n}\n"],"mappings":"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","names":["matrix"]}