ai-ops-cli 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/program.ts","../../src/features/codex-hooks/commands.ts","../../src/features/codex-hooks/core.ts","../../src/core/schemas/skill.schema.ts","../../src/core/schemas/skill-catalog.schema.ts","../../src/core/schemas/skill-registry.schema.ts","../../src/core/schemas/subagent.schema.ts","../../src/core/schemas/project-layer.schema.ts","../../src/core/schemas/subagent-paths.ts","../../src/core/schemas/subagent-catalog.schema.ts","../../src/core/schemas/subagent-manifest.schema.ts","../../src/core/schemas/integration.schema.ts","../../src/core/schemas/integration-catalog.schema.ts","../../src/core/schemas/pack.schema.ts","../../src/core/schemas/studio-snapshot.schema.ts","../../src/shared/catalog-loader.ts","../../src/shared/markdown/frontmatter.ts","../../src/features/subagents/toml.ts","../../src/shared/source-hash.ts","../../src/features/skills/renderer.ts","../../src/features/skills/registry-io.ts","../../src/features/skills/install-files.ts","../../src/features/skills/state.ts","../../src/shared/command-paths.ts","../../src/shared/paths.ts","../../src/features/codex-hooks/register.ts","../../src/features/codex-permissions/commands.ts","../../src/features/codex-permissions/file-utils.ts","../../src/features/codex-permissions/types.ts","../../src/features/codex-permissions/legacy-cleanup.ts","../../src/features/codex-permissions/config.ts","../../src/features/codex-permissions/core.ts","../../src/features/codex-permissions/register.ts","../../src/features/context-promotion/commands.ts","../../src/features/context-promotion/tool-use-hook.ts","../../src/features/context-promotion/types.ts","../../src/features/context-promotion/git.ts","../../src/features/context-promotion/receipts.ts","../../src/features/context-promotion/status.ts","../../src/features/project-layer/constants.ts","../../src/features/project-layer/path.util.ts","../../src/features/project-layer/serialization.ts","../../src/features/project-layer/managed-header.ts","../../src/features/project-layer/document.logic.ts","../../src/features/project-layer/templates.ts","../../src/features/project-layer/custom-project-rules.ts","../../src/features/project-layer/state-io.ts","../../src/features/project-layer/docs-status.logic.ts","../../src/features/project-layer/lifecycle.logic.ts","../../src/features/project-layer/uninstall.logic.ts","../../src/features/project-layer/audit.logic.ts","../../src/features/project-layer/pack.logic.ts","../../src/features/project-layer/pack-source.logic.ts","../../src/features/context-promotion/hook.ts","../../src/features/context-promotion/register.ts","../../src/features/integrations/commands.ts","../../src/features/pc/status.ts","../../src/features/pc/markdown.ts","../../src/features/pc/hook.ts","../../src/features/integrations/manifest-io.ts","../../src/features/integrations/components.ts","../../src/features/integrations/definitions.ts","../../src/features/integrations/stdio.ts","../../src/features/integrations/register.ts","../../src/features/project-layer/audit-command.ts","../../src/features/project-layer/diff-command.ts","../../src/features/project-layer/init-command.ts","../../src/features/project-layer/command-errors.ts","../../src/features/project-layer/pack-command.ts","../../src/features/project-layer/uninstall-command.ts","../../src/features/project-layer/update-command.ts","../../src/features/project-layer/register.ts","../../src/features/skills/commands.ts","../../src/features/skills/register.ts","../../src/features/studio/commands.ts","../../src/features/studio/project-snapshot.ts","../../src/features/studio/snapshot-shared.ts","../../src/features/studio/issue-normalization.ts","../../src/features/studio/runtime-snapshot.ts","../../src/features/subagents/manifest-io.ts","../../src/features/studio/snapshot.ts","../../src/features/studio/register.ts","../../src/features/subagents/commands.ts","../../src/features/subagents/renderer.ts","../../src/features/subagents/install-files.ts","../../src/features/subagents/state.ts","../../src/features/subagents/register.ts","../../src/bin/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { registerCodexHookCommands } from '@/features/codex-hooks/register.js';\nimport { registerCodexPermissionsCommands } from '@/features/codex-permissions/register.js';\nimport { registerContextPromotionCommands } from '@/features/context-promotion/register.js';\nimport { registerIntegrationCommands } from '@/features/integrations/register.js';\nimport { registerProjectLayerCommands } from '@/features/project-layer/register.js';\nimport { registerSkillCommands } from '@/features/skills/register.js';\nimport { registerStudioCommands } from '@/features/studio/register.js';\nimport { registerSubagentCommands } from '@/features/subagents/register.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\n\nexport const createProgram = (): Command => {\n const program = new Command();\n\n program.name('ai-ops').description('AI agent operating layer manager').version(getCliVersion());\n\n registerProjectLayerCommands(program);\n registerStudioCommands(program);\n registerSkillCommands(program);\n registerSubagentCommands(program);\n registerContextPromotionCommands(program);\n registerCodexHookCommands(program);\n registerCodexPermissionsCommands(program);\n registerIntegrationCommands(program);\n\n return program;\n};\n","import * as p from '@clack/prompts';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { InstalledSkill, Skill } from '@/core/schemas/index.js';\nimport {\n buildContextPromotionHookCommand,\n CONTEXT_PROMOTION_HOOK_ID,\n inspectContextPromotionHook,\n installContextPromotionHook,\n resolveCodexHooksPath,\n uninstallContextPromotionHook,\n} from './core.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { buildSkillInstallPlan } from '../skills/renderer.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from '../skills/registry-io.js';\nimport { installSkillPackages } from '../skills/install-files.js';\nimport { findInstalledSkill, mergeSkillTools, upsertInstalledSkill } from '../skills/state.js';\nimport { resolveSkillsDir, resolveUserBasePath } from '../../shared/command-paths.js';\n\ntype CodexHookInstallOptions = {\n command?: string;\n};\n\nconst CONTEXT_PROMOTION_REVIEW_SKILL_ID = 'context-promotion-review';\n\nconst resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex hook commands');\n }\n return `${home}/.codex`;\n};\n\nconst assertContextPromotionHookId = (hookId: string): void => {\n if (hookId !== CONTEXT_PROMOTION_HOOK_ID) {\n throw new Error(`Unknown Codex hook: ${hookId}`);\n }\n};\n\nconst reportCodexHookError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] =>\n (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n\nconst resolveContextPromotionReviewSkill = (): Skill => {\n const skill = loadAllSkills(resolveSkillsDir()).find(\n (candidate) => candidate.id === CONTEXT_PROMOTION_REVIEW_SKILL_ID,\n );\n if (!skill) {\n throw new Error(`Unknown skill: ${CONTEXT_PROMOTION_REVIEW_SKILL_ID}`);\n }\n return skill;\n};\n\nconst hasInstalledContextPromotionReviewSkill = (basePath: string): boolean => {\n const installedSkill = findInstalledSkill(readInstalledSkills(basePath), CONTEXT_PROMOTION_REVIEW_SKILL_ID);\n return (\n installedSkill?.tools.includes(SKILL_TOOL.CODEX) === true &&\n existsSync(join(basePath, '.agents/skills/context-promotion-review/SKILL.md'))\n );\n};\n\nconst ensureContextPromotionReviewSkill = (basePath: string): { changed: boolean; installedSkill: InstalledSkill } => {\n const skill = resolveContextPromotionReviewSkill();\n const installedSkills = readInstalledSkills(basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, skill.id);\n const requestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: [SKILL_TOOL.CODEX],\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill,\n requestedTools,\n });\n const alreadyInstalled =\n existingInstalledSkill?.sourceHash === installedSkill.sourceHash &&\n existingInstalledSkill.tools.includes(SKILL_TOOL.CODEX) &&\n existsSync(join(basePath, '.agents/skills/context-promotion-review/SKILL.md'));\n\n if (alreadyInstalled) {\n return { changed: false, installedSkill };\n }\n\n installSkillPackages(basePath, packages);\n writeSkillRegistry(resolveSkillRegistryPath(basePath), {\n skills: upsertInstalledSkill(installedSkills, installedSkill),\n cliVersion: getCliVersion(),\n generatedAt: new Date().toISOString(),\n });\n\n return { changed: true, installedSkill };\n};\n\nexport const codexHookInstallCommand = async (\n hookId: string,\n opts: CodexHookInstallOptions = {},\n): Promise<void> => {\n p.intro(`ai-ops codex-hook install ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const skillResult = ensureContextPromotionReviewSkill(resolveUserBasePath());\n const hooksPath = resolveCodexHooksPath(resolveCodexHomePath());\n const result = installContextPromotionHook({\n hooksPath,\n command: buildContextPromotionHookCommand(opts.command),\n });\n p.log.success(\n skillResult.changed\n ? `skill 설치 완료: ${skillResult.installedSkill.id}`\n : `skill 이미 설치됨: ${skillResult.installedSkill.id}`,\n );\n p.log.success(result.changed ? `hook 설치 완료: ${result.hooksPath}` : `hook 이미 설치됨: ${result.hooksPath}`);\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook install 완료');\n};\n\nexport const codexHookStatusCommand = async (hookId: string): Promise<void> => {\n p.intro(`ai-ops codex-hook status ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const result = inspectContextPromotionHook(resolveCodexHooksPath(resolveCodexHomePath()));\n const skillInstalled = hasInstalledContextPromotionReviewSkill(resolveUserBasePath());\n p.log.info(\n [\n `hooks file: ${result.hooksPath}`,\n `hook installed: ${result.installed ? 'yes' : 'no'}`,\n `skill installed: ${skillInstalled ? 'yes' : 'no'}`,\n ].join('\\n'),\n );\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook status 완료');\n};\n\nexport const codexHookUninstallCommand = async (hookId: string): Promise<void> => {\n p.intro(`ai-ops codex-hook uninstall ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const result = uninstallContextPromotionHook(resolveCodexHooksPath(resolveCodexHomePath()));\n p.log.success(result.removed ? `hook 제거 완료: ${result.hooksPath}` : `설치된 hook 없음: ${result.hooksPath}`);\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook uninstall 완료');\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\n// ----- types -----\n\nexport type CodexHookInstallResult = {\n hooksPath: string;\n installed: boolean;\n changed: boolean;\n};\n\nexport type CodexHookStatusResult = {\n hooksPath: string;\n installed: boolean;\n};\n\nexport type CodexHookUninstallResult = {\n hooksPath: string;\n removed: boolean;\n changed: boolean;\n};\n\nexport type CodexHookDefinition = {\n id: string;\n commandMarker: string;\n legacyCommandMarkers: readonly string[];\n defaultCommand: string;\n statusMessage: string;\n};\n\ntype JsonRecord = Record<string, unknown>;\n\n// ----- constants -----\n\nexport const CONTEXT_PROMOTION_HOOK_ID = 'context-promotion';\nexport const CONTEXT_PROMOTION_HOOK_COMMAND_MARKER = 'context-promotion hook post-tool-use';\nexport const CONTEXT_PROMOTION_LEGACY_HOOK_COMMAND_MARKER = 'context-promotion hook pre-tool-use';\nexport const CONTEXT_PROMOTION_DEFAULT_HOOK_COMMAND = `ai-ops ${CONTEXT_PROMOTION_HOOK_COMMAND_MARKER}`;\n\nexport const PC_HOOK_ID = 'pc';\nexport const PC_HOOK_COMMAND_MARKER = 'integration hook post-tool-use pc';\nexport const PC_DEFAULT_HOOK_COMMAND = `ai-ops ${PC_HOOK_COMMAND_MARKER}`;\n\nconst PRE_TOOL_USE_EVENT = 'PreToolUse';\nconst POST_TOOL_USE_EVENT = 'PostToolUse';\nconst BASH_MATCHER = '^Bash$';\n\nexport const CONTEXT_PROMOTION_CODEX_HOOK: CodexHookDefinition = {\n id: CONTEXT_PROMOTION_HOOK_ID,\n commandMarker: CONTEXT_PROMOTION_HOOK_COMMAND_MARKER,\n legacyCommandMarkers: [CONTEXT_PROMOTION_LEGACY_HOOK_COMMAND_MARKER],\n defaultCommand: CONTEXT_PROMOTION_DEFAULT_HOOK_COMMAND,\n statusMessage: 'Checking context promotion review',\n} as const;\n\nexport const PC_CODEX_HOOK: CodexHookDefinition = {\n id: PC_HOOK_ID,\n commandMarker: PC_HOOK_COMMAND_MARKER,\n legacyCommandMarkers: [],\n defaultCommand: PC_DEFAULT_HOOK_COMMAND,\n statusMessage: 'Checking pc handoff',\n} as const;\n\n// ----- JSON helpers -----\n\nconst isJsonRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readJsonRecord = (filePath: string): JsonRecord => {\n if (!existsSync(filePath)) {\n return {};\n }\n\n const parsed: unknown = JSON.parse(readFileSync(filePath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n throw new Error('hooks.json must contain a JSON object');\n }\n return parsed;\n};\n\nconst writeJsonRecord = (filePath: string, value: JsonRecord): void => {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, JSON.stringify(value, null, 2) + '\\n', 'utf-8');\n};\n\nconst getOrCreateRecord = (record: JsonRecord, key: string): JsonRecord => {\n const existing = record[key];\n if (isJsonRecord(existing)) {\n return existing;\n }\n const next: JsonRecord = {};\n record[key] = next;\n return next;\n};\n\nconst getArray = (record: JsonRecord, key: string): unknown[] => {\n const existing = record[key];\n return Array.isArray(existing) ? existing : [];\n};\n\nconst handlerMatchesDefinition =\n (definition: CodexHookDefinition) =>\n (handler: unknown): boolean =>\n isJsonRecord(handler) &&\n typeof handler.command === 'string' &&\n [definition.commandMarker, ...definition.legacyCommandMarkers].some((marker) => handler.command.includes(marker));\n\nconst handlerMatchesCommand = (handler: unknown, command: string): boolean =>\n isJsonRecord(handler) && handler.command === command;\n\nconst groupHasDefinitionHook =\n (definition: CodexHookDefinition) =>\n (group: unknown): boolean =>\n isJsonRecord(group) && getArray(group, 'hooks').some(handlerMatchesDefinition(definition));\n\nconst groupHasCurrentDefinitionHook = (group: unknown, command: string): boolean =>\n isJsonRecord(group) && getArray(group, 'hooks').some((handler) => handlerMatchesCommand(handler, command));\n\nconst countDefinitionHandlers = (groups: readonly unknown[], definition: CodexHookDefinition): number =>\n groups.reduce((count, group) => {\n if (!isJsonRecord(group)) {\n return count;\n }\n return count + getArray(group, 'hooks').filter(handlerMatchesDefinition(definition)).length;\n }, 0);\n\nconst configHasDefinitionHook = (config: JsonRecord, definition: CodexHookDefinition): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n return getArray(hooks, POST_TOOL_USE_EVENT).some(groupHasDefinitionHook(definition));\n};\n\nconst configHasOnlyCurrentDefinitionHook = (\n config: JsonRecord,\n definition: CodexHookDefinition,\n command: string,\n): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n const hasLegacy = getArray(hooks, PRE_TOOL_USE_EVENT).some(groupHasDefinitionHook(definition));\n const postGroups = getArray(hooks, POST_TOOL_USE_EVENT);\n const hasCurrent = postGroups.some((group) => groupHasCurrentDefinitionHook(group, command));\n return hasCurrent && !hasLegacy && countDefinitionHandlers(postGroups, definition) === 1;\n};\n\nconst removeDefinitionHooksFromEvent = (\n hooks: JsonRecord,\n eventName: string,\n definition: CodexHookDefinition,\n): boolean => {\n const previousGroups = getArray(hooks, eventName);\n let removed = false;\n const nextGroups = previousGroups\n .map((group) => {\n if (!isJsonRecord(group)) {\n return group;\n }\n const previousHandlers = getArray(group, 'hooks');\n const nextHandlers = previousHandlers.filter((handler) => {\n const matches = handlerMatchesDefinition(definition)(handler);\n if (matches) {\n removed = true;\n }\n return !matches;\n });\n if (nextHandlers.length === 0) {\n return null;\n }\n return {\n ...group,\n hooks: nextHandlers,\n };\n })\n .filter((group): group is Exclude<unknown, null> => group !== null);\n\n if (!removed) {\n return false;\n }\n\n if (nextGroups.length > 0) {\n hooks[eventName] = nextGroups;\n } else {\n delete hooks[eventName];\n }\n return true;\n};\n\n// ----- public API -----\n\nexport const resolveCodexHooksPath = (codexHomePath: string): string => join(codexHomePath, 'hooks.json');\n\nexport const buildCodexHookCommand = (params: {\n definition: CodexHookDefinition;\n overrideCommand?: string;\n}): string => {\n const command = params.overrideCommand?.trim() ?? params.definition.defaultCommand;\n if (!command.includes(params.definition.commandMarker)) {\n throw new Error(`${params.definition.id} hook command must include: ${params.definition.commandMarker}`);\n }\n return command;\n};\n\nexport const buildContextPromotionHookCommand = (overrideCommand?: string): string =>\n buildCodexHookCommand({\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n overrideCommand,\n });\n\nexport const quoteShellArg = (value: string): string => `'${value.replace(/'/g, \"'\\\\''\")}'`;\n\nexport const inspectCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n}): CodexHookStatusResult => ({\n hooksPath: params.hooksPath,\n installed: configHasDefinitionHook(readJsonRecord(params.hooksPath), params.definition),\n});\n\nexport const inspectContextPromotionHook = (hooksPath: string): CodexHookStatusResult => ({\n hooksPath,\n installed: inspectCodexHook({ hooksPath, definition: CONTEXT_PROMOTION_CODEX_HOOK }).installed,\n});\n\nexport const installCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n command: string;\n}): CodexHookInstallResult => {\n const config = readJsonRecord(params.hooksPath);\n if (configHasOnlyCurrentDefinitionHook(config, params.definition, params.command)) {\n return {\n hooksPath: params.hooksPath,\n installed: true,\n changed: false,\n };\n }\n\n const hooks = getOrCreateRecord(config, 'hooks');\n removeDefinitionHooksFromEvent(hooks, PRE_TOOL_USE_EVENT, params.definition);\n removeDefinitionHooksFromEvent(hooks, POST_TOOL_USE_EVENT, params.definition);\n const existingGroups = getArray(hooks, POST_TOOL_USE_EVENT);\n\n const nextGroup: JsonRecord = {\n matcher: BASH_MATCHER,\n hooks: [\n {\n type: 'command',\n command: params.command,\n timeout: 30,\n statusMessage: params.definition.statusMessage,\n },\n ],\n };\n hooks[POST_TOOL_USE_EVENT] = [...existingGroups, nextGroup];\n writeJsonRecord(params.hooksPath, config);\n\n return {\n hooksPath: params.hooksPath,\n installed: true,\n changed: true,\n };\n};\n\nexport const installContextPromotionHook = (params: { hooksPath: string; command: string }): CodexHookInstallResult =>\n installCodexHook({\n hooksPath: params.hooksPath,\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n command: params.command,\n });\n\nexport const uninstallCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n}): CodexHookUninstallResult => {\n const config = readJsonRecord(params.hooksPath);\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return { hooksPath: params.hooksPath, removed: false, changed: false };\n }\n\n const removedLegacy = removeDefinitionHooksFromEvent(hooks, PRE_TOOL_USE_EVENT, params.definition);\n const removedCurrent = removeDefinitionHooksFromEvent(hooks, POST_TOOL_USE_EVENT, params.definition);\n const removed = removedLegacy || removedCurrent;\n\n if (!removed) {\n return { hooksPath: params.hooksPath, removed: false, changed: false };\n }\n writeJsonRecord(params.hooksPath, config);\n\n return { hooksPath: params.hooksPath, removed: true, changed: true };\n};\n\nexport const uninstallContextPromotionHook = (hooksPath: string): CodexHookUninstallResult =>\n uninstallCodexHook({\n hooksPath,\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n });\n","import { z } from 'zod';\n\nexport const SKILL_KIND = {\n REFERENCE: 'reference',\n TASK: 'task',\n} as const;\n\nexport const SKILL_TOOL = {\n CLAUDE_CODE: 'claude-code',\n CODEX: 'codex',\n GEMINI: 'gemini',\n} as const;\n\nexport const SkillKindSchema = z.union([z.literal(SKILL_KIND.REFERENCE), z.literal(SKILL_KIND.TASK)]);\nexport const SkillToolSchema = z.union([\n z.literal(SKILL_TOOL.CLAUDE_CODE),\n z.literal(SKILL_TOOL.CODEX),\n z.literal(SKILL_TOOL.GEMINI),\n]);\n\nexport const SkillFileSchema = z\n .object({\n path: z.string().min(1),\n content: z.string(),\n })\n .strict();\n\nexport const SkillFrontmatterSchema = z\n .object({\n name: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'name must be kebab-case'),\n description: z.string().min(1),\n })\n .passthrough();\n\nexport type SkillFile = z.infer<typeof SkillFileSchema>;\nexport type SkillFrontmatter = z.infer<typeof SkillFrontmatterSchema>;\nexport type Skill = {\n id: string;\n kind: z.infer<typeof SkillKindSchema>;\n description: string;\n supported_tools: z.infer<typeof SkillToolSchema>[];\n groups: string[];\n directory: string;\n files: SkillFile[];\n};\nexport type ToolId = z.infer<typeof SkillToolSchema>;\n\nexport const InstalledSkillSchema = z\n .object({\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case'),\n kind: SkillKindSchema,\n tools: z.array(SkillToolSchema).min(1),\n installed_paths: z.array(z.string().min(1)).min(1),\n sourceHash: z.string().regex(/^[a-f0-9]{6}$/, 'sourceHash must be 6 lowercase hex chars'),\n })\n .strip();\n\nexport type InstalledSkill = z.infer<typeof InstalledSkillSchema>;\n","import { z } from 'zod';\nimport { SkillKindSchema, SkillToolSchema } from './skill.schema.js';\n\nconst SkillIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\nconst SkillCatalogPathSchema = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)+$/, 'source_path must be relative kebab-case path');\n\nexport const SkillCatalogEntrySchema = z\n .object({\n id: SkillIdSchema,\n kind: SkillKindSchema,\n supported_tools: z.array(SkillToolSchema).min(1),\n groups: z.array(z.string().min(1)),\n source_path: SkillCatalogPathSchema,\n })\n .strict()\n .superRefine((entry, ctx) => {\n const expectedPrefix = entry.kind === 'reference' ? 'reference-skills/' : 'task-skills/';\n\n if (!entry.source_path.startsWith(expectedPrefix)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['source_path'],\n message: `source_path must start with ${expectedPrefix}`,\n });\n }\n });\n\nexport const SkillCatalogSchema = z\n .object({\n skills: z.array(SkillCatalogEntrySchema),\n })\n .strict();\n\nexport type SkillCatalogEntry = z.infer<typeof SkillCatalogEntrySchema>;\nexport type SkillCatalog = z.infer<typeof SkillCatalogSchema>;\n","import { z } from 'zod';\nimport { InstalledSkillSchema } from './skill.schema.js';\n\nexport const SkillRegistrySchema = z\n .object({\n skills: z.array(InstalledSkillSchema),\n cliVersion: z.string().optional(),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type SkillRegistry = z.infer<typeof SkillRegistrySchema>;\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\nimport { isSafeProjectLayerPath } from './project-layer.schema.js';\nimport { buildSubagentRelativePath } from './subagent-paths.js';\n\nexport const SubagentIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\n\nexport const SubagentMarkdownFrontmatterSchema = z\n .object({\n name: SubagentIdSchema,\n description: z.string().min(1),\n })\n .passthrough();\n\nconst TomlValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);\nconst SubagentInstalledPathSchema = z\n .string()\n .min(1)\n .refine(isSafeProjectLayerPath, 'installed path must be safe relative path');\n\nexport const CodexSubagentFrontmatterSchema = z\n .object({\n name: SubagentIdSchema,\n description: z.string().min(1),\n skill_names: z.array(SubagentIdSchema).optional(),\n })\n .catchall(TomlValueSchema);\n\nexport type SubagentMarkdownFrontmatter = z.infer<typeof SubagentMarkdownFrontmatterSchema>;\nexport type CodexSubagentFrontmatter = z.infer<typeof CodexSubagentFrontmatterSchema>;\n\nexport type Subagent = {\n id: string;\n supported_tools: z.infer<typeof SkillToolSchema>[];\n source_path: string;\n directory: string;\n prompt: string;\n frontmatter: {\n claude: {\n raw: string;\n parsed: SubagentMarkdownFrontmatter;\n };\n codex: {\n raw: string;\n parsed: CodexSubagentFrontmatter;\n };\n gemini: {\n raw: string;\n parsed: SubagentMarkdownFrontmatter;\n };\n };\n};\n\nexport const InstalledSubagentSchema = z\n .object({\n id: SubagentIdSchema,\n tools: z.array(SkillToolSchema).min(1),\n installed_paths: z.array(SubagentInstalledPathSchema).min(1),\n sourceHash: z.string().regex(/^[a-f0-9]{6}$/, 'sourceHash must be 6 lowercase hex chars'),\n })\n .strip()\n .superRefine((subagent, ctx) => {\n const expectedPaths = new Set(subagent.tools.map((tool) => buildSubagentRelativePath(subagent.id, tool)));\n const installedPaths = new Set(subagent.installed_paths);\n\n if (installedPaths.size !== subagent.installed_paths.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must not contain duplicates',\n });\n return;\n }\n\n if (installedPaths.size !== expectedPaths.size) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must match id and tools',\n });\n return;\n }\n\n for (const installedPath of installedPaths) {\n if (!expectedPaths.has(installedPath)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must match id and tools',\n });\n return;\n }\n }\n });\n\nexport type InstalledSubagent = z.infer<typeof InstalledSubagentSchema>;\n","import { z } from 'zod';\n\nexport const ProjectLayerToolSchema = z.enum(['claude-code', 'codex', 'gemini']);\n\nexport const ProjectLayerDocumentStatusSchema = z.enum(['Active', 'Reserved', 'Draft', 'Archived']);\n\nconst ShortHashSchema = z.string().regex(/^[a-f0-9]{6}$/, 'hash must be 6 lowercase hex chars');\n\nexport const isSafeProjectLayerPath = (value: string): boolean => {\n if (value.length === 0) return false;\n if (value.includes('\\0')) return false;\n if (value.includes('\\\\')) return false;\n if (value.startsWith('/')) return false;\n if (/^[A-Za-z]:/.test(value)) return false;\n\n const segments = value.split('/');\n return segments.every((segment) => segment.length > 0 && segment !== '.' && segment !== '..');\n};\n\nconst ProjectLayerPathSchema = z\n .string()\n .min(1)\n .refine(isSafeProjectLayerPath, 'path must be a safe project-relative path');\n\nexport const ProjectLayerFrontmatterSchema = z\n .object({\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)).min(1),\n update_when: z.array(z.string().min(1)).min(1),\n })\n .strict();\n\nexport const ProjectLayerManagedFileSchema = z\n .object({\n path: ProjectLayerPathSchema,\n sourceHash: ShortHashSchema,\n })\n .strict();\n\nexport const ProjectLayerProjectFileSchema = z\n .object({\n path: ProjectLayerPathSchema,\n templateHash: ShortHashSchema,\n created: z.boolean(),\n })\n .strict();\n\nexport const ProjectLayerPackFileRecordSchema = z\n .object({\n path: ProjectLayerPathSchema,\n sourceHash: ShortHashSchema,\n })\n .strict();\n\nexport const ProjectLayerPackRecordSchema = z\n .object({\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case'),\n sourceHash: ShortHashSchema,\n documents: z.array(ProjectLayerPackFileRecordSchema),\n files: z.array(ProjectLayerPackFileRecordSchema),\n installedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport const ProjectLayerManifestSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('project-operating-layer'),\n tools: z.array(ProjectLayerToolSchema).min(1),\n managed_files: z.array(ProjectLayerManagedFileSchema),\n project_files: z.array(ProjectLayerProjectFileSchema),\n packs: z.array(ProjectLayerPackRecordSchema).default([]),\n settings: z.record(z.unknown()),\n sourceHash: ShortHashSchema,\n cliVersion: z.string().min(1),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport const ProjectLayerContextDocumentSchema = ProjectLayerFrontmatterSchema.extend({\n path: ProjectLayerPathSchema,\n contentHash: ShortHashSchema,\n}).strict();\n\nexport const ProjectLayerContextIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-layer-index'),\n documents: z.array(ProjectLayerContextDocumentSchema),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type ProjectLayerTool = z.infer<typeof ProjectLayerToolSchema>;\nexport type ProjectLayerDocumentStatus = z.infer<typeof ProjectLayerDocumentStatusSchema>;\nexport type ProjectLayerFrontmatter = z.infer<typeof ProjectLayerFrontmatterSchema>;\nexport type ProjectLayerManagedFile = z.infer<typeof ProjectLayerManagedFileSchema>;\nexport type ProjectLayerProjectFile = z.infer<typeof ProjectLayerProjectFileSchema>;\nexport type ProjectLayerPackFileRecord = z.infer<typeof ProjectLayerPackFileRecordSchema>;\nexport type ProjectLayerPackRecord = z.infer<typeof ProjectLayerPackRecordSchema>;\nexport type ProjectLayerManifest = z.infer<typeof ProjectLayerManifestSchema>;\nexport type ProjectLayerContextDocument = z.infer<typeof ProjectLayerContextDocumentSchema>;\nexport type ProjectLayerContextIndex = z.infer<typeof ProjectLayerContextIndexSchema>;\n","import { join } from 'node:path';\nimport type { ToolId } from './skill.schema.js';\n\nconst SUBAGENT_TOOL_OUTPUTS: Readonly<Record<ToolId, { dir: string; extension: string }>> = {\n 'claude-code': {\n dir: '.claude/agents',\n extension: '.md',\n },\n codex: {\n dir: '.codex/agents',\n extension: '.toml',\n },\n gemini: {\n dir: '.gemini/agents',\n extension: '.md',\n },\n} as const;\n\nexport const buildSubagentRelativePath = (subagentId: string, toolId: ToolId): string => {\n const output = SUBAGENT_TOOL_OUTPUTS[toolId];\n return join(output.dir, `${subagentId}${output.extension}`);\n};\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\nimport { SubagentIdSchema } from './subagent.schema.js';\n\nconst SubagentCatalogPathSchema = z\n .string()\n .regex(\n /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)*$/,\n 'source_path must be relative kebab-case path',\n );\n\nexport const SubagentCatalogEntrySchema = z\n .object({\n id: SubagentIdSchema,\n supported_tools: z.array(SkillToolSchema).min(1),\n source_path: SubagentCatalogPathSchema,\n })\n .strict();\n\nexport const SubagentCatalogSchema = z\n .object({\n subagents: z.array(SubagentCatalogEntrySchema),\n })\n .strict();\n\nexport type SubagentCatalogEntry = z.infer<typeof SubagentCatalogEntrySchema>;\nexport type SubagentCatalog = z.infer<typeof SubagentCatalogSchema>;\n","import { z } from 'zod';\nimport { InstalledSubagentSchema } from './subagent.schema.js';\n\nexport const SubagentManifestSchema = z\n .object({\n subagents: z.array(InstalledSubagentSchema),\n cliVersion: z.string().optional(),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type SubagentManifest = z.infer<typeof SubagentManifestSchema>;\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\n\nexport const INTEGRATION_ID = {\n CONTEXT_PROMOTION: 'context-promotion',\n PC: 'pc',\n} as const;\n\nexport const INTEGRATION_COMPONENT_TYPE = {\n SKILL: 'skill',\n CODEX_HOOK: 'codex-hook',\n RECEIPT_CONFIG: 'receipt-config',\n} as const;\n\nexport const IntegrationIdSchema = z.union([z.literal(INTEGRATION_ID.CONTEXT_PROMOTION), z.literal(INTEGRATION_ID.PC)]);\n\nconst IntegrationSkillComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/),\n tools: z.array(SkillToolSchema).min(1),\n owned: z.boolean(),\n })\n .strict();\n\nconst IntegrationCodexHookComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n id: IntegrationIdSchema,\n command: z.string().min(1),\n owned: z.boolean(),\n })\n .strict();\n\nconst IntegrationReceiptConfigComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/),\n storagePath: z.string().min(1),\n owned: z.boolean(),\n })\n .strict();\n\nexport const IntegrationComponentSchema = z.union([\n IntegrationSkillComponentSchema,\n IntegrationCodexHookComponentSchema,\n IntegrationReceiptConfigComponentSchema,\n]);\n\nexport const InstalledIntegrationSchema = z\n .object({\n id: IntegrationIdSchema,\n components: z.array(IntegrationComponentSchema),\n installedAt: z.string().min(1),\n updatedAt: z.string().min(1),\n })\n .strict();\n\nexport const IntegrationManifestSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('ai-ops-integrations-manifest'),\n integrations: z.array(InstalledIntegrationSchema),\n cliVersion: z.string().min(1),\n generatedAt: z.string().min(1),\n })\n .strict();\n\nexport type IntegrationId = z.infer<typeof IntegrationIdSchema>;\nexport type IntegrationComponent = z.infer<typeof IntegrationComponentSchema>;\nexport type InstalledIntegration = z.infer<typeof InstalledIntegrationSchema>;\nexport type IntegrationManifest = z.infer<typeof IntegrationManifestSchema>;\n","import { z } from 'zod';\nimport { INTEGRATION_COMPONENT_TYPE, IntegrationIdSchema } from './integration.schema.js';\n\nconst ComponentIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'component id must be kebab-case');\n\nexport const IntegrationCatalogSkillComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n id: ComponentIdSchema,\n tools: z.array(z.literal('codex')).min(1),\n })\n .strict();\n\nexport const IntegrationCatalogCodexHookComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n id: IntegrationIdSchema,\n })\n .strict();\n\nexport const IntegrationCatalogReceiptConfigComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n id: ComponentIdSchema,\n storage_path: z.string().min(1),\n })\n .strict();\n\nexport const IntegrationCatalogComponentSchema = z.union([\n IntegrationCatalogSkillComponentSchema,\n IntegrationCatalogCodexHookComponentSchema,\n IntegrationCatalogReceiptConfigComponentSchema,\n]);\n\nexport const IntegrationCatalogEntrySchema = z\n .object({\n id: IntegrationIdSchema,\n description: z.string().min(1),\n components: z.array(IntegrationCatalogComponentSchema).min(1),\n })\n .strict()\n .superRefine((entry, ctx) => {\n const hasSkill = entry.components.some((component) => component.type === INTEGRATION_COMPONENT_TYPE.SKILL);\n const hasCodexHook = entry.components.some((component) => component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK);\n const hasReceiptConfig = entry.components.some(\n (component) => component.type === INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n );\n\n if (!hasSkill) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a skill component: ${entry.id}`,\n });\n }\n if (!hasCodexHook) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a codex-hook component: ${entry.id}`,\n });\n }\n if (!hasReceiptConfig) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a receipt-config component: ${entry.id}`,\n });\n }\n });\n\nexport const IntegrationCatalogSchema = z\n .object({\n integrations: z.array(IntegrationCatalogEntrySchema),\n })\n .strict()\n .superRefine((catalog, ctx) => {\n const seen = new Set<string>();\n for (const [index, entry] of catalog.integrations.entries()) {\n if (seen.has(entry.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['integrations', index, 'id'],\n message: `duplicate integration id: ${entry.id}`,\n });\n }\n seen.add(entry.id);\n }\n });\n\nexport type IntegrationCatalogEntry = z.infer<typeof IntegrationCatalogEntrySchema>;\nexport type IntegrationCatalogComponent = z.infer<typeof IntegrationCatalogComponentSchema>;\nexport type IntegrationCatalog = z.infer<typeof IntegrationCatalogSchema>;\n","import { z } from 'zod';\n\nconst PackIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\nconst PackSourcePathSchema = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)*$/, 'source_path must be relative kebab-case path');\n\nexport const PackCatalogEntrySchema = z\n .object({\n id: PackIdSchema,\n source_path: PackSourcePathSchema,\n })\n .strict();\n\nexport const PackCatalogSchema = z\n .object({\n packs: z.array(PackCatalogEntrySchema),\n })\n .strict();\n\nexport type PackCatalogEntry = z.infer<typeof PackCatalogEntrySchema>;\nexport type PackCatalog = z.infer<typeof PackCatalogSchema>;\n","import { z } from 'zod';\nimport { INTEGRATION_COMPONENT_TYPE, IntegrationComponentSchema, IntegrationIdSchema } from './integration.schema.js';\nimport { IntegrationCatalogComponentSchema } from './integration-catalog.schema.js';\nimport { ProjectLayerDocumentStatusSchema } from './project-layer.schema.js';\nimport { SkillKindSchema, SkillToolSchema } from './skill.schema.js';\nimport { SubagentIdSchema } from './subagent.schema.js';\n\nconst nullableString = z.string().nullable();\n\nexport const StudioProjectStateSchema = z.union([\n z.literal('ready'),\n z.literal('uninitialized'),\n z.literal('degraded'),\n]);\n\nexport const StudioProjectDocumentProvenanceSchema = z.union([\n z.literal('ai-ops-managed'),\n z.literal('project-owned'),\n z.literal('pack-document'),\n z.literal('context-only'),\n]);\n\nexport const StudioRuntimeFileStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n })\n .strict();\n\nexport const StudioSourceStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n parsed: z.boolean(),\n generatedAt: nullableString,\n error: nullableString,\n })\n .strict();\n\nexport const StudioProjectIssueSourceSchema = z.union([\n z.literal('manifest'),\n z.literal('context-layer'),\n z.literal('docs-status'),\n z.literal('frontmatter'),\n z.literal('managed-section'),\n z.literal('file-system'),\n z.literal('source-hash'),\n z.literal('unknown'),\n]);\n\nexport const StudioProjectIssueSchema = z\n .object({\n level: z.union([z.literal('error'), z.literal('warning')]),\n code: z.string().min(1),\n message: z.string().min(1),\n source: StudioProjectIssueSourceSchema,\n affectedPath: nullableString,\n suggestedActionLabel: nullableString,\n })\n .strict();\n\nexport const StudioProjectDocumentSchema = z\n .object({\n path: z.string().min(1),\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)),\n update_when: z.array(z.string().min(1)),\n indexedContentHash: z.string().min(1),\n currentContentHash: nullableString,\n contentHashMatches: z.boolean().nullable(),\n provenance: StudioProjectDocumentProvenanceSchema,\n content: nullableString,\n trustWarning: nullableString,\n readError: nullableString,\n })\n .strict();\n\nexport const StudioProjectSnapshotSchema = z\n .object({\n root: z.string().min(1),\n state: StudioProjectStateSchema,\n files: z\n .object({\n manifest: StudioSourceStateSchema,\n contextIndex: StudioSourceStateSchema,\n docsStatus: StudioSourceStateSchema,\n })\n .strict(),\n audit: z\n .object({\n currentSourceHash: nullableString,\n hasErrors: z.boolean(),\n hasWarnings: z.boolean(),\n issues: z.array(StudioProjectIssueSchema),\n })\n .strict(),\n documents: z.array(StudioProjectDocumentSchema),\n })\n .strict();\n\nexport const StudioIntegrationComponentStatusSchema = z\n .object({\n type: z.union([\n z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n ]),\n id: z.string().min(1),\n installed: z.boolean(),\n owned: z.boolean().nullable(),\n catalog: IntegrationCatalogComponentSchema,\n installedComponent: IntegrationComponentSchema.nullable(),\n })\n .strict();\n\nexport const StudioIntegrationSnapshotSchema = z\n .object({\n id: IntegrationIdSchema,\n description: z.string().min(1),\n installed: z.boolean(),\n installedAt: nullableString,\n updatedAt: nullableString,\n components: z.array(StudioIntegrationComponentStatusSchema),\n })\n .strict();\n\nexport const StudioInstalledPathStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n })\n .strict();\n\nexport const StudioSkillSnapshotSchema = z\n .object({\n id: z.string().min(1),\n kind: SkillKindSchema,\n description: z.string().min(1),\n supported_tools: z.array(SkillToolSchema),\n groups: z.array(z.string().min(1)),\n installed: z.boolean(),\n installedTools: z.array(SkillToolSchema),\n installedPaths: z.array(StudioInstalledPathStateSchema),\n sourceHash: nullableString,\n })\n .strict();\n\nexport const StudioSubagentSnapshotSchema = z\n .object({\n id: SubagentIdSchema,\n description: z.string().min(1),\n supported_tools: z.array(SkillToolSchema),\n installed: z.boolean(),\n installedTools: z.array(SkillToolSchema),\n installedPaths: z.array(StudioInstalledPathStateSchema),\n sourceHash: nullableString,\n })\n .strict();\n\nexport const StudioHookSnapshotSchema = z\n .object({\n id: z.string().min(1),\n statusMessage: z.string().min(1),\n hooksPath: nullableString,\n installed: z.boolean(),\n error: nullableString,\n })\n .strict();\n\nexport const StudioRuntimeSnapshotSchema = z\n .object({\n available: z.boolean(),\n unavailableReason: nullableString,\n userBasePath: nullableString,\n codexHomePath: nullableString,\n manifests: z\n .object({\n integrations: StudioSourceStateSchema,\n skills: StudioSourceStateSchema,\n subagents: StudioSourceStateSchema,\n hooks: StudioSourceStateSchema,\n })\n .strict(),\n integrations: z.array(StudioIntegrationSnapshotSchema),\n skills: z.array(StudioSkillSnapshotSchema),\n subagents: z.array(StudioSubagentSnapshotSchema),\n hooks: z.array(StudioHookSnapshotSchema),\n })\n .strict();\n\nexport const StudioSnapshotSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('ai-ops-studio-snapshot'),\n generatedAt: z.string().datetime({ offset: true }),\n cliVersion: z.string().min(1),\n project: StudioProjectSnapshotSchema,\n runtime: StudioRuntimeSnapshotSchema,\n })\n .strict();\n\nexport type StudioProjectState = z.infer<typeof StudioProjectStateSchema>;\nexport type StudioProjectDocumentProvenance = z.infer<typeof StudioProjectDocumentProvenanceSchema>;\nexport type StudioSourceState = z.infer<typeof StudioSourceStateSchema>;\nexport type StudioProjectIssueSource = z.infer<typeof StudioProjectIssueSourceSchema>;\nexport type StudioProjectIssue = z.infer<typeof StudioProjectIssueSchema>;\nexport type StudioProjectDocument = z.infer<typeof StudioProjectDocumentSchema>;\nexport type StudioProjectSnapshot = z.infer<typeof StudioProjectSnapshotSchema>;\nexport type StudioIntegrationComponentStatus = z.infer<typeof StudioIntegrationComponentStatusSchema>;\nexport type StudioIntegrationSnapshot = z.infer<typeof StudioIntegrationSnapshotSchema>;\nexport type StudioInstalledPathState = z.infer<typeof StudioInstalledPathStateSchema>;\nexport type StudioSkillSnapshot = z.infer<typeof StudioSkillSnapshotSchema>;\nexport type StudioSubagentSnapshot = z.infer<typeof StudioSubagentSnapshotSchema>;\nexport type StudioHookSnapshot = z.infer<typeof StudioHookSnapshotSchema>;\nexport type StudioRuntimeSnapshot = z.infer<typeof StudioRuntimeSnapshotSchema>;\nexport type StudioSnapshot = z.infer<typeof StudioSnapshotSchema>;\n","import { readFileSync, readdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { parse } from 'yaml';\nimport { parseMarkdownFrontmatter } from './markdown/frontmatter.js';\nimport { parseFlatToml } from '@/features/subagents/toml.js';\nimport {\n CodexSubagentFrontmatterSchema,\n IntegrationCatalogSchema,\n SkillCatalogSchema,\n SkillFrontmatterSchema,\n SubagentCatalogSchema,\n SubagentMarkdownFrontmatterSchema,\n} from '@/core/schemas/index.js';\nimport type { Skill, SkillCatalog, Subagent, SubagentCatalog } from '@/core/schemas/index.js';\nimport type { IntegrationCatalog, IntegrationCatalogEntry } from '@/core/schemas/index.js';\n\nconst loadSkillDirectoryFiles = (skillDir: string): Skill['files'] => {\n const files: Skill['files'] = [];\n\n const walk = (relativeDir = ''): void => {\n const absDir = relativeDir.length > 0 ? join(skillDir, relativeDir) : skillDir;\n const entries = readdirSync(absDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n\n files.push({\n path: nextRelativePath,\n content: readFileSync(join(skillDir, nextRelativePath), 'utf-8'),\n });\n }\n };\n\n walk();\n return files;\n};\n\nexport const loadSkillCatalog = (skillsDir: string): SkillCatalog =>\n SkillCatalogSchema.parse(JSON.parse(readFileSync(resolve(skillsDir, 'skill-registry.json'), 'utf-8')));\n\nexport const loadAllSkills = (skillsDir: string): Skill[] => {\n const catalog = loadSkillCatalog(skillsDir);\n const entries = [...catalog.skills].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n const directory = resolve(skillsDir, entry.source_path);\n const skillMdPath = join(directory, 'SKILL.md');\n const rawSkillMd = readFileSync(skillMdPath, 'utf-8');\n const { frontmatter } = parseMarkdownFrontmatter(rawSkillMd);\n const parsed = SkillFrontmatterSchema.parse(frontmatter);\n if (parsed.name !== entry.id) {\n throw new Error(`Skill directory and frontmatter name mismatch: ${entry.id} != ${parsed.name}`);\n }\n\n const files = loadSkillDirectoryFiles(directory);\n if (entry.kind === 'reference' && !files.some((file) => file.path === 'references/reference.md')) {\n throw new Error(`Reference skill must include references/reference.md: ${parsed.name}`);\n }\n\n return {\n id: entry.id,\n kind: entry.kind,\n description: parsed.description,\n supported_tools: [...entry.supported_tools],\n groups: [...entry.groups],\n directory,\n files,\n };\n });\n};\n\nconst readRequiredTextFile = (filePath: string): string => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch (error) {\n const cause = error instanceof Error ? `: ${error.message}` : '';\n throw new Error(`Required subagent source file is missing: ${filePath}${cause}`);\n }\n};\n\nconst assertSubagentFrontmatterName = (params: { id: string; tool: string; name: string }): void => {\n if (params.name !== params.id) {\n throw new Error(`Subagent ${params.tool} frontmatter name mismatch: ${params.id} != ${params.name}`);\n }\n};\n\nexport const loadSubagentCatalog = (subagentsDir: string): SubagentCatalog =>\n SubagentCatalogSchema.parse(JSON.parse(readFileSync(resolve(subagentsDir, 'subagent-registry.json'), 'utf-8')));\n\nexport const loadIntegrationCatalog = (integrationsDir: string): IntegrationCatalog =>\n IntegrationCatalogSchema.parse(\n JSON.parse(readFileSync(resolve(integrationsDir, 'integration-registry.json'), 'utf-8')),\n );\n\nexport const loadAllIntegrations = (integrationsDir: string): IntegrationCatalogEntry[] =>\n [...loadIntegrationCatalog(integrationsDir).integrations].sort((a, b) => a.id.localeCompare(b.id));\n\nexport const loadAllSubagents = (subagentsDir: string): Subagent[] => {\n const catalog = loadSubagentCatalog(subagentsDir);\n const entries = [...catalog.subagents].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n const directory = resolve(subagentsDir, entry.source_path);\n const prompt = readRequiredTextFile(join(directory, 'PROMPT.md'));\n const claudeRaw = readRequiredTextFile(join(directory, 'claude.frontmatter.yaml'));\n const codexRaw = readRequiredTextFile(join(directory, 'codex.frontmatter.toml'));\n const geminiRaw = readRequiredTextFile(join(directory, 'gemini.frontmatter.yaml'));\n const claude = SubagentMarkdownFrontmatterSchema.parse(parse(claudeRaw));\n const codex = CodexSubagentFrontmatterSchema.parse(parseFlatToml(codexRaw));\n const gemini = SubagentMarkdownFrontmatterSchema.parse(parse(geminiRaw));\n\n assertSubagentFrontmatterName({ id: entry.id, tool: 'claude', name: claude.name });\n assertSubagentFrontmatterName({ id: entry.id, tool: 'codex', name: codex.name });\n assertSubagentFrontmatterName({ id: entry.id, tool: 'gemini', name: gemini.name });\n\n return {\n id: entry.id,\n supported_tools: [...entry.supported_tools],\n source_path: entry.source_path,\n directory,\n prompt,\n frontmatter: {\n claude: {\n raw: claudeRaw,\n parsed: claude,\n },\n codex: {\n raw: codexRaw,\n parsed: codex,\n },\n gemini: {\n raw: geminiRaw,\n parsed: gemini,\n },\n },\n };\n });\n};\n","import { parse } from 'yaml';\n\nexport const parseMarkdownFrontmatter = (content: string): { frontmatter: unknown; body: string } => {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---\\n?/);\n if (!match) {\n throw new Error('Missing YAML frontmatter');\n }\n\n return {\n frontmatter: parse(match[1]),\n body: content.slice(match[0].length),\n };\n};\n","type TomlPrimitive = string | number | boolean | string[];\n\nconst parseTomlValue = (value: string): TomlPrimitive => {\n const trimmed = value.trim();\n\n if (trimmed.startsWith('\"') || trimmed.startsWith('[')) {\n const parsed = JSON.parse(trimmed) as unknown;\n if (typeof parsed === 'string') {\n return parsed;\n }\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string')) {\n return parsed;\n }\n throw new Error(`Unsupported TOML value: ${value}`);\n }\n\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n\n const numericValue = Number(trimmed);\n if (Number.isFinite(numericValue)) {\n return numericValue;\n }\n\n throw new Error(`Unsupported TOML value: ${value}`);\n};\n\nexport const parseFlatToml = (content: string): Record<string, TomlPrimitive> => {\n const result: Record<string, TomlPrimitive> = {};\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0 || trimmed.startsWith('#')) {\n continue;\n }\n\n const match = trimmed.match(/^([A-Za-z0-9_-]+)\\s*=\\s*(.+)$/);\n if (!match) {\n throw new Error(`Unsupported TOML line: ${line}`);\n }\n\n const [, key, value] = match;\n result[key] = parseTomlValue(value);\n }\n\n return result;\n};\n\nconst renderTomlValue = (value: TomlPrimitive): string => {\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return `[${value.map((item) => JSON.stringify(item)).join(', ')}]`;\n};\n\nexport const renderFlatToml = (entries: readonly [string, TomlPrimitive][]): string =>\n entries.map(([key, value]) => `${key} = ${renderTomlValue(value)}`).join('\\n');\n","import { createHash } from 'node:crypto';\nimport { readFileSync, readdirSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { InstalledSkill } from '@/core/schemas/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// dist/bin/index.js(bundle) 기준: ../../package.json = apps/cli/package.json\nexport const getCliVersion = (): string => {\n try {\n const pkgPath = resolve(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n return 'unknown';\n }\n};\n\n// 문자열 배열 → SHA-256 → 6-hex (caller가 정렬 책임)\nexport const computeHash = (contents: readonly string[]): string =>\n createHash('sha256').update(contents.join('')).digest('hex').slice(0, 6);\n\nconst loadDirectoryContents = (baseDir: string): string[] => {\n const contents: string[] = [];\n\n const walk = (relativeDir = ''): void => {\n const absDir = relativeDir.length > 0 ? join(baseDir, relativeDir) : baseDir;\n const entries = readdirSync(absDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n contents.push(`${nextRelativePath}:${readFileSync(join(baseDir, nextRelativePath), 'utf-8')}`);\n }\n };\n\n walk();\n return contents;\n};\n\n// compiler data 전체(context-layer, skills, packs, subagents) 해시\nexport const computeSourceHash = (dataDir: string): string => {\n return computeHash(loadDirectoryContents(resolve(dataDir)));\n};\n\nexport const computeInstalledSkillHash = (params: {\n kind: InstalledSkill['kind'];\n description: string;\n tools: readonly string[];\n files: readonly string[];\n}): string => computeHash([params.kind, params.description, ...[...params.tools].sort(), ...[...params.files].sort()]);\n\nexport const computeInstalledSubagentHash = (params: {\n id: string;\n tools: readonly string[];\n prompt: string;\n metadataFiles: readonly string[];\n}): string => computeHash([params.id, params.prompt, ...[...params.tools].sort(), ...[...params.metadataFiles].sort()]);\n","import { join } from 'node:path';\nimport { computeInstalledSkillHash } from '@/shared/source-hash.js';\nimport type { InstalledSkill, Skill, ToolId } from '@/core/schemas/index.js';\n\nconst AGENT_SKILLS_DIR = '.agents/skills';\nconst CLAUDE_SKILLS_DIR = '.claude/skills';\n\ntype SkillPackageFile = {\n relativePath: string;\n content: string;\n};\n\nexport type SkillPackage = {\n skillId: string;\n rootDir: string;\n files: SkillPackageFile[];\n};\n\nconst buildRootDirs = (skillId: string, toolIds: readonly ToolId[]): string[] => {\n const dirs: string[] = [];\n if (toolIds.some((toolId) => toolId === 'codex' || toolId === 'gemini')) {\n dirs.push(join(AGENT_SKILLS_DIR, skillId));\n }\n if (toolIds.includes('claude-code')) {\n dirs.push(join(CLAUDE_SKILLS_DIR, skillId));\n }\n return dirs;\n};\n\nconst normalizeSelectedTools = (skill: Skill, requestedTools: readonly ToolId[]): ToolId[] => {\n const supportedToolSet = new Set(skill.supported_tools);\n return requestedTools.filter((toolId) => supportedToolSet.has(toolId));\n};\n\nexport const buildSkillInstallPlan = (params: {\n skill: Skill;\n requestedTools: readonly ToolId[];\n}): { packages: SkillPackage[]; installedSkill: InstalledSkill } => {\n const selectedTools = normalizeSelectedTools(params.skill, params.requestedTools);\n if (selectedTools.length === 0) {\n throw new Error(`Skill ${params.skill.id} does not support the requested tools`);\n }\n\n const rootDirs = buildRootDirs(params.skill.id, selectedTools);\n const skillHash = computeInstalledSkillHash({\n kind: params.skill.kind,\n description: params.skill.description,\n tools: selectedTools,\n files: params.skill.files.map((file) => `${file.path}:${file.content}`),\n });\n\n const packages = rootDirs.map((rootDir) => {\n const files: SkillPackageFile[] = params.skill.files.map((file) => ({\n relativePath: join(rootDir, file.path),\n content: file.content,\n }));\n\n return {\n skillId: params.skill.id,\n rootDir,\n files,\n };\n });\n\n return {\n packages,\n installedSkill: {\n id: params.skill.id,\n kind: params.skill.kind,\n tools: selectedTools,\n installed_paths: rootDirs,\n sourceHash: skillHash,\n },\n };\n};\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { SkillRegistrySchema } from '@/core/schemas/index.js';\nimport type { SkillRegistry } from '@/core/schemas/index.js';\n\nexport const SKILL_REGISTRY_FILENAME = 'skills-manifest.json';\n\nconst LEGACY_SKILL_ID_MAP = {\n 'engineering-standards-pack': 'backend-service-standards',\n} as const;\n\nexport const resolveCanonicalSkillId = (skillId: string): string =>\n LEGACY_SKILL_ID_MAP[skillId as keyof typeof LEGACY_SKILL_ID_MAP] ?? skillId;\n\nexport const parseSkillRegistry = (json: string): SkillRegistry => SkillRegistrySchema.parse(JSON.parse(json));\n\nexport const serializeSkillRegistry = (registry: SkillRegistry): string => JSON.stringify(registry, null, 2) + '\\n';\n\nexport const resolveSkillRegistryPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', SKILL_REGISTRY_FILENAME);\n\nexport const readSkillRegistry = (registryPath: string): SkillRegistry | null => {\n let raw: string;\n try {\n raw = readFileSync(registryPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseSkillRegistry(raw);\n};\n\nexport const writeSkillRegistry = (registryPath: string, registry: SkillRegistry): void => {\n mkdirSync(dirname(registryPath), { recursive: true });\n writeFileSync(registryPath, serializeSkillRegistry(registry), 'utf-8');\n};\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport type { SkillPackage } from './renderer.js';\n\nexport const installSkillPackages = (basePath: string, packages: readonly SkillPackage[]): string[] => {\n const writtenRoots: string[] = [];\n\n for (const skillPackage of packages) {\n const absRoot = resolve(basePath, skillPackage.rootDir);\n if (existsSync(absRoot)) {\n rmSync(absRoot, { recursive: true, force: true });\n }\n\n for (const file of skillPackage.files) {\n const absPath = resolve(basePath, file.relativePath);\n mkdirSync(dirname(absPath), { recursive: true });\n writeFileSync(absPath, file.content + '\\n', 'utf-8');\n }\n\n writtenRoots.push(skillPackage.rootDir);\n }\n\n return writtenRoots;\n};\n\nexport const removeDirectories = (basePath: string, relativeDirs: readonly string[]): string[] => {\n const removed: string[] = [];\n\n for (const relativeDir of relativeDirs) {\n const absPath = resolve(basePath, relativeDir);\n if (!existsSync(absPath)) continue;\n rmSync(absPath, { recursive: true, force: true });\n removed.push(relativeDir);\n }\n\n return removed;\n};\n","import type { InstalledSkill, ToolId } from '@/core/schemas/index.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { resolveCanonicalSkillId } from './registry-io.js';\n\nexport const resolveRequestedTools = (params: {\n requested?: readonly string[];\n supported: readonly string[];\n}): ToolId[] => {\n if (params.requested === undefined || params.requested.length === 0) {\n return [...params.supported] as ToolId[];\n }\n\n const supportedSet = new Set(params.supported);\n const invalid = params.requested.filter((tool) => !supportedSet.has(tool));\n if (invalid.length > 0) {\n throw new Error(`Unsupported tools requested: ${invalid.join(', ')}`);\n }\n\n return [...params.requested] as ToolId[];\n};\n\nconst TOOL_ORDER = [SKILL_TOOL.CLAUDE_CODE, SKILL_TOOL.CODEX, SKILL_TOOL.GEMINI] as const;\n\nexport const mergeSkillTools = (params: { existing?: readonly string[]; requested: readonly ToolId[] }): ToolId[] => {\n const merged = new Set([...(params.existing ?? []), ...params.requested]);\n return TOOL_ORDER.filter((tool) => merged.has(tool));\n};\n\nexport const subtractSkillTools = (params: {\n requested: readonly ToolId[];\n installed?: readonly string[];\n}): ToolId[] => {\n const installed = new Set(params.installed ?? []);\n return params.requested.filter((tool) => !installed.has(tool));\n};\n\nexport const upsertInstalledSkill = (\n installedSkills: readonly InstalledSkill[],\n nextSkill: InstalledSkill,\n): InstalledSkill[] => {\n const nextSkillId = resolveCanonicalSkillId(nextSkill.id);\n const remaining = installedSkills.filter((skill) => resolveCanonicalSkillId(skill.id) !== nextSkillId);\n return [...remaining, nextSkill];\n};\n\nexport const removeInstalledSkill = (installedSkills: readonly InstalledSkill[], skillId: string): InstalledSkill[] => {\n const targetSkillId = resolveCanonicalSkillId(skillId);\n return installedSkills.filter((skill) => resolveCanonicalSkillId(skill.id) !== targetSkillId);\n};\n\nexport const findInstalledSkill = (\n installedSkills: readonly InstalledSkill[],\n skillId: string,\n): InstalledSkill | undefined => {\n const targetSkillId = resolveCanonicalSkillId(skillId);\n return installedSkills.find((skill) => resolveCanonicalSkillId(skill.id) === targetSkillId);\n};\n","import { join } from 'node:path';\nimport { COMPILER_DATA_DIR } from './paths.js';\n\nexport const resolveCompilerDataDir = (): string => COMPILER_DATA_DIR;\n\nexport const resolveSkillsDir = (): string => join(COMPILER_DATA_DIR, 'skills');\n\nexport const resolveSubagentsDir = (): string => join(COMPILER_DATA_DIR, 'subagents');\n\nexport const resolvePacksDir = (): string => join(COMPILER_DATA_DIR, 'packs');\n\nexport const resolveIntegrationsDir = (): string => join(COMPILER_DATA_DIR, 'integrations');\n\nexport const resolveReferenceSkillsDir = (): string => join(resolveSkillsDir(), 'reference-skills');\n\nexport const resolveTaskSkillsDir = (): string => join(resolveSkillsDir(), 'task-skills');\n\nexport const resolveSkillCatalogPath = (): string => join(resolveSkillsDir(), 'skill-registry.json');\n\nexport const resolveIntegrationCatalogPath = (): string => join(resolveIntegrationsDir(), 'integration-registry.json');\n\n// project-only 설치 기준 디렉토리\nexport const resolveBasePath = (): string => process.cwd();\n\nexport const resolveUserBasePath = (): string => {\n const userBasePath = process.env.AI_OPS_HOME ?? process.env.HOME;\n if (!userBasePath) {\n throw new Error('AI_OPS_HOME or HOME is required for user/global component commands');\n }\n return userBasePath;\n};\n","import { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n// src/core/* 또는 dist/bin/index.js 기준에서도 공통으로 패키지 루트/data를 가리키도록 계산\n// src/core/paths.ts → ../../data = apps/cli/data\n// dist/bin/index.js (bundle) → ../../data = apps/cli/data\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport const COMPILER_DATA_DIR = resolve(__dirname, '..', '..', 'data');\n","import type { Command } from 'commander';\nimport { codexHookInstallCommand, codexHookStatusCommand, codexHookUninstallCommand } from './commands.js';\n\nexport const registerCodexHookCommands = (program: Command): void => {\n const command = program.command('codex-hook').description('Codex hooks 설정 관리');\n\n command\n .command('install <hookId>')\n .description('Codex hook 설치')\n .option('--command <command>', 'hook에 저장할 context-promotion 실행 명령')\n .action((hookId, opts: { command?: string }) => codexHookInstallCommand(hookId, opts));\n command.command('status <hookId>').description('Codex hook 설치 상태 확인').action((hookId) => codexHookStatusCommand(hookId));\n command.command('uninstall <hookId>').description('Codex hook 제거').action((hookId) => codexHookUninstallCommand(hookId));\n};\n","import * as p from '@clack/prompts';\nimport {\n CODEX_PERMISSION_PROFILE,\n inspectCodexSafePermissions,\n installCodexSafePermissions,\n uninstallCodexSafePermissions,\n} from './core.js';\nimport type { CodexPermissionProfile, CodexSafePermissionFileStatus, CodexSafePermissionStatus } from './core.js';\nimport { resolveUserBasePath } from '../../shared/command-paths.js';\n\nconst resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex permission commands');\n }\n return `${home}/.codex`;\n};\n\nconst resolveHomePath = (): string => {\n const home = process.env.HOME;\n if (!home) {\n throw new Error('HOME is required for Codex safe-local permissions');\n }\n return home;\n};\n\nconst resolvePersonalContextRoot = (): string => `${resolveHomePath()}/.personal-project-contexts`;\n\nconst assertCodexPermissionProfile = (profile: string): CodexPermissionProfile => {\n if (profile === CODEX_PERMISSION_PROFILE.SAFE_LOCAL) {\n return profile;\n }\n throw new Error(`Unknown Codex permission profile: ${profile}`);\n};\n\nconst reportCodexPermissionsError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nconst formatFileStatus = (label: string, status: CodexSafePermissionFileStatus): string =>\n [\n `${label}: ${status.installed ? 'installed' : 'not installed'}`,\n `path: ${status.path}`,\n `changed: ${status.changed ? 'yes' : 'no'}`,\n `conflict: ${status.conflict ?? 'none'}`,\n ].join('\\n');\n\nconst formatStatus = (status: CodexSafePermissionStatus): string =>\n [\n formatFileStatus('config', status.config),\n formatFileStatus('rules', status.rules),\n formatFileStatus('hook', status.hook),\n ].join('\\n\\n');\n\nconst statusHasConflict = (status: CodexSafePermissionStatus): boolean =>\n [status.config, status.rules, status.hook].some((fileStatus) => fileStatus.conflict !== null);\n\nconst resolveSafePermissionPaths = (): {\n codexHomePath: string;\n userBasePath: string;\n personalContextRoot: string;\n} => ({\n codexHomePath: resolveCodexHomePath(),\n userBasePath: resolveUserBasePath(),\n personalContextRoot: resolvePersonalContextRoot(),\n});\n\nexport const codexPermissionsInstallCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions install ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n const status = installCodexSafePermissions(resolveSafePermissionPaths());\n p.log.info(formatStatus(status));\n if (statusHasConflict(status)) {\n process.exitCode = 1;\n }\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions install 완료');\n};\n\nexport const codexPermissionsStatusCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions status ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n p.log.info(formatStatus(inspectCodexSafePermissions(resolveSafePermissionPaths())));\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions status 완료');\n};\n\nexport const codexPermissionsUninstallCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions uninstall ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n p.log.info(formatStatus(uninstallCodexSafePermissions(resolveSafePermissionPaths())));\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions uninstall 완료');\n};\n\nexport const codexPermissionsPermissionRequestHookCommand = async (profile: string): Promise<void> => {\n try {\n assertCodexPermissionProfile(profile);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n `${JSON.stringify({\n systemMessage: `ai-ops codex permission hook skipped: ${message}`,\n })}\\n`,\n );\n }\n};\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { CodexSafePermissionFileStatus } from \"./types.js\";\n\n// ----- shared helpers -----\n\nconst isNodeFileNotFoundError = (error: unknown): boolean => {\n if (!(error instanceof Error) || !('code' in error)) {\n return false;\n }\n return error.code === 'ENOENT';\n};\n\nexport const readTextFileOrEmpty = (filePath: string): string => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch (error) {\n if (isNodeFileNotFoundError(error)) {\n return '';\n }\n throw error;\n }\n};\n\nexport const writeTextFile = (filePath: string, content: string): void => {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, 'utf-8');\n};\n\nexport const isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const readJsonRecord = (filePath: string): Record<string, unknown> => {\n try {\n const parsed: unknown = JSON.parse(readFileSync(filePath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n throw new Error('hooks.json must contain a JSON object');\n }\n return parsed;\n } catch (error) {\n if (isNodeFileNotFoundError(error)) {\n return {};\n }\n throw error;\n }\n};\n\nexport const getArray = (record: Record<string, unknown>, key: string): unknown[] => {\n const existing = record[key];\n return Array.isArray(existing) ? existing : [];\n};\n\nconst escapeRegExp = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nexport const stripBlock = (content: string, start: string, end: string): string => {\n const pattern = new RegExp(`\\\\n?${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}\\\\n?`, 'g');\n return content.replace(pattern, '\\n').replace(/\\n{3,}/g, '\\n\\n').trimStart();\n};\n\nexport const hasBlock = (content: string, start: string, end: string): boolean => {\n const pattern = new RegExp(`${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}`);\n return pattern.test(content);\n};\n\nexport const replaceOrAppendBlock = (content: string, start: string, end: string, block: string): string => {\n const cleanBlock = block.endsWith('\\n') ? block : `${block}\\n`;\n const pattern = new RegExp(`${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}\\\\n?`, 'g');\n if (pattern.test(content)) {\n return content.replace(pattern, cleanBlock);\n }\n const separator = content.trim().length > 0 && !content.endsWith('\\n') ? '\\n\\n' : content.length > 0 ? '\\n' : '';\n return `${content}${separator}${cleanBlock}`;\n};\n\nexport const quoteTomlString = (value: string): string => JSON.stringify(value);\n\nexport const readActiveStringAssignment = (content: string, key: string): string | null => {\n for (const line of content.split('\\n')) {\n if (line.trimStart().startsWith('#')) {\n continue;\n }\n const match = new RegExp(`^\\\\s*${key}\\\\s*=\\\\s*[\"']([^\"']+)[\"']`).exec(line);\n if (match) {\n return match[1];\n }\n }\n return null;\n};\n\nexport const hasActiveTable = (content: string, tableName: string): boolean => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tableName)}\\\\]\\\\s*(?:#.*)?$`);\n return content.split('\\n').some((line) => !line.trimStart().startsWith('#') && tablePattern.test(line));\n};\n\nexport const hasActiveTablePrefix = (content: string, tablePrefix: string): boolean => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tablePrefix)}(?:\\\\.|\\\\])`);\n return content.split('\\n').some((line) => !line.trimStart().startsWith('#') && tablePattern.test(line));\n};\n\nexport const findTableRange = (lines: readonly string[], tableName: string): { start: number; end: number } | null => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tableName)}\\\\]\\\\s*(?:#.*)?$`);\n const start = lines.findIndex((line) => tablePattern.test(line));\n if (start < 0) {\n return null;\n }\n const nextTable = lines.findIndex((line, index) => index > start && /^\\s*\\[[^\\]]+\\]\\s*(?:#.*)?$/.test(line));\n return {\n start,\n end: nextTable < 0 ? lines.length : nextTable,\n };\n};\n\nexport const buildFileStatus = (params: {\n path: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n}): CodexSafePermissionFileStatus => ({\n path: params.path,\n installed: params.installed,\n changed: params.changed,\n conflict: params.conflict,\n});\n","import { join } from \"node:path\";\n\n// ----- types -----\n\nexport const CODEX_PERMISSION_PROFILE = {\n SAFE_LOCAL: 'safe-local',\n} as const;\n\nexport type CodexPermissionProfile = (typeof CODEX_PERMISSION_PROFILE)[keyof typeof CODEX_PERMISSION_PROFILE];\n\nexport type CodexSafePermissionPaths = {\n codexHomePath: string;\n userBasePath: string;\n personalContextRoot: string;\n};\n\nexport type CodexSafePermissionFileStatus = {\n path: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n};\n\nexport type CodexSafePermissionStatus = {\n config: CodexSafePermissionFileStatus;\n rules: CodexSafePermissionFileStatus;\n hook: CodexSafePermissionFileStatus;\n};\n\nexport type ConfigEditResult = {\n content: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n};\n\nexport type HookCleanupResult = {\n config: Record<string, unknown>;\n removed: boolean;\n};\n\n// ----- constants -----\n\nexport const SAFE_LOCAL_CODEX_PERMISSION_NAME = 'ai-ops-safe-local';\n\nexport const PROFILE_BLOCK_START = '# ai-ops:safe-permissions:profile:start';\nexport const PROFILE_BLOCK_END = '# ai-ops:safe-permissions:profile:end';\n\nexport const LEGACY_CONFIG_BLOCK_START = '# ai-ops:safe-permissions:config:start';\nexport const LEGACY_CONFIG_BLOCK_END = '# ai-ops:safe-permissions:config:end';\nexport const LEGACY_WRITABLE_ROOTS_BLOCK_START = '# ai-ops:safe-permissions:writable-roots:start';\nexport const LEGACY_WRITABLE_ROOTS_BLOCK_END = '# ai-ops:safe-permissions:writable-roots:end';\nexport const LEGACY_RULES_BLOCK_START = '# ai-ops:safe-permissions:start';\nexport const LEGACY_RULES_BLOCK_END = '# ai-ops:safe-permissions:end';\nexport const LEGACY_PERMISSION_HOOK_MARKER = 'codex-permissions hook permission-request safe-local';\n\nexport const PERMISSION_REQUEST_EVENT = 'PermissionRequest';\n\nexport const CONFIG_CONFLICT_SANDBOX =\n 'sandbox_mode/sandbox_workspace_write is active; safe-local v2 uses permission profiles and cannot mix with older sandbox settings';\nexport const CONFIG_CONFLICT_DEFAULT_PERMISSIONS =\n 'default_permissions is already set to another profile; safe-local v2 will not replace user-owned permission defaults';\nexport const CONFIG_CONFLICT_EXISTING_PROFILE =\n 'permissions.ai-ops-safe-local already exists outside the ai-ops managed block; safe-local v2 will not rewrite user-owned profile tables';\n\n// ----- filesystem paths -----\n\nexport const resolveCodexConfigPath = (codexHomePath: string): string => join(codexHomePath, 'config.toml');\n\nexport const resolveCodexRulesPath = (codexHomePath: string): string => join(codexHomePath, 'rules', 'default.rules');\n\nexport const resolveCodexHooksPathForPermissions = (codexHomePath: string): string => join(codexHomePath, 'hooks.json');\n","import type { CodexSafePermissionFileStatus, ConfigEditResult, HookCleanupResult } from \"./types.js\";\nimport { LEGACY_PERMISSION_HOOK_MARKER, LEGACY_RULES_BLOCK_END, LEGACY_RULES_BLOCK_START, PERMISSION_REQUEST_EVENT } from \"./types.js\";\nimport { buildFileStatus, getArray, hasBlock, isJsonRecord, readJsonRecord, stripBlock, writeTextFile } from \"./file-utils.js\";\n\n// ----- rules/default.rules legacy cleanup -----\n\nexport const cleanupLegacyRules = (content: string): ConfigEditResult => {\n const nextContent = stripBlock(content, LEGACY_RULES_BLOCK_START, LEGACY_RULES_BLOCK_END);\n return {\n content: nextContent,\n installed: true,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const inspectLegacyRules = (content: string): ConfigEditResult => ({\n content,\n installed: !hasBlock(content, LEGACY_RULES_BLOCK_START, LEGACY_RULES_BLOCK_END),\n changed: false,\n conflict: null,\n});\n\n// ----- hooks.json legacy cleanup -----\n\nconst handlerMatchesLegacySafeLocalPermissionHook = (handler: unknown): boolean =>\n isJsonRecord(handler) &&\n typeof handler.command === 'string' &&\n handler.command.includes(LEGACY_PERMISSION_HOOK_MARKER);\n\nconst configHasLegacySafeLocalPermissionHook = (config: Record<string, unknown>): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n return getArray(hooks, PERMISSION_REQUEST_EVENT).some(\n (group) => isJsonRecord(group) && getArray(group, 'hooks').some(handlerMatchesLegacySafeLocalPermissionHook),\n );\n};\n\nconst removeLegacySafeLocalPermissionHook = (config: Record<string, unknown>): HookCleanupResult => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return { config, removed: false };\n }\n\n const previousGroups = getArray(hooks, PERMISSION_REQUEST_EVENT);\n let removed = false;\n const nextGroups = previousGroups\n .map((group) => {\n if (!isJsonRecord(group)) {\n return group;\n }\n const previousHandlers = getArray(group, 'hooks');\n const nextHandlers = previousHandlers.filter((handler) => {\n const matches = handlerMatchesLegacySafeLocalPermissionHook(handler);\n if (matches) {\n removed = true;\n }\n return !matches;\n });\n if (nextHandlers.length === 0) {\n return null;\n }\n return {\n ...group,\n hooks: nextHandlers,\n };\n })\n .filter((group): group is Exclude<unknown, null> => group !== null);\n\n if (!removed) {\n return { config, removed: false };\n }\n\n if (nextGroups.length > 0) {\n hooks[PERMISSION_REQUEST_EVENT] = nextGroups;\n } else {\n delete hooks[PERMISSION_REQUEST_EVENT];\n }\n return { config, removed: true };\n};\n\nexport const cleanupLegacyHookConfig = (hooksPath: string): CodexSafePermissionFileStatus => {\n const config = readJsonRecord(hooksPath);\n const cleanup = removeLegacySafeLocalPermissionHook(config);\n if (cleanup.removed) {\n writeTextFile(hooksPath, `${JSON.stringify(cleanup.config, null, 2)}\\n`);\n }\n return buildFileStatus({\n path: hooksPath,\n installed: !configHasLegacySafeLocalPermissionHook(cleanup.config),\n changed: cleanup.removed,\n conflict: null,\n });\n};\n\nexport const inspectLegacyHookConfig = (hooksPath: string): CodexSafePermissionFileStatus => {\n const config = readJsonRecord(hooksPath);\n return buildFileStatus({\n path: hooksPath,\n installed: !configHasLegacySafeLocalPermissionHook(config),\n changed: false,\n conflict: null,\n });\n};\n","import { join } from \"node:path\";\nimport type { CodexSafePermissionPaths, ConfigEditResult } from \"./types.js\";\nimport { CONFIG_CONFLICT_DEFAULT_PERMISSIONS, CONFIG_CONFLICT_EXISTING_PROFILE, CONFIG_CONFLICT_SANDBOX, LEGACY_CONFIG_BLOCK_END, LEGACY_CONFIG_BLOCK_START, LEGACY_WRITABLE_ROOTS_BLOCK_END, LEGACY_WRITABLE_ROOTS_BLOCK_START, PROFILE_BLOCK_END, PROFILE_BLOCK_START, SAFE_LOCAL_CODEX_PERMISSION_NAME } from \"./types.js\";\nimport { findTableRange, hasActiveTable, hasActiveTablePrefix, quoteTomlString, readActiveStringAssignment, replaceOrAppendBlock, stripBlock } from \"./file-utils.js\";\n\n// ----- config.toml management -----\n\nconst buildPermissionProfileBlock = (paths: CodexSafePermissionPaths, includeDefaultPermissions: boolean): string =>\n [\n PROFILE_BLOCK_START,\n ...(includeDefaultPermissions ? [`default_permissions = ${quoteTomlString(SAFE_LOCAL_CODEX_PERMISSION_NAME)}`, ''] : []),\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}]`,\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.filesystem]`,\n 'glob_scan_max_depth = 3',\n '\":minimal\" = \"read\"',\n `${quoteTomlString(paths.personalContextRoot)} = \"write\"`,\n `${quoteTomlString(join(paths.userBasePath, '.ai-ops', 'context-promotion'))} = \"write\"`,\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.filesystem.\":project_roots\"]`,\n '\".\" = \"write\"',\n '\".git\" = \"read\"',\n '\".codex\" = \"read\"',\n '\".codex/plans\" = \"write\"',\n '\"**/*.env\" = \"none\"',\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.network]`,\n 'enabled = false',\n PROFILE_BLOCK_END,\n '',\n ].join('\\n');\n\nconst stripLegacySandboxModeBlock = (content: string): string =>\n stripBlock(content, LEGACY_CONFIG_BLOCK_START, LEGACY_CONFIG_BLOCK_END);\n\nconst removeLegacyManagedSandboxWorkspaceWriteTable = (content: string): string => {\n const lines = content.split('\\n');\n const tableRange = findTableRange(lines, 'sandbox_workspace_write');\n if (!tableRange) {\n return content;\n }\n\n const tableText = lines.slice(tableRange.start, tableRange.end).join('\\n');\n if (!tableText.includes(LEGACY_WRITABLE_ROOTS_BLOCK_START) || !tableText.includes(LEGACY_WRITABLE_ROOTS_BLOCK_END)) {\n return content;\n }\n\n const tableWithoutManagedRoots = stripBlock(\n tableText,\n ` ${LEGACY_WRITABLE_ROOTS_BLOCK_START}`,\n ` ${LEGACY_WRITABLE_ROOTS_BLOCK_END}`,\n );\n const residue = tableWithoutManagedRoots\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith('#'));\n const isOnlyManagedWritableRootsTable =\n residue.length === 3 &&\n residue[0] === '[sandbox_workspace_write]' &&\n residue[1] === 'writable_roots = [' &&\n residue[2] === ']';\n\n if (!isOnlyManagedWritableRootsTable) {\n return content;\n }\n\n const nextLines = [...lines.slice(0, tableRange.start), ...lines.slice(tableRange.end)];\n return `${nextLines.join('\\n').replace(/\\n{3,}/g, '\\n\\n').trimStart().trimEnd()}\\n`;\n};\n\nconst cleanupLegacySandboxConfig = (content: string): string =>\n removeLegacyManagedSandboxWorkspaceWriteTable(stripLegacySandboxModeBlock(content));\n\nexport const editConfigForInstall = (content: string, paths: CodexSafePermissionPaths): ConfigEditResult => {\n const withoutCurrentProfileBlock = stripBlock(content, PROFILE_BLOCK_START, PROFILE_BLOCK_END);\n const withoutLegacy = cleanupLegacySandboxConfig(withoutCurrentProfileBlock);\n const activeDefaultPermissions = readActiveStringAssignment(withoutLegacy, 'default_permissions');\n\n if (readActiveStringAssignment(withoutLegacy, 'sandbox_mode') || hasActiveTable(withoutLegacy, 'sandbox_workspace_write')) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_SANDBOX,\n };\n }\n\n if (activeDefaultPermissions && activeDefaultPermissions !== SAFE_LOCAL_CODEX_PERMISSION_NAME) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_DEFAULT_PERMISSIONS,\n };\n }\n\n if (hasActiveTablePrefix(withoutLegacy, `permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}`)) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_EXISTING_PROFILE,\n };\n }\n\n const nextContent = replaceOrAppendBlock(\n withoutLegacy,\n PROFILE_BLOCK_START,\n PROFILE_BLOCK_END,\n buildPermissionProfileBlock(paths, activeDefaultPermissions !== SAFE_LOCAL_CODEX_PERMISSION_NAME),\n );\n\n return {\n content: nextContent,\n installed: true,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const editConfigForUninstall = (content: string): ConfigEditResult => {\n const withoutProfile = stripBlock(content, PROFILE_BLOCK_START, PROFILE_BLOCK_END);\n const withoutLegacy = cleanupLegacySandboxConfig(withoutProfile);\n const nextContent = withoutLegacy.trim().length > 0 ? `${withoutLegacy.trimEnd()}\\n` : '';\n return {\n content: nextContent,\n installed: false,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const inspectConfig = (content: string, paths: CodexSafePermissionPaths): ConfigEditResult => {\n const edited = editConfigForInstall(content, paths);\n if (edited.conflict) {\n return edited;\n }\n return {\n content,\n installed: !edited.changed,\n changed: false,\n conflict: null,\n };\n};\n","import { readTextFileOrEmpty, buildFileStatus, writeTextFile } from \"./file-utils.js\";\nimport { cleanupLegacyHookConfig, cleanupLegacyRules, inspectLegacyHookConfig, inspectLegacyRules } from \"./legacy-cleanup.js\";\nimport { editConfigForInstall, editConfigForUninstall, inspectConfig } from \"./config.js\";\nimport { resolveCodexConfigPath, resolveCodexHooksPathForPermissions, resolveCodexRulesPath } from \"./types.js\";\nimport type { CodexSafePermissionPaths, CodexSafePermissionStatus } from \"./types.js\";\n\nexport * from \"./types.js\";\n\n// ----- public lifecycle -----\n\nexport const installCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n const configEdit = editConfigForInstall(readTextFileOrEmpty(configPath), paths);\n if (configEdit.conflict) {\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...inspectLegacyRules(readTextFileOrEmpty(rulesPath)) }),\n hook: inspectLegacyHookConfig(hooksPath),\n };\n }\n if (configEdit.changed) {\n writeTextFile(configPath, configEdit.content);\n }\n\n const rulesEdit = cleanupLegacyRules(readTextFileOrEmpty(rulesPath));\n if (rulesEdit.changed) {\n writeTextFile(rulesPath, rulesEdit.content);\n }\n\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...rulesEdit }),\n hook: cleanupLegacyHookConfig(hooksPath),\n };\n};\n\nexport const uninstallCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n const configEdit = editConfigForUninstall(readTextFileOrEmpty(configPath));\n if (configEdit.changed) {\n writeTextFile(configPath, configEdit.content);\n }\n\n const rulesEdit = cleanupLegacyRules(readTextFileOrEmpty(rulesPath));\n if (rulesEdit.changed) {\n writeTextFile(rulesPath, rulesEdit.content);\n }\n\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...rulesEdit }),\n hook: cleanupLegacyHookConfig(hooksPath),\n };\n};\n\nexport const inspectCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n return {\n config: buildFileStatus({ path: configPath, ...inspectConfig(readTextFileOrEmpty(configPath), paths) }),\n rules: buildFileStatus({ path: rulesPath, ...inspectLegacyRules(readTextFileOrEmpty(rulesPath)) }),\n hook: inspectLegacyHookConfig(hooksPath),\n };\n};\n","import type { Command } from 'commander';\nimport {\n codexPermissionsInstallCommand,\n codexPermissionsPermissionRequestHookCommand,\n codexPermissionsStatusCommand,\n codexPermissionsUninstallCommand,\n} from './commands.js';\n\nexport const registerCodexPermissionsCommands = (program: Command): void => {\n const command = program.command('codex-permissions').description('Codex safe permission 설정 관리');\n\n command.command('install <profile>').description('Codex safe permission profile 설치').action((profile) =>\n codexPermissionsInstallCommand(profile),\n );\n command.command('status <profile>').description('Codex safe permission profile 상태 확인').action((profile) =>\n codexPermissionsStatusCommand(profile),\n );\n command.command('uninstall <profile>').description('Codex safe permission profile 제거').action((profile) =>\n codexPermissionsUninstallCommand(profile),\n );\n\n const hookCommand = command.command('hook', { hidden: true }).description('Deprecated Codex permission hook 내부 명령');\n hookCommand\n .command('permission-request <profile>', { hidden: true })\n .description('Deprecated no-op Codex PermissionRequest hook entrypoint')\n .action((profile) => codexPermissionsPermissionRequestHookCommand(profile));\n};\n","import * as p from '@clack/prompts';\nimport {\n CONTEXT_PROMOTION_DECISION,\n CONTEXT_PROMOTION_SCOPE,\n evaluateContextPromotionPostToolUseHook,\n getContextPromotionStatus,\n pruneContextPromotionReceipts,\n readContextPromotionReceiptIndex,\n resolveContextPromotion,\n} from './core.js';\nimport type { ContextPromotionDecision, ContextPromotionScope } from './core.js';\nimport { resolveBasePath, resolveUserBasePath } from '../../shared/command-paths.js';\n\ntype ContextPromotionStatusOptions = {\n json?: boolean;\n};\n\ntype ContextPromotionResolveOptions = {\n decision?: string;\n summary?: string;\n scope?: string[];\n target?: string[];\n};\n\ntype ContextPromotionPruneOptions = {\n max?: string;\n};\n\nconst VALID_DECISIONS = [\n CONTEXT_PROMOTION_DECISION.PROMOTED,\n CONTEXT_PROMOTION_DECISION.NO_PROMOTION,\n] as const satisfies readonly ContextPromotionDecision[];\n\nconst VALID_SCOPES = [\n CONTEXT_PROMOTION_SCOPE.CORE,\n CONTEXT_PROMOTION_SCOPE.PROJECT_LOCAL,\n CONTEXT_PROMOTION_SCOPE.GLOBAL,\n] as const satisfies readonly ContextPromotionScope[];\n\nconst parseDecision = (decision: string | undefined): ContextPromotionDecision => {\n const parsed = VALID_DECISIONS.find((candidate) => candidate === decision);\n if (parsed) {\n return parsed;\n }\n throw new Error(`decision must be one of: ${VALID_DECISIONS.join(', ')}`);\n};\n\nconst parseScopes = (scopes: readonly string[] | undefined): ContextPromotionScope[] => {\n const requestedScopes = scopes ?? [];\n return requestedScopes.map((scope) => {\n const parsed = VALID_SCOPES.find((candidate) => candidate === scope);\n if (!parsed) {\n throw new Error(`scope must be one of: ${VALID_SCOPES.join(', ')}`);\n }\n return parsed;\n });\n};\n\nconst parseMax = (max: string | undefined): number => {\n if (max === undefined) {\n return 50;\n }\n const parsed = Number.parseInt(max, 10);\n if (!Number.isFinite(parsed) || parsed < 1) {\n throw new Error('max must be a positive integer');\n }\n return parsed;\n};\n\nconst readStdin = async (): Promise<string> =>\n new Promise((resolve, reject) => {\n let raw = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk: string) => {\n raw += chunk;\n });\n process.stdin.on('end', () => resolve(raw));\n process.stdin.on('error', reject);\n });\n\nconst reportContextPromotionError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const contextPromotionStatusCommand = async (opts: ContextPromotionStatusOptions): Promise<void> => {\n try {\n const status = getContextPromotionStatus({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n });\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(status, null, 2) + '\\n');\n return;\n }\n\n p.intro('ai-ops context-promotion status');\n p.log.info(\n [\n `git root: ${status.gitRoot ?? 'not found'}`,\n `context layer: ${status.hasContextLayer ? 'found' : 'not found'}`,\n `HEAD: ${status.commitHash ?? 'not available'}`,\n `fingerprint: ${status.fingerprint ?? 'not available'}`,\n `receipt: ${status.receipt ? 'found' : 'missing'}`,\n `receipt store: ${status.receiptIndexPath ?? 'not available'}`,\n ].join('\\n'),\n );\n p.outro('ai-ops context-promotion status 완료');\n } catch (error) {\n reportContextPromotionError(error);\n }\n};\n\nexport const contextPromotionResolveCommand = async (opts: ContextPromotionResolveOptions): Promise<void> => {\n p.intro('ai-ops context-promotion resolve');\n try {\n const nextStatus = resolveContextPromotion({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n input: {\n decision: parseDecision(opts.decision),\n summary: opts.summary ?? '',\n scopes: parseScopes(opts.scope),\n targets: opts.target ?? [],\n },\n });\n p.log.success(`receipt 기록 완료: ${nextStatus.commitHash ?? nextStatus.fingerprint ?? 'unknown'}`);\n } catch (error) {\n reportContextPromotionError(error);\n }\n p.outro('ai-ops context-promotion resolve 완료');\n};\n\nexport const contextPromotionPruneCommand = async (opts: ContextPromotionPruneOptions): Promise<void> => {\n p.intro('ai-ops context-promotion prune');\n try {\n const status = getContextPromotionStatus({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n });\n if (!status.receiptIndexPath) {\n p.log.warn('prune할 receipt store를 찾지 못했습니다.');\n p.outro('ai-ops context-promotion prune 완료');\n return;\n }\n\n const maxReceipts = parseMax(opts.max);\n const before = readContextPromotionReceiptIndex(status.receiptIndexPath)?.receipts.length ?? 0;\n const next = pruneContextPromotionReceipts({ indexPath: status.receiptIndexPath, maxReceipts });\n const after = next?.receipts.length ?? 0;\n p.log.success(`receipt prune 완료: ${before} -> ${after}`);\n } catch (error) {\n reportContextPromotionError(error);\n }\n p.outro('ai-ops context-promotion prune 완료');\n};\n\nexport const contextPromotionPreToolUseHookCommand = async (): Promise<void> => {\n await readStdin();\n};\n\nexport const contextPromotionPostToolUseHookCommand = async (): Promise<void> => {\n try {\n const raw = await readStdin();\n const hookInput = raw.trim().length > 0 ? JSON.parse(raw) : {};\n const output = evaluateContextPromotionPostToolUseHook({\n hookInput,\n userBasePath: resolveUserBasePath(),\n });\n if (output) {\n process.stdout.write(JSON.stringify(output) + '\\n');\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n JSON.stringify({\n systemMessage: `ai-ops context promotion hook skipped: ${message}`,\n }) + '\\n',\n );\n }\n};\n","import { z } from 'zod';\n\n// ----- types -----\n\nexport type SuccessfulGitCommitPostToolUse = {\n cwd: string;\n command: string;\n};\n\n// ----- schemas -----\n\nconst HookToolInputSchema = z\n .object({\n command: z.string().optional(),\n })\n .passthrough();\n\nconst ToolUseHookInputSchema = z\n .object({\n hook_event_name: z.string(),\n cwd: z.string(),\n tool_name: z.string().optional(),\n tool_input: z.unknown().optional(),\n tool_response: z.unknown().optional(),\n })\n .passthrough();\n\n// ----- git commit command detection -----\n\nconst SHELL_CONTROL_TOKENS = new Set(['&&', '||', ';', '|', '(', ')']);\nconst SHELL_SCRIPT_FLAGS = new Set(['-c', '-lc']);\nconst GIT_GLOBAL_OPTIONS_WITH_VALUE = new Set([\n '-C',\n '-c',\n '--git-dir',\n '--work-tree',\n '--namespace',\n '--config-env',\n '--exec-path',\n]);\n\nconst basename = (token: string): string => token.replace(/\\\\/g, '/').split('/').at(-1) ?? token;\n\nconst isAssignmentToken = (token: string): boolean => /^[A-Za-z_][A-Za-z0-9_]*=/.test(token);\n\nconst tokenizeShellLike = (command: string): string[] => {\n const tokens: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | null = null;\n\n const pushCurrent = (): void => {\n if (current.length > 0) {\n tokens.push(current);\n current = '';\n }\n };\n\n for (let index = 0; index < command.length; index += 1) {\n const char = command[index];\n const nextChar = command[index + 1];\n\n if (quote) {\n if (char === quote) {\n quote = null;\n continue;\n }\n current += char;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (/\\s/.test(char)) {\n pushCurrent();\n continue;\n }\n\n if ((char === '&' && nextChar === '&') || (char === '|' && nextChar === '|')) {\n pushCurrent();\n tokens.push(`${char}${nextChar}`);\n index += 1;\n continue;\n }\n\n if (char === ';' || char === '|' || char === '(' || char === ')') {\n pushCurrent();\n tokens.push(char);\n continue;\n }\n\n current += char;\n }\n\n pushCurrent();\n return tokens;\n};\n\nconst splitCommandSegments = (tokens: readonly string[]): string[][] => {\n const segments: string[][] = [];\n let current: string[] = [];\n\n for (const token of tokens) {\n if (SHELL_CONTROL_TOKENS.has(token)) {\n if (current.length > 0) {\n segments.push(current);\n current = [];\n }\n continue;\n }\n current.push(token);\n }\n\n if (current.length > 0) {\n segments.push(current);\n }\n\n return segments;\n};\n\nconst firstExecutableIndex = (segment: readonly string[]): number => {\n let index = 0;\n\n while (index < segment.length && isAssignmentToken(segment[index])) {\n index += 1;\n }\n\n if (segment[index] === 'env') {\n index += 1;\n while (index < segment.length && isAssignmentToken(segment[index])) {\n index += 1;\n }\n }\n\n if (segment[index] === 'command' || segment[index] === 'sudo') {\n index += 1;\n }\n\n return index;\n};\n\nconst segmentInvokesGitCommit = (segment: readonly string[]): boolean => {\n const executableIndex = firstExecutableIndex(segment);\n if (executableIndex >= segment.length || basename(segment[executableIndex]) !== 'git') {\n return false;\n }\n\n for (let index = executableIndex + 1; index < segment.length; index += 1) {\n const token = segment[index];\n if (GIT_GLOBAL_OPTIONS_WITH_VALUE.has(token)) {\n index += 1;\n continue;\n }\n if (token.startsWith('-')) {\n continue;\n }\n return token === 'commit';\n }\n\n return false;\n};\n\nconst segmentInvokesShellScriptWithGitCommit = (segment: readonly string[]): boolean => {\n const executableIndex = firstExecutableIndex(segment);\n const executable = segment[executableIndex];\n if (!executable || !['bash', 'sh', 'zsh'].includes(basename(executable))) {\n return false;\n }\n\n for (let index = executableIndex + 1; index < segment.length - 1; index += 1) {\n if (SHELL_SCRIPT_FLAGS.has(segment[index]) && isGitCommitCommand(segment[index + 1])) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const isGitCommitCommand = (command: string): boolean => {\n const segments = splitCommandSegments(tokenizeShellLike(command));\n return segments.some(\n (segment) => segmentInvokesGitCommit(segment) || segmentInvokesShellScriptWithGitCommit(segment),\n );\n};\n\n// ----- tool response success guard -----\n\nconst isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst numberField = (record: Record<string, unknown>, keys: readonly string[]): number | null => {\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'number') {\n return value;\n }\n }\n return null;\n};\n\nconst booleanField = (record: Record<string, unknown>, keys: readonly string[]): boolean | null => {\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'boolean') {\n return value;\n }\n }\n return null;\n};\n\nconst GIT_COMMIT_FAILURE_OUTPUT_PATTERNS = [\n /(^|\\n)\\s*fatal:/i,\n /(^|\\n)\\s*error:/i,\n /(^|\\n)\\s*nothing to commit\\b/i,\n /(^|\\n)\\s*no changes added to commit\\b/i,\n /(^|\\n).*aborting commit\\b/i,\n /(^|\\n).*commit failed\\b/i,\n /(^|\\n).*failed to .*commit\\b/i,\n /(^|\\n).*command failed\\b/i,\n /(^|\\n).*non-zero exit\\b/i,\n /(^|\\n).*exit (code|status)\\s+[1-9]\\d*\\b/i,\n /(^|\\n).*exited with code\\s+[1-9]\\d*\\b/i,\n /(^|\\n).*hook.*(failed|declined|error|exit(?:ed)? with code|non-zero)/i,\n] as const;\n\nconst GIT_COMMIT_SUCCESS_OUTPUT_PATTERN = /(^|\\n)\\[[^\\]\\n]+ [a-f0-9]{7,40}\\]/i;\n\nconst stringIndicatesGitCommitSuccess = (output: string): boolean => GIT_COMMIT_SUCCESS_OUTPUT_PATTERN.test(output);\n\nconst stringIndicatesGitCommitFailureOrSuccess = (output: string): boolean | null =>\n stringIndicatesGitCommitSuccess(output)\n ? false\n : GIT_COMMIT_FAILURE_OUTPUT_PATTERNS.some((pattern) => pattern.test(output))\n ? true\n : null;\n\nconst recordStringFieldsIndicateGitCommitFailure = (record: Record<string, unknown>): boolean =>\n ['message', 'output', 'stdout', 'stderr', 'error', 'combinedOutput'].some((key) => {\n const value = record[key];\n return typeof value === 'string' && stringIndicatesGitCommitFailureOrSuccess(value) === true;\n });\n\nconst toolResponseIndicatesFailure = (toolResponse: unknown): boolean => {\n if (typeof toolResponse === 'string') {\n return stringIndicatesGitCommitFailureOrSuccess(toolResponse) === true;\n }\n\n if (!isJsonRecord(toolResponse)) {\n return false;\n }\n\n const success = booleanField(toolResponse, ['success', 'ok']);\n if (success === false) {\n return true;\n }\n\n const exitCode = numberField(toolResponse, ['exit_code', 'exitCode', 'status', 'code']);\n if (exitCode !== null && exitCode !== 0) {\n return true;\n }\n\n return recordStringFieldsIndicateGitCommitFailure(toolResponse);\n};\n\nexport const parseSuccessfulGitCommitPostToolUseHook = (hookInput: unknown): SuccessfulGitCommitPostToolUse | null => {\n const parsed = ToolUseHookInputSchema.safeParse(hookInput);\n if (!parsed.success) {\n return null;\n }\n if (parsed.data.hook_event_name !== 'PostToolUse' || parsed.data.tool_name !== 'Bash') {\n return null;\n }\n\n const toolInput = HookToolInputSchema.safeParse(parsed.data.tool_input);\n const command = toolInput.success ? (toolInput.data.command ?? '') : '';\n if (!isGitCommitCommand(command) || toolResponseIndicatesFailure(parsed.data.tool_response)) {\n return null;\n }\n\n return {\n cwd: parsed.data.cwd,\n command,\n };\n};\n","import { z } from \"zod\";\n\n// ----- types -----\n\nexport const CONTEXT_PROMOTION_DECISION = {\n PROMOTED: 'promoted',\n NO_PROMOTION: 'no-promotion',\n} as const;\n\nexport const CONTEXT_PROMOTION_SCOPE = {\n CORE: 'core',\n PROJECT_LOCAL: 'project-local',\n GLOBAL: 'global',\n} as const;\n\nexport const ContextPromotionDecisionSchema = z.union([\n z.literal(CONTEXT_PROMOTION_DECISION.PROMOTED),\n z.literal(CONTEXT_PROMOTION_DECISION.NO_PROMOTION),\n]);\n\nexport const ContextPromotionScopeSchema = z.union([\n z.literal(CONTEXT_PROMOTION_SCOPE.CORE),\n z.literal(CONTEXT_PROMOTION_SCOPE.PROJECT_LOCAL),\n z.literal(CONTEXT_PROMOTION_SCOPE.GLOBAL),\n]);\n\nexport const ContextPromotionReceiptSchema = z\n .object({\n fingerprint: z.string().regex(/^[a-f0-9]{16}$/),\n commitHash: z\n .string()\n .regex(/^(NO_HEAD|[a-f0-9]{40})$/)\n .optional(),\n decision: ContextPromotionDecisionSchema,\n scopes: z.array(ContextPromotionScopeSchema),\n targets: z.array(z.string().min(1)),\n summary: z.string().min(1),\n resolvedAt: z.string().min(1),\n })\n .strict();\n\nexport const ContextPromotionReceiptIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-promotion-receipts'),\n projectKey: z.string().regex(/^[a-f0-9]{12}$/),\n projectRoot: z.string().min(1),\n receipts: z.array(ContextPromotionReceiptSchema),\n })\n .strict();\n\nexport type ContextPromotionDecision = z.infer<typeof ContextPromotionDecisionSchema>;\nexport type ContextPromotionScope = z.infer<typeof ContextPromotionScopeSchema>;\nexport type ContextPromotionReceipt = z.infer<typeof ContextPromotionReceiptSchema>;\nexport type ContextPromotionReceiptIndex = z.infer<typeof ContextPromotionReceiptIndexSchema>;\n\nexport type ContextPromotionProjectStatus = {\n cwd: string;\n gitRoot: string | null;\n hasContextLayer: boolean;\n projectKey: string | null;\n commitHash: string | null;\n fingerprint: string | null;\n receipt: ContextPromotionReceipt | null;\n receiptIndexPath: string | null;\n};\n\nexport type ContextPromotionResolveInput = {\n decision: ContextPromotionDecision;\n summary: string;\n scopes: readonly ContextPromotionScope[];\n targets: readonly string[];\n};\n\nexport type ContextPromotionPostToolUseHookOutput = {\n decision: 'block';\n reason: string;\n hookSpecificOutput: {\n hookEventName: 'PostToolUse';\n additionalContext: string;\n };\n};\n\n// ----- constants -----\n\nexport const RECEIPT_INDEX_FILENAME = 'receipts-index.json';\nexport const DEFAULT_PRUNE_MAX = 50;\n","import { createHash } from \"node:crypto\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// ----- hashing -----\n\nconst hashHex = (parts: readonly string[], length: number): string =>\n createHash('sha256').update(parts.join('\\0')).digest('hex').slice(0, length);\n\nexport const buildContextPromotionProjectKey = (gitRoot: string): string => hashHex([resolve(gitRoot)], 12);\n\n// ----- git helpers -----\n\nconst runGit = (cwd: string, args: readonly string[]): string =>\n execFileSync('git', [...args], {\n cwd,\n encoding: 'utf-8',\n maxBuffer: 20 * 1024 * 1024,\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n\nexport const resolveContextPromotionGitRoot = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--show-toplevel']).trim();\n } catch {\n return null;\n }\n};\n\nexport const readGitHead = (gitRoot: string): string => {\n try {\n return runGit(gitRoot, ['rev-parse', '--verify', 'HEAD']).trim();\n } catch {\n return 'NO_HEAD';\n }\n};\n\nconst readUntrackedFingerprintParts = (gitRoot: string): string[] => {\n const raw = runGit(gitRoot, ['ls-files', '--others', '--exclude-standard', '-z']);\n const paths = raw\n .split('\\0')\n .filter((path) => path.length > 0)\n .sort((a, b) => a.localeCompare(b));\n\n return paths.map((relativePath) => {\n const absolutePath = join(gitRoot, relativePath);\n try {\n const stat = statSync(absolutePath);\n if (!stat.isFile()) {\n return `${relativePath}:non-file`;\n }\n const content = readFileSync(absolutePath);\n return `${relativePath}:${createHash('sha256').update(content).digest('hex')}`;\n } catch {\n throw new Error(`Unable to read untracked path for context promotion fingerprint: ${relativePath}`);\n }\n });\n};\n\nconst readTrackedWorkingTreeFingerprintParts = (gitRoot: string): string[] => {\n const rawDiff = runGit(gitRoot, ['diff', '--raw', '-z']);\n const rawNames = runGit(gitRoot, ['diff', '--name-only', '-z']);\n const paths = rawNames\n .split('\\0')\n .filter((path) => path.length > 0)\n .sort((a, b) => a.localeCompare(b));\n\n return [\n `raw:${rawDiff}`,\n ...paths.map((relativePath) => {\n const absolutePath = join(gitRoot, relativePath);\n if (!existsSync(absolutePath)) {\n return `${relativePath}:deleted`;\n }\n\n const stat = statSync(absolutePath);\n if (!stat.isFile()) {\n return `${relativePath}:non-file`;\n }\n\n const content = readFileSync(absolutePath);\n return `${relativePath}:${createHash('sha256').update(content).digest('hex')}`;\n }),\n ];\n};\n\nconst readGitIndexFingerprintParts = (gitRoot: string): string[] => [\n `index:${runGit(gitRoot, ['ls-files', '-s', '-z'])}`,\n `staged-raw:${runGit(gitRoot, ['diff', '--cached', '--raw', '-z'])}`,\n];\n\nexport const computeContextPromotionFingerprint = (gitRoot: string): string =>\n hashHex(\n [\n `head:${readGitHead(gitRoot)}`,\n ...readGitIndexFingerprintParts(gitRoot),\n ...readTrackedWorkingTreeFingerprintParts(gitRoot).map((part) => `tracked-working-tree:${part}`),\n ...readUntrackedFingerprintParts(gitRoot).map((part) => `untracked:${part}`),\n ],\n 16,\n );\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { ContextPromotionReceiptIndexSchema, DEFAULT_PRUNE_MAX, RECEIPT_INDEX_FILENAME } from \"./types.js\";\nimport type { ContextPromotionReceipt, ContextPromotionReceiptIndex } from \"./types.js\";\n\n// ----- receipt storage -----\n\nexport const resolveContextPromotionReceiptIndexPath = (params: { userBasePath: string; projectKey: string }): string =>\n join(params.userBasePath, '.ai-ops', 'context-promotion', 'projects', params.projectKey, RECEIPT_INDEX_FILENAME);\n\nexport const parseContextPromotionReceiptIndex = (json: string): ContextPromotionReceiptIndex =>\n ContextPromotionReceiptIndexSchema.parse(JSON.parse(json));\n\nexport const serializeContextPromotionReceiptIndex = (index: ContextPromotionReceiptIndex): string =>\n JSON.stringify(index, null, 2) + '\\n';\n\nexport const readContextPromotionReceiptIndex = (indexPath: string): ContextPromotionReceiptIndex | null => {\n try {\n return parseContextPromotionReceiptIndex(readFileSync(indexPath, 'utf-8'));\n } catch {\n return null;\n }\n};\n\nconst writeContextPromotionReceiptIndex = (indexPath: string, index: ContextPromotionReceiptIndex): void => {\n mkdirSync(dirname(indexPath), { recursive: true });\n writeFileSync(indexPath, serializeContextPromotionReceiptIndex(index), 'utf-8');\n};\n\nexport const buildEmptyReceiptIndex = (params: { projectKey: string; projectRoot: string }): ContextPromotionReceiptIndex => ({\n schemaVersion: 1,\n kind: 'context-promotion-receipts',\n projectKey: params.projectKey,\n projectRoot: params.projectRoot,\n receipts: [],\n});\n\nconst sortReceiptsByResolvedAtDesc = (receipts: readonly ContextPromotionReceipt[]): ContextPromotionReceipt[] =>\n [...receipts].sort((a, b) => b.resolvedAt.localeCompare(a.resolvedAt));\n\nexport const findContextPromotionReceipt = (params: {\n index: ContextPromotionReceiptIndex | null;\n fingerprint: string;\n commitHash: string;\n}): ContextPromotionReceipt | null => {\n const receipts = params.index?.receipts ?? [];\n return (\n receipts.find((receipt) => receipt.commitHash === params.commitHash) ??\n receipts.find((receipt) => receipt.fingerprint === params.fingerprint) ??\n null\n );\n};\n\nexport const upsertContextPromotionReceipt = (params: {\n indexPath: string;\n projectKey: string;\n projectRoot: string;\n receipt: ContextPromotionReceipt;\n maxReceipts?: number;\n}): ContextPromotionReceiptIndex => {\n const previous = readContextPromotionReceiptIndex(params.indexPath);\n const index =\n previous?.projectKey === params.projectKey\n ? previous\n : buildEmptyReceiptIndex({ projectKey: params.projectKey, projectRoot: params.projectRoot });\n const remaining = index.receipts.filter((receipt) => {\n if (receipt.fingerprint === params.receipt.fingerprint) {\n return false;\n }\n if (params.receipt.commitHash && receipt.commitHash === params.receipt.commitHash) {\n return false;\n }\n return true;\n });\n const maxReceipts = params.maxReceipts ?? DEFAULT_PRUNE_MAX;\n const receipts = sortReceiptsByResolvedAtDesc([params.receipt, ...remaining]).slice(0, maxReceipts);\n const nextIndex = {\n ...index,\n projectRoot: params.projectRoot,\n receipts,\n };\n writeContextPromotionReceiptIndex(params.indexPath, nextIndex);\n return nextIndex;\n};\n\nexport const pruneContextPromotionReceipts = (params: {\n indexPath: string;\n maxReceipts: number;\n}): ContextPromotionReceiptIndex | null => {\n const index = readContextPromotionReceiptIndex(params.indexPath);\n if (!index) {\n return null;\n }\n\n const nextIndex = {\n ...index,\n receipts: sortReceiptsByResolvedAtDesc(index.receipts).slice(0, params.maxReceipts),\n };\n writeContextPromotionReceiptIndex(params.indexPath, nextIndex);\n return nextIndex;\n};\n","import { existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH } from '../project-layer/index.js';\nimport {\n buildContextPromotionProjectKey,\n computeContextPromotionFingerprint,\n readGitHead,\n resolveContextPromotionGitRoot,\n} from './git.js';\nimport {\n findContextPromotionReceipt,\n readContextPromotionReceiptIndex,\n resolveContextPromotionReceiptIndexPath,\n upsertContextPromotionReceipt,\n} from './receipts.js';\nimport { CONTEXT_PROMOTION_DECISION, ContextPromotionReceiptSchema } from './types.js';\nimport type { ContextPromotionProjectStatus, ContextPromotionReceipt, ContextPromotionResolveInput } from './types.js';\n\n// ----- status and resolve -----\n\nexport const hasContextPromotionLayer = (gitRoot: string): boolean =>\n existsSync(join(gitRoot, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH));\n\nexport const getContextPromotionStatus = (params: {\n cwd: string;\n userBasePath: string;\n}): ContextPromotionProjectStatus => {\n const cwd = resolve(params.cwd);\n const gitRoot = resolveContextPromotionGitRoot(cwd);\n if (!gitRoot) {\n return {\n cwd,\n gitRoot: null,\n hasContextLayer: false,\n projectKey: null,\n commitHash: null,\n fingerprint: null,\n receipt: null,\n receiptIndexPath: null,\n };\n }\n\n const hasContextLayer = hasContextPromotionLayer(gitRoot);\n const projectKey = buildContextPromotionProjectKey(gitRoot);\n const commitHash = readGitHead(gitRoot);\n const receiptIndexPath = resolveContextPromotionReceiptIndexPath({\n userBasePath: params.userBasePath,\n projectKey,\n });\n if (!hasContextLayer) {\n return {\n cwd,\n gitRoot,\n hasContextLayer,\n projectKey,\n commitHash,\n fingerprint: null,\n receipt: null,\n receiptIndexPath,\n };\n }\n\n const fingerprint = computeContextPromotionFingerprint(gitRoot);\n const index = readContextPromotionReceiptIndex(receiptIndexPath);\n\n return {\n cwd,\n gitRoot,\n hasContextLayer,\n projectKey,\n commitHash,\n fingerprint,\n receipt: findContextPromotionReceipt({ index, fingerprint, commitHash }),\n receiptIndexPath,\n };\n};\n\nexport const buildContextPromotionReceipt = (params: {\n fingerprint: string;\n commitHash: string;\n input: ContextPromotionResolveInput;\n resolvedAt?: string;\n}): ContextPromotionReceipt => {\n const summary = params.input.summary.trim();\n if (summary.length === 0) {\n throw new Error('summary is required');\n }\n\n if (params.input.decision === CONTEXT_PROMOTION_DECISION.PROMOTED && params.input.scopes.length === 0) {\n throw new Error('at least one scope is required for promoted decisions');\n }\n\n return ContextPromotionReceiptSchema.parse({\n fingerprint: params.fingerprint,\n commitHash: params.commitHash,\n decision: params.input.decision,\n scopes: [...params.input.scopes],\n targets: [...params.input.targets],\n summary,\n resolvedAt: params.resolvedAt ?? new Date().toISOString(),\n });\n};\n\nexport const resolveContextPromotion = (params: {\n cwd: string;\n userBasePath: string;\n input: ContextPromotionResolveInput;\n}): ContextPromotionProjectStatus => {\n const status = getContextPromotionStatus({ cwd: params.cwd, userBasePath: params.userBasePath });\n if (!status.gitRoot || !status.projectKey || !status.commitHash || !status.fingerprint || !status.receiptIndexPath) {\n throw new Error('git repository is required for context promotion receipts');\n }\n if (!status.hasContextLayer) {\n throw new Error('ai-ops context layer is required for context promotion receipts');\n }\n\n const receipt = buildContextPromotionReceipt({\n fingerprint: status.fingerprint,\n commitHash: status.commitHash,\n input: params.input,\n });\n upsertContextPromotionReceipt({\n indexPath: status.receiptIndexPath,\n projectKey: status.projectKey,\n projectRoot: status.gitRoot,\n receipt,\n });\n\n return getContextPromotionStatus({ cwd: params.cwd, userBasePath: params.userBasePath });\n};\n","import { join } from 'node:path';\nimport { COMPILER_DATA_DIR } from '@/shared/paths.js';\nimport type { ProjectLayerTool } from '@/core/schemas/index.js';\n\n// ----- constants -----\n\nexport const PROJECT_LAYER_MANIFEST_RELATIVE_PATH = '.ai-ops/manifest.json';\nexport const PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH = '.ai-ops/context-layer.json';\nexport const CUSTOM_PROJECT_RULES_DIR = 'docs/agent/project-rules';\n\nexport const CONTEXT_LAYER_DATA_DIR = join(COMPILER_DATA_DIR, 'context-layer');\n\nexport const TOOL_ORDER = ['codex', 'gemini', 'claude-code'] as const satisfies readonly ProjectLayerTool[];\n\nexport const DEFAULT_TOOLS = TOOL_ORDER;\n\nexport const TEMPLATE_PATHS = [\n 'AGENTS.md',\n 'GEMINI.md',\n 'CLAUDE.md',\n 'docs/agent/workflow.md',\n 'docs/agent/terminology.md',\n 'docs/agent/rules/00-agent-baseline.md',\n 'docs/agent/rules/routing-rules.md',\n 'docs/agent/rules/doc-update-rules.md',\n 'docs/agent/rules/stop-rules.md',\n 'docs/agent/checks/impact-checklist.md',\n 'docs/agent/maps/codebase-map.md',\n 'docs/business/terminology.md',\n 'docs/business/business-rules.md',\n 'docs/docs-status.md',\n] as const;\n\nexport const PROJECT_OWNED_PATHS = new Set<string>([\n 'docs/docs-status.md',\n 'docs/agent/maps/codebase-map.md',\n 'docs/business/terminology.md',\n 'docs/business/business-rules.md',\n]);\n\nexport const RESERVED_DOCUMENT_WARNINGS = [\n '판단 근거로 사용하지 마세요',\n 'Do not use this document as current decision-making evidence',\n] as const;\n","import { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { isSafeProjectLayerPath } from \"@/core/schemas/index.js\";\nimport { CONTEXT_LAYER_DATA_DIR, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\n\n// ----- path helpers -----\n\nexport const resolveProjectLayerManifestPath = (basePath: string): string =>\n join(basePath, PROJECT_LAYER_MANIFEST_RELATIVE_PATH);\n\nexport const resolveProjectLayerContextIndexPath = (basePath: string): string =>\n join(basePath, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH);\n\nexport const resolveTemplatePath = (relativePath: string): string => join(CONTEXT_LAYER_DATA_DIR, relativePath);\n\nexport const toRelativeDir = (relativePath: string): string => dirname(relativePath);\n\nexport const resolveProjectLayerFilePath = (basePath: string, relativePath: string): string => {\n if (!isSafeProjectLayerPath(relativePath)) {\n throw new Error(`Unsafe project layer path: ${relativePath}`);\n }\n\n const absoluteBasePath = resolve(basePath);\n const absolutePath = resolve(absoluteBasePath, relativePath);\n const relativeFromBase = relative(absoluteBasePath, absolutePath);\n\n if (relativeFromBase === '' || relativeFromBase.startsWith('..') || isAbsolute(relativeFromBase)) {\n throw new Error(`Unsafe project layer path: ${relativePath}`);\n }\n\n return absolutePath;\n};\n","import { ProjectLayerContextIndexSchema, ProjectLayerManifestSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\n\n// ----- parsing and serialization -----\n\nexport const parseProjectLayerManifest = (json: string): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse(JSON.parse(json));\n\nexport const serializeProjectLayerManifest = (manifest: ProjectLayerManifest): string =>\n JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const parseProjectLayerContextIndex = (json: string): ProjectLayerContextIndex =>\n ProjectLayerContextIndexSchema.parse(JSON.parse(json));\n\nexport const serializeProjectLayerContextIndex = (contextIndex: ProjectLayerContextIndex): string =>\n JSON.stringify(contextIndex, null, 2) + '\\n';\n","const MANAGED_MARKER = '<!-- managed by ai-ops -->';\nconst META_PATTERN = /^<!-- sourceHash: ([a-f0-9]{6}) \\| generatedAt: (.+) -->$/;\n\nconst SECTION_START = '<!-- ai-ops:start -->';\nconst SECTION_END = '<!-- ai-ops:end -->';\n\nexport const hasLegacyHeader = (content: string): boolean => content.includes(MANAGED_MARKER);\n\nexport const wrapWithSection = (content: string, meta: { sourceHash: string; generatedAt: string }): string => {\n const metaLine = `<!-- sourceHash: ${meta.sourceHash} | generatedAt: ${meta.generatedAt} -->`;\n return `${SECTION_START}\\n${metaLine}\\n\\n${content}\\n${SECTION_END}`;\n};\n\nexport const hasAiOpsSection = (content: string): boolean =>\n content.includes(SECTION_START) && content.includes(SECTION_END);\n\nexport const stripAiOpsSection = (content: string): string => {\n const startIdx = content.indexOf(SECTION_START);\n const endIdx = content.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return content;\n\n const before = content.slice(0, startIdx).trimEnd();\n const after = content.slice(endIdx + SECTION_END.length).trimStart();\n return before + (after ? '\\n\\n' + after : '') + '\\n';\n};\n\nexport const extractAiOpsSectionContent = (content: string): string | null => {\n const startIdx = content.indexOf(SECTION_START);\n const endIdx = content.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return null;\n\n const section = content.slice(startIdx + SECTION_START.length, endIdx).trim();\n const lines = section.split('\\n');\n const [, ...contentLines] = lines;\n return contentLines.join('\\n').trimStart();\n};\n\nexport const replaceAiOpsSection = (existing: string, newSection: string): string => {\n const startIdx = existing.indexOf(SECTION_START);\n const endIdx = existing.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return existing;\n\n const before = existing.slice(0, startIdx).trimEnd();\n const after = existing.slice(endIdx + SECTION_END.length).trimStart();\n\n // filter(Boolean)으로 빈 before/after 제거 → 불필요한 선행 \\n\\n 방지\n return [before, newSection, after].filter(Boolean).join('\\n\\n') + '\\n';\n};\n\nexport const parseAiOpsMeta = (content: string): { sourceHash: string; generatedAt: string } | null => {\n const startIdx = content.indexOf(SECTION_START);\n if (startIdx === -1) return null;\n\n const lines = content.slice(startIdx).split('\\n');\n // lines[0] = '<!-- ai-ops:start -->', lines[1] = meta line\n const metaLine = lines[1] ?? '';\n const match = META_PATTERN.exec(metaLine);\n if (!match) return null;\n\n return { sourceHash: match[1], generatedAt: match[2] };\n};\n","import { parseMarkdownFrontmatter } from \"@/shared/markdown/frontmatter.js\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { extractAiOpsSectionContent } from \"./managed-header.js\";\nimport { ProjectLayerFrontmatterSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerFrontmatter } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerDocumentReadResult } from \"./types.js\";\n\nexport const parseProjectLayerFrontmatter = (content: string): ProjectLayerFrontmatter => {\n const { frontmatter } = parseMarkdownFrontmatter(content);\n return ProjectLayerFrontmatterSchema.parse(frontmatter);\n};\n\nexport const parseProjectLayerDocument = (path: string, rawContent: string): ProjectLayerDocumentReadResult => {\n const managedContent = extractAiOpsSectionContent(rawContent);\n const content = managedContent ?? rawContent;\n const frontmatter = parseProjectLayerFrontmatter(content);\n\n return {\n path,\n status: frontmatter.status,\n layer: frontmatter.layer,\n owner: frontmatter.owner,\n read_when: frontmatter.read_when,\n update_when: frontmatter.update_when,\n contentHash: computeHash([content.trimEnd()]),\n content,\n };\n};\n","import { readFileSync } from \"node:fs\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { ProjectLayerToolSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerTool } from \"@/core/schemas/index.js\";\nimport { DEFAULT_TOOLS, PROJECT_OWNED_PATHS, RESERVED_DOCUMENT_WARNINGS, TEMPLATE_PATHS, TOOL_ORDER } from \"./constants.js\";\nimport { parseProjectLayerFrontmatter } from \"./document.logic.js\";\nimport { resolveTemplatePath } from \"./path.util.js\";\nimport type { ProjectLayerTemplateSpec } from \"./types.js\";\n\n// ----- template loading -----\n\nexport const resolveProjectLayerTools = (requestedTools?: readonly string[]): ProjectLayerTool[] => {\n if (requestedTools === undefined || requestedTools.length === 0) {\n return [...DEFAULT_TOOLS];\n }\n\n const parsedTools = requestedTools.map((tool) => ProjectLayerToolSchema.parse(tool));\n const toolSet = new Set(parsedTools);\n return TOOL_ORDER.filter((tool) => toolSet.has(tool));\n};\n\nconst shouldIncludeTemplate = (relativePath: string, tools: readonly ProjectLayerTool[]): boolean => {\n if (relativePath === 'GEMINI.md') return tools.includes('gemini');\n if (relativePath === 'CLAUDE.md') return tools.includes('claude-code');\n return true;\n};\n\nconst buildDocsStatusRows = (specs: readonly ProjectLayerTemplateSpec[]): string =>\n specs.map((spec) => `| ${spec.path} | ${spec.frontmatter.status} | ${spec.frontmatter.owner} |`).join('\\n');\n\nconst includesReservedDocumentWarning = (content: string): boolean =>\n RESERVED_DOCUMENT_WARNINGS.some((warning) => content.includes(warning));\n\nconst loadTemplateSpec = (relativePath: string, content: string): ProjectLayerTemplateSpec => {\n const frontmatter = parseProjectLayerFrontmatter(content);\n const ownership = PROJECT_OWNED_PATHS.has(relativePath) ? 'project' : 'managed';\n\n if (frontmatter.status === 'Reserved' && !includesReservedDocumentWarning(content)) {\n throw new Error(`Reserved template must include warning text: ${relativePath}`);\n }\n\n return {\n path: relativePath,\n content,\n ownership,\n frontmatter,\n contentHash: computeHash([content.trimEnd()]),\n };\n};\n\nexport const loadProjectLayerTemplateSpecs = (\n tools: readonly ProjectLayerTool[],\n): readonly ProjectLayerTemplateSpec[] => {\n const selectedPaths = TEMPLATE_PATHS.filter((relativePath) => shouldIncludeTemplate(relativePath, tools));\n const nonStatusSpecs = selectedPaths\n .filter((relativePath) => relativePath !== 'docs/docs-status.md')\n .map((relativePath) => loadTemplateSpec(relativePath, readFileSync(resolveTemplatePath(relativePath), 'utf-8')));\n\n const statusTemplate = readFileSync(resolveTemplatePath('docs/docs-status.md'), 'utf-8');\n const statusPlaceholderSpec = loadTemplateSpec('docs/docs-status.md', statusTemplate);\n const specsForStatus = [...nonStatusSpecs, statusPlaceholderSpec].sort((a, b) => a.path.localeCompare(b.path));\n const statusContent = statusTemplate.replace('{{documents_table}}', buildDocsStatusRows(specsForStatus));\n const statusSpec = loadTemplateSpec('docs/docs-status.md', statusContent);\n\n return [...nonStatusSpecs, statusSpec].sort((a, b) => a.path.localeCompare(b.path));\n};\n\nexport const computeProjectLayerSourceHash = (specs: readonly ProjectLayerTemplateSpec[]): string =>\n computeHash(specs.map((spec) => `${spec.path}:${spec.content}`));\n","import { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { ProjectLayerManifestSchema } from '@/core/schemas/index.js';\nimport type { ProjectLayerManifest, ProjectLayerProjectFile } from '@/core/schemas/index.js';\nimport { CUSTOM_PROJECT_RULES_DIR } from './constants.js';\nimport { parseProjectLayerDocument } from './document.logic.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\n\nconst isMarkdownPath = (path: string): boolean => path.endsWith('.md');\n\nconst hasMarkdownFrontmatter = (content: string): boolean => content.startsWith('---\\n');\n\nconst assertCustomProjectRuleContract = (params: { path: string; owner: string; layer: string }): void => {\n if (params.owner !== 'project') {\n throw new Error(`${params.path} owner는 project여야 합니다. 현재 값: ${params.owner}`);\n }\n\n if (params.layer !== 'agent') {\n throw new Error(`${params.path} layer는 agent여야 합니다. 현재 값: ${params.layer}`);\n }\n};\n\nexport const isCustomProjectRulePath = (path: string): boolean =>\n path.startsWith(`${CUSTOM_PROJECT_RULES_DIR}/`) && isMarkdownPath(path);\n\nconst collectMarkdownPaths = (params: { basePath: string; relativeDir: string }): string[] => {\n const absoluteDir = resolveProjectLayerFilePath(params.basePath, params.relativeDir);\n if (!existsSync(absoluteDir)) {\n return [];\n }\n\n return readdirSync(absoluteDir, { withFileTypes: true }).flatMap((entry) => {\n const relativePath = `${params.relativeDir}/${entry.name}`;\n if (entry.isDirectory()) {\n return collectMarkdownPaths({ basePath: params.basePath, relativeDir: relativePath });\n }\n\n return entry.isFile() && isMarkdownPath(relativePath) ? [relativePath] : [];\n });\n};\n\nexport const discoverCustomProjectRuleFiles = (basePath: string): ProjectLayerProjectFile[] =>\n collectMarkdownPaths({ basePath, relativeDir: CUSTOM_PROJECT_RULES_DIR })\n .sort((left, right) => left.localeCompare(right))\n .flatMap((path) => {\n const content = readFileSync(resolveProjectLayerFilePath(basePath, path), 'utf-8');\n if (!hasMarkdownFrontmatter(content)) {\n return [];\n }\n\n try {\n const document = parseProjectLayerDocument(path, content);\n assertCustomProjectRuleContract({\n path,\n owner: document.owner,\n layer: document.layer,\n });\n\n return [\n {\n path,\n templateHash: document.contentHash,\n created: false,\n },\n ];\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n throw new Error(`${path} frontmatter 파싱 실패: ${reason}`);\n }\n });\n\nexport const syncCustomProjectRuleFiles = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n}): ProjectLayerManifest => {\n const customFiles = discoverCustomProjectRuleFiles(params.basePath);\n const customPathSet = new Set(customFiles.map((file) => file.path));\n const projectFilesByPath = new Map<string, ProjectLayerProjectFile>();\n\n for (const file of params.manifest.project_files) {\n if (!isCustomProjectRulePath(file.path) || customPathSet.has(file.path)) {\n projectFilesByPath.set(file.path, file);\n }\n }\n\n for (const file of customFiles) {\n projectFilesByPath.set(file.path, file);\n }\n\n return ProjectLayerManifestSchema.parse({\n ...params.manifest,\n project_files: [...projectFilesByPath.values()].sort((left, right) => left.path.localeCompare(right.path)),\n });\n};\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { ProjectLayerContextIndexSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\nimport { parseProjectLayerContextIndex, parseProjectLayerManifest, serializeProjectLayerContextIndex, serializeProjectLayerManifest } from \"./serialization.js\";\nimport { parseProjectLayerDocument } from \"./document.logic.js\";\nimport { resolveProjectLayerContextIndexPath, resolveProjectLayerFilePath, resolveProjectLayerManifestPath } from \"./path.util.js\";\nimport { updateDocsStatusProjectFileRecord, updateDocsStatusTable } from \"./docs-status.logic.js\";\nimport { syncCustomProjectRuleFiles } from \"./custom-project-rules.js\";\n\n// ----- manifest and index I/O -----\n\nexport const readProjectLayerManifest = (basePath: string): ProjectLayerManifest | null => {\n try {\n return parseProjectLayerManifest(readFileSync(resolveProjectLayerManifestPath(basePath), 'utf-8'));\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n};\n\nexport const writeProjectLayerManifest = (basePath: string, manifest: ProjectLayerManifest): void => {\n const manifestPath = resolveProjectLayerManifestPath(basePath);\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeProjectLayerManifest(manifest), 'utf-8');\n};\n\nexport const readProjectLayerContextIndex = (basePath: string): ProjectLayerContextIndex | null => {\n try {\n return parseProjectLayerContextIndex(readFileSync(resolveProjectLayerContextIndexPath(basePath), 'utf-8'));\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n};\n\nexport const writeProjectLayerContextIndex = (basePath: string, contextIndex: ProjectLayerContextIndex): void => {\n const contextIndexPath = resolveProjectLayerContextIndexPath(basePath);\n mkdirSync(dirname(contextIndexPath), { recursive: true });\n writeFileSync(contextIndexPath, serializeProjectLayerContextIndex(contextIndex), 'utf-8');\n};\n\n// ----- install and update -----\n\nexport const buildContextIndexFromDisk = (params: {\n basePath: string;\n documentPaths: readonly string[];\n generatedAt: string;\n}): ProjectLayerContextIndex => {\n const documents = params.documentPaths.map((path) =>\n parseProjectLayerDocument(path, readFileSync(resolveProjectLayerFilePath(params.basePath, path), 'utf-8')),\n );\n\n return ProjectLayerContextIndexSchema.parse({\n schemaVersion: 1,\n kind: 'context-layer-index',\n documents: documents.map(({ content: _content, ...document }) => document),\n generatedAt: params.generatedAt,\n });\n};\n\nexport const computeProjectFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nexport const collectDocumentPathsFromManifest = (manifest: ProjectLayerManifest): string[] =>\n [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n ...manifest.packs.flatMap((pack) => pack.documents.map((file) => file.path)),\n ].sort();\n\nexport const refreshProjectLayerDerivedState = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n generatedAt: string;\n}): {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n} => {\n const manifestWithCustomRules = syncCustomProjectRuleFiles({\n basePath: params.basePath,\n manifest: params.manifest,\n });\n const documentPaths = collectDocumentPathsFromManifest(manifestWithCustomRules);\n const docsStatusHashes = updateDocsStatusTable(params.basePath, documentPaths);\n const manifest = updateDocsStatusProjectFileRecord({\n manifest: manifestWithCustomRules,\n beforeHash: docsStatusHashes.beforeHash,\n afterHash: docsStatusHashes.afterHash,\n });\n const contextIndex = buildContextIndexFromDisk({\n basePath: params.basePath,\n documentPaths,\n generatedAt: params.generatedAt,\n });\n\n writeProjectLayerContextIndex(params.basePath, contextIndex);\n\n return {\n manifest,\n contextIndex,\n };\n};\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport type { ProjectLayerManifest } from '@/core/schemas/index.js';\nimport { ProjectLayerManifestSchema } from '@/core/schemas/index.js';\nimport { computeHash } from '@/shared/source-hash.js';\nimport { parseProjectLayerDocument } from './document.logic.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\nimport type { DocsStatusEntry, DocsStatusTableBounds, ProjectLayerDocumentReadResult, ProjectLayerIssue } from './types.js';\n\nconst docsStatusIssue = (code: string, message: string): ProjectLayerIssue => ({\n level: 'error',\n code,\n message,\n});\n\nconst computeDocsStatusFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nconst parseMarkdownTableCells = (line: string): string[] | null => {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {\n return null;\n }\n\n return trimmed\n .slice(1, -1)\n .split('|')\n .map((cell) => cell.trim());\n};\n\nconst isDocsStatusHeaderLine = (line: string): boolean => {\n const cells = parseMarkdownTableCells(line);\n return (\n cells !== null &&\n cells.length === 3 &&\n cells[0] === 'path' &&\n cells[1] === 'status' &&\n cells[2] === 'owner'\n );\n};\n\nconst isMarkdownDividerCell = (cell: string): boolean => /^:?-{3,}:?$/.test(cell);\n\nconst isDocsStatusDividerLine = (line: string): boolean => {\n const cells = parseMarkdownTableCells(line);\n return cells !== null && cells.length === 3 && cells.every(isMarkdownDividerCell);\n};\n\nexport const findDocsStatusTableBounds = (lines: readonly string[]): DocsStatusTableBounds | null => {\n const headerIndex = lines.findIndex(isDocsStatusHeaderLine);\n const dividerIndex = headerIndex + 1;\n\n if (headerIndex < 0 || !isDocsStatusDividerLine(lines[dividerIndex] ?? '')) {\n return null;\n }\n\n let tableEndIndex = dividerIndex + 1;\n while (tableEndIndex < lines.length && parseMarkdownTableCells(lines[tableEndIndex] ?? '') !== null) {\n tableEndIndex += 1;\n }\n\n return { headerIndex, dividerIndex, tableEndIndex };\n};\n\nexport const parseDocsStatusEntries = (content: string): DocsStatusEntry[] => {\n const document = parseProjectLayerDocument('docs/docs-status.md', content);\n const lines = document.content.split('\\n');\n const tableBounds = findDocsStatusTableBounds(lines);\n if (tableBounds === null) {\n return [];\n }\n\n const rows = lines.slice(tableBounds.dividerIndex + 1, tableBounds.tableEndIndex);\n\n return rows.flatMap((line) => {\n const cells = parseMarkdownTableCells(line);\n if (cells === null || cells.length < 3) return [];\n\n return [\n {\n path: cells[0],\n status: cells[1],\n owner: cells[2],\n },\n ];\n });\n};\n\nexport const buildDocsStatusRowsFromDisk = (params: {\n basePath: string;\n documentPaths: readonly string[];\n}): string[] =>\n params.documentPaths.map((path) => {\n const document = parseProjectLayerDocument(path, readFileSync(resolveProjectLayerFilePath(params.basePath, path), 'utf-8'));\n return `| ${document.path} | ${document.status} | ${document.owner} |`;\n });\n\nexport const replaceDocsStatusRows = (content: string, rows: readonly string[]): string => {\n const lines = content.trimEnd().split('\\n');\n const tableBounds = findDocsStatusTableBounds(lines);\n\n if (tableBounds === null) {\n throw new Error('docs/docs-status.md table header not found');\n }\n\n return (\n [...lines.slice(0, tableBounds.dividerIndex + 1), ...rows, ...lines.slice(tableBounds.tableEndIndex)].join('\\n') +\n '\\n'\n );\n};\n\nexport const updateDocsStatusTable = (basePath: string, documentPaths: readonly string[]): { beforeHash: string; afterHash: string } => {\n const docsStatusPath = 'docs/docs-status.md';\n const absolutePath = resolveProjectLayerFilePath(basePath, docsStatusPath);\n const beforeHash = computeDocsStatusFileHash(basePath, docsStatusPath);\n const rows = buildDocsStatusRowsFromDisk({ basePath, documentPaths });\n const nextContent = replaceDocsStatusRows(readFileSync(absolutePath, 'utf-8'), rows);\n writeFileSync(absolutePath, nextContent, 'utf-8');\n\n return {\n beforeHash,\n afterHash: computeDocsStatusFileHash(basePath, docsStatusPath),\n };\n};\n\nexport const updateDocsStatusProjectFileRecord = (params: {\n manifest: ProjectLayerManifest;\n beforeHash: string;\n afterHash: string;\n}): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...params.manifest,\n project_files: params.manifest.project_files.map((file) => {\n if (file.path !== 'docs/docs-status.md' || !file.created || file.templateHash !== params.beforeHash) {\n return file;\n }\n\n return {\n ...file,\n templateHash: params.afterHash,\n };\n }),\n });\n\nexport const compareDocsStatusEntry = (params: {\n expected: ProjectLayerDocumentReadResult;\n entry: DocsStatusEntry | undefined;\n}): ProjectLayerIssue[] => {\n const entry = params.entry;\n if (entry === undefined) {\n return [docsStatusIssue('docs-status-missing-document', `docs-status 누락: ${params.expected.path}`)];\n }\n\n const issues: ProjectLayerIssue[] = [];\n if (entry.status !== params.expected.status) {\n issues.push(docsStatusIssue('docs-status-mismatch', `${params.expected.path} docs-status status 불일치`));\n }\n\n if (entry.owner !== params.expected.owner) {\n issues.push(docsStatusIssue('docs-status-mismatch', `${params.expected.path} docs-status owner 불일치`));\n }\n\n return issues;\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { computeHash, getCliVersion } from \"@/shared/source-hash.js\";\nimport { ProjectLayerManifestSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerManifest, ProjectLayerPackRecord, ProjectLayerProjectFile, ProjectLayerTool } from \"@/core/schemas/index.js\";\nimport { hasAiOpsSection, hasLegacyHeader, replaceAiOpsSection, stripAiOpsSection, wrapWithSection } from \"./managed-header.js\";\nimport { computeProjectLayerSourceHash, loadProjectLayerTemplateSpecs } from \"./templates.js\";\nimport { resolveProjectLayerFilePath } from \"./path.util.js\";\nimport { readProjectLayerManifest, refreshProjectLayerDerivedState, writeProjectLayerManifest } from \"./state-io.js\";\nimport { removeManagedProjectFile } from \"./uninstall.logic.js\";\nimport type { ManagedInstallResult, ProjectFileInstallResult, ProjectLayerInstallResult, ProjectLayerTemplateSpec } from \"./types.js\";\n\nconst installManagedFiles = (\n basePath: string,\n specs: readonly ProjectLayerTemplateSpec[],\n meta: { sourceHash: string; generatedAt: string },\n): ManagedInstallResult => {\n const written: string[] = [];\n const appended: string[] = [];\n\n for (const spec of specs) {\n const absolutePath = resolveProjectLayerFilePath(basePath, spec.path);\n const wrappedContent = wrapWithSection(spec.content, meta);\n\n if (!existsSync(absolutePath)) {\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, wrappedContent + '\\n', 'utf-8');\n written.push(spec.path);\n continue;\n }\n\n const existing = readFileSync(absolutePath, 'utf-8');\n if (hasAiOpsSection(existing)) {\n writeFileSync(absolutePath, replaceAiOpsSection(existing, wrappedContent), 'utf-8');\n const stripped = stripAiOpsSection(existing);\n (stripped.trim().length > 0 ? appended : written).push(spec.path);\n continue;\n }\n\n if (hasLegacyHeader(existing)) {\n writeFileSync(absolutePath, wrappedContent + '\\n', 'utf-8');\n written.push(spec.path);\n continue;\n }\n\n writeFileSync(absolutePath, existing.trimEnd() + '\\n\\n' + wrappedContent + '\\n', 'utf-8');\n appended.push(spec.path);\n }\n\n return { written, appended };\n};\n\nconst installProjectFiles = (params: {\n basePath: string;\n specs: readonly ProjectLayerTemplateSpec[];\n previousProjectFiles?: readonly ProjectLayerProjectFile[];\n}): ProjectFileInstallResult => {\n const records: ProjectLayerProjectFile[] = [];\n const created: string[] = [];\n const refreshed: string[] = [];\n const preserved: string[] = [];\n const previousByPath = new Map((params.previousProjectFiles ?? []).map((file) => [file.path, file]));\n\n for (const spec of params.specs) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, spec.path);\n const previous = previousByPath.get(spec.path);\n\n if (!existsSync(absolutePath)) {\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, spec.content + '\\n', 'utf-8');\n created.push(spec.path);\n records.push({\n path: spec.path,\n templateHash: spec.contentHash,\n created: true,\n });\n continue;\n }\n\n const existingContent = readFileSync(absolutePath, 'utf-8').trimEnd();\n const existingHash = computeHash([existingContent]);\n\n if (previous?.created === true && existingHash === previous.templateHash) {\n if (existingHash !== spec.contentHash) {\n writeFileSync(absolutePath, spec.content + '\\n', 'utf-8');\n refreshed.push(spec.path);\n } else {\n preserved.push(spec.path);\n }\n\n records.push({\n path: spec.path,\n templateHash: spec.contentHash,\n created: true,\n });\n continue;\n }\n\n preserved.push(spec.path);\n records.push({\n path: spec.path,\n templateHash: previous?.templateHash ?? spec.contentHash,\n created: previous?.created ?? false,\n });\n }\n\n return { records, created, refreshed, preserved };\n};\n\nconst buildProjectLayerManifest = (params: {\n tools: readonly ProjectLayerTool[];\n managedFiles: readonly string[];\n projectFiles: readonly ProjectLayerProjectFile[];\n packs: readonly ProjectLayerPackRecord[];\n sourceHash: string;\n cliVersion: string;\n generatedAt: string;\n settings?: Record<string, unknown>;\n}): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n schemaVersion: 1,\n kind: 'project-operating-layer',\n tools: [...params.tools],\n managed_files: params.managedFiles.map((path) => ({\n path,\n sourceHash: params.sourceHash,\n })),\n project_files: [...params.projectFiles],\n packs: [...params.packs],\n settings: params.settings ?? {},\n sourceHash: params.sourceHash,\n cliVersion: params.cliVersion,\n generatedAt: params.generatedAt,\n });\n\nconst retireUnselectedManagedFiles = (params: {\n basePath: string;\n previousManifest: ProjectLayerManifest | null;\n nextManagedPaths: readonly string[];\n}): void => {\n if (!params.previousManifest) return;\n\n const nextManagedPathSet = new Set(params.nextManagedPaths);\n for (const file of params.previousManifest.managed_files) {\n if (!nextManagedPathSet.has(file.path)) {\n removeManagedProjectFile(params.basePath, file.path);\n }\n }\n};\n\nexport const installProjectLayer = (params: {\n basePath: string;\n tools: readonly ProjectLayerTool[];\n previousManifest?: ProjectLayerManifest | null;\n}): ProjectLayerInstallResult => {\n const previousManifest =\n params.previousManifest === undefined ? readProjectLayerManifest(params.basePath) : params.previousManifest;\n const specs = loadProjectLayerTemplateSpecs(params.tools);\n const sourceHash = computeProjectLayerSourceHash(specs);\n const generatedAt = new Date().toISOString();\n const managedSpecs = specs.filter((spec) => spec.ownership === 'managed');\n const projectSpecs = specs.filter((spec) => spec.ownership === 'project');\n const managedPaths = managedSpecs.map((spec) => spec.path);\n retireUnselectedManagedFiles({\n basePath: params.basePath,\n previousManifest,\n nextManagedPaths: managedPaths,\n });\n const managedResult = installManagedFiles(params.basePath, managedSpecs, { sourceHash, generatedAt });\n const projectResult = installProjectFiles({\n basePath: params.basePath,\n specs: projectSpecs,\n previousProjectFiles: previousManifest?.project_files,\n });\n const provisionalManifest = buildProjectLayerManifest({\n tools: params.tools,\n managedFiles: managedPaths,\n projectFiles: projectResult.records,\n packs: previousManifest?.packs ?? [],\n sourceHash,\n cliVersion: getCliVersion(),\n generatedAt,\n settings: previousManifest?.settings,\n });\n const { manifest, contextIndex } = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: provisionalManifest,\n generatedAt,\n });\n\n writeProjectLayerManifest(params.basePath, manifest);\n\n return {\n manifest,\n contextIndex,\n written: managedResult.written,\n appended: managedResult.appended,\n createdProjectFiles: projectResult.created,\n refreshedProjectFiles: projectResult.refreshed,\n preservedProjectFiles: projectResult.preserved,\n };\n};\n\nexport const updateProjectLayer = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n}): ProjectLayerInstallResult => {\n const specs = loadProjectLayerTemplateSpecs(params.manifest.tools);\n const sourceHash = computeProjectLayerSourceHash(specs);\n const generatedAt = new Date().toISOString();\n const managedSpecs = specs.filter((spec) => spec.ownership === 'managed');\n const projectSpecs = specs.filter((spec) => spec.ownership === 'project');\n const managedResult = installManagedFiles(params.basePath, managedSpecs, { sourceHash, generatedAt });\n const projectResult = installProjectFiles({\n basePath: params.basePath,\n specs: projectSpecs,\n previousProjectFiles: params.manifest.project_files,\n });\n const provisionalManifest = buildProjectLayerManifest({\n tools: params.manifest.tools,\n managedFiles: managedSpecs.map((spec) => spec.path),\n projectFiles: projectResult.records,\n packs: params.manifest.packs,\n sourceHash,\n cliVersion: getCliVersion(),\n generatedAt,\n settings: params.manifest.settings,\n });\n const { manifest, contextIndex } = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: provisionalManifest,\n generatedAt,\n });\n\n writeProjectLayerManifest(params.basePath, manifest);\n\n return {\n manifest,\n contextIndex,\n written: managedResult.written,\n appended: managedResult.appended,\n createdProjectFiles: projectResult.created,\n refreshedProjectFiles: projectResult.refreshed,\n preservedProjectFiles: projectResult.preserved,\n };\n};\n","import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport type { ProjectLayerManifest, ProjectLayerPackFileRecord, ProjectLayerProjectFile } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\nimport { hasAiOpsSection, stripAiOpsSection } from \"./managed-header.js\";\nimport { resolveProjectLayerFilePath, toRelativeDir } from \"./path.util.js\";\nimport type { ProjectLayerRemoveResult } from \"./types.js\";\n\n// ----- uninstall -----\n\nexport function removeManagedProjectFile(basePath: string, relativePath: string): ProjectLayerRemoveResult {\n const absolutePath = resolveProjectLayerFilePath(basePath, relativePath);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [relativePath] };\n }\n\n const content = readFileSync(absolutePath, 'utf-8');\n if (!hasAiOpsSection(content)) {\n return { deleted: [], cleaned: [], preserved: [relativePath], notFound: [] };\n }\n\n const stripped = stripAiOpsSection(content);\n if (stripped.trim().length === 0) {\n rmSync(absolutePath);\n return { deleted: [relativePath], cleaned: [], preserved: [], notFound: [] };\n }\n\n writeFileSync(absolutePath, stripped, 'utf-8');\n return { deleted: [], cleaned: [relativePath], preserved: [], notFound: [] };\n}\n\nconst removeCreateOnlyProjectFile = (basePath: string, file: ProjectLayerProjectFile): ProjectLayerRemoveResult => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [file.path] };\n }\n\n const content = readFileSync(absolutePath, 'utf-8').trimEnd();\n const currentHash = computeHash([content]);\n if (file.created && currentHash === file.templateHash) {\n rmSync(absolutePath);\n return { deleted: [file.path], cleaned: [], preserved: [], notFound: [] };\n }\n\n return { deleted: [], cleaned: [], preserved: [file.path], notFound: [] };\n};\n\nconst removePackOwnedFile = (basePath: string, file: ProjectLayerPackFileRecord): ProjectLayerRemoveResult => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [file.path] };\n }\n\n const currentHash = computeHash([readFileSync(absolutePath, 'utf-8').trimEnd()]);\n if (currentHash === file.sourceHash) {\n rmSync(absolutePath);\n return { deleted: [file.path], cleaned: [], preserved: [], notFound: [] };\n }\n\n return { deleted: [], cleaned: [], preserved: [file.path], notFound: [] };\n};\n\nconst mergeRemoveResults = (results: readonly ProjectLayerRemoveResult[]): ProjectLayerRemoveResult => ({\n deleted: results.flatMap((result) => result.deleted),\n cleaned: results.flatMap((result) => result.cleaned),\n preserved: results.flatMap((result) => result.preserved),\n notFound: results.flatMap((result) => result.notFound),\n});\n\nconst removeEmptyDirs = (basePath: string, relativePaths: readonly string[]): void => {\n const dirs = [...new Set(relativePaths.map(toRelativeDir).filter((dir) => dir !== '.'))].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const dir of [...dirs, '.ai-ops']) {\n const absoluteDir = resolveProjectLayerFilePath(basePath, dir);\n if (!existsSync(absoluteDir)) continue;\n\n try {\n if (readdirSync(absoluteDir).length === 0) {\n rmSync(absoluteDir, { recursive: true });\n }\n } catch {\n // Ignore cleanup failures.\n }\n }\n};\n\nexport const uninstallProjectLayer = (basePath: string, manifest: ProjectLayerManifest): ProjectLayerRemoveResult => {\n const managedResults = manifest.managed_files.map((file) => removeManagedProjectFile(basePath, file.path));\n const projectResults = manifest.project_files.map((file) => removeCreateOnlyProjectFile(basePath, file));\n const packResults = manifest.packs.flatMap((pack) =>\n [...pack.documents, ...pack.files].map((file) => removePackOwnedFile(basePath, file)),\n );\n const stateFiles = [PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH];\n\n for (const stateFile of stateFiles) {\n rmSync(resolveProjectLayerFilePath(basePath, stateFile), { force: true });\n }\n\n const result = mergeRemoveResults([...managedResults, ...projectResults, ...packResults]);\n removeEmptyDirs(basePath, [...result.deleted, ...stateFiles]);\n return result;\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { parseAiOpsMeta } from \"./managed-header.js\";\nimport type { ProjectLayerContextDocument, ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\nimport { computeProjectLayerSourceHash, loadProjectLayerTemplateSpecs } from \"./templates.js\";\nimport { parseProjectLayerDocument } from \"./document.logic.js\";\nimport { resolveProjectLayerFilePath } from \"./path.util.js\";\nimport { collectDocumentPathsFromManifest, readProjectLayerContextIndex, readProjectLayerManifest } from \"./state-io.js\";\nimport { compareDocsStatusEntry, parseDocsStatusEntries } from \"./docs-status.logic.js\";\nimport { syncCustomProjectRuleFiles } from \"./custom-project-rules.js\";\nimport type {\n DocsStatusEntry,\n ProjectLayerDocumentReadResult,\n ProjectLayerIssue,\n ProjectLayerIssueLevel,\n ProjectLayerReport,\n} from './types.js';\n\n// ----- diff and audit -----\n\nexport const issue = (level: ProjectLayerIssueLevel, code: string, message: string): ProjectLayerIssue => ({\n level,\n code,\n message,\n});\n\nconst readDocumentSafely = (basePath: string, path: string): ProjectLayerDocumentReadResult | ProjectLayerIssue => {\n try {\n const absolutePath = resolveProjectLayerFilePath(basePath, path);\n if (!existsSync(absolutePath)) {\n return issue('error', 'missing-file', `파일 없음: ${path}`);\n }\n\n return parseProjectLayerDocument(path, readFileSync(absolutePath, 'utf-8'));\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n return issue('error', 'invalid-frontmatter', `${path} frontmatter 파싱 실패: ${reason}`);\n }\n};\n\nconst buildContextIndexMap = (contextIndex: ProjectLayerContextIndex | null): Map<string, ProjectLayerContextDocument> =>\n new Map((contextIndex?.documents ?? []).map((document) => [document.path, document]));\n\nconst compareArray = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((value, index) => value === right[index]);\n\nconst compareProjectFileRecords = (\n left: readonly ProjectLayerManifest['project_files'][number][],\n right: readonly ProjectLayerManifest['project_files'][number][],\n): boolean =>\n left.length === right.length &&\n left.every((file, index) => {\n const other = right[index];\n return other !== undefined && file.path === other.path && file.templateHash === other.templateHash && file.created === other.created;\n });\n\nexport const compareContextDocument = (params: {\n expected: ProjectLayerDocumentReadResult;\n indexed: ProjectLayerContextDocument | undefined;\n}): ProjectLayerIssue[] => {\n const indexed = params.indexed;\n if (indexed === undefined) {\n return [issue('error', 'context-missing-document', `context-layer 누락: ${params.expected.path}`)];\n }\n\n const issues: ProjectLayerIssue[] = [];\n const scalarKeys = ['status', 'layer', 'owner', 'contentHash'] as const;\n\n for (const key of scalarKeys) {\n if (params.expected[key] !== indexed[key]) {\n issues.push(\n issue('error', 'context-document-mismatch', `${params.expected.path} context ${key} 불일치`),\n );\n }\n }\n\n if (!compareArray(params.expected.read_when, indexed.read_when)) {\n issues.push(issue('error', 'context-document-mismatch', `${params.expected.path} context read_when 불일치`));\n }\n\n if (!compareArray(params.expected.update_when, indexed.update_when)) {\n issues.push(issue('error', 'context-document-mismatch', `${params.expected.path} context update_when 불일치`));\n }\n\n return issues;\n};\n\nexport const diffProjectLayer = (basePath: string): ProjectLayerReport => {\n let manifest: ProjectLayerManifest | null;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n return {\n currentSourceHash: null,\n issues: [issue('error', 'invalid-manifest', `${PROJECT_LAYER_MANIFEST_RELATIVE_PATH} 파싱 실패: ${reason}`)],\n };\n }\n\n if (!manifest) {\n return {\n currentSourceHash: null,\n issues: [issue('error', 'missing-manifest', `${PROJECT_LAYER_MANIFEST_RELATIVE_PATH}가 없습니다.`)],\n };\n }\n\n const specs = loadProjectLayerTemplateSpecs(manifest.tools);\n const currentSourceHash = computeProjectLayerSourceHash(specs);\n let contextIndex: ProjectLayerContextIndex | null = null;\n const issues: ProjectLayerIssue[] = [];\n let syncedManifest = manifest;\n\n try {\n syncedManifest = syncCustomProjectRuleFiles({ basePath, manifest });\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(issue('error', 'invalid-custom-project-rule', reason));\n }\n\n try {\n contextIndex = readProjectLayerContextIndex(basePath);\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(\n issue('error', 'invalid-context-index', `${PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH} 파싱 실패: ${reason}`),\n );\n }\n\n const contextMap = buildContextIndexMap(contextIndex);\n const expectedManagedPaths = new Set(specs.filter((spec) => spec.ownership === 'managed').map((spec) => spec.path));\n const manifestManagedPaths = new Set(manifest.managed_files.map((file) => file.path));\n\n if (manifest.sourceHash !== currentSourceHash) {\n issues.push(\n issue('warning', 'source-hash-drift', `template sourceHash 변경: ${manifest.sourceHash} -> ${currentSourceHash}`),\n );\n }\n\n if (contextIndex === null) {\n issues.push(issue('error', 'missing-context-index', `${PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH}가 없습니다.`));\n }\n\n if (!compareProjectFileRecords(manifest.project_files, syncedManifest.project_files)) {\n issues.push(\n issue(\n 'warning',\n 'custom-project-rules-drift',\n '`docs/agent/project-rules/**/*.md` discovery 결과가 manifest와 다릅니다. `ai-ops update`로 동기화하세요.',\n ),\n );\n }\n\n for (const expectedPath of expectedManagedPaths) {\n if (!manifestManagedPaths.has(expectedPath)) {\n issues.push(issue('error', 'manifest-missing-managed-file', `manifest managed_files 누락: ${expectedPath}`));\n }\n }\n\n for (const file of manifest.managed_files) {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n continue;\n }\n\n const content = readFileSync(absolutePath, 'utf-8');\n const meta = parseAiOpsMeta(content);\n if (!meta) {\n issues.push(issue('error', 'missing-managed-section', `managed section 메타 없음: ${file.path}`));\n continue;\n }\n\n if (meta.sourceHash !== currentSourceHash) {\n issues.push(\n issue('warning', 'managed-source-hash-drift', `${file.path} sourceHash 변경: ${meta.sourceHash} -> ${currentSourceHash}`),\n );\n }\n }\n\n for (const file of syncedManifest.project_files) {\n if (!existsSync(resolveProjectLayerFilePath(basePath, file.path))) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n\n for (const pack of syncedManifest.packs) {\n for (const file of [...pack.documents, ...pack.files]) {\n if (!existsSync(resolveProjectLayerFilePath(basePath, file.path))) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n }\n\n for (const path of collectDocumentPathsFromManifest(syncedManifest)) {\n const document = readDocumentSafely(basePath, path);\n if ('code' in document) {\n issues.push(document);\n continue;\n }\n issues.push(...compareContextDocument({ expected: document, indexed: contextMap.get(path) }));\n }\n\n return { currentSourceHash, issues };\n};\n\nexport const auditProjectLayer = (basePath: string): ProjectLayerReport => {\n const diffReport = diffProjectLayer(basePath);\n let manifest: ProjectLayerManifest | null;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch {\n return diffReport;\n }\n\n if (!manifest) {\n return diffReport;\n }\n\n let contextIndex: ProjectLayerContextIndex | null = null;\n try {\n contextIndex = readProjectLayerContextIndex(basePath);\n } catch {\n contextIndex = null;\n }\n let syncedManifest = manifest;\n try {\n syncedManifest = syncCustomProjectRuleFiles({ basePath, manifest });\n } catch {\n return diffReport;\n }\n const documentPaths = collectDocumentPathsFromManifest(syncedManifest);\n const documentPathSet = new Set(documentPaths);\n const contextPathSet = new Set(contextIndex?.documents.map((document) => document.path) ?? []);\n const issues = [...diffReport.issues];\n const docsStatusPath = resolveProjectLayerFilePath(basePath, 'docs/docs-status.md');\n\n if (!existsSync(docsStatusPath)) {\n issues.push(issue('error', 'missing-docs-status', 'docs/docs-status.md가 없습니다.'));\n return { currentSourceHash: diffReport.currentSourceHash, issues };\n }\n\n let docsStatusEntries: DocsStatusEntry[] = [];\n try {\n docsStatusEntries = parseDocsStatusEntries(readFileSync(docsStatusPath, 'utf-8'));\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(issue('error', 'invalid-docs-status', `docs/docs-status.md 파싱 실패: ${reason}`));\n }\n\n const docsStatusMap = new Map(docsStatusEntries.map((entry) => [entry.path, entry]));\n\n for (const path of documentPaths) {\n const document = readDocumentSafely(basePath, path);\n if ('code' in document) {\n continue;\n }\n\n issues.push(...compareDocsStatusEntry({ expected: document, entry: docsStatusMap.get(path) }));\n }\n\n for (const entry of docsStatusEntries) {\n if (!documentPathSet.has(entry.path)) {\n issues.push(issue('warning', 'docs-status-extra-document', `docs-status에 manifest 외 문서가 있습니다: ${entry.path}`));\n }\n }\n\n for (const contextPath of contextPathSet) {\n if (!documentPathSet.has(contextPath)) {\n issues.push(issue('warning', 'context-extra-document', `context-layer에 manifest 외 문서가 있습니다: ${contextPath}`));\n }\n }\n\n return { currentSourceHash: diffReport.currentSourceHash, issues };\n};\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport {\n ProjectLayerManifestSchema,\n} from '@/core/schemas/index.js';\nimport type {\n ProjectLayerContextIndex,\n ProjectLayerManifest,\n ProjectLayerPackFileRecord,\n ProjectLayerPackRecord,\n} from '@/core/schemas/index.js';\nimport { computeHash, getCliVersion } from '@/shared/source-hash.js';\nimport {\n readProjectLayerManifest,\n refreshProjectLayerDerivedState,\n writeProjectLayerManifest,\n} from './state-io.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\nimport { DEFAULT_PACKS_DIR, resolvePackById } from './pack-source.logic.js';\nimport type { ProjectLayerPackSource, ProjectLayerPackSourceFile } from './pack-source.logic.js';\n\n// ----- types -----\n\nexport type ProjectLayerPackApplyResult = {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n written: string[];\n refreshed: string[];\n preserved: string[];\n deleted: string[];\n notFound: string[];\n};\n\nexport type ProjectLayerPackIssueLevel = 'error' | 'warning';\n\nexport type ProjectLayerPackIssue = {\n level: ProjectLayerPackIssueLevel;\n code: string;\n message: string;\n};\n\nexport type ProjectLayerPackReport = {\n issues: ProjectLayerPackIssue[];\n};\n\ntype PackFileApplyResult = {\n written: string[];\n refreshed: string[];\n preserved: string[];\n deleted: string[];\n notFound: string[];\n};\n\n// ----- file application -----\n\nconst serializePackFileContent = (content: string): string => (content.length === 0 ? '' : content.trimEnd() + '\\n');\n\nconst readProjectFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nconst writePackFile = (basePath: string, file: ProjectLayerPackSourceFile): void => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, serializePackFileContent(file.content), 'utf-8');\n};\n\nconst buildPackFileRecords = (files: readonly ProjectLayerPackSourceFile[]): ProjectLayerPackFileRecord[] =>\n files.map((file) => ({\n path: file.path,\n sourceHash: file.sourceHash,\n }));\n\nconst buildPackRecord = (params: {\n pack: ProjectLayerPackSource;\n installedAt: string;\n}): ProjectLayerPackRecord => ({\n id: params.pack.id,\n sourceHash: params.pack.sourceHash,\n documents: buildPackFileRecords(params.pack.documents),\n files: buildPackFileRecords(params.pack.files),\n installedAt: params.installedAt,\n});\n\nconst applyPackSourceFiles = (params: {\n basePath: string;\n pack: ProjectLayerPackSource;\n previousRecord: ProjectLayerPackRecord | null;\n}): PackFileApplyResult => {\n const written: string[] = [];\n const refreshed: string[] = [];\n const preserved: string[] = [];\n const deleted: string[] = [];\n const notFound: string[] = [];\n const sourceFiles = [...params.pack.documents, ...params.pack.files];\n const sourceByPath = new Map(sourceFiles.map((file) => [file.path, file]));\n const previousByPath = new Map(\n [...(params.previousRecord?.documents ?? []), ...(params.previousRecord?.files ?? [])].map((file) => [\n file.path,\n file,\n ]),\n );\n\n for (const file of sourceFiles) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, file.path);\n const previous = previousByPath.get(file.path);\n\n if (!existsSync(absolutePath)) {\n writePackFile(params.basePath, file);\n written.push(file.path);\n continue;\n }\n\n if (previous === undefined) {\n preserved.push(file.path);\n continue;\n }\n\n const currentHash = readProjectFileHash(params.basePath, file.path);\n if (currentHash !== previous.sourceHash) {\n preserved.push(file.path);\n continue;\n }\n\n if (currentHash !== file.sourceHash) {\n writePackFile(params.basePath, file);\n refreshed.push(file.path);\n }\n }\n\n for (const previous of previousByPath.values()) {\n if (sourceByPath.has(previous.path)) {\n continue;\n }\n\n const absolutePath = resolveProjectLayerFilePath(params.basePath, previous.path);\n if (!existsSync(absolutePath)) {\n notFound.push(previous.path);\n continue;\n }\n\n if (readProjectFileHash(params.basePath, previous.path) === previous.sourceHash) {\n rmSync(absolutePath);\n deleted.push(previous.path);\n } else {\n preserved.push(previous.path);\n }\n }\n\n return { written, refreshed, preserved, deleted, notFound };\n};\n\nconst removePackFiles = (basePath: string, record: ProjectLayerPackRecord): PackFileApplyResult => {\n const deleted: string[] = [];\n const preserved: string[] = [];\n const notFound: string[] = [];\n\n for (const file of [...record.documents, ...record.files]) {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n notFound.push(file.path);\n continue;\n }\n\n if (readProjectFileHash(basePath, file.path) === file.sourceHash) {\n rmSync(absolutePath);\n deleted.push(file.path);\n } else {\n preserved.push(file.path);\n }\n }\n\n return { written: [], refreshed: [], preserved, deleted, notFound };\n};\n\nconst removeEmptyDirs = (basePath: string, relativePaths: readonly string[]): void => {\n const dirs = [...new Set(relativePaths.map((path) => dirname(path)).filter((dir) => dir !== '.'))].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const dir of dirs) {\n const absoluteDir = resolveProjectLayerFilePath(basePath, dir);\n if (!existsSync(absoluteDir)) {\n continue;\n }\n\n try {\n if (readdirSync(absoluteDir).length === 0) {\n rmSync(absoluteDir, { recursive: true });\n }\n } catch {\n // Directory cleanup is best-effort only.\n }\n }\n};\n\n// ----- manifest updates -----\n\nconst requireProjectLayerManifest = (basePath: string): ProjectLayerManifest => {\n const manifest = readProjectLayerManifest(basePath);\n if (!manifest) {\n throw new Error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n }\n return manifest;\n};\n\nconst upsertPackRecord = (\n manifest: ProjectLayerManifest,\n record: ProjectLayerPackRecord,\n generatedAt: string,\n): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...manifest,\n packs: [...manifest.packs.filter((pack) => pack.id !== record.id), record],\n cliVersion: getCliVersion(),\n generatedAt,\n });\n\nconst removePackRecord = (manifest: ProjectLayerManifest, packId: string, generatedAt: string): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...manifest,\n packs: manifest.packs.filter((pack) => pack.id !== packId),\n cliVersion: getCliVersion(),\n generatedAt,\n });\n\nconst writeManifestWithDerivedState = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n generatedAt: string;\n}): {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n} => {\n const derived = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: params.manifest,\n generatedAt: params.generatedAt,\n });\n writeProjectLayerManifest(params.basePath, derived.manifest);\n return derived;\n};\n\n// ----- lifecycle -----\n\nexport const installProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n packsDir?: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (previousRecord) {\n return updateProjectLayerPack(params);\n }\n\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, params.packId);\n const installedAt = new Date().toISOString();\n const applyResult = applyPackSourceFiles({ basePath: params.basePath, pack, previousRecord: null });\n const nextManifest = upsertPackRecord(manifest, buildPackRecord({ pack, installedAt }), installedAt);\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt: installedAt,\n });\n\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\nexport const updateProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n packsDir?: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (!previousRecord) {\n throw new Error(`설치된 pack을 찾지 못했습니다: ${params.packId}`);\n }\n\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, params.packId);\n const generatedAt = new Date().toISOString();\n const applyResult = applyPackSourceFiles({ basePath: params.basePath, pack, previousRecord });\n const nextManifest = upsertPackRecord(\n manifest,\n buildPackRecord({ pack, installedAt: previousRecord.installedAt }),\n generatedAt,\n );\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt,\n });\n\n removeEmptyDirs(params.basePath, applyResult.deleted);\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\nexport const uninstallProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (!previousRecord) {\n throw new Error(`설치된 pack을 찾지 못했습니다: ${params.packId}`);\n }\n\n const generatedAt = new Date().toISOString();\n const applyResult = removePackFiles(params.basePath, previousRecord);\n const nextManifest = removePackRecord(manifest, params.packId, generatedAt);\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt,\n });\n\n removeEmptyDirs(params.basePath, applyResult.deleted);\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\n// ----- diff -----\n\nconst packIssue = (\n level: ProjectLayerPackIssueLevel,\n code: string,\n message: string,\n): ProjectLayerPackIssue => ({\n level,\n code,\n message,\n});\n\nexport const diffProjectLayerPack = (params: {\n basePath: string;\n packId?: string;\n packsDir?: string;\n}): ProjectLayerPackReport => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const targets = params.packId ? manifest.packs.filter((pack) => pack.id === params.packId) : manifest.packs;\n const issues: ProjectLayerPackIssue[] = [];\n\n if (targets.length === 0) {\n return { issues: [packIssue('warning', 'missing-pack', '비교할 설치된 pack이 없습니다.')] };\n }\n\n for (const record of targets) {\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, record.id);\n if (record.sourceHash !== pack.sourceHash) {\n issues.push(\n packIssue('warning', 'pack-source-hash-drift', `${record.id} sourceHash 변경: ${record.sourceHash} -> ${pack.sourceHash}`),\n );\n }\n\n for (const file of [...record.documents, ...record.files]) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, file.path);\n if (!existsSync(absolutePath)) {\n issues.push(packIssue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n }\n\n return { issues };\n};\n","import { readFileSync, readdirSync } from 'node:fs';\nimport { isAbsolute, join, relative, resolve } from 'node:path';\nimport { PackCatalogSchema, ProjectLayerFrontmatterSchema, isSafeProjectLayerPath } from '@/core/schemas/index.js';\nimport type { PackCatalog } from '@/core/schemas/index.js';\nimport { parseMarkdownFrontmatter } from '@/shared/markdown/frontmatter.js';\nimport { COMPILER_DATA_DIR } from '@/shared/paths.js';\nimport { computeHash } from '@/shared/source-hash.js';\n\nexport type ProjectLayerPackSourceFile = {\n path: string;\n content: string;\n sourceHash: string;\n};\n\nexport type ProjectLayerPackSource = {\n id: string;\n sourceHash: string;\n documents: ProjectLayerPackSourceFile[];\n files: ProjectLayerPackSourceFile[];\n};\n\nconst PACK_REGISTRY_FILENAME = 'pack-registry.json';\nconst SPEC_LIFECYCLE_PACK_ID = 'spec-lifecycle';\nconst PACK_INSTALL_ROOT = 'docs/specs/';\nconst RESERVED_DOCUMENT_WARNINGS = [\n '판단 근거로 사용하지 마세요',\n 'Do not use this document as current decision-making evidence',\n] as const;\n\nexport const DEFAULT_PACKS_DIR = join(COMPILER_DATA_DIR, 'packs');\n\nconst includesReservedDocumentWarning = (content: string): boolean =>\n RESERVED_DOCUMENT_WARNINGS.some((warning) => content.includes(warning));\n\nconst readPackCatalog = (packsDir: string): PackCatalog =>\n PackCatalogSchema.parse(JSON.parse(readFileSync(join(packsDir, PACK_REGISTRY_FILENAME), 'utf-8')));\n\nconst assertPackInstallPath = (path: string): void => {\n if (!isSafeProjectLayerPath(path) || !path.startsWith(PACK_INSTALL_ROOT)) {\n throw new Error(`Unsafe pack path: ${path}`);\n }\n};\n\nconst readPackSourceFiles = (packDir: string): ProjectLayerPackSourceFile[] => {\n const files: ProjectLayerPackSourceFile[] = [];\n\n const walk = (relativeDir = ''): void => {\n const absoluteDir = relativeDir.length > 0 ? join(packDir, relativeDir) : packDir;\n const entries = readdirSync(absoluteDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n\n assertPackInstallPath(nextRelativePath);\n const content = readFileSync(join(packDir, nextRelativePath), 'utf-8');\n files.push({\n path: nextRelativePath,\n content,\n sourceHash: computeHash([content.trimEnd()]),\n });\n }\n };\n\n walk();\n return files;\n};\n\nconst splitPackSourceFiles = (files: readonly ProjectLayerPackSourceFile[]): {\n documents: ProjectLayerPackSourceFile[];\n files: ProjectLayerPackSourceFile[];\n} => {\n const documents: ProjectLayerPackSourceFile[] = [];\n const regularFiles: ProjectLayerPackSourceFile[] = [];\n\n for (const file of files) {\n if (!file.path.endsWith('.md')) {\n regularFiles.push(file);\n continue;\n }\n\n const { frontmatter } = parseMarkdownFrontmatter(file.content);\n const parsed = ProjectLayerFrontmatterSchema.parse(frontmatter);\n if (parsed.status === 'Reserved' && !includesReservedDocumentWarning(file.content)) {\n throw new Error(`Reserved pack document must include warning text: ${file.path}`);\n }\n documents.push(file);\n }\n\n return { documents, files: regularFiles };\n};\n\nexport const loadAllPacks = (packsDir: string): ProjectLayerPackSource[] => {\n const catalog = readPackCatalog(packsDir);\n const entries = [...catalog.packs].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n if (entry.id !== SPEC_LIFECYCLE_PACK_ID) {\n throw new Error(`Unsupported pack id: ${entry.id}`);\n }\n\n const packDir = resolve(packsDir, entry.source_path);\n const relativeFromPacks = relative(resolve(packsDir), packDir);\n if (relativeFromPacks.length === 0 || relativeFromPacks.startsWith('..') || isAbsolute(relativeFromPacks)) {\n throw new Error(`Pack source path escapes packs dir: ${entry.source_path}`);\n }\n\n const files = readPackSourceFiles(packDir);\n const split = splitPackSourceFiles(files);\n\n return {\n id: entry.id,\n sourceHash: computeHash(files.map((file) => `${file.path}:${file.content}`).sort()),\n documents: split.documents,\n files: split.files,\n };\n });\n};\n\nexport const resolvePackById = (packsDir: string, packId: string): ProjectLayerPackSource => {\n const pack = loadAllPacks(packsDir).find((candidate) => candidate.id === packId);\n if (!pack) {\n throw new Error(`Unknown pack: ${packId}`);\n }\n return pack;\n};\n","import { getContextPromotionStatus } from \"./status.js\";\nimport { parseSuccessfulGitCommitPostToolUseHook } from \"./tool-use-hook.js\";\nimport type { ContextPromotionPostToolUseHookOutput, ContextPromotionProjectStatus } from \"./types.js\";\n\n// ----- hook guard -----\n\nexport const buildContextPromotionReviewPrompt = (status: ContextPromotionProjectStatus): string => {\n const projectRoot = status.gitRoot ?? status.cwd;\n const cdCommand = `cd ${JSON.stringify(projectRoot)}`;\n\n return [\n 'Context Promotion Review should run for the completed work commit and review-loop learnings.',\n '',\n `Project root: ${projectRoot}`,\n 'This project root is authoritative for this review.',\n '',\n 'Use the `context-promotion-review` skill to review the just-created HEAD commit plus current conversation/review-loop learnings for reusable operating knowledge.',\n '',\n 'Scope boundary:',\n `- Before inspecting files, anchor shell work in the project root above. If needed, run \\`${cdCommand}\\` first.`,\n '- Do not inspect other repositories, parent directories, or earlier conversation workspaces.',\n '- Do not search the web or external documentation for this review.',\n '- If `AGENTS.md`, `docs/agent/*`, `docs/docs-status.md`, or other context-layer files are absent, report them as absent; do not substitute files from another repo.',\n '- Use only the just-created `HEAD` commit, current conversation/review-loop learnings, post-commit worktree state, and files under the project root.',\n '',\n 'Review requirements:',\n '- Do not amend, rewrite, or mix changes into the work commit.',\n '- Inspect the post-commit worktree state before deciding: run `git status --short`, `git diff --name-only`, `git diff --cached --name-only`, and `git ls-files --others --exclude-standard`.',\n '- Inspect the completed commit before deciding: run `git show --stat HEAD`, `git show --name-only HEAD`, and `git show HEAD` when detail is needed.',\n '- Cross-check existing `AGENTS.md`, `docs/agent/*`, `docs/docs-status.md`, and `.ai-ops/context-layer.json` first.',\n '- Treat `already-covered` as valid only when the Active context layer already has the same agent behavior rule; plans, tests, README, runbooks, and operator docs are evidence, not automatic coverage.',\n '- Check whether user corrections, repeated review findings, command routines, dirty worktree, untracked files, changeset pollution, or staging-scope hygiene produced a reusable `project-local` candidate.',\n '- Before `no-promotion`, briefly report near-miss or discarded candidates with reasons.',\n '- Classify candidates as `core`, `project-local`, `global`, `already-covered`, or `no-promotion`.',\n '- Ask the user before editing any file.',\n '- If promotion is approved, edit only the approved context/global files, then stop for user inspection without committing.',\n '- After approved updates or a no-promotion/already-covered decision, run `ai-ops context-promotion resolve --decision <promoted|no-promotion> --summary \"<summary>\"` with any approved `--scope` and `--target` values.',\n '- Re-run `ai-ops context-promotion status` and confirm a receipt exists for the current HEAD.',\n '',\n `Project: ${projectRoot}`,\n `HEAD: ${status.commitHash ?? 'unknown'}`,\n `Fingerprint: ${status.fingerprint ?? 'unknown'}`,\n ].join('\\n');\n};\n\nconst buildContextPromotionStatusFailurePrompt = (cwd: string, error: unknown): string => {\n const message = error instanceof Error ? error.message : 'unknown error';\n return [\n 'Context Promotion Review could not inspect the completed work commit.',\n '',\n 'The work command has already finished; do not amend or rewrite it for this hook.',\n 'Do not search the web or inspect another repository to repair this hook review.',\n '',\n 'Run `ai-ops context-promotion status` to inspect the failure, then decide whether a manual promotion review is needed.',\n '',\n `Project cwd: ${cwd}`,\n `Error: ${message}`,\n ].join('\\n');\n};\n\nconst buildPostToolUseOutput = (prompt: string): ContextPromotionPostToolUseHookOutput => ({\n decision: 'block',\n reason: prompt,\n hookSpecificOutput: {\n hookEventName: 'PostToolUse',\n additionalContext: prompt,\n },\n});\n\nexport const evaluateContextPromotionPostToolUseHook = (params: {\n hookInput: unknown;\n userBasePath: string;\n}): ContextPromotionPostToolUseHookOutput | null => {\n const hookInput = parseSuccessfulGitCommitPostToolUseHook(params.hookInput);\n if (!hookInput) {\n return null;\n }\n\n let status: ContextPromotionProjectStatus;\n try {\n status = getContextPromotionStatus({\n cwd: hookInput.cwd,\n userBasePath: params.userBasePath,\n });\n } catch (error) {\n return buildPostToolUseOutput(buildContextPromotionStatusFailurePrompt(hookInput.cwd, error));\n }\n\n if (!status.hasContextLayer || status.receipt) {\n return null;\n }\n\n return buildPostToolUseOutput(buildContextPromotionReviewPrompt(status));\n};\n","import type { Command } from 'commander';\nimport {\n contextPromotionPostToolUseHookCommand,\n contextPromotionPreToolUseHookCommand,\n contextPromotionPruneCommand,\n contextPromotionResolveCommand,\n contextPromotionStatusCommand,\n} from './commands.js';\n\nexport const registerContextPromotionCommands = (program: Command): void => {\n const command = program.command('context-promotion').description('context promotion review receipt 관리');\n\n command\n .command('status')\n .description('현재 context promotion receipt 상태 확인')\n .option('--json', 'JSON으로 출력', false)\n .action((opts: { json?: boolean }) => contextPromotionStatusCommand(opts));\n\n command\n .command('resolve')\n .description('현재 HEAD 커밋에 대한 context promotion review receipt 기록')\n .requiredOption('--decision <decision>', 'promoted|no-promotion')\n .requiredOption('--summary <summary>', 'review 결정 요약')\n .option('--scope <scope...>', '승격 scope (core|project-local|global)')\n .option('--target <path...>', '승격 대상 파일 또는 자산')\n .action((opts: { decision?: string; summary?: string; scope?: string[]; target?: string[] }) =>\n contextPromotionResolveCommand(opts),\n );\n\n command\n .command('prune')\n .description('user-local context promotion receipts 정리')\n .option('--max <number>', '유지할 receipt 수', '50')\n .action((opts: { max?: string }) => contextPromotionPruneCommand(opts));\n\n const hookCommand = command.command('hook').description('Codex hook 내부 명령');\n hookCommand\n .command('pre-tool-use')\n .description('Deprecated no-op Codex PreToolUse hook entrypoint')\n .action(() => contextPromotionPreToolUseHookCommand());\n hookCommand\n .command('post-tool-use')\n .description('Codex PostToolUse hook entrypoint')\n .action(() => contextPromotionPostToolUseHookCommand());\n};\n","import * as p from '@clack/prompts';\nimport {\n INTEGRATION_COMPONENT_TYPE,\n INTEGRATION_ID,\n} from '@/core/schemas/index.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport {\n inspectCodexHook,\n resolveCodexHooksPath,\n uninstallCodexHook,\n} from '../codex-hooks/core.js';\nimport { evaluatePcPostToolUseHook, getPcHandoffStatus } from '../pc/core.js';\nimport {\n findInstalledIntegration,\n readIntegrationManifest,\n resolveIntegrationManifestPath,\n writeUserIntegrationState,\n} from './manifest-io.js';\nimport { resolveBasePath, resolveUserBasePath } from '../../shared/command-paths.js';\nimport {\n buildInstalledIntegration,\n buildReceiptConfigComponents,\n componentWasOwned,\n ensureHookComponent,\n ensureSkillComponent,\n formatComponentStatus,\n hasInstalledCodexSkill,\n removeOwnedSkill,\n} from './components.js';\nimport {\n loadIntegrationDefinitions,\n parseIntegrationId,\n resolveCodexHomePath,\n resolveIntegrationDefinition,\n resolvePersonalContextRoot,\n} from './definitions.js';\nimport type { IntegrationInstallOptions } from './definitions.js';\nimport { readStdin, reportIntegrationError } from './stdio.js';\n\nexport const integrationListCommand = async (): Promise<void> => {\n p.intro('ai-ops integration list');\n try {\n const manifest = readIntegrationManifest(resolveIntegrationManifestPath(resolveUserBasePath()));\n const installed = new Set((manifest?.integrations ?? []).map((integration) => integration.id));\n const lines = loadIntegrationDefinitions().map((definition) => {\n const suffix = installed.has(definition.id) ? 'installed' : 'not installed';\n return `- ${definition.id} - ${suffix} - ${definition.description}`;\n });\n p.log.info(lines.join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration list 완료');\n};\n\nexport const integrationInstallCommand = async (\n integrationId: string,\n opts: IntegrationInstallOptions = {},\n): Promise<void> => {\n p.intro(`ai-ops integration install ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const manifestPath = resolveIntegrationManifestPath(basePath);\n const previous = findInstalledIntegration(readIntegrationManifest(manifestPath)?.integrations ?? [], definition.id);\n const skillComponent = ensureSkillComponent({\n basePath,\n cliVersion,\n skillId: definition.skillComponent.id,\n previouslyOwned: componentWasOwned({\n previous,\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: definition.skillComponent.id,\n }),\n });\n const hookComponent = ensureHookComponent({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n hookId: definition.hookComponent.id,\n definition: definition.hookDefinition,\n command: opts.command,\n previouslyOwned: componentWasOwned({\n previous,\n type: INTEGRATION_COMPONENT_TYPE.CODEX_HOOK,\n id: definition.hookComponent.id,\n }),\n });\n\n const installedIntegration = buildInstalledIntegration({\n definition,\n previous,\n components: [skillComponent, hookComponent, ...buildReceiptConfigComponents(definition.receiptConfigComponents)],\n });\n writeUserIntegrationState({\n manifestPath,\n cliVersion,\n nextIntegration: installedIntegration,\n });\n\n p.log.success(`integration 설치 완료: ${definition.id}`);\n p.log.info(installedIntegration.components.map(formatComponentStatus).join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration install 완료');\n};\n\nexport const integrationStatusCommand = async (integrationId: string): Promise<void> => {\n p.intro(`ai-ops integration status ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const manifest = readIntegrationManifest(resolveIntegrationManifestPath(basePath));\n const installedIntegration = findInstalledIntegration(manifest?.integrations ?? [], definition.id);\n const hookStatus = inspectCodexHook({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n definition: definition.hookDefinition,\n });\n const lines = [\n `integration installed: ${installedIntegration ? 'yes' : 'no'}`,\n `skill installed: ${hasInstalledCodexSkill({ basePath, skillId: definition.skillComponent.id }) ? 'yes' : 'no'}`,\n `hook installed: ${hookStatus.installed ? 'yes' : 'no'}`,\n `hooks file: ${hookStatus.hooksPath}`,\n ];\n\n if (definition.id === INTEGRATION_ID.PC) {\n const pcStatus = getPcHandoffStatus({\n cwd: resolveBasePath(),\n contextRoot: resolvePersonalContextRoot(),\n });\n lines.push(\n `pc context ready: ${pcStatus.ready ? 'yes' : 'no'}`,\n `pc skip reason: ${pcStatus.skipReason ?? 'none'}`,\n `pc workspace: ${pcStatus.workspaceId ?? 'not found'}`,\n `pc active workstream: ${pcStatus.activeWorkstreamId ?? 'not found'}`,\n `pc last confirmed commit: ${pcStatus.lastConfirmedCommitHash ?? 'not found'}`,\n );\n }\n\n if (installedIntegration) {\n lines.push(`owned components: ${installedIntegration.components.map(formatComponentStatus).join(', ')}`);\n }\n\n p.log.info(lines.join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration status 완료');\n};\n\nexport const integrationUninstallCommand = async (integrationId: string): Promise<void> => {\n p.intro(`ai-ops integration uninstall ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const manifestPath = resolveIntegrationManifestPath(basePath);\n const installedIntegration = findInstalledIntegration(\n readIntegrationManifest(manifestPath)?.integrations ?? [],\n definition.id,\n );\n\n if (!installedIntegration) {\n p.log.warn('설치된 integration manifest entry를 찾지 못했습니다.');\n p.outro('ai-ops integration uninstall 완료');\n return;\n }\n\n const removed: string[] = [];\n for (const component of installedIntegration.components) {\n if (!component.owned) {\n continue;\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.SKILL) {\n removed.push(...removeOwnedSkill({ basePath, cliVersion, skillId: component.id }));\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n const result = uninstallCodexHook({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n definition: definition.hookDefinition,\n });\n if (result.removed) {\n removed.push(result.hooksPath);\n }\n }\n }\n\n writeUserIntegrationState({\n manifestPath,\n cliVersion,\n removeIntegrationId: definition.id,\n });\n p.log.success(removed.length > 0 ? `제거 완료: ${removed.join(', ')}` : '제거할 owned component 없음');\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration uninstall 완료');\n};\n\nexport const integrationPostToolUseHookCommand = async (integrationId: string): Promise<void> => {\n try {\n const id = parseIntegrationId(integrationId);\n const raw = await readStdin();\n const hookInput = raw.trim().length > 0 ? JSON.parse(raw) : {};\n if (id !== INTEGRATION_ID.PC) {\n return;\n }\n\n const output = evaluatePcPostToolUseHook({\n hookInput,\n contextRoot: resolvePersonalContextRoot(),\n });\n if (output) {\n process.stdout.write(JSON.stringify(output) + '\\n');\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n JSON.stringify({\n systemMessage: `ai-ops integration hook skipped: ${message}`,\n }) + '\\n',\n );\n }\n};\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { join, resolve, sep } from \"node:path\";\nimport { extractSection, normalizeFieldValue, normalizePath, parseListField, pathContains, readTextFileOrNull } from \"./markdown.js\";\nimport type { PcHandoffStatus, PcWorkspaceCandidate, PcWorkspaceEntry } from \"./types.js\";\n\n// ----- git helpers -----\n\nconst runGit = (cwd: string, args: readonly string[]): string =>\n execFileSync('git', [...args], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim();\n\nexport const resolveGitRoot = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--show-toplevel']);\n } catch {\n return null;\n }\n};\n\nexport const readGitHead = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--verify', 'HEAD']);\n } catch {\n return null;\n }\n};\n\n// ----- pc context preflight -----\n\nconst listWorkspaceStatePaths = (contextRoot: string): string[] => {\n const workspacesDir = join(contextRoot, 'workspaces');\n if (!existsSync(workspacesDir)) {\n return [];\n }\n\n return readdirSync(workspacesDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => join(workspacesDir, entry.name, 'workspace-state.md'))\n .filter((statePath) => existsSync(statePath))\n .sort((a, b) => a.localeCompare(b));\n};\n\nconst parseWorkspaceCandidate = (statePath: string): PcWorkspaceCandidate | null => {\n const content = readTextFileOrNull(statePath);\n if (!content) {\n return null;\n }\n const workspaceRoot = parseListField(content, ['워크스페이스 루트', 'Workspace Root']);\n if (!workspaceRoot) {\n return null;\n }\n\n const activeSection = extractSection(content, ['활성 Workstream', 'Active Workstream']);\n const activeWorkstreamId = parseListField(activeSection, ['ID', 'Workstream ID', 'Active Workstream']);\n const workspaceDir = resolve(statePath, '..');\n const id =\n parseListField(content, ['워크스페이스 ID', 'Workspace ID']) ?? workspaceDir.split(sep).at(-1) ?? 'unknown';\n\n return {\n id,\n statePath,\n workspaceDir,\n workspaceRoot,\n activeWorkstreamId,\n };\n};\n\nconst findMatchingWorkspace = (params: { cwd: string; contextRoot: string }): PcWorkspaceCandidate | null => {\n const candidates = listWorkspaceStatePaths(params.contextRoot)\n .map(parseWorkspaceCandidate)\n .filter((candidate): candidate is PcWorkspaceCandidate => candidate !== null)\n .filter((candidate) => pathContains(candidate.workspaceRoot, params.cwd))\n .sort((a, b) => normalizePath(b.workspaceRoot).length - normalizePath(a.workspaceRoot).length);\n\n return candidates[0] ?? null;\n};\n\nconst parseRepoEntry = (entryPath: string): PcWorkspaceEntry | null => {\n const content = readTextFileOrNull(entryPath);\n if (!content) {\n return null;\n }\n const id = parseListField(content, ['엔트리 ID', 'Entry ID']);\n if (!id) {\n return null;\n }\n\n return {\n id,\n path: parseListField(content, ['경로', 'Path']),\n gitRoot: parseListField(content, ['Git 루트', 'Git Root']),\n };\n};\n\nconst findCurrentEntry = (params: { cwd: string; workspaceDir: string }): PcWorkspaceEntry | null => {\n const reposDir = join(params.workspaceDir, 'repos');\n if (!existsSync(reposDir)) {\n return null;\n }\n\n const entries = readdirSync(reposDir, { withFileTypes: true })\n .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))\n .map((entry) => parseRepoEntry(join(reposDir, entry.name)))\n .filter((entry): entry is PcWorkspaceEntry => entry !== null)\n .filter((entry) => {\n const paths = [entry.path, entry.gitRoot].filter((path): path is string => path !== null);\n return paths.some((path) => pathContains(path, params.cwd));\n })\n .sort((a, b) => {\n const aLength = Math.max(0, ...[a.path, a.gitRoot].map((path) => (path ? normalizePath(path).length : 0)));\n const bLength = Math.max(0, ...[b.path, b.gitRoot].map((path) => (path ? normalizePath(path).length : 0)));\n return bLength - aLength;\n });\n\n return entries[0] ?? null;\n};\n\nconst parseWorkstreamScopeEntryIds = (content: string): string[] => {\n const scopeSection = extractSection(content, ['범위', 'Scope']);\n if (scopeSection.length === 0) {\n return [];\n }\n\n const lines = scopeSection.split('\\n');\n const ids: string[] = [];\n let inEntryBlock = false;\n\n for (const line of lines) {\n if (/^-\\s*(엔트리|Entries|Entry):/.test(line)) {\n inEntryBlock = true;\n const inlineValue = normalizeFieldValue(line.split(':').slice(1).join(':'));\n if (inlineValue && !inlineValue.includes('<')) {\n ids.push(...inlineValue.split(',').map((value) => value.trim().replace(/^`|`$/g, '')));\n }\n continue;\n }\n\n if (inEntryBlock && /^-\\s+\\S/.test(line)) {\n inEntryBlock = false;\n }\n\n if (!inEntryBlock) {\n continue;\n }\n\n const nestedMatch = /^\\s+-\\s+`?([a-z0-9]+(?:-[a-z0-9]+)*)`?/.exec(line);\n if (nestedMatch) {\n ids.push(nestedMatch[1]);\n }\n }\n\n return [...new Set(ids.filter((id) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id)))];\n};\n\nconst parseLastConfirmedCommitHash = (params: { content: string; entryId: string }): string | null => {\n const section = extractSection(params.content, ['마지막 확인 Commit', 'Last Confirmed Commit']);\n if (section.length === 0) {\n return null;\n }\n\n const escapedEntryId = params.entryId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = new RegExp(`^-\\\\s+\\`?${escapedEntryId}\\`?:\\\\s*([a-f0-9]{40})\\\\b`, 'imu').exec(section);\n return match?.[1] ?? null;\n};\n\nexport const getPcHandoffStatus = (params: { cwd: string; contextRoot: string }): PcHandoffStatus => {\n const cwd = normalizePath(params.cwd);\n const contextRoot = normalizePath(params.contextRoot);\n if (!existsSync(contextRoot)) {\n return {\n cwd,\n contextRoot,\n workspaceId: null,\n workspaceRoot: null,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'pc context root not found',\n };\n }\n\n const workspace = findMatchingWorkspace({ cwd, contextRoot });\n if (!workspace) {\n return {\n cwd,\n contextRoot,\n workspaceId: null,\n workspaceRoot: null,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'matching pc workspace not found',\n };\n }\n\n if (!workspace.activeWorkstreamId) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'active pc workstream not selected',\n };\n }\n\n const activeWorkstreamPath = join(workspace.workspaceDir, 'workstreams', `${workspace.activeWorkstreamId}.md`);\n const activeWorkstreamContent = readTextFileOrNull(activeWorkstreamPath);\n if (!activeWorkstreamContent) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'active pc workstream file not found',\n };\n }\n\n const currentEntry = findCurrentEntry({ cwd, workspaceDir: workspace.workspaceDir });\n if (!currentEntry) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'current repo is not registered in pc workspace',\n };\n }\n\n const lastConfirmedCommitHash = parseLastConfirmedCommitHash({\n content: activeWorkstreamContent,\n entryId: currentEntry.id,\n });\n\n const scopeEntryIds = parseWorkstreamScopeEntryIds(activeWorkstreamContent);\n if (scopeEntryIds.length > 0 && !scopeEntryIds.includes(currentEntry.id)) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: currentEntry.id,\n lastConfirmedCommitHash,\n ready: false,\n skipReason: 'current repo is outside the active pc workstream scope',\n };\n }\n\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: currentEntry.id,\n lastConfirmedCommitHash,\n ready: true,\n skipReason: null,\n };\n};\n","import { readFileSync } from \"node:fs\";\nimport { resolve, sep } from \"node:path\";\n\n// ----- path and markdown helpers -----\n\nexport const normalizePath = (path: string): string => resolve(path.replace(/^~(?=$|\\/)/, process.env.HOME ?? '~'));\n\nexport const pathContains = (parentPath: string, childPath: string): boolean => {\n const parent = normalizePath(parentPath);\n const child = normalizePath(childPath);\n return child === parent || child.startsWith(`${parent}${sep}`);\n};\n\nexport const normalizeFieldValue = (value: string | null): string | null => {\n const trimmed = value?.trim() ?? '';\n if (trimmed.length === 0 || ['none', 'null', '-', '<empty>'].includes(trimmed.toLowerCase())) {\n return null;\n }\n return trimmed.replace(/^`|`$/g, '');\n};\n\nexport const extractSection = (content: string, headings: readonly string[]): string => {\n const headingPattern = headings.map((heading) => heading.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const match = new RegExp(`^##\\\\s+(?:${headingPattern})\\\\s*$`, 'mu').exec(content);\n if (!match) {\n return '';\n }\n const start = match.index + match[0].length;\n const rest = content.slice(start);\n const nextHeading = /^##\\s+/mu.exec(rest);\n return nextHeading ? rest.slice(0, nextHeading.index) : rest;\n};\n\nexport const parseListField = (content: string, labels: readonly string[]): string | null => {\n for (const label of labels) {\n const escapedLabel = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = new RegExp(`^-\\\\s+${escapedLabel}:\\\\s*(.+)$`, 'mu').exec(content);\n const value = normalizeFieldValue(match?.[1] ?? null);\n if (value) {\n return value;\n }\n }\n return null;\n};\n\nexport const readTextFileOrNull = (filePath: string): string | null => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch {\n return null;\n }\n};\n\n// ----- git helpers -----\n","import { readGitHead, resolveGitRoot } from \"./status.js\";\nimport { parseSuccessfulGitCommitPostToolUseHook } from \"../context-promotion/tool-use-hook.js\";\nimport type { PcHandoffStatus, PcPostToolUseHookOutput } from \"./types.js\";\nimport { getPcHandoffStatus } from \"./status.js\";\n\n// ----- hook output -----\n\nconst buildPcDonePrompt = (params: { status: PcHandoffStatus; head: string; gitRoot: string }): string =>\n [\n 'A successful git commit just created a new HEAD commit.',\n '',\n 'Run `$pc:done` now to record the handoff for the active personal project context.',\n '',\n 'Important guardrails:',\n '- Do not create or initialize a new pc context from this hook.',\n '- If `$pc:done` cannot match the prepared workspace, active workstream, or current repo scope, skip and briefly say why.',\n '- If the active workstream already records this HEAD as the last confirmed commit, skip without writing another handoff.',\n '- Do not modify the product repo for this hook; `$pc:done` may only update `~/.personal-project-contexts/` and commit that context repo.',\n '- Use the just-created HEAD commit as the newest evidence for completed work and the next first action.',\n '',\n `Project git root: ${params.gitRoot}`,\n `HEAD: ${params.head}`,\n `pc context root: ${params.status.contextRoot}`,\n `pc workspace: ${params.status.workspaceId ?? 'unknown'} (${params.status.workspaceRoot ?? 'unknown'})`,\n `active workstream: ${params.status.activeWorkstreamId ?? 'unknown'}`,\n `current entry: ${params.status.currentEntryId ?? 'unknown'}`,\n `last confirmed commit: ${params.status.lastConfirmedCommitHash ?? 'none'}`,\n ].join('\\n');\n\nconst buildPostToolUseOutput = (prompt: string): PcPostToolUseHookOutput => ({\n decision: 'block',\n reason: prompt,\n hookSpecificOutput: {\n hookEventName: 'PostToolUse',\n additionalContext: prompt,\n },\n});\n\nexport const evaluatePcPostToolUseHook = (params: {\n hookInput: unknown;\n contextRoot: string;\n}): PcPostToolUseHookOutput | null => {\n const gitCommitHook = parseSuccessfulGitCommitPostToolUseHook(params.hookInput);\n if (!gitCommitHook) {\n return null;\n }\n\n const gitRoot = resolveGitRoot(gitCommitHook.cwd);\n if (!gitRoot) {\n return null;\n }\n\n const head = readGitHead(gitRoot);\n if (!head) {\n return null;\n }\n\n const status = getPcHandoffStatus({\n cwd: gitCommitHook.cwd,\n contextRoot: params.contextRoot,\n });\n if (!status.ready) {\n return null;\n }\n if (status.lastConfirmedCommitHash === head) {\n return null;\n }\n\n return buildPostToolUseOutput(buildPcDonePrompt({ status, head, gitRoot }));\n};\n","import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { IntegrationManifestSchema } from '@/core/schemas/index.js';\nimport type { InstalledIntegration, IntegrationId, IntegrationManifest } from '@/core/schemas/index.js';\n\nexport const INTEGRATION_MANIFEST_FILENAME = 'integrations-manifest.json';\n\nexport const parseIntegrationManifest = (json: string): IntegrationManifest =>\n IntegrationManifestSchema.parse(JSON.parse(json));\n\nexport const serializeIntegrationManifest = (manifest: IntegrationManifest): string =>\n JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const resolveIntegrationManifestPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', INTEGRATION_MANIFEST_FILENAME);\n\nexport const readIntegrationManifest = (manifestPath: string): IntegrationManifest | null => {\n let raw: string;\n try {\n raw = readFileSync(manifestPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseIntegrationManifest(raw);\n};\n\nexport const writeIntegrationManifest = (manifestPath: string, manifest: IntegrationManifest): void => {\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeIntegrationManifest(manifest), 'utf-8');\n};\n\nexport const findInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n integrationId: IntegrationId,\n): InstalledIntegration | undefined => integrations.find((integration) => integration.id === integrationId);\n\nexport const upsertInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n nextIntegration: InstalledIntegration,\n): InstalledIntegration[] => [\n ...integrations.filter((integration) => integration.id !== nextIntegration.id),\n nextIntegration,\n];\n\nexport const removeInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n integrationId: IntegrationId,\n): InstalledIntegration[] => integrations.filter((integration) => integration.id !== integrationId);\n\nexport const writeUserIntegrationState = (params: {\n manifestPath: string;\n cliVersion: string;\n nextIntegration?: InstalledIntegration;\n removeIntegrationId?: IntegrationId;\n}): void => {\n const previous = readIntegrationManifest(params.manifestPath);\n const integrations = params.removeIntegrationId\n ? removeInstalledIntegration(previous?.integrations ?? [], params.removeIntegrationId)\n : params.nextIntegration\n ? upsertInstalledIntegration(previous?.integrations ?? [], params.nextIntegration)\n : (previous?.integrations ?? []);\n\n if (integrations.length === 0) {\n rmSync(params.manifestPath, { force: true });\n return;\n }\n\n writeIntegrationManifest(params.manifestPath, {\n schemaVersion: 1,\n kind: 'ai-ops-integrations-manifest',\n integrations,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n","import { existsSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type {\n InstalledIntegration,\n InstalledSkill,\n IntegrationComponent,\n IntegrationId,\n Skill,\n} from '@/core/schemas/index.js';\nimport { INTEGRATION_COMPONENT_TYPE, SKILL_TOOL } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport {\n buildCodexHookCommand,\n inspectCodexHook,\n installCodexHook,\n} from '../codex-hooks/core.js';\nimport type { CodexHookDefinition } from '../codex-hooks/core.js';\nimport { installSkillPackages, removeDirectories } from '../skills/install-files.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from '../skills/registry-io.js';\nimport { buildSkillInstallPlan } from '../skills/renderer.js';\nimport { findInstalledSkill, mergeSkillTools, removeInstalledSkill, upsertInstalledSkill } from '../skills/state.js';\nimport { resolveSkillsDir } from '../../shared/command-paths.js';\nimport type { IntegrationDefinition } from './definitions.js';\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] =>\n (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n\nconst resolveSkillById = (skillId: string): Skill => {\n const skill = loadAllSkills(resolveSkillsDir()).find((candidate) => candidate.id === skillId);\n if (!skill) {\n throw new Error(`Unknown skill: ${skillId}`);\n }\n return skill;\n};\n\nexport const hasInstalledCodexSkill = (params: { basePath: string; skillId: string }): boolean => {\n const installedSkill = findInstalledSkill(readInstalledSkills(params.basePath), params.skillId);\n return (\n installedSkill?.tools.includes(SKILL_TOOL.CODEX) === true &&\n existsSync(join(params.basePath, '.agents/skills', params.skillId, 'SKILL.md'))\n );\n};\n\nconst writeUserSkillState = (params: {\n basePath: string;\n cliVersion: string;\n nextSkill?: InstalledSkill;\n removeSkillId?: string;\n}): void => {\n const registryPath = resolveSkillRegistryPath(params.basePath);\n const previous = readSkillRegistry(registryPath);\n const skills = params.removeSkillId\n ? removeInstalledSkill(previous?.skills ?? [], params.removeSkillId)\n : params.nextSkill\n ? upsertInstalledSkill(previous?.skills ?? [], params.nextSkill)\n : (previous?.skills ?? []);\n\n if (skills.length === 0) {\n rmSync(registryPath, { force: true });\n return;\n }\n\n writeSkillRegistry(registryPath, {\n skills,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nexport const ensureSkillComponent = (params: {\n basePath: string;\n cliVersion: string;\n skillId: string;\n previouslyOwned: boolean;\n}): IntegrationComponent => {\n const skill = resolveSkillById(params.skillId);\n const installedSkills = readInstalledSkills(params.basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, skill.id);\n const requestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: [SKILL_TOOL.CODEX],\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill,\n requestedTools,\n });\n\n const alreadyCurrent =\n existingInstalledSkill?.sourceHash === installedSkill.sourceHash &&\n existingInstalledSkill.tools.includes(SKILL_TOOL.CODEX) &&\n existsSync(join(params.basePath, '.agents/skills', params.skillId, 'SKILL.md'));\n\n if (alreadyCurrent) {\n return {\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: params.skillId,\n tools: [SKILL_TOOL.CODEX],\n owned: params.previouslyOwned,\n };\n }\n\n installSkillPackages(params.basePath, packages);\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSkill: installedSkill,\n });\n\n return {\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: params.skillId,\n tools: [SKILL_TOOL.CODEX],\n owned: true,\n };\n};\n\nexport const ensureHookComponent = (params: {\n hooksPath: string;\n hookId: IntegrationId;\n definition: CodexHookDefinition;\n command?: string;\n previouslyOwned: boolean;\n}): IntegrationComponent => {\n const command = buildCodexHookCommand({\n definition: params.definition,\n overrideCommand: params.command,\n });\n const installedBefore = inspectCodexHook({\n hooksPath: params.hooksPath,\n definition: params.definition,\n }).installed;\n const result = installCodexHook({\n hooksPath: params.hooksPath,\n definition: params.definition,\n command,\n });\n\n return {\n type: INTEGRATION_COMPONENT_TYPE.CODEX_HOOK,\n id: params.hookId,\n command,\n owned: params.previouslyOwned || result.changed || !installedBefore,\n };\n};\n\nexport const buildReceiptConfigComponents = (\n components: readonly IntegrationDefinition['receiptConfigComponents'][number][],\n): IntegrationComponent[] =>\n components.map((component) => ({\n type: INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n id: component.id,\n storagePath: component.storage_path,\n owned: false,\n }));\n\nexport const componentWasOwned = (params: {\n previous?: InstalledIntegration;\n type: IntegrationComponent['type'];\n id: string;\n}): boolean =>\n params.previous?.components.some(\n (component) => component.type === params.type && component.id === params.id && component.owned,\n ) ?? false;\n\nexport const buildInstalledIntegration = (params: {\n definition: IntegrationDefinition;\n previous?: InstalledIntegration;\n components: readonly IntegrationComponent[];\n}): InstalledIntegration => {\n const now = new Date().toISOString();\n return {\n id: params.definition.id,\n components: [...params.components],\n installedAt: params.previous?.installedAt ?? now,\n updatedAt: now,\n };\n};\n\nexport const removeOwnedSkill = (params: { basePath: string; cliVersion: string; skillId: string }): string[] => {\n const installedSkill = findInstalledSkill(readInstalledSkills(params.basePath), params.skillId);\n if (!installedSkill) {\n return [];\n }\n\n const removed = removeDirectories(params.basePath, installedSkill.installed_paths);\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n removeSkillId: params.skillId,\n });\n return removed;\n};\n\nexport const formatComponentStatus = (component: IntegrationComponent): string => {\n const owner = component.owned ? 'owned' : 'pre-existing';\n if (component.type === INTEGRATION_COMPONENT_TYPE.SKILL) {\n return `skill:${component.id} (${owner})`;\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n return `codex-hook:${component.id} (${owner})`;\n }\n return `receipt-config:${component.id} (${owner})`;\n};\n","import type {\n IntegrationCatalogComponent,\n IntegrationCatalogEntry,\n IntegrationId,\n} from '@/core/schemas/index.js';\nimport { INTEGRATION_COMPONENT_TYPE } from '@/core/schemas/index.js';\nimport { loadAllIntegrations } from '@/shared/catalog-loader.js';\nimport { CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK } from '../codex-hooks/core.js';\nimport type { CodexHookDefinition } from '../codex-hooks/core.js';\nimport { resolveIntegrationsDir } from '../../shared/command-paths.js';\n\nexport type IntegrationInstallOptions = {\n command?: string;\n};\n\nexport type IntegrationDefinition = IntegrationCatalogEntry & {\n skillComponent: Extract<IntegrationCatalogComponent, { type: typeof INTEGRATION_COMPONENT_TYPE.SKILL }>;\n hookComponent: Extract<IntegrationCatalogComponent, { type: typeof INTEGRATION_COMPONENT_TYPE.CODEX_HOOK }>;\n receiptConfigComponents: Extract<\n IntegrationCatalogComponent,\n { type: typeof INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG }\n >[];\n hookDefinition: CodexHookDefinition;\n};\n\nconst CODEX_HOOK_DEFINITIONS = [CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK] as const;\n\nexport const resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex hook commands');\n }\n return `${home}/.codex`;\n};\n\nexport const resolvePersonalContextRoot = (): string => {\n const home = process.env.HOME;\n if (!home) {\n throw new Error('HOME is required for pc integration commands');\n }\n return `${home}/.personal-project-contexts`;\n};\n\nconst resolveCodexHookDefinition = (hookId: IntegrationId): CodexHookDefinition => {\n const hookDefinition = CODEX_HOOK_DEFINITIONS.find((definition) => definition.id === hookId);\n if (!hookDefinition) {\n throw new Error(`Unknown Codex hook for integration: ${hookId}`);\n }\n return hookDefinition;\n};\n\nconst resolveCatalogSkillComponent = (entry: IntegrationCatalogEntry): IntegrationDefinition['skillComponent'] => {\n const component = entry.components.find((candidate) => candidate.type === INTEGRATION_COMPONENT_TYPE.SKILL);\n if (!component || component.type !== INTEGRATION_COMPONENT_TYPE.SKILL) {\n throw new Error(`Integration catalog entry must declare a skill component: ${entry.id}`);\n }\n return component;\n};\n\nconst resolveCatalogHookComponent = (entry: IntegrationCatalogEntry): IntegrationDefinition['hookComponent'] => {\n const component = entry.components.find((candidate) => candidate.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK);\n if (!component || component.type !== INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n throw new Error(`Integration catalog entry must declare a codex-hook component: ${entry.id}`);\n }\n return component;\n};\n\nconst resolveCatalogReceiptConfigComponents = (\n entry: IntegrationCatalogEntry,\n): IntegrationDefinition['receiptConfigComponents'] =>\n entry.components.filter(\n (component): component is IntegrationDefinition['receiptConfigComponents'][number] =>\n component.type === INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n );\n\nexport const loadIntegrationDefinitions = (): IntegrationDefinition[] =>\n loadAllIntegrations(resolveIntegrationsDir()).map((entry) => {\n const hookComponent = resolveCatalogHookComponent(entry);\n return {\n ...entry,\n skillComponent: resolveCatalogSkillComponent(entry),\n hookComponent,\n receiptConfigComponents: resolveCatalogReceiptConfigComponents(entry),\n hookDefinition: resolveCodexHookDefinition(hookComponent.id),\n };\n });\n\nexport const parseIntegrationId = (integrationId: string): IntegrationId => {\n const definition = loadIntegrationDefinitions().find((candidate) => candidate.id === integrationId);\n if (!definition) {\n throw new Error(`Unknown integration: ${integrationId}`);\n }\n return definition.id;\n};\n\nexport const resolveIntegrationDefinition = (integrationId: string): IntegrationDefinition => {\n const definition = loadIntegrationDefinitions().find((candidate) => candidate.id === integrationId);\n if (!definition) {\n throw new Error(`Unknown integration: ${integrationId}`);\n }\n return definition;\n};\n","import * as p from '@clack/prompts';\n\nexport const reportIntegrationError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const readStdin = async (): Promise<string> =>\n new Promise((resolve, reject) => {\n let raw = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk: string) => {\n raw += chunk;\n });\n process.stdin.on('end', () => resolve(raw));\n process.stdin.on('error', reject);\n });\n","import type { Command } from 'commander';\nimport {\n integrationInstallCommand,\n integrationListCommand,\n integrationPostToolUseHookCommand,\n integrationStatusCommand,\n integrationUninstallCommand,\n} from './commands.js';\n\nexport const registerIntegrationCommands = (program: Command): void => {\n const command = program.command('integration').description('user/global runtime integration 설치/조회/제거');\n\n command.command('list').description('사용 가능한 integration 목록').action(() => integrationListCommand());\n command\n .command('install <integrationId>')\n .description('integration 설치')\n .option('--command <command>', 'Codex hook에 저장할 실행 명령')\n .action((integrationId, opts: { command?: string }) => integrationInstallCommand(integrationId, opts));\n command.command('status <integrationId>').description('integration 설치 상태 확인').action((integrationId) =>\n integrationStatusCommand(integrationId),\n );\n command.command('uninstall <integrationId>').description('integration 제거').action((integrationId) =>\n integrationUninstallCommand(integrationId),\n );\n\n command\n .command('hook')\n .description('integration hook 내부 명령')\n .command('post-tool-use <integrationId>')\n .description('Codex PostToolUse integration hook entrypoint')\n .action((integrationId) => integrationPostToolUseHookCommand(integrationId));\n};\n","import * as p from '@clack/prompts';\nimport { auditProjectLayer } from './audit.logic.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\n\nexport const auditCommand = async (): Promise<void> => {\n p.intro('ai-ops audit');\n\n const report = auditProjectLayer(resolveBasePath());\n if (report.issues.length === 0) {\n p.log.success('audit 통과. manifest, context-layer, frontmatter, docs-status가 일치합니다.');\n p.outro('ai-ops audit 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n\n p.outro('ai-ops audit 완료');\n};\n","import * as p from '@clack/prompts';\nimport { diffProjectLayer } from './audit.logic.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\n\nexport const diffCommand = async (): Promise<void> => {\n p.intro('ai-ops diff');\n\n const report = diffProjectLayer(resolveBasePath());\n if (report.issues.length === 0) {\n p.log.success('변경 사항 없음. 최신 상태입니다.');\n p.outro('ai-ops diff 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n\n p.outro('ai-ops diff 완료');\n};\n","import * as p from '@clack/prompts';\nimport type { ProjectLayerTool } from '@/core/schemas/index.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { installProjectLayer } from './lifecycle.logic.js';\nimport { readProjectLayerManifest } from './state-io.js';\nimport { resolveProjectLayerTools } from './templates.js';\n\ntype InitCommandOptions = {\n tool?: string[];\n};\n\nconst TOOL_OPTIONS = [\n { value: 'codex' as ProjectLayerTool, label: 'Codex' },\n { value: 'gemini' as ProjectLayerTool, label: 'Gemini CLI' },\n { value: 'claude-code' as ProjectLayerTool, label: 'Claude Code' },\n];\n\nconst promptTools = async (): Promise<ProjectLayerTool[] | null> => {\n const selectedTools = await p.multiselect<ProjectLayerTool>({\n message: 'AI 도구 adapter를 선택하세요',\n options: TOOL_OPTIONS,\n initialValues: TOOL_OPTIONS.map((option) => option.value),\n required: true,\n });\n\n return p.isCancel(selectedTools) ? null : resolveProjectLayerTools(selectedTools);\n};\n\nexport const initCommand = async (opts: InitCommandOptions = {}): Promise<void> => {\n p.intro('ai-ops init');\n const basePath = resolveBasePath();\n\n const tools = opts.tool && opts.tool.length > 0 ? resolveProjectLayerTools(opts.tool) : await promptTools();\n if (tools === null) {\n p.cancel('취소됨');\n process.exit(0);\n }\n\n let previousManifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n previousManifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops init 실패' });\n return;\n }\n\n let result: ReturnType<typeof installProjectLayer>;\n try {\n result = installProjectLayer({\n basePath,\n tools,\n previousManifest,\n });\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops init 실패' });\n return;\n }\n\n p.log.success(`project operating layer 설치 완료: ${result.manifest.managed_files.length + result.manifest.project_files.length}개 파일`);\n p.log.info(`도구 adapter: ${result.manifest.tools.join(', ')}`);\n if (result.appended.length > 0) {\n p.log.info(`기존 파일에 managed section 추가:\\n${result.appended.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshedProjectFiles.length > 0) {\n p.log.info(`unmodified project-owned 파일 갱신:\\n${result.refreshedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preservedProjectFiles.length > 0) {\n p.log.info(`기존 project-owned 파일 보존:\\n${result.preservedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops init 완료');\n};\n","import * as p from '@clack/prompts';\nimport { ZodError } from 'zod';\n\nexport const formatProjectLayerCommandError = (error: unknown): string => {\n if (error instanceof ZodError) {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : 'manifest';\n return `${path}: ${issue.message}`;\n })\n .join('; ');\n }\n\n return error instanceof Error ? error.message : 'unknown error';\n};\n\nexport const reportInvalidProjectLayerManifest = (params: { error: unknown; outro: string }): void => {\n const reason = formatProjectLayerCommandError(params.error);\n p.log.error(`[invalid-manifest] .ai-ops/manifest.json 파싱 실패: ${reason}`);\n process.exitCode = 1;\n p.outro(params.outro);\n};\n\nexport const reportProjectLayerApplyError = (params: { error: unknown; outro: string }): void => {\n const reason = formatProjectLayerCommandError(params.error);\n p.log.error(`[project-layer-apply] project operating layer 적용 실패: ${reason}`);\n process.exitCode = 1;\n p.outro(params.outro);\n};\n","import * as p from '@clack/prompts';\nimport {\n diffProjectLayerPack,\n installProjectLayerPack,\n uninstallProjectLayerPack,\n updateProjectLayerPack,\n} from './pack.logic.js';\nimport { loadAllPacks } from './pack-source.logic.js';\nimport type { ProjectLayerManifest } from '@/core/schemas/index.js';\nimport { resolveBasePath, resolvePacksDir } from '../../shared/command-paths.js';\nimport { readProjectLayerManifest } from './state-io.js';\n\nconst readManifestForPackCommand = (basePath: string): ProjectLayerManifest | null => {\n try {\n return readProjectLayerManifest(basePath);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(`.ai-ops/manifest.json 파싱 실패: ${message}`);\n process.exitCode = 1;\n return null;\n }\n};\n\nconst reportPackError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const packListCommand = async (): Promise<void> => {\n const basePath = resolveBasePath();\n const packs = loadAllPacks(resolvePacksDir());\n const manifest = readManifestForPackCommand(basePath);\n const installedPackIds = new Set(manifest?.packs.map((pack) => pack.id) ?? []);\n\n p.intro('ai-ops pack list');\n p.log.info(\n packs\n .map((pack) => {\n const suffix = installedPackIds.has(pack.id) ? 'installed' : 'not installed';\n return `- ${pack.id} - ${suffix}`;\n })\n .join('\\n'),\n );\n p.outro('ai-ops pack list 완료');\n};\n\nexport const packInstallCommand = async (packId: string): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro(`ai-ops pack install ${packId}`);\n try {\n const result = installProjectLayerPack({ basePath, packId, packsDir: resolvePacksDir() });\n p.log.success(`pack 설치 완료: ${packId}`);\n if (result.written.length > 0) {\n p.log.info(`생성:\\n${result.written.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshed.length > 0) {\n p.log.info(`갱신:\\n${result.refreshed.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack install 완료');\n};\n\nexport const packDiffCommand = async (packId: string | undefined): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops pack diff');\n try {\n const report = diffProjectLayerPack({ basePath, packId, packsDir: resolvePacksDir() });\n if (report.issues.length === 0) {\n p.log.success('변경 사항 없음. pack이 최신 상태입니다.');\n p.outro('ai-ops pack diff 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack diff 완료');\n};\n\nexport const packUpdateCommand = async (packId: string | undefined): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops pack update');\n try {\n const manifest = readManifestForPackCommand(basePath);\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n process.exitCode = 1;\n p.outro('ai-ops pack update 완료');\n return;\n }\n\n const targetPackIds = packId ? [packId] : manifest.packs.map((pack) => pack.id);\n if (targetPackIds.length === 0) {\n p.log.warn('갱신할 설치된 pack이 없습니다.');\n p.outro('ai-ops pack update 완료');\n return;\n }\n\n for (const targetPackId of targetPackIds) {\n const result = updateProjectLayerPack({ basePath, packId: targetPackId, packsDir: resolvePacksDir() });\n p.log.success(`pack 갱신 완료: ${targetPackId}`);\n if (result.refreshed.length > 0) {\n p.log.info(`갱신:\\n${result.refreshed.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack update 완료');\n};\n\nexport const packUninstallCommand = async (packId: string): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro(`ai-ops pack uninstall ${packId}`);\n try {\n const result = uninstallProjectLayerPack({ basePath, packId });\n p.log.success(`pack 제거 완료: ${packId}`);\n if (result.deleted.length > 0) {\n p.log.info(`삭제:\\n${result.deleted.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack uninstall 완료');\n};\n","import * as p from '@clack/prompts';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { readProjectLayerManifest } from './state-io.js';\nimport { uninstallProjectLayer } from './uninstall.logic.js';\n\ntype UninstallCommandOptions = {\n yes?: boolean;\n};\n\nexport const uninstallCommand = async (opts: UninstallCommandOptions = {}): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops uninstall');\n\n let manifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops uninstall 실패' });\n return;\n }\n\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. project operating layer가 설치되어 있지 않습니다.');\n process.exitCode = 1;\n p.outro('ai-ops uninstall 실패');\n return;\n }\n\n const targetFiles = [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n '.ai-ops/context-layer.json',\n '.ai-ops/manifest.json',\n ];\n\n p.log.info(`처리 대상 (${targetFiles.length}개):\\n${targetFiles.map((file) => ` ${file}`).join('\\n')}`);\n\n if (!opts.yes) {\n const confirmed = await p.confirm({\n message: 'project operating layer를 제거하시겠습니까?',\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel('취소됨');\n process.exit(0);\n }\n }\n\n let result: ReturnType<typeof uninstallProjectLayer>;\n try {\n result = uninstallProjectLayer(basePath, manifest);\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops uninstall 실패' });\n return;\n }\n\n if (result.deleted.length > 0) {\n p.log.success(`삭제 완료:\\n${result.deleted.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.cleaned.length > 0) {\n p.log.success(`managed section 제거, 사용자 내용 보존:\\n${result.cleaned.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`수정되었거나 기존에 있던 project-owned 파일 보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.notFound.length > 0) {\n p.log.info(`이미 없음:\\n${result.notFound.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops uninstall 완료');\n};\n","import * as p from '@clack/prompts';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { diffProjectLayer } from './audit.logic.js';\nimport { updateProjectLayer } from './lifecycle.logic.js';\nimport { readProjectLayerManifest } from './state-io.js';\n\nexport const updateCommand = async (opts: { force: boolean }): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops update');\n\n let manifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops update 실패' });\n return;\n }\n\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n process.exit(1);\n }\n\n const diffReport = diffProjectLayer(basePath);\n if (diffReport.issues.length === 0 && !opts.force) {\n p.log.info('변경 사항이 없습니다.');\n p.outro('ai-ops update 완료');\n return;\n }\n\n let result: ReturnType<typeof updateProjectLayer>;\n try {\n result = updateProjectLayer({ basePath, manifest });\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops update 실패' });\n return;\n }\n\n p.log.success(`managed 파일 갱신: ${result.manifest.managed_files.length}개`);\n if (result.createdProjectFiles.length > 0) {\n p.log.info(`누락된 project-owned 파일 복구:\\n${result.createdProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshedProjectFiles.length > 0) {\n p.log.info(`unmodified project-owned 파일 갱신:\\n${result.refreshedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preservedProjectFiles.length > 0) {\n p.log.info(`project-owned 파일 보존:\\n${result.preservedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops update 완료');\n};\n","import type { Command } from 'commander';\nimport { auditCommand } from './audit-command.js';\nimport { diffCommand } from './diff-command.js';\nimport { initCommand } from './init-command.js';\nimport {\n packDiffCommand,\n packInstallCommand,\n packListCommand,\n packUninstallCommand,\n packUpdateCommand,\n} from './pack-command.js';\nimport { uninstallCommand } from './uninstall-command.js';\nimport { updateCommand } from './update-command.js';\n\nexport const registerProjectLayerCommands = (program: Command): void => {\n program\n .command('init')\n .description('project operating layer 초기 설치')\n .option('--tool <tool...>', '대상 도구 adapter 지정 (codex|gemini|claude-code)')\n .action((opts: { tool?: string[] }) => initCommand(opts));\n\n program\n .command('update')\n .description('project operating layer 갱신')\n .option('--force', '변경 없어도 강제 재설치', false)\n .action((opts: { force: boolean }) => updateCommand(opts));\n\n program.command('diff').description('project operating layer drift 비교').action(() => diffCommand());\n program.command('audit').description('project operating layer 상태 검사').action(() => auditCommand());\n\n program\n .command('uninstall')\n .description('project operating layer 제거')\n .option('--yes', '확인 프롬프트 없이 제거', false)\n .action((opts: { yes?: boolean }) => uninstallCommand(opts));\n\n const packCommand = program.command('pack').description('optional project operating layer pack 설치/조회/갱신');\n\n packCommand.command('list').description('사용 가능한 pack 목록').action(() => packListCommand());\n packCommand.command('install <packId>').description('pack 설치').action((packId) => packInstallCommand(packId));\n packCommand.command('diff [packId]').description('pack 변경 비교').action((packId) => packDiffCommand(packId));\n packCommand.command('update [packId]').description('pack 갱신').action((packId) => packUpdateCommand(packId));\n packCommand.command('uninstall <packId>').description('pack 제거').action((packId) => packUninstallCommand(packId));\n};\n","import * as p from '@clack/prompts';\nimport { rmSync } from 'node:fs';\nimport type { InstalledSkill, Skill, ToolId } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { buildSkillInstallPlan } from './renderer.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from './registry-io.js';\nimport { resolveSkillsDir, resolveUserBasePath } from '../../shared/command-paths.js';\nimport {\n findInstalledSkill,\n mergeSkillTools,\n removeInstalledSkill,\n resolveRequestedTools,\n upsertInstalledSkill,\n} from './state.js';\nimport { installSkillPackages, removeDirectories } from './install-files.js';\n\ntype SkillCommandOptions = {\n tool?: string[];\n};\n\nconst loadCompilerInputs = (): {\n allSkills: ReturnType<typeof loadAllSkills>;\n cliVersion: string;\n} => {\n return {\n allSkills: loadAllSkills(resolveSkillsDir()),\n cliVersion: getCliVersion(),\n };\n};\n\nconst resolveSkillById = (skills: readonly Skill[], skillId: string): Skill => {\n const canonicalSkillId = resolveCanonicalSkillId(skillId);\n const skill = skills.find((candidate) => candidate.id === canonicalSkillId);\n if (!skill) {\n throw new Error(`Unknown skill: ${skillId}`);\n }\n return skill;\n};\n\nconst writeUserSkillState = (params: {\n basePath: string;\n cliVersion: string;\n nextSkill?: InstalledSkill;\n removeSkillId?: string;\n}): void => {\n const registryPath = resolveSkillRegistryPath(params.basePath);\n const previous = readSkillRegistry(registryPath);\n const skills = params.removeSkillId\n ? removeInstalledSkill(previous?.skills ?? [], params.removeSkillId)\n : params.nextSkill\n ? upsertInstalledSkill(previous?.skills ?? [], params.nextSkill)\n : (previous?.skills ?? []);\n\n if (skills.length === 0) {\n rmSync(registryPath, { force: true });\n return;\n }\n\n writeSkillRegistry(registryPath, {\n skills,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] => {\n return (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n};\n\nconst installSkill = (params: {\n skill: Skill;\n requestedTools: readonly ToolId[];\n basePath: string;\n cliVersion: string;\n}): InstalledSkill => {\n const installedSkills = readInstalledSkills(params.basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, params.skill.id);\n const nextRequestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: params.requestedTools,\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill: params.skill,\n requestedTools: nextRequestedTools,\n });\n installSkillPackages(params.basePath, packages);\n\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSkill: installedSkill,\n });\n\n return installedSkill;\n};\n\nexport const skillListCommand = async (): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n\n p.intro('ai-ops skill list');\n const sections = [\n { kind: 'reference' as const, title: 'reference skills' },\n { kind: 'task' as const, title: 'task skills' },\n ]\n .map(({ kind, title }) => {\n const lines = allSkills\n .filter((skill) => skill.kind === kind)\n .map((skill) => {\n const installed = findInstalledSkill(installedSkills, skill.id);\n const suffix = installed ? `installed for ${installed.tools.join(', ')}` : 'not installed';\n return `- ${skill.id} - ${suffix}`;\n });\n\n if (lines.length === 0) {\n return null;\n }\n\n return `${title}\\n${lines.join('\\n')}`;\n })\n .filter((section): section is string => section !== null);\n\n p.log.info(sections.join('\\n\\n'));\n p.outro('ai-ops skill list 완료');\n};\n\nexport const skillInstallCommand = async (skillId: string, opts: SkillCommandOptions): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills, cliVersion } = loadCompilerInputs();\n const skill = resolveSkillById(allSkills, skillId);\n const requestedTools = resolveRequestedTools({ requested: opts.tool, supported: skill.supported_tools });\n\n p.intro(`ai-ops skill install ${skillId}`);\n const installedSkill = installSkill({\n skill,\n requestedTools,\n basePath,\n cliVersion,\n });\n\n p.log.success(`설치 완료: ${installedSkill.id} (${installedSkill.installed_paths.join(', ')})`);\n p.outro('ai-ops skill install 완료');\n};\n\nexport const skillDiffCommand = async (skillId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const targets = skillId ? installedSkills.filter((skill) => skill.id === skillId) : installedSkills;\n\n p.intro('ai-ops skill diff');\n\n if (targets.length === 0) {\n p.log.warn('비교할 설치된 skill이 없습니다.');\n p.outro('ai-ops skill diff 완료');\n return;\n }\n\n const lines = targets.map((installedSkill) => {\n const skill = resolveSkillById(allSkills, installedSkill.id);\n const { installedSkill: next } = buildSkillInstallPlan({\n skill,\n requestedTools: installedSkill.tools,\n });\n const changed = next.sourceHash !== installedSkill.sourceHash;\n return `- ${installedSkill.id}: ${changed ? 'changed' : 'up-to-date'} (${installedSkill.sourceHash} -> ${next.sourceHash})`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops skill diff 완료');\n};\n\nexport const skillUpdateCommand = async (skillId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills, cliVersion } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const targets = skillId ? installedSkills.filter((skill) => skill.id === skillId) : installedSkills;\n\n p.intro('ai-ops skill update');\n\n if (targets.length === 0) {\n p.log.warn('갱신할 설치된 skill이 없습니다.');\n p.outro('ai-ops skill update 완료');\n return;\n }\n\n const nextInstalledSkills = targets.map((installedSkill) => {\n const skill = resolveSkillById(allSkills, installedSkill.id);\n const { packages, installedSkill: next } = buildSkillInstallPlan({\n skill,\n requestedTools: installedSkill.tools,\n });\n installSkillPackages(basePath, packages);\n return next;\n });\n\n const registryPath = resolveSkillRegistryPath(basePath);\n const previous = readSkillRegistry(registryPath);\n const nextSkillIds = new Set(nextInstalledSkills.map((skill) => skill.id));\n const untouched = (previous?.skills ?? []).filter(\n (installedSkill) => !nextSkillIds.has(resolveCanonicalSkillId(installedSkill.id)),\n );\n writeSkillRegistry(registryPath, {\n skills: [...untouched, ...nextInstalledSkills],\n cliVersion,\n generatedAt: new Date().toISOString(),\n });\n\n p.log.success(`갱신 완료: ${nextInstalledSkills.map((skill) => skill.id).join(', ')}`);\n p.outro('ai-ops skill update 완료');\n};\n\nexport const skillUninstallCommand = async (skillId: string): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { cliVersion } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const installedSkill = findInstalledSkill(installedSkills, skillId);\n\n p.intro(`ai-ops skill uninstall ${skillId}`);\n\n if (!installedSkill) {\n p.log.warn('설치된 skill을 찾지 못했습니다.');\n p.outro('ai-ops skill uninstall 완료');\n return;\n }\n\n const removed = removeDirectories(basePath, installedSkill.installed_paths);\n\n writeUserSkillState({\n basePath,\n cliVersion,\n removeSkillId: skillId,\n });\n\n p.log.success(`제거 완료: ${removed.join(', ')}`);\n p.outro('ai-ops skill uninstall 완료');\n};\n","import type { Command } from 'commander';\nimport {\n skillDiffCommand,\n skillInstallCommand,\n skillListCommand,\n skillUninstallCommand,\n skillUpdateCommand,\n} from './commands.js';\n\nexport const registerSkillCommands = (program: Command): void => {\n const skillCommand = program.command('skill').description('에이전트 skill 설치/조회/갱신');\n const applyInstallOptions = (command: Command): Command => command.option('--tool <tool...>', '대상 도구 지정');\n\n skillCommand.command('list').description('사용 가능한 skill 목록').action(() => skillListCommand());\n applyInstallOptions(skillCommand.command('install <skillId>').description('skill 설치')).action((skillId, opts) =>\n skillInstallCommand(skillId, opts),\n );\n skillCommand.command('diff [skillId]').description('skill 변경 비교').action((skillId) => skillDiffCommand(skillId));\n skillCommand.command('update [skillId]').description('skill 갱신').action((skillId) => skillUpdateCommand(skillId));\n skillCommand.command('uninstall <skillId>').description('skill 제거').action((skillId) => skillUninstallCommand(skillId));\n};\n","import { join } from 'node:path';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { buildStudioSnapshot } from './snapshot.js';\n\ntype StudioSnapshotCommandOptions = {\n json?: boolean;\n};\n\nconst resolveOptionalUserBasePath = (): string | null => process.env.AI_OPS_HOME ?? process.env.HOME ?? null;\n\nconst resolveOptionalCodexHomePath = (): string | null => {\n if (process.env.CODEX_HOME && process.env.CODEX_HOME.length > 0) {\n return process.env.CODEX_HOME;\n }\n if (process.env.HOME && process.env.HOME.length > 0) {\n return join(process.env.HOME, '.codex');\n }\n return null;\n};\n\nconst reportStudioSnapshotError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stderr.write(`[studio-snapshot] ${message}\\n`);\n process.exitCode = 1;\n};\n\nexport const studioSnapshotCommand = async (opts: StudioSnapshotCommandOptions): Promise<void> => {\n if (opts.json !== true) {\n process.stderr.write('[studio-snapshot] --json is required\\n');\n process.exitCode = 1;\n return;\n }\n\n try {\n const snapshot = buildStudioSnapshot({\n basePath: resolveBasePath(),\n userBasePath: resolveOptionalUserBasePath(),\n codexHomePath: resolveOptionalCodexHomePath(),\n });\n process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\\n`);\n } catch (error) {\n reportStudioSnapshotError(error);\n }\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { ProjectLayerContextIndexSchema, ProjectLayerDocumentStatusSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextDocument, ProjectLayerManifest, StudioProjectDocument, StudioProjectDocumentProvenance, StudioProjectSnapshot, StudioSourceState } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH, auditProjectLayer, parseProjectLayerDocument, readProjectLayerManifest, resolveProjectLayerContextIndexPath, resolveProjectLayerFilePath, resolveProjectLayerManifestPath } from \"../project-layer/index.js\";\nimport { buildKnownAuditPaths, normalizeStudioProjectIssue } from \"./issue-normalization.js\";\nimport { DOCS_STATUS_RELATIVE_PATH, buildSourceState, createMissingSourceState, getErrorMessage, getTrustWarning, hasErrors, hasWarnings } from \"./snapshot-shared.js\";\nimport type { ProjectContextIndexReadResult, ProjectManifestReadResult } from \"./snapshot-shared.js\";\n\nconst RecoverableContextDocumentSchema = z\n .object({\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)),\n update_when: z.array(z.string().min(1)),\n path: z.string().min(1),\n contentHash: z.string().min(1),\n });\n\nconst RecoverableContextIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-layer-index'),\n documents: z.array(z.unknown()),\n generatedAt: z.string().min(1),\n });\n\n// ----- project snapshot -----\n\nconst readProjectManifestSnapshot = (basePath: string): ProjectManifestReadResult => {\n const manifestPath = resolveProjectLayerManifestPath(basePath);\n if (!existsSync(manifestPath)) {\n return {\n source: createMissingSourceState(PROJECT_LAYER_MANIFEST_RELATIVE_PATH),\n manifest: null,\n };\n }\n\n try {\n const manifest = readProjectLayerManifest(basePath);\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n exists: true,\n parsed: manifest !== null,\n generatedAt: manifest?.generatedAt ?? null,\n }),\n manifest,\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n manifest: null,\n };\n }\n};\n\nconst readProjectContextIndexSnapshot = (basePath: string): ProjectContextIndexReadResult => {\n const contextIndexPath = resolveProjectLayerContextIndexPath(basePath);\n if (!existsSync(contextIndexPath)) {\n return {\n source: createMissingSourceState(PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH),\n contextIndex: null,\n };\n }\n\n try {\n const parsedJson: unknown = JSON.parse(readFileSync(contextIndexPath, 'utf-8'));\n const strictContextIndex = ProjectLayerContextIndexSchema.safeParse(parsedJson);\n if (strictContextIndex.success) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: true,\n generatedAt: strictContextIndex.data.generatedAt,\n }),\n contextIndex: strictContextIndex.data,\n };\n }\n\n const recoverableContextIndex = RecoverableContextIndexSchema.safeParse(parsedJson);\n if (!recoverableContextIndex.success) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: strictContextIndex.error.message,\n }),\n contextIndex: null,\n };\n }\n\n const documents = recoverableContextIndex.data.documents.flatMap((document): ProjectLayerContextDocument[] => {\n const parsedDocument = RecoverableContextDocumentSchema.safeParse(document);\n return parsedDocument.success ? [parsedDocument.data] : [];\n });\n\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n generatedAt: recoverableContextIndex.data.generatedAt,\n error: strictContextIndex.error.message,\n }),\n contextIndex: {\n schemaVersion: 1,\n kind: 'context-layer-index',\n documents,\n generatedAt: recoverableContextIndex.data.generatedAt,\n },\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n contextIndex: null,\n };\n }\n};\n\nconst readDocsStatusSourceState = (basePath: string): StudioSourceState => {\n const docsStatusPath = resolveProjectLayerFilePath(basePath, DOCS_STATUS_RELATIVE_PATH);\n if (!existsSync(docsStatusPath)) {\n return createMissingSourceState(DOCS_STATUS_RELATIVE_PATH);\n }\n\n try {\n parseProjectLayerDocument(DOCS_STATUS_RELATIVE_PATH, readFileSync(docsStatusPath, 'utf-8'));\n return buildSourceState({\n path: DOCS_STATUS_RELATIVE_PATH,\n exists: true,\n parsed: true,\n });\n } catch (error) {\n return buildSourceState({\n path: DOCS_STATUS_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n });\n }\n};\n\nconst buildDocumentProvenance = (\n manifest: ProjectLayerManifest | null,\n path: string,\n): StudioProjectDocumentProvenance => {\n if (manifest?.managed_files.some((file) => file.path === path) === true) {\n return 'ai-ops-managed';\n }\n if (manifest?.project_files.some((file) => file.path === path) === true) {\n return 'project-owned';\n }\n if (manifest?.packs.some((pack) => pack.documents.some((document) => document.path === path)) === true) {\n return 'pack-document';\n }\n return 'context-only';\n};\n\nconst buildDocumentReadError = (code: string, message: string): string => `${code}: ${message}`;\n\nconst buildProjectDocumentSnapshot = (params: {\n basePath: string;\n indexed: ProjectLayerContextDocument;\n provenance: StudioProjectDocumentProvenance;\n}): StudioProjectDocument => {\n let absolutePath: string;\n try {\n absolutePath = resolveProjectLayerFilePath(params.basePath, params.indexed.path);\n } catch (error) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('unsafe-path', getErrorMessage(error)),\n };\n }\n\n if (!existsSync(absolutePath)) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('missing-file', `파일 없음: ${params.indexed.path}`),\n };\n }\n\n try {\n const document = parseProjectLayerDocument(params.indexed.path, readFileSync(absolutePath, 'utf-8'));\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: document.contentHash,\n contentHashMatches: document.contentHash === params.indexed.contentHash,\n provenance: params.provenance,\n content: document.content,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: null,\n };\n } catch (error) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('invalid-frontmatter', getErrorMessage(error)),\n };\n }\n};\n\nconst resolveProjectState = (params: {\n manifest: ProjectManifestReadResult;\n contextIndex: ProjectContextIndexReadResult;\n docsStatus: StudioSourceState;\n documents: readonly StudioProjectDocument[];\n hasAuditErrors: boolean;\n}): StudioProjectSnapshot['state'] => {\n const isUninitialized = !params.manifest.source.exists && !params.contextIndex.source.exists;\n if (isUninitialized) {\n return 'uninitialized';\n }\n\n const hasParseError =\n (params.manifest.source.exists && !params.manifest.source.parsed) ||\n (params.contextIndex.source.exists && !params.contextIndex.source.parsed) ||\n (params.docsStatus.exists && !params.docsStatus.parsed);\n const hasDocumentReadError = params.documents.some((document) => document.readError !== null);\n if (hasParseError || params.hasAuditErrors || hasDocumentReadError) {\n return 'degraded';\n }\n\n return 'ready';\n};\n\nexport const buildProjectSnapshot = (basePath: string): StudioProjectSnapshot => {\n const root = resolve(basePath);\n const manifest = readProjectManifestSnapshot(root);\n const contextIndex = readProjectContextIndexSnapshot(root);\n const docsStatus = readDocsStatusSourceState(root);\n const auditReport = auditProjectLayer(root);\n const documents =\n contextIndex.contextIndex?.documents.map((indexed) =>\n buildProjectDocumentSnapshot({\n basePath: root,\n indexed,\n provenance: buildDocumentProvenance(manifest.manifest, indexed.path),\n }),\n ) ?? [];\n const auditHasErrors = hasErrors(auditReport.issues);\n const knownAuditPaths = buildKnownAuditPaths({\n manifest: manifest.manifest,\n contextIndex: contextIndex.contextIndex,\n documents,\n });\n const auditIssues = auditReport.issues.map((issue) => normalizeStudioProjectIssue(issue, knownAuditPaths));\n\n return {\n root,\n state: resolveProjectState({\n manifest,\n contextIndex,\n docsStatus,\n documents,\n hasAuditErrors: auditHasErrors,\n }),\n files: {\n manifest: manifest.source,\n contextIndex: contextIndex.source,\n docsStatus,\n },\n audit: {\n currentSourceHash: auditReport.currentSourceHash,\n hasErrors: auditHasErrors,\n hasWarnings: hasWarnings(auditIssues),\n issues: auditIssues,\n },\n documents,\n };\n};\n","import { join } from \"node:path\";\nimport type { ProjectLayerContextDocument, ProjectLayerManifest, StudioSourceState } from \"@/core/schemas/index.js\";\n\n// ----- types -----\n\nexport type BuildStudioSnapshotParams = {\n basePath: string;\n userBasePath?: string | null;\n codexHomePath?: string | null;\n generatedAt?: string;\n cliVersion?: string;\n};\n\nexport type ProjectManifestReadResult = {\n source: StudioSourceState;\n manifest: ProjectLayerManifest | null;\n};\n\nexport type ProjectContextIndexReadResult = {\n source: StudioSourceState;\n contextIndex: ProjectLayerContextIndex | null;\n};\n\nexport type RuntimeReadResult<T> = {\n source: StudioSourceState;\n value: T | null;\n};\n\nexport const DOCS_STATUS_RELATIVE_PATH = \"docs/docs-status.md\";\n\n// ----- shared helpers -----\n\nexport const getErrorMessage = (error: unknown): string => (error instanceof Error ? error.message : 'unknown error');\n\nexport const resolveDefaultUserBasePath = (): string | null => process.env.AI_OPS_HOME ?? process.env.HOME ?? null;\n\nexport const resolveDefaultCodexHomePath = (): string | null => {\n if (process.env.CODEX_HOME && process.env.CODEX_HOME.length > 0) {\n return process.env.CODEX_HOME;\n }\n if (process.env.HOME && process.env.HOME.length > 0) {\n return join(process.env.HOME, '.codex');\n }\n return null;\n};\n\nexport const buildSourceState = (params: {\n path: string;\n exists: boolean;\n parsed: boolean;\n generatedAt?: string | null;\n error?: string | null;\n}): StudioSourceState => ({\n path: params.path,\n exists: params.exists,\n parsed: params.parsed,\n generatedAt: params.generatedAt ?? null,\n error: params.error ?? null,\n});\n\nexport const createMissingSourceState = (path: string): StudioSourceState =>\n buildSourceState({ path, exists: false, parsed: false });\n\nexport const createUnavailableSourceState = (params: { path: string; reason: string }): StudioSourceState =>\n buildSourceState({\n path: params.path,\n exists: false,\n parsed: false,\n error: params.reason,\n });\n\nexport const hasErrors = (issues: readonly { level: string }[]): boolean => issues.some((issue) => issue.level === 'error');\n\nexport const hasWarnings = (issues: readonly { level: string }[]): boolean => issues.some((issue) => issue.level === 'warning');\n\nexport const getTrustWarning = (status: ProjectLayerContextDocument['status']): string | null => {\n if (status === 'Reserved') {\n return 'Reserved document is not current decision-making evidence.';\n }\n if (status === 'Draft') {\n return 'Draft document requires review before use as decision-making evidence.';\n }\n if (status === 'Archived') {\n return 'Archived document is historical record and should not guide current operation.';\n }\n return null;\n};\n\nexport const uniqueStrings = (values: readonly string[]): string[] => [...new Set(values.filter((value) => value.length > 0))];\n","import {\n PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n resolveProjectLayerFilePath,\n} from \"../project-layer/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest, StudioProjectDocument, StudioProjectIssue, StudioProjectIssueSource } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerIssue } from \"../project-layer/index.js\";\nimport { DOCS_STATUS_RELATIVE_PATH, uniqueStrings } from \"./snapshot-shared.js\";\n\nconst AUDIT_ISSUE_SOURCES_BY_CODE = {\n 'missing-manifest': 'manifest',\n 'invalid-manifest': 'manifest',\n 'manifest-missing-managed-file': 'manifest',\n 'missing-context-index': 'context-layer',\n 'invalid-context-index': 'context-layer',\n 'context-missing-document': 'context-layer',\n 'context-document-mismatch': 'context-layer',\n 'context-extra-document': 'context-layer',\n 'missing-docs-status': 'docs-status',\n 'invalid-docs-status': 'docs-status',\n 'docs-status-missing-document': 'docs-status',\n 'docs-status-mismatch': 'docs-status',\n 'docs-status-extra-document': 'docs-status',\n 'missing-file': 'file-system',\n 'invalid-frontmatter': 'frontmatter',\n 'missing-managed-section': 'managed-section',\n 'source-hash-drift': 'source-hash',\n 'managed-source-hash-drift': 'source-hash',\n 'invalid-custom-project-rule': 'frontmatter',\n 'custom-project-rules-drift': 'manifest',\n} as const satisfies Record<string, StudioProjectIssueSource>;\n\nconst AUDIT_ISSUE_ACTION_LABELS_BY_SOURCE = {\n manifest: 'Review manifest record',\n 'context-layer': 'Review context index',\n 'docs-status': 'Review docs status',\n frontmatter: 'Review frontmatter',\n 'managed-section': 'Review managed section',\n 'file-system': 'Review missing file',\n 'source-hash': 'Review source hash',\n unknown: null,\n} as const satisfies Record<StudioProjectIssueSource, string | null>;\n\nconst getManifestDocumentPaths = (manifest: ProjectLayerManifest | null): string[] =>\n manifest === null\n ? []\n : [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n ...manifest.packs.flatMap((pack) => pack.documents.map((file) => file.path)),\n ...manifest.packs.flatMap((pack) => pack.files.map((file) => file.path)),\n ];\n\nexport const buildKnownAuditPaths = (params: {\n manifest: ProjectLayerManifest | null;\n contextIndex: ProjectLayerContextIndex | null;\n documents: readonly StudioProjectDocument[];\n}): string[] =>\n uniqueStrings([\n PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n DOCS_STATUS_RELATIVE_PATH,\n ...getManifestDocumentPaths(params.manifest),\n ...(params.contextIndex?.documents.map((document) => document.path) ?? []),\n ...params.documents.map((document) => document.path),\n ]).sort((left, right) => right.length - left.length || left.localeCompare(right));\n\nconst findKnownPathInMessage = (message: string, knownPaths: readonly string[]): string | null =>\n knownPaths.find((path) => message.includes(path)) ?? null;\n\nconst parsePathLikeToken = (value: string): string | null => {\n const trimmed = value.trim().replace(/[.,;)]$/, '');\n if (trimmed.length === 0) {\n return null;\n }\n\n try {\n resolveProjectLayerFilePath('/', trimmed);\n return trimmed;\n } catch {\n return null;\n }\n};\n\nconst extractTrailingIssuePath = (message: string): string | null => {\n const trailingSegment = message.split(':').at(-1);\n if (trailingSegment === undefined) {\n return null;\n }\n\n const [firstToken] = trailingSegment.trim().split(/\\s+/);\n return firstToken === undefined ? null : parsePathLikeToken(firstToken);\n};\n\nconst extractLeadingIssuePath = (message: string): string | null => {\n const [firstToken] = message.trim().split(/\\s+/);\n return firstToken === undefined ? null : parsePathLikeToken(firstToken);\n};\n\nconst resolveIssueSource = (issue: ProjectLayerIssue): StudioProjectIssueSource =>\n AUDIT_ISSUE_SOURCES_BY_CODE[issue.code] ?? 'unknown';\n\nconst resolveIssueAffectedPath = (params: {\n issue: ProjectLayerIssue;\n source: StudioProjectIssueSource;\n knownPaths: readonly string[];\n}): string | null => {\n if (params.issue.code === 'missing-manifest' || params.issue.code === 'invalid-manifest') {\n return PROJECT_LAYER_MANIFEST_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'missing-context-index' || params.issue.code === 'invalid-context-index') {\n return PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'missing-docs-status' || params.issue.code === 'invalid-docs-status') {\n return DOCS_STATUS_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'source-hash-drift') {\n return null;\n }\n\n if (params.issue.code === 'invalid-custom-project-rule') {\n return extractLeadingIssuePath(params.issue.message);\n }\n\n const knownPath = findKnownPathInMessage(params.issue.message, params.knownPaths);\n if (knownPath !== null) {\n return knownPath;\n }\n\n if (params.source === 'unknown') {\n return null;\n }\n\n return extractTrailingIssuePath(params.issue.message);\n};\n\nexport const normalizeStudioProjectIssue = (\n issue: ProjectLayerIssue,\n knownPaths: readonly string[] = [],\n): StudioProjectIssue => {\n const source = resolveIssueSource(issue);\n\n return {\n level: issue.level,\n code: issue.code,\n message: issue.message,\n source,\n affectedPath: resolveIssueAffectedPath({ issue, source, knownPaths }),\n suggestedActionLabel: AUDIT_ISSUE_ACTION_LABELS_BY_SOURCE[source],\n };\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { COMPILER_DATA_DIR } from \"@/shared/paths.js\";\nimport { loadAllIntegrations, loadAllSkills, loadAllSubagents } from \"@/shared/catalog-loader.js\";\nimport { CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK, inspectCodexHook, resolveCodexHooksPath } from \"../codex-hooks/core.js\";\nimport type { CodexHookDefinition } from \"../codex-hooks/core.js\";\nimport { findInstalledIntegration, readIntegrationManifest, resolveIntegrationManifestPath } from \"../integrations/manifest-io.js\";\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath } from \"../skills/registry-io.js\";\nimport { readSubagentManifest, resolveSubagentManifestPath } from \"../subagents/manifest-io.js\";\nimport type { IntegrationCatalogComponent, IntegrationComponent, InstalledIntegration, InstalledSkill, InstalledSubagent, Skill, StudioHookSnapshot, StudioInstalledPathState, StudioIntegrationComponentStatus, StudioIntegrationSnapshot, StudioRuntimeSnapshot, StudioSourceState, Subagent } from \"@/core/schemas/index.js\";\nimport { buildSourceState, createMissingSourceState, createUnavailableSourceState, getErrorMessage } from \"./snapshot-shared.js\";\nimport type { RuntimeReadResult } from \"./snapshot-shared.js\";\n\n// ----- constants -----\n\nconst INTEGRATIONS_DATA_DIR = join(COMPILER_DATA_DIR, 'integrations');\nconst SKILLS_DATA_DIR = join(COMPILER_DATA_DIR, 'skills');\nconst SUBAGENTS_DATA_DIR = join(COMPILER_DATA_DIR, 'subagents');\n\nconst INTEGRATIONS_MANIFEST_FALLBACK_PATH = '.ai-ops/integrations-manifest.json';\nconst SKILLS_MANIFEST_FALLBACK_PATH = '.ai-ops/skills-manifest.json';\nconst SUBAGENTS_MANIFEST_FALLBACK_PATH = '.ai-ops/subagents-manifest.json';\nconst HOOKS_FALLBACK_PATH = '.codex/hooks.json';\n\nconst KNOWN_CODEX_HOOK_DEFINITIONS = [CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK] as const;\n\n// ----- runtime snapshot -----\n\nconst readRuntimeManifest = <T>(params: {\n manifestPath: string | null;\n fallbackPath: string;\n unavailableReason: string | null;\n read: (manifestPath: string) => T | null;\n getGeneratedAt: (value: T) => string | null;\n}): RuntimeReadResult<T> => {\n if (params.manifestPath === null) {\n return {\n source: createUnavailableSourceState({\n path: params.fallbackPath,\n reason: params.unavailableReason ?? 'Runtime home is unavailable.',\n }),\n value: null,\n };\n }\n\n if (!existsSync(params.manifestPath)) {\n return {\n source: createMissingSourceState(params.manifestPath),\n value: null,\n };\n }\n\n try {\n const value = params.read(params.manifestPath);\n return {\n source: buildSourceState({\n path: params.manifestPath,\n exists: true,\n parsed: value !== null,\n generatedAt: value === null ? null : params.getGeneratedAt(value),\n }),\n value,\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: params.manifestPath,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n value: null,\n };\n }\n};\n\nconst isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readHooksSourceState = (codexHomePath: string | null, unavailableReason: string | null): StudioSourceState => {\n if (codexHomePath === null) {\n return createUnavailableSourceState({\n path: HOOKS_FALLBACK_PATH,\n reason: unavailableReason ?? 'CODEX_HOME or HOME is required for Codex hooks.',\n });\n }\n\n const hooksPath = resolveCodexHooksPath(codexHomePath);\n if (!existsSync(hooksPath)) {\n return createMissingSourceState(hooksPath);\n }\n\n try {\n const parsed: unknown = JSON.parse(readFileSync(hooksPath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: false,\n error: 'hooks.json must contain a JSON object',\n });\n }\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: true,\n });\n } catch (error) {\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n });\n }\n};\n\nconst getCatalogComponentId = (component: IntegrationCatalogComponent): string => component.id;\n\nconst getInstalledComponentId = (component: IntegrationComponent): string => component.id;\n\nconst findInstalledComponent = (\n integration: InstalledIntegration | undefined,\n catalogComponent: IntegrationCatalogComponent,\n): IntegrationComponent | null =>\n integration?.components.find(\n (component) =>\n component.type === catalogComponent.type && getInstalledComponentId(component) === getCatalogComponentId(catalogComponent),\n ) ?? null;\n\nconst buildIntegrationComponentStatus = (params: {\n catalogComponent: IntegrationCatalogComponent;\n installedComponent: IntegrationComponent | null;\n}): StudioIntegrationComponentStatus => ({\n type: params.catalogComponent.type,\n id: getCatalogComponentId(params.catalogComponent),\n installed: params.installedComponent !== null,\n owned: params.installedComponent?.owned ?? null,\n catalog: params.catalogComponent,\n installedComponent: params.installedComponent,\n});\n\nconst buildIntegrationSnapshots = (installedIntegrations: readonly InstalledIntegration[]): StudioIntegrationSnapshot[] => {\n const catalog = loadAllIntegrations(INTEGRATIONS_DATA_DIR);\n return catalog.map((entry) => {\n const installedIntegration = findInstalledIntegration(installedIntegrations, entry.id);\n return {\n id: entry.id,\n description: entry.description,\n installed: installedIntegration !== undefined,\n installedAt: installedIntegration?.installedAt ?? null,\n updatedAt: installedIntegration?.updatedAt ?? null,\n components: entry.components.map((catalogComponent) =>\n buildIntegrationComponentStatus({\n catalogComponent,\n installedComponent: findInstalledComponent(installedIntegration, catalogComponent),\n }),\n ),\n };\n });\n};\n\nconst buildInstalledPathStates = (params: {\n userBasePath: string | null;\n installedPaths: readonly string[];\n}): StudioInstalledPathState[] => {\n if (params.userBasePath === null) {\n return params.installedPaths.map((path) => ({ path, exists: false }));\n }\n\n return params.installedPaths.map((path) => ({\n path,\n exists: existsSync(join(params.userBasePath ?? '', path)),\n }));\n};\n\nconst buildInstalledSkillMap = (installedSkills: readonly InstalledSkill[]): Map<string, InstalledSkill> =>\n new Map(\n installedSkills.map((skill) => [\n resolveCanonicalSkillId(skill.id),\n {\n ...skill,\n id: resolveCanonicalSkillId(skill.id),\n },\n ]),\n );\n\nconst buildSkillSnapshots = (params: {\n userBasePath: string | null;\n installedSkills: readonly InstalledSkill[];\n}): StudioRuntimeSnapshot['skills'] => {\n const installed = buildInstalledSkillMap(params.installedSkills);\n return loadAllSkills(SKILLS_DATA_DIR).map((skill: Skill) => {\n const installedSkill = installed.get(skill.id);\n return {\n id: skill.id,\n kind: skill.kind,\n description: skill.description,\n supported_tools: skill.supported_tools,\n groups: skill.groups,\n installed: installedSkill !== undefined,\n installedTools: installedSkill?.tools ?? [],\n installedPaths: buildInstalledPathStates({\n userBasePath: params.userBasePath,\n installedPaths: installedSkill?.installed_paths ?? [],\n }),\n sourceHash: installedSkill?.sourceHash ?? null,\n };\n });\n};\n\nconst buildInstalledSubagentMap = (installedSubagents: readonly InstalledSubagent[]): Map<string, InstalledSubagent> =>\n new Map(installedSubagents.map((subagent) => [subagent.id, subagent]));\n\nconst buildSubagentSnapshots = (params: {\n userBasePath: string | null;\n installedSubagents: readonly InstalledSubagent[];\n}): StudioRuntimeSnapshot['subagents'] => {\n const installed = buildInstalledSubagentMap(params.installedSubagents);\n return loadAllSubagents(SUBAGENTS_DATA_DIR).map((subagent: Subagent) => {\n const installedSubagent = installed.get(subagent.id);\n return {\n id: subagent.id,\n description: subagent.frontmatter.codex.parsed.description,\n supported_tools: subagent.supported_tools,\n installed: installedSubagent !== undefined,\n installedTools: installedSubagent?.tools ?? [],\n installedPaths: buildInstalledPathStates({\n userBasePath: params.userBasePath,\n installedPaths: installedSubagent?.installed_paths ?? [],\n }),\n sourceHash: installedSubagent?.sourceHash ?? null,\n };\n });\n};\n\nconst buildHookSnapshot = (params: {\n codexHomePath: string | null;\n definition: CodexHookDefinition;\n unavailableReason: string | null;\n}): StudioHookSnapshot => {\n if (params.codexHomePath === null) {\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath: null,\n installed: false,\n error: params.unavailableReason ?? 'CODEX_HOME or HOME is required for Codex hooks.',\n };\n }\n\n const hooksPath = resolveCodexHooksPath(params.codexHomePath);\n try {\n const status = inspectCodexHook({\n hooksPath,\n definition: params.definition,\n });\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath: status.hooksPath,\n installed: status.installed,\n error: null,\n };\n } catch (error) {\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath,\n installed: false,\n error: getErrorMessage(error),\n };\n }\n};\n\nexport const buildRuntimeSnapshot = (params: {\n userBasePath: string | null;\n codexHomePath: string | null;\n}): StudioRuntimeSnapshot => {\n const userUnavailableReason =\n params.userBasePath === null ? 'AI_OPS_HOME or HOME is required for user/global runtime manifests.' : null;\n const codexUnavailableReason =\n params.codexHomePath === null ? 'CODEX_HOME or HOME is required for Codex hooks.' : null;\n const integrationManifest = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveIntegrationManifestPath(params.userBasePath),\n fallbackPath: INTEGRATIONS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readIntegrationManifest,\n getGeneratedAt: (manifest) => manifest.generatedAt,\n });\n const skillRegistry = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveSkillRegistryPath(params.userBasePath),\n fallbackPath: SKILLS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readSkillRegistry,\n getGeneratedAt: (registry) => registry.generatedAt,\n });\n const subagentManifest = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveSubagentManifestPath(params.userBasePath),\n fallbackPath: SUBAGENTS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readSubagentManifest,\n getGeneratedAt: (manifest) => manifest.generatedAt,\n });\n const hooks = readHooksSourceState(params.codexHomePath, codexUnavailableReason);\n const installedIntegrations = integrationManifest.value?.integrations ?? [];\n const installedSkills = skillRegistry.value?.skills ?? [];\n const installedSubagents = subagentManifest.value?.subagents ?? [];\n\n return {\n available: params.userBasePath !== null,\n unavailableReason: userUnavailableReason,\n userBasePath: params.userBasePath,\n codexHomePath: params.codexHomePath,\n manifests: {\n integrations: integrationManifest.source,\n skills: skillRegistry.source,\n subagents: subagentManifest.source,\n hooks,\n },\n integrations: buildIntegrationSnapshots(installedIntegrations),\n skills: buildSkillSnapshots({\n userBasePath: params.userBasePath,\n installedSkills,\n }),\n subagents: buildSubagentSnapshots({\n userBasePath: params.userBasePath,\n installedSubagents,\n }),\n hooks: KNOWN_CODEX_HOOK_DEFINITIONS.map((definition) =>\n buildHookSnapshot({\n codexHomePath: params.codexHomePath,\n definition,\n unavailableReason: codexUnavailableReason,\n }),\n ),\n };\n};\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { SubagentManifestSchema } from '@/core/schemas/index.js';\nimport type { SubagentManifest } from '@/core/schemas/index.js';\n\nexport const SUBAGENT_MANIFEST_FILENAME = 'subagents-manifest.json';\n\nexport const parseSubagentManifest = (json: string): SubagentManifest =>\n SubagentManifestSchema.parse(JSON.parse(json));\n\nexport const serializeSubagentManifest = (manifest: SubagentManifest): string => JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const resolveSubagentManifestPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', SUBAGENT_MANIFEST_FILENAME);\n\nexport const readSubagentManifest = (manifestPath: string): SubagentManifest | null => {\n let raw: string;\n try {\n raw = readFileSync(manifestPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseSubagentManifest(raw);\n};\n\nexport const writeSubagentManifest = (manifestPath: string, manifest: SubagentManifest): void => {\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeSubagentManifest(manifest), 'utf-8');\n};\n","import { getCliVersion } from \"@/shared/source-hash.js\";\nimport { StudioSnapshotSchema } from \"@/core/schemas/index.js\";\nimport type { StudioSnapshot } from \"@/core/schemas/index.js\";\nimport { buildProjectSnapshot } from \"./project-snapshot.js\";\nimport { buildRuntimeSnapshot } from \"./runtime-snapshot.js\";\nimport { resolveDefaultCodexHomePath, resolveDefaultUserBasePath } from \"./snapshot-shared.js\";\nimport type { BuildStudioSnapshotParams } from \"./snapshot-shared.js\";\n\nexport type { BuildStudioSnapshotParams } from \"./snapshot-shared.js\";\nexport { normalizeStudioProjectIssue } from \"./issue-normalization.js\";\n\n// ----- public API -----\n\nexport const buildStudioSnapshot = (params: BuildStudioSnapshotParams): StudioSnapshot => {\n const generatedAt = params.generatedAt ?? new Date().toISOString();\n const userBasePath = params.userBasePath === undefined ? resolveDefaultUserBasePath() : params.userBasePath;\n const codexHomePath = params.codexHomePath === undefined ? resolveDefaultCodexHomePath() : params.codexHomePath;\n\n return StudioSnapshotSchema.parse({\n schemaVersion: 1,\n kind: 'ai-ops-studio-snapshot',\n generatedAt,\n cliVersion: params.cliVersion ?? getCliVersion(),\n project: buildProjectSnapshot(params.basePath),\n runtime: buildRuntimeSnapshot({\n userBasePath,\n codexHomePath,\n }),\n });\n};\n","import type { Command } from 'commander';\nimport { studioSnapshotCommand } from './commands.js';\n\nexport const registerStudioCommands = (program: Command): void => {\n const studioCommand = program.command('studio').description('ai-ops Studio read-only helpers');\n\n studioCommand\n .command('snapshot')\n .description('Studio read-only snapshot JSON 생성')\n .requiredOption('--json', 'JSON으로 출력')\n .action((opts: { json?: boolean }) => studioSnapshotCommand(opts));\n};\n","import * as p from '@clack/prompts';\nimport { existsSync, rmSync } from 'node:fs';\nimport type { InstalledSubagent, Subagent, ToolId } from '@/core/schemas/index.js';\nimport { loadAllSubagents } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { readSubagentManifest, resolveSubagentManifestPath, writeSubagentManifest } from './manifest-io.js';\nimport { buildSubagentInstallPlan } from './renderer.js';\nimport { resolveSubagentsDir, resolveUserBasePath } from '../../shared/command-paths.js';\nimport { installSubagentPackages, removeSubagentFiles } from './install-files.js';\nimport {\n findInstalledSubagent,\n mergeSubagentTools,\n removeInstalledSubagent,\n resolveInstalledSubagentPaths,\n resolveRequestedSubagentTools,\n upsertInstalledSubagent,\n} from './state.js';\n\ntype SubagentCommandOptions = {\n tool?: string[];\n};\n\nconst loadCompilerInputs = (): {\n allSubagents: ReturnType<typeof loadAllSubagents>;\n cliVersion: string;\n} => {\n return {\n allSubagents: loadAllSubagents(resolveSubagentsDir()),\n cliVersion: getCliVersion(),\n };\n};\n\nconst resolveSubagentById = (subagents: readonly Subagent[], subagentId: string): Subagent => {\n const subagent = subagents.find((candidate) => candidate.id === subagentId);\n if (!subagent) {\n throw new Error(`Unknown subagent: ${subagentId}`);\n }\n return subagent;\n};\n\nconst writeUserSubagentState = (params: {\n basePath: string;\n cliVersion: string;\n nextSubagent?: InstalledSubagent;\n removeSubagentId?: string;\n}): void => {\n const manifestPath = resolveSubagentManifestPath(params.basePath);\n const previous = readSubagentManifest(manifestPath);\n const subagents = params.removeSubagentId\n ? removeInstalledSubagent(previous?.subagents ?? [], params.removeSubagentId)\n : params.nextSubagent\n ? upsertInstalledSubagent(previous?.subagents ?? [], params.nextSubagent)\n : (previous?.subagents ?? []);\n\n if (subagents.length === 0) {\n rmSync(manifestPath, { force: true });\n return;\n }\n\n writeSubagentManifest(manifestPath, {\n subagents,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nconst readInstalledSubagents = (basePath: string): InstalledSubagent[] =>\n readSubagentManifest(resolveSubagentManifestPath(basePath))?.subagents ?? [];\n\nconst warnMissingSkills = (requiredSkills: ReturnType<typeof buildSubagentInstallPlan>['requiredSkills']): void => {\n const missing = requiredSkills.filter((skill) => !existsSync(skill.path));\n if (missing.length === 0) {\n return;\n }\n\n p.log.warn(\n [\n '필요한 skill이 아직 설치되지 않았습니다. subagent 설치는 계속 진행합니다.',\n ...missing.map((skill) => `- ${skill.tool}:${skill.skillName} (${skill.path})`),\n ].join('\\n'),\n );\n};\n\nconst installSubagent = (params: {\n subagent: Subagent;\n requestedTools: readonly ToolId[];\n basePath: string;\n cliVersion: string;\n}): InstalledSubagent => {\n const installedSubagents = readInstalledSubagents(params.basePath);\n const existingInstalledSubagent = findInstalledSubagent(installedSubagents, params.subagent.id);\n const nextRequestedTools = mergeSubagentTools({\n existing: existingInstalledSubagent?.tools,\n requested: params.requestedTools,\n });\n const { packages, installedSubagent, requiredSkills } = buildSubagentInstallPlan({\n subagent: params.subagent,\n requestedTools: nextRequestedTools,\n userBasePath: params.basePath,\n });\n installSubagentPackages(params.basePath, packages);\n warnMissingSkills(requiredSkills);\n\n writeUserSubagentState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSubagent: installedSubagent,\n });\n\n return installedSubagent;\n};\n\nexport const subagentListCommand = async (): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n\n p.intro('ai-ops subagent list');\n const lines = allSubagents.map((subagent) => {\n const installed = findInstalledSubagent(installedSubagents, subagent.id);\n const suffix = installed ? `installed for ${installed.tools.join(', ')}` : 'not installed';\n return `- ${subagent.id} - ${suffix}`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops subagent list 완료');\n};\n\nexport const subagentInstallCommand = async (subagentId: string, opts: SubagentCommandOptions): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents, cliVersion } = loadCompilerInputs();\n const subagent = resolveSubagentById(allSubagents, subagentId);\n const requestedTools = resolveRequestedSubagentTools({ requested: opts.tool, supported: subagent.supported_tools });\n\n p.intro(`ai-ops subagent install ${subagentId}`);\n const installedSubagent = installSubagent({\n subagent,\n requestedTools,\n basePath,\n cliVersion,\n });\n\n p.log.success(`설치 완료: ${installedSubagent.id} (${installedSubagent.installed_paths.join(', ')})`);\n p.outro('ai-ops subagent install 완료');\n};\n\nexport const subagentDiffCommand = async (subagentId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n const targets = subagentId\n ? installedSubagents.filter((subagent) => subagent.id === subagentId)\n : installedSubagents;\n\n p.intro('ai-ops subagent diff');\n\n if (targets.length === 0) {\n p.log.warn('비교할 설치된 subagent가 없습니다.');\n p.outro('ai-ops subagent diff 완료');\n return;\n }\n\n const lines = targets.map((installedSubagent) => {\n const subagent = resolveSubagentById(allSubagents, installedSubagent.id);\n const { installedSubagent: next } = buildSubagentInstallPlan({\n subagent,\n requestedTools: installedSubagent.tools,\n userBasePath: basePath,\n });\n const changed = next.sourceHash !== installedSubagent.sourceHash;\n return `- ${installedSubagent.id}: ${changed ? 'changed' : 'up-to-date'} (${installedSubagent.sourceHash} -> ${next.sourceHash})`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops subagent diff 완료');\n};\n\nexport const subagentUpdateCommand = async (subagentId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents, cliVersion } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n const targets = subagentId\n ? installedSubagents.filter((subagent) => subagent.id === subagentId)\n : installedSubagents;\n\n p.intro('ai-ops subagent update');\n\n if (targets.length === 0) {\n p.log.warn('갱신할 설치된 subagent가 없습니다.');\n p.outro('ai-ops subagent update 완료');\n return;\n }\n\n const nextInstalledSubagents = targets.map((installedSubagent) => {\n const subagent = resolveSubagentById(allSubagents, installedSubagent.id);\n const { packages, installedSubagent: next, requiredSkills } = buildSubagentInstallPlan({\n subagent,\n requestedTools: installedSubagent.tools,\n userBasePath: basePath,\n });\n installSubagentPackages(basePath, packages);\n warnMissingSkills(requiredSkills);\n return next;\n });\n\n const manifestPath = resolveSubagentManifestPath(basePath);\n const previous = readSubagentManifest(manifestPath);\n const nextSubagentIds = new Set(nextInstalledSubagents.map((subagent) => subagent.id));\n const untouched = (previous?.subagents ?? []).filter((subagent) => !nextSubagentIds.has(subagent.id));\n writeSubagentManifest(manifestPath, {\n subagents: [...untouched, ...nextInstalledSubagents],\n cliVersion,\n generatedAt: new Date().toISOString(),\n });\n\n p.log.success(`갱신 완료: ${nextInstalledSubagents.map((subagent) => subagent.id).join(', ')}`);\n p.outro('ai-ops subagent update 완료');\n};\n\nexport const subagentUninstallCommand = async (subagentId: string): Promise<void> => {\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const installedSubagents = readInstalledSubagents(basePath);\n const installedSubagent = findInstalledSubagent(installedSubagents, subagentId);\n\n p.intro(`ai-ops subagent uninstall ${subagentId}`);\n\n if (!installedSubagent) {\n p.log.warn('설치된 subagent를 찾지 못했습니다.');\n p.outro('ai-ops subagent uninstall 완료');\n return;\n }\n\n const removed = removeSubagentFiles(basePath, resolveInstalledSubagentPaths(installedSubagent));\n\n writeUserSubagentState({\n basePath,\n cliVersion,\n removeSubagentId: subagentId,\n });\n\n p.log.success(`제거 완료: ${removed.join(', ')}`);\n p.outro('ai-ops subagent uninstall 완료');\n};\n","import { resolve } from 'node:path';\nimport { computeInstalledSubagentHash } from '@/shared/source-hash.js';\nimport { buildSubagentRelativePath } from '@/core/schemas/subagent-paths.js';\nimport { renderFlatToml } from './toml.js';\nimport type { CodexSubagentFrontmatter, InstalledSubagent, Subagent, ToolId } from '@/core/schemas/index.js';\n\ntype SubagentPackageFile = {\n relativePath: string;\n content: string;\n};\n\nexport type SubagentPackage = {\n subagentId: string;\n files: SubagentPackageFile[];\n};\n\nexport type RequiredSubagentSkill = {\n tool: ToolId;\n skillName: string;\n path: string;\n};\n\nconst normalizeSelectedTools = (subagent: Subagent, requestedTools: readonly ToolId[]): ToolId[] => {\n const supportedToolSet = new Set(subagent.supported_tools);\n return requestedTools.filter((toolId) => supportedToolSet.has(toolId));\n};\n\nconst renderMarkdownSubagent = (params: { rawFrontmatter: string; prompt: string }): string =>\n `---\\n${params.rawFrontmatter.trimEnd()}\\n---\\n\\n${params.prompt.trimEnd()}\\n`;\n\nconst getCodexTomlEntries = (frontmatter: CodexSubagentFrontmatter): [string, string | number | boolean | string[]][] =>\n Object.entries(frontmatter).filter(\n (entry): entry is [string, string | number | boolean | string[]] =>\n entry[0] !== 'skill_names' &&\n (typeof entry[1] === 'string' ||\n typeof entry[1] === 'number' ||\n typeof entry[1] === 'boolean' ||\n (Array.isArray(entry[1]) && entry[1].every((item) => typeof item === 'string'))),\n );\n\nconst renderCodexSubagent = (params: {\n frontmatter: CodexSubagentFrontmatter;\n prompt: string;\n userBasePath: string;\n}): string => {\n const metadata = renderFlatToml(getCodexTomlEntries(params.frontmatter));\n const skills = (params.frontmatter.skill_names ?? []).map((skillName) => {\n const skillPath = resolve(params.userBasePath, '.agents', 'skills', skillName, 'SKILL.md');\n return `[[skills.config]]\\npath = ${JSON.stringify(skillPath)}\\nenabled = true`;\n });\n const sections = [metadata, `developer_instructions = ${JSON.stringify(params.prompt.trimEnd())}`, ...skills].filter(\n (section) => section.length > 0,\n );\n\n return sections.join('\\n\\n') + '\\n';\n};\n\nconst renderSubagentForTool = (params: { subagent: Subagent; toolId: ToolId; userBasePath: string }): string => {\n if (params.toolId === 'claude-code') {\n return renderMarkdownSubagent({\n rawFrontmatter: params.subagent.frontmatter.claude.raw,\n prompt: params.subagent.prompt,\n });\n }\n\n if (params.toolId === 'gemini') {\n return renderMarkdownSubagent({\n rawFrontmatter: params.subagent.frontmatter.gemini.raw,\n prompt: params.subagent.prompt,\n });\n }\n\n return renderCodexSubagent({\n frontmatter: params.subagent.frontmatter.codex.parsed,\n prompt: params.subagent.prompt,\n userBasePath: params.userBasePath,\n });\n};\n\nconst getSelectedMetadataFiles = (subagent: Subagent, selectedTools: readonly ToolId[]): string[] =>\n selectedTools.map((toolId) => {\n if (toolId === 'claude-code') return `claude:${subagent.frontmatter.claude.raw}`;\n if (toolId === 'gemini') return `gemini:${subagent.frontmatter.gemini.raw}`;\n return `codex:${subagent.frontmatter.codex.raw}`;\n });\n\nconst getStringArray = (value: unknown): string[] => {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((item): item is string => typeof item === 'string');\n};\n\nconst buildRequiredSubagentSkills = (params: {\n subagent: Subagent;\n selectedTools: readonly ToolId[];\n userBasePath: string;\n}): RequiredSubagentSkill[] => {\n const required: RequiredSubagentSkill[] = [];\n\n if (params.selectedTools.includes('codex')) {\n for (const skillName of params.subagent.frontmatter.codex.parsed.skill_names ?? []) {\n required.push({\n tool: 'codex',\n skillName,\n path: resolve(params.userBasePath, '.agents', 'skills', skillName, 'SKILL.md'),\n });\n }\n }\n\n if (params.selectedTools.includes('claude-code')) {\n for (const skillName of getStringArray(params.subagent.frontmatter.claude.parsed['skills'])) {\n required.push({\n tool: 'claude-code',\n skillName,\n path: resolve(params.userBasePath, '.claude', 'skills', skillName, 'SKILL.md'),\n });\n }\n }\n\n return required;\n};\n\nexport const buildSubagentInstallPlan = (params: {\n subagent: Subagent;\n requestedTools: readonly ToolId[];\n userBasePath: string;\n}): {\n packages: SubagentPackage[];\n installedSubagent: InstalledSubagent;\n requiredSkills: RequiredSubagentSkill[];\n} => {\n const selectedTools = normalizeSelectedTools(params.subagent, params.requestedTools);\n if (selectedTools.length === 0) {\n throw new Error(`Subagent ${params.subagent.id} does not support the requested tools`);\n }\n\n const files = selectedTools.map((toolId) => ({\n relativePath: buildSubagentRelativePath(params.subagent.id, toolId),\n content: renderSubagentForTool({\n subagent: params.subagent,\n toolId,\n userBasePath: params.userBasePath,\n }),\n }));\n const subagentHash = computeInstalledSubagentHash({\n id: params.subagent.id,\n tools: selectedTools,\n prompt: params.subagent.prompt,\n metadataFiles: getSelectedMetadataFiles(params.subagent, selectedTools),\n });\n\n return {\n packages: [\n {\n subagentId: params.subagent.id,\n files,\n },\n ],\n installedSubagent: {\n id: params.subagent.id,\n tools: selectedTools,\n installed_paths: files.map((file) => file.relativePath),\n sourceHash: subagentHash,\n },\n requiredSkills: buildRequiredSubagentSkills({\n subagent: params.subagent,\n selectedTools,\n userBasePath: params.userBasePath,\n }),\n };\n};\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, isAbsolute, relative, resolve } from 'node:path';\nimport type { SubagentPackage } from './renderer.js';\n\nconst resolveInsideBasePath = (basePath: string, relativePath: string): string => {\n const absBasePath = resolve(basePath);\n const absPath = resolve(absBasePath, relativePath);\n const fromBase = relative(absBasePath, absPath);\n\n if (fromBase.length === 0 || fromBase.startsWith('..') || isAbsolute(fromBase)) {\n throw new Error(`Subagent path escapes AI_OPS_HOME: ${relativePath}`);\n }\n\n return absPath;\n};\n\nexport const installSubagentPackages = (basePath: string, packages: readonly SubagentPackage[]): string[] => {\n const written: string[] = [];\n\n for (const subagentPackage of packages) {\n for (const file of subagentPackage.files) {\n const absPath = resolveInsideBasePath(basePath, file.relativePath);\n if (existsSync(absPath)) {\n rmSync(absPath, { recursive: true, force: true });\n }\n mkdirSync(dirname(absPath), { recursive: true });\n writeFileSync(absPath, file.content.trimEnd() + '\\n', 'utf-8');\n written.push(file.relativePath);\n }\n }\n\n return written;\n};\n\nexport const removeSubagentFiles = (basePath: string, relativePaths: readonly string[]): string[] => {\n const removed: string[] = [];\n\n for (const relativePath of relativePaths) {\n const absPath = resolveInsideBasePath(basePath, relativePath);\n if (!existsSync(absPath)) continue;\n rmSync(absPath, { recursive: true, force: true });\n removed.push(relativePath);\n }\n\n return removed;\n};\n","import type { InstalledSubagent, ToolId } from '@/core/schemas/index.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { buildSubagentRelativePath } from '@/core/schemas/subagent-paths.js';\n\nexport const resolveRequestedSubagentTools = (params: {\n requested?: readonly string[];\n supported: readonly string[];\n}): ToolId[] => {\n if (params.requested === undefined || params.requested.length === 0) {\n return [...params.supported] as ToolId[];\n }\n\n const supportedSet = new Set(params.supported);\n const invalid = params.requested.filter((tool) => !supportedSet.has(tool));\n if (invalid.length > 0) {\n throw new Error(`Unsupported tools requested: ${invalid.join(', ')}`);\n }\n\n return [...params.requested] as ToolId[];\n};\n\nconst TOOL_ORDER = [SKILL_TOOL.CLAUDE_CODE, SKILL_TOOL.CODEX, SKILL_TOOL.GEMINI] as const;\n\nexport const mergeSubagentTools = (params: { existing?: readonly string[]; requested: readonly ToolId[] }): ToolId[] => {\n const merged = new Set([...(params.existing ?? []), ...params.requested]);\n return TOOL_ORDER.filter((tool) => merged.has(tool));\n};\n\nexport const upsertInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n nextSubagent: InstalledSubagent,\n): InstalledSubagent[] => {\n const remaining = installedSubagents.filter((subagent) => subagent.id !== nextSubagent.id);\n return [...remaining, nextSubagent];\n};\n\nexport const removeInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n subagentId: string,\n): InstalledSubagent[] => installedSubagents.filter((subagent) => subagent.id !== subagentId);\n\nexport const findInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n subagentId: string,\n): InstalledSubagent | undefined => installedSubagents.find((subagent) => subagent.id === subagentId);\n\nexport const resolveInstalledSubagentPaths = (installedSubagent: InstalledSubagent): string[] =>\n installedSubagent.tools.map((tool) => buildSubagentRelativePath(installedSubagent.id, tool));\n","import type { Command } from 'commander';\nimport {\n subagentDiffCommand,\n subagentInstallCommand,\n subagentListCommand,\n subagentUninstallCommand,\n subagentUpdateCommand,\n} from './commands.js';\n\nexport const registerSubagentCommands = (program: Command): void => {\n const subagentCommand = program.command('subagent').description('에이전트 subagent 설치/조회/갱신');\n const applyInstallOptions = (command: Command): Command => command.option('--tool <tool...>', '대상 도구 지정');\n\n subagentCommand.command('list').description('사용 가능한 subagent 목록').action(() => subagentListCommand());\n applyInstallOptions(subagentCommand.command('install <subagentId>').description('subagent 설치')).action(\n (subagentId, opts) => subagentInstallCommand(subagentId, opts),\n );\n subagentCommand\n .command('diff [subagentId]')\n .description('subagent 변경 비교')\n .action((subagentId) => subagentDiffCommand(subagentId));\n subagentCommand\n .command('update [subagentId]')\n .description('subagent 갱신')\n .action((subagentId) => subagentUpdateCommand(subagentId));\n subagentCommand\n .command('uninstall <subagentId>')\n .description('subagent 제거')\n .action((subagentId) => subagentUninstallCommand(subagentId));\n};\n","import { createProgram } from '@/cli/program.js';\n\ncreateProgram().parse();\n"],"mappings":"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","names":["existsSync","join","z","z","z","z","z","z","join","z","z","z","z","z","z","z","z","z","z","z","z","readFileSync","join","parse","join","readFileSync","parse","readFileSync","readdirSync","dirname","join","resolve","join","join","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","mkdirSync","writeFileSync","dirname","resolve","join","dirname","resolve","fileURLToPath","__dirname","join","existsSync","join","p","mkdirSync","readFileSync","writeFileSync","dirname","isJsonRecord","readJsonRecord","getArray","join","isJsonRecord","getArray","readJsonRecord","join","join","resolveCodexHomePath","p","z","isJsonRecord","z","createHash","existsSync","readFileSync","join","resolve","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","join","resolve","join","join","TOOL_ORDER","dirname","join","resolve","join","dirname","resolve","readFileSync","TOOL_ORDER","readFileSync","existsSync","readdirSync","readFileSync","existsSync","readdirSync","readFileSync","mkdirSync","readFileSync","writeFileSync","dirname","readFileSync","writeFileSync","readFileSync","writeFileSync","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","existsSync","readFileSync","readdirSync","rmSync","writeFileSync","existsSync","readFileSync","rmSync","writeFileSync","readdirSync","existsSync","mkdirSync","dirname","writeFileSync","readFileSync","existsSync","readFileSync","existsSync","readFileSync","existsSync","mkdirSync","readFileSync","readdirSync","rmSync","writeFileSync","dirname","readFileSync","readdirSync","isAbsolute","join","relative","resolve","RESERVED_DOCUMENT_WARNINGS","join","includesReservedDocumentWarning","readFileSync","readdirSync","resolve","relative","isAbsolute","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","rmSync","removeEmptyDirs","readdirSync","pack","existsSync","join","resolve","resolve","p","execFileSync","existsSync","readdirSync","join","resolve","sep","readFileSync","resolve","runGit","execFileSync","readGitHead","join","existsSync","readdirSync","resolve","sep","buildPostToolUseOutput","readGitHead","mkdirSync","readFileSync","rmSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","rmSync","existsSync","rmSync","join","readInstalledSkills","existsSync","join","rmSync","resolveCodexHomePath","resolvePersonalContextRoot","p","readStdin","resolve","resolveCodexHomePath","resolvePersonalContextRoot","readStdin","p","p","p","p","issue","p","p","p","p","rmSync","resolveSkillById","writeUserSkillState","rmSync","readInstalledSkills","join","existsSync","readFileSync","resolve","z","join","issue","issue","z","existsSync","readFileSync","resolve","issue","existsSync","readFileSync","join","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","join","existsSync","isJsonRecord","readFileSync","join","p","existsSync","rmSync","resolve","normalizeSelectedTools","resolve","existsSync","mkdirSync","rmSync","writeFileSync","dirname","isAbsolute","relative","resolve","TOOL_ORDER","loadCompilerInputs","rmSync","existsSync"]}
1
+ {"version":3,"sources":["../../src/cli/program.ts","../../src/features/codex-hooks/commands.ts","../../src/features/codex-hooks/core.ts","../../src/core/schemas/skill.schema.ts","../../src/core/schemas/skill-catalog.schema.ts","../../src/core/schemas/skill-registry.schema.ts","../../src/core/schemas/subagent.schema.ts","../../src/core/schemas/project-layer.schema.ts","../../src/core/schemas/subagent-paths.ts","../../src/core/schemas/subagent-catalog.schema.ts","../../src/core/schemas/subagent-manifest.schema.ts","../../src/core/schemas/integration.schema.ts","../../src/core/schemas/integration-catalog.schema.ts","../../src/core/schemas/pack.schema.ts","../../src/core/schemas/studio-snapshot.schema.ts","../../src/shared/catalog-loader.ts","../../src/shared/markdown/frontmatter.ts","../../src/features/subagents/toml.ts","../../src/shared/source-hash.ts","../../src/features/skills/renderer.ts","../../src/features/skills/registry-io.ts","../../src/features/skills/install-files.ts","../../src/features/skills/state.ts","../../src/shared/command-paths.ts","../../src/shared/paths.ts","../../src/features/codex-hooks/register.ts","../../src/features/codex-permissions/commands.ts","../../src/features/codex-permissions/file-utils.ts","../../src/features/codex-permissions/types.ts","../../src/features/codex-permissions/legacy-cleanup.ts","../../src/features/codex-permissions/config.ts","../../src/features/codex-permissions/core.ts","../../src/features/codex-permissions/register.ts","../../src/features/context-promotion/commands.ts","../../src/features/context-promotion/tool-use-hook.ts","../../src/features/context-promotion/types.ts","../../src/features/context-promotion/git.ts","../../src/features/context-promotion/receipts.ts","../../src/features/context-promotion/status.ts","../../src/features/project-layer/constants.ts","../../src/features/project-layer/path.util.ts","../../src/features/project-layer/serialization.ts","../../src/features/project-layer/managed-header.ts","../../src/features/project-layer/document.logic.ts","../../src/features/project-layer/templates.ts","../../src/features/project-layer/custom-project-rules.ts","../../src/features/project-layer/state-io.ts","../../src/features/project-layer/docs-status.logic.ts","../../src/features/project-layer/lifecycle.logic.ts","../../src/features/project-layer/uninstall.logic.ts","../../src/features/project-layer/audit.logic.ts","../../src/features/project-layer/pack.logic.ts","../../src/features/project-layer/pack-source.logic.ts","../../src/features/context-promotion/hook.ts","../../src/features/context-promotion/register.ts","../../src/features/integrations/commands.ts","../../src/features/pc/status.ts","../../src/features/pc/markdown.ts","../../src/features/pc/hook.ts","../../src/features/integrations/manifest-io.ts","../../src/features/integrations/components.ts","../../src/features/integrations/definitions.ts","../../src/features/integrations/stdio.ts","../../src/features/integrations/register.ts","../../src/features/project-layer/audit-command.ts","../../src/features/project-layer/diff-command.ts","../../src/features/project-layer/init-command.ts","../../src/features/project-layer/command-errors.ts","../../src/features/project-layer/pack-command.ts","../../src/features/project-layer/uninstall-command.ts","../../src/features/project-layer/update-command.ts","../../src/features/project-layer/register.ts","../../src/features/skills/commands.ts","../../src/features/skills/register.ts","../../src/features/studio/commands.ts","../../src/features/studio/project-snapshot.ts","../../src/features/studio/snapshot-shared.ts","../../src/features/studio/issue-normalization.ts","../../src/features/studio/runtime-snapshot.ts","../../src/features/subagents/manifest-io.ts","../../src/features/studio/snapshot.ts","../../src/features/studio/register.ts","../../src/features/subagents/commands.ts","../../src/features/subagents/renderer.ts","../../src/features/subagents/install-files.ts","../../src/features/subagents/state.ts","../../src/features/subagents/register.ts","../../src/bin/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { registerCodexHookCommands } from '@/features/codex-hooks/register.js';\nimport { registerCodexPermissionsCommands } from '@/features/codex-permissions/register.js';\nimport { registerContextPromotionCommands } from '@/features/context-promotion/register.js';\nimport { registerIntegrationCommands } from '@/features/integrations/register.js';\nimport { registerProjectLayerCommands } from '@/features/project-layer/register.js';\nimport { registerSkillCommands } from '@/features/skills/register.js';\nimport { registerStudioCommands } from '@/features/studio/register.js';\nimport { registerSubagentCommands } from '@/features/subagents/register.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\n\nexport const createProgram = (): Command => {\n const program = new Command();\n\n program.name('ai-ops').description('AI agent operating layer manager').version(getCliVersion());\n\n registerProjectLayerCommands(program);\n registerStudioCommands(program);\n registerSkillCommands(program);\n registerSubagentCommands(program);\n registerContextPromotionCommands(program);\n registerCodexHookCommands(program);\n registerCodexPermissionsCommands(program);\n registerIntegrationCommands(program);\n\n return program;\n};\n","import * as p from '@clack/prompts';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { InstalledSkill, Skill } from '@/core/schemas/index.js';\nimport {\n buildContextPromotionHookCommand,\n CONTEXT_PROMOTION_HOOK_ID,\n inspectContextPromotionHook,\n installContextPromotionHook,\n resolveCodexHooksPath,\n uninstallContextPromotionHook,\n} from './core.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { buildSkillInstallPlan } from '../skills/renderer.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from '../skills/registry-io.js';\nimport { installSkillPackages } from '../skills/install-files.js';\nimport { findInstalledSkill, mergeSkillTools, upsertInstalledSkill } from '../skills/state.js';\nimport { resolveSkillsDir, resolveUserBasePath } from '../../shared/command-paths.js';\n\ntype CodexHookInstallOptions = {\n command?: string;\n};\n\nconst CONTEXT_PROMOTION_REVIEW_SKILL_ID = 'context-promotion-review';\n\nconst resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex hook commands');\n }\n return `${home}/.codex`;\n};\n\nconst assertContextPromotionHookId = (hookId: string): void => {\n if (hookId !== CONTEXT_PROMOTION_HOOK_ID) {\n throw new Error(`Unknown Codex hook: ${hookId}`);\n }\n};\n\nconst reportCodexHookError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] =>\n (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n\nconst resolveContextPromotionReviewSkill = (): Skill => {\n const skill = loadAllSkills(resolveSkillsDir()).find(\n (candidate) => candidate.id === CONTEXT_PROMOTION_REVIEW_SKILL_ID,\n );\n if (!skill) {\n throw new Error(`Unknown skill: ${CONTEXT_PROMOTION_REVIEW_SKILL_ID}`);\n }\n return skill;\n};\n\nconst hasInstalledContextPromotionReviewSkill = (basePath: string): boolean => {\n const installedSkill = findInstalledSkill(readInstalledSkills(basePath), CONTEXT_PROMOTION_REVIEW_SKILL_ID);\n return (\n installedSkill?.tools.includes(SKILL_TOOL.CODEX) === true &&\n existsSync(join(basePath, '.agents/skills/context-promotion-review/SKILL.md'))\n );\n};\n\nconst ensureContextPromotionReviewSkill = (basePath: string): { changed: boolean; installedSkill: InstalledSkill } => {\n const skill = resolveContextPromotionReviewSkill();\n const installedSkills = readInstalledSkills(basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, skill.id);\n const requestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: [SKILL_TOOL.CODEX],\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill,\n requestedTools,\n });\n const alreadyInstalled =\n existingInstalledSkill?.sourceHash === installedSkill.sourceHash &&\n existingInstalledSkill.tools.includes(SKILL_TOOL.CODEX) &&\n existsSync(join(basePath, '.agents/skills/context-promotion-review/SKILL.md'));\n\n if (alreadyInstalled) {\n return { changed: false, installedSkill };\n }\n\n installSkillPackages(basePath, packages);\n writeSkillRegistry(resolveSkillRegistryPath(basePath), {\n skills: upsertInstalledSkill(installedSkills, installedSkill),\n cliVersion: getCliVersion(),\n generatedAt: new Date().toISOString(),\n });\n\n return { changed: true, installedSkill };\n};\n\nexport const codexHookInstallCommand = async (\n hookId: string,\n opts: CodexHookInstallOptions = {},\n): Promise<void> => {\n p.intro(`ai-ops codex-hook install ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const skillResult = ensureContextPromotionReviewSkill(resolveUserBasePath());\n const hooksPath = resolveCodexHooksPath(resolveCodexHomePath());\n const result = installContextPromotionHook({\n hooksPath,\n command: buildContextPromotionHookCommand(opts.command),\n });\n p.log.success(\n skillResult.changed\n ? `skill 설치 완료: ${skillResult.installedSkill.id}`\n : `skill 이미 설치됨: ${skillResult.installedSkill.id}`,\n );\n p.log.success(result.changed ? `hook 설치 완료: ${result.hooksPath}` : `hook 이미 설치됨: ${result.hooksPath}`);\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook install 완료');\n};\n\nexport const codexHookStatusCommand = async (hookId: string): Promise<void> => {\n p.intro(`ai-ops codex-hook status ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const result = inspectContextPromotionHook(resolveCodexHooksPath(resolveCodexHomePath()));\n const skillInstalled = hasInstalledContextPromotionReviewSkill(resolveUserBasePath());\n p.log.info(\n [\n `hooks file: ${result.hooksPath}`,\n `hook installed: ${result.installed ? 'yes' : 'no'}`,\n `skill installed: ${skillInstalled ? 'yes' : 'no'}`,\n ].join('\\n'),\n );\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook status 완료');\n};\n\nexport const codexHookUninstallCommand = async (hookId: string): Promise<void> => {\n p.intro(`ai-ops codex-hook uninstall ${hookId}`);\n try {\n assertContextPromotionHookId(hookId);\n const result = uninstallContextPromotionHook(resolveCodexHooksPath(resolveCodexHomePath()));\n p.log.success(result.removed ? `hook 제거 완료: ${result.hooksPath}` : `설치된 hook 없음: ${result.hooksPath}`);\n } catch (error) {\n reportCodexHookError(error);\n }\n p.outro('ai-ops codex-hook uninstall 완료');\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\n// ----- types -----\n\nexport type CodexHookInstallResult = {\n hooksPath: string;\n installed: boolean;\n changed: boolean;\n};\n\nexport type CodexHookStatusResult = {\n hooksPath: string;\n installed: boolean;\n};\n\nexport type CodexHookUninstallResult = {\n hooksPath: string;\n removed: boolean;\n changed: boolean;\n};\n\nexport type CodexHookDefinition = {\n id: string;\n commandMarker: string;\n legacyCommandMarkers: readonly string[];\n defaultCommand: string;\n statusMessage: string;\n};\n\ntype JsonRecord = Record<string, unknown>;\n\n// ----- constants -----\n\nexport const CONTEXT_PROMOTION_HOOK_ID = 'context-promotion';\nexport const CONTEXT_PROMOTION_HOOK_COMMAND_MARKER = 'context-promotion hook post-tool-use';\nexport const CONTEXT_PROMOTION_LEGACY_HOOK_COMMAND_MARKER = 'context-promotion hook pre-tool-use';\nexport const CONTEXT_PROMOTION_DEFAULT_HOOK_COMMAND = `ai-ops ${CONTEXT_PROMOTION_HOOK_COMMAND_MARKER}`;\n\nexport const PC_HOOK_ID = 'pc';\nexport const PC_HOOK_COMMAND_MARKER = 'integration hook post-tool-use pc';\nexport const PC_DEFAULT_HOOK_COMMAND = `ai-ops ${PC_HOOK_COMMAND_MARKER}`;\n\nconst PRE_TOOL_USE_EVENT = 'PreToolUse';\nconst POST_TOOL_USE_EVENT = 'PostToolUse';\nconst BASH_MATCHER = '^Bash$';\n\nexport const CONTEXT_PROMOTION_CODEX_HOOK: CodexHookDefinition = {\n id: CONTEXT_PROMOTION_HOOK_ID,\n commandMarker: CONTEXT_PROMOTION_HOOK_COMMAND_MARKER,\n legacyCommandMarkers: [CONTEXT_PROMOTION_LEGACY_HOOK_COMMAND_MARKER],\n defaultCommand: CONTEXT_PROMOTION_DEFAULT_HOOK_COMMAND,\n statusMessage: 'Checking context promotion review',\n} as const;\n\nexport const PC_CODEX_HOOK: CodexHookDefinition = {\n id: PC_HOOK_ID,\n commandMarker: PC_HOOK_COMMAND_MARKER,\n legacyCommandMarkers: [],\n defaultCommand: PC_DEFAULT_HOOK_COMMAND,\n statusMessage: 'Checking pc handoff',\n} as const;\n\n// ----- JSON helpers -----\n\nconst isJsonRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readJsonRecord = (filePath: string): JsonRecord => {\n if (!existsSync(filePath)) {\n return {};\n }\n\n const parsed: unknown = JSON.parse(readFileSync(filePath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n throw new Error('hooks.json must contain a JSON object');\n }\n return parsed;\n};\n\nconst writeJsonRecord = (filePath: string, value: JsonRecord): void => {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, JSON.stringify(value, null, 2) + '\\n', 'utf-8');\n};\n\nconst getOrCreateRecord = (record: JsonRecord, key: string): JsonRecord => {\n const existing = record[key];\n if (isJsonRecord(existing)) {\n return existing;\n }\n const next: JsonRecord = {};\n record[key] = next;\n return next;\n};\n\nconst getArray = (record: JsonRecord, key: string): unknown[] => {\n const existing = record[key];\n return Array.isArray(existing) ? existing : [];\n};\n\nconst handlerMatchesDefinition =\n (definition: CodexHookDefinition) =>\n (handler: unknown): boolean =>\n isJsonRecord(handler) &&\n typeof handler.command === 'string' &&\n [definition.commandMarker, ...definition.legacyCommandMarkers].some((marker) => handler.command.includes(marker));\n\nconst handlerMatchesCommand = (handler: unknown, command: string): boolean =>\n isJsonRecord(handler) && handler.command === command;\n\nconst groupHasDefinitionHook =\n (definition: CodexHookDefinition) =>\n (group: unknown): boolean =>\n isJsonRecord(group) && getArray(group, 'hooks').some(handlerMatchesDefinition(definition));\n\nconst groupHasCurrentDefinitionHook = (group: unknown, command: string): boolean =>\n isJsonRecord(group) && getArray(group, 'hooks').some((handler) => handlerMatchesCommand(handler, command));\n\nconst countDefinitionHandlers = (groups: readonly unknown[], definition: CodexHookDefinition): number =>\n groups.reduce((count, group) => {\n if (!isJsonRecord(group)) {\n return count;\n }\n return count + getArray(group, 'hooks').filter(handlerMatchesDefinition(definition)).length;\n }, 0);\n\nconst configHasDefinitionHook = (config: JsonRecord, definition: CodexHookDefinition): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n return getArray(hooks, POST_TOOL_USE_EVENT).some(groupHasDefinitionHook(definition));\n};\n\nconst configHasOnlyCurrentDefinitionHook = (\n config: JsonRecord,\n definition: CodexHookDefinition,\n command: string,\n): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n const hasLegacy = getArray(hooks, PRE_TOOL_USE_EVENT).some(groupHasDefinitionHook(definition));\n const postGroups = getArray(hooks, POST_TOOL_USE_EVENT);\n const hasCurrent = postGroups.some((group) => groupHasCurrentDefinitionHook(group, command));\n return hasCurrent && !hasLegacy && countDefinitionHandlers(postGroups, definition) === 1;\n};\n\nconst removeDefinitionHooksFromEvent = (\n hooks: JsonRecord,\n eventName: string,\n definition: CodexHookDefinition,\n): boolean => {\n const previousGroups = getArray(hooks, eventName);\n let removed = false;\n const nextGroups = previousGroups\n .map((group) => {\n if (!isJsonRecord(group)) {\n return group;\n }\n const previousHandlers = getArray(group, 'hooks');\n const nextHandlers = previousHandlers.filter((handler) => {\n const matches = handlerMatchesDefinition(definition)(handler);\n if (matches) {\n removed = true;\n }\n return !matches;\n });\n if (nextHandlers.length === 0) {\n return null;\n }\n return {\n ...group,\n hooks: nextHandlers,\n };\n })\n .filter((group): group is Exclude<unknown, null> => group !== null);\n\n if (!removed) {\n return false;\n }\n\n if (nextGroups.length > 0) {\n hooks[eventName] = nextGroups;\n } else {\n delete hooks[eventName];\n }\n return true;\n};\n\n// ----- public API -----\n\nexport const resolveCodexHooksPath = (codexHomePath: string): string => join(codexHomePath, 'hooks.json');\n\nexport const buildCodexHookCommand = (params: {\n definition: CodexHookDefinition;\n overrideCommand?: string;\n}): string => {\n const command = params.overrideCommand?.trim() ?? params.definition.defaultCommand;\n if (!command.includes(params.definition.commandMarker)) {\n throw new Error(`${params.definition.id} hook command must include: ${params.definition.commandMarker}`);\n }\n return command;\n};\n\nexport const buildContextPromotionHookCommand = (overrideCommand?: string): string =>\n buildCodexHookCommand({\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n overrideCommand,\n });\n\nexport const quoteShellArg = (value: string): string => `'${value.replace(/'/g, \"'\\\\''\")}'`;\n\nexport const inspectCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n}): CodexHookStatusResult => ({\n hooksPath: params.hooksPath,\n installed: configHasDefinitionHook(readJsonRecord(params.hooksPath), params.definition),\n});\n\nexport const inspectContextPromotionHook = (hooksPath: string): CodexHookStatusResult => ({\n hooksPath,\n installed: inspectCodexHook({ hooksPath, definition: CONTEXT_PROMOTION_CODEX_HOOK }).installed,\n});\n\nexport const installCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n command: string;\n}): CodexHookInstallResult => {\n const config = readJsonRecord(params.hooksPath);\n if (configHasOnlyCurrentDefinitionHook(config, params.definition, params.command)) {\n return {\n hooksPath: params.hooksPath,\n installed: true,\n changed: false,\n };\n }\n\n const hooks = getOrCreateRecord(config, 'hooks');\n removeDefinitionHooksFromEvent(hooks, PRE_TOOL_USE_EVENT, params.definition);\n removeDefinitionHooksFromEvent(hooks, POST_TOOL_USE_EVENT, params.definition);\n const existingGroups = getArray(hooks, POST_TOOL_USE_EVENT);\n\n const nextGroup: JsonRecord = {\n matcher: BASH_MATCHER,\n hooks: [\n {\n type: 'command',\n command: params.command,\n timeout: 30,\n statusMessage: params.definition.statusMessage,\n },\n ],\n };\n hooks[POST_TOOL_USE_EVENT] = [...existingGroups, nextGroup];\n writeJsonRecord(params.hooksPath, config);\n\n return {\n hooksPath: params.hooksPath,\n installed: true,\n changed: true,\n };\n};\n\nexport const installContextPromotionHook = (params: { hooksPath: string; command: string }): CodexHookInstallResult =>\n installCodexHook({\n hooksPath: params.hooksPath,\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n command: params.command,\n });\n\nexport const uninstallCodexHook = (params: {\n hooksPath: string;\n definition: CodexHookDefinition;\n}): CodexHookUninstallResult => {\n const config = readJsonRecord(params.hooksPath);\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return { hooksPath: params.hooksPath, removed: false, changed: false };\n }\n\n const removedLegacy = removeDefinitionHooksFromEvent(hooks, PRE_TOOL_USE_EVENT, params.definition);\n const removedCurrent = removeDefinitionHooksFromEvent(hooks, POST_TOOL_USE_EVENT, params.definition);\n const removed = removedLegacy || removedCurrent;\n\n if (!removed) {\n return { hooksPath: params.hooksPath, removed: false, changed: false };\n }\n writeJsonRecord(params.hooksPath, config);\n\n return { hooksPath: params.hooksPath, removed: true, changed: true };\n};\n\nexport const uninstallContextPromotionHook = (hooksPath: string): CodexHookUninstallResult =>\n uninstallCodexHook({\n hooksPath,\n definition: CONTEXT_PROMOTION_CODEX_HOOK,\n });\n","import { z } from 'zod';\n\nexport const SKILL_KIND = {\n REFERENCE: 'reference',\n TASK: 'task',\n} as const;\n\nexport const SKILL_TOOL = {\n CLAUDE_CODE: 'claude-code',\n CODEX: 'codex',\n GEMINI: 'gemini',\n} as const;\n\nexport const SkillKindSchema = z.union([z.literal(SKILL_KIND.REFERENCE), z.literal(SKILL_KIND.TASK)]);\nexport const SkillToolSchema = z.union([\n z.literal(SKILL_TOOL.CLAUDE_CODE),\n z.literal(SKILL_TOOL.CODEX),\n z.literal(SKILL_TOOL.GEMINI),\n]);\n\nexport const SkillFileSchema = z\n .object({\n path: z.string().min(1),\n content: z.string(),\n })\n .strict();\n\nexport const SkillFrontmatterSchema = z\n .object({\n name: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'name must be kebab-case'),\n description: z.string().min(1),\n })\n .passthrough();\n\nexport type SkillFile = z.infer<typeof SkillFileSchema>;\nexport type SkillFrontmatter = z.infer<typeof SkillFrontmatterSchema>;\nexport type Skill = {\n id: string;\n kind: z.infer<typeof SkillKindSchema>;\n description: string;\n supported_tools: z.infer<typeof SkillToolSchema>[];\n groups: string[];\n directory: string;\n files: SkillFile[];\n};\nexport type ToolId = z.infer<typeof SkillToolSchema>;\n\nexport const InstalledSkillSchema = z\n .object({\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case'),\n kind: SkillKindSchema,\n tools: z.array(SkillToolSchema).min(1),\n installed_paths: z.array(z.string().min(1)).min(1),\n sourceHash: z.string().regex(/^[a-f0-9]{6}$/, 'sourceHash must be 6 lowercase hex chars'),\n })\n .strip();\n\nexport type InstalledSkill = z.infer<typeof InstalledSkillSchema>;\n","import { z } from 'zod';\nimport { SkillKindSchema, SkillToolSchema } from './skill.schema.js';\n\nconst SkillIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\nconst SkillCatalogPathSchema = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)+$/, 'source_path must be relative kebab-case path');\n\nexport const SkillCatalogEntrySchema = z\n .object({\n id: SkillIdSchema,\n kind: SkillKindSchema,\n supported_tools: z.array(SkillToolSchema).min(1),\n groups: z.array(z.string().min(1)),\n source_path: SkillCatalogPathSchema,\n })\n .strict()\n .superRefine((entry, ctx) => {\n const expectedPrefix = entry.kind === 'reference' ? 'reference-skills/' : 'task-skills/';\n\n if (!entry.source_path.startsWith(expectedPrefix)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['source_path'],\n message: `source_path must start with ${expectedPrefix}`,\n });\n }\n });\n\nexport const SkillCatalogSchema = z\n .object({\n skills: z.array(SkillCatalogEntrySchema),\n })\n .strict();\n\nexport type SkillCatalogEntry = z.infer<typeof SkillCatalogEntrySchema>;\nexport type SkillCatalog = z.infer<typeof SkillCatalogSchema>;\n","import { z } from 'zod';\nimport { InstalledSkillSchema } from './skill.schema.js';\n\nexport const SkillRegistrySchema = z\n .object({\n skills: z.array(InstalledSkillSchema),\n cliVersion: z.string().optional(),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type SkillRegistry = z.infer<typeof SkillRegistrySchema>;\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\nimport { isSafeProjectLayerPath } from './project-layer.schema.js';\nimport { buildSubagentRelativePath } from './subagent-paths.js';\n\nexport const SubagentIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\n\nexport const SubagentMarkdownFrontmatterSchema = z\n .object({\n name: SubagentIdSchema,\n description: z.string().min(1),\n })\n .passthrough();\n\nconst TomlValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);\nconst SubagentInstalledPathSchema = z\n .string()\n .min(1)\n .refine(isSafeProjectLayerPath, 'installed path must be safe relative path');\n\nexport const CodexSubagentFrontmatterSchema = z\n .object({\n name: SubagentIdSchema,\n description: z.string().min(1),\n skill_names: z.array(SubagentIdSchema).optional(),\n })\n .catchall(TomlValueSchema);\n\nexport type SubagentMarkdownFrontmatter = z.infer<typeof SubagentMarkdownFrontmatterSchema>;\nexport type CodexSubagentFrontmatter = z.infer<typeof CodexSubagentFrontmatterSchema>;\n\nexport type Subagent = {\n id: string;\n supported_tools: z.infer<typeof SkillToolSchema>[];\n source_path: string;\n directory: string;\n prompt: string;\n frontmatter: {\n claude: {\n raw: string;\n parsed: SubagentMarkdownFrontmatter;\n };\n codex: {\n raw: string;\n parsed: CodexSubagentFrontmatter;\n };\n gemini: {\n raw: string;\n parsed: SubagentMarkdownFrontmatter;\n };\n };\n};\n\nexport const InstalledSubagentSchema = z\n .object({\n id: SubagentIdSchema,\n tools: z.array(SkillToolSchema).min(1),\n installed_paths: z.array(SubagentInstalledPathSchema).min(1),\n sourceHash: z.string().regex(/^[a-f0-9]{6}$/, 'sourceHash must be 6 lowercase hex chars'),\n })\n .strip()\n .superRefine((subagent, ctx) => {\n const expectedPaths = new Set(subagent.tools.map((tool) => buildSubagentRelativePath(subagent.id, tool)));\n const installedPaths = new Set(subagent.installed_paths);\n\n if (installedPaths.size !== subagent.installed_paths.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must not contain duplicates',\n });\n return;\n }\n\n if (installedPaths.size !== expectedPaths.size) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must match id and tools',\n });\n return;\n }\n\n for (const installedPath of installedPaths) {\n if (!expectedPaths.has(installedPath)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['installed_paths'],\n message: 'installed_paths must match id and tools',\n });\n return;\n }\n }\n });\n\nexport type InstalledSubagent = z.infer<typeof InstalledSubagentSchema>;\n","import { z } from 'zod';\n\nexport const ProjectLayerToolSchema = z.enum(['claude-code', 'codex', 'gemini']);\n\nexport const ProjectLayerDocumentStatusSchema = z.enum(['Active', 'Reserved', 'Draft', 'Archived']);\n\nconst ShortHashSchema = z.string().regex(/^[a-f0-9]{6}$/, 'hash must be 6 lowercase hex chars');\n\nexport const isSafeProjectLayerPath = (value: string): boolean => {\n if (value.length === 0) return false;\n if (value.includes('\\0')) return false;\n if (value.includes('\\\\')) return false;\n if (value.startsWith('/')) return false;\n if (/^[A-Za-z]:/.test(value)) return false;\n\n const segments = value.split('/');\n return segments.every((segment) => segment.length > 0 && segment !== '.' && segment !== '..');\n};\n\nconst ProjectLayerPathSchema = z\n .string()\n .min(1)\n .refine(isSafeProjectLayerPath, 'path must be a safe project-relative path');\n\nexport const ProjectLayerFrontmatterSchema = z\n .object({\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)).min(1),\n update_when: z.array(z.string().min(1)).min(1),\n })\n .strict();\n\nexport const ProjectLayerManagedFileSchema = z\n .object({\n path: ProjectLayerPathSchema,\n sourceHash: ShortHashSchema,\n })\n .strict();\n\nexport const ProjectLayerProjectFileSchema = z\n .object({\n path: ProjectLayerPathSchema,\n templateHash: ShortHashSchema,\n created: z.boolean(),\n })\n .strict();\n\nexport const ProjectLayerPackFileRecordSchema = z\n .object({\n path: ProjectLayerPathSchema,\n sourceHash: ShortHashSchema,\n })\n .strict();\n\nexport const ProjectLayerPackRecordSchema = z\n .object({\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case'),\n sourceHash: ShortHashSchema,\n documents: z.array(ProjectLayerPackFileRecordSchema),\n files: z.array(ProjectLayerPackFileRecordSchema),\n installedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport const ProjectLayerManifestSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('project-operating-layer'),\n tools: z.array(ProjectLayerToolSchema).min(1),\n managed_files: z.array(ProjectLayerManagedFileSchema),\n project_files: z.array(ProjectLayerProjectFileSchema),\n packs: z.array(ProjectLayerPackRecordSchema).default([]),\n settings: z.record(z.unknown()),\n sourceHash: ShortHashSchema,\n cliVersion: z.string().min(1),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport const ProjectLayerContextDocumentSchema = ProjectLayerFrontmatterSchema.extend({\n path: ProjectLayerPathSchema,\n contentHash: ShortHashSchema,\n}).strict();\n\nexport const ProjectLayerContextIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-layer-index'),\n documents: z.array(ProjectLayerContextDocumentSchema),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type ProjectLayerTool = z.infer<typeof ProjectLayerToolSchema>;\nexport type ProjectLayerDocumentStatus = z.infer<typeof ProjectLayerDocumentStatusSchema>;\nexport type ProjectLayerFrontmatter = z.infer<typeof ProjectLayerFrontmatterSchema>;\nexport type ProjectLayerManagedFile = z.infer<typeof ProjectLayerManagedFileSchema>;\nexport type ProjectLayerProjectFile = z.infer<typeof ProjectLayerProjectFileSchema>;\nexport type ProjectLayerPackFileRecord = z.infer<typeof ProjectLayerPackFileRecordSchema>;\nexport type ProjectLayerPackRecord = z.infer<typeof ProjectLayerPackRecordSchema>;\nexport type ProjectLayerManifest = z.infer<typeof ProjectLayerManifestSchema>;\nexport type ProjectLayerContextDocument = z.infer<typeof ProjectLayerContextDocumentSchema>;\nexport type ProjectLayerContextIndex = z.infer<typeof ProjectLayerContextIndexSchema>;\n","import { join } from 'node:path';\nimport type { ToolId } from './skill.schema.js';\n\nconst SUBAGENT_TOOL_OUTPUTS: Readonly<Record<ToolId, { dir: string; extension: string }>> = {\n 'claude-code': {\n dir: '.claude/agents',\n extension: '.md',\n },\n codex: {\n dir: '.codex/agents',\n extension: '.toml',\n },\n gemini: {\n dir: '.gemini/agents',\n extension: '.md',\n },\n} as const;\n\nexport const buildSubagentRelativePath = (subagentId: string, toolId: ToolId): string => {\n const output = SUBAGENT_TOOL_OUTPUTS[toolId];\n return join(output.dir, `${subagentId}${output.extension}`);\n};\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\nimport { SubagentIdSchema } from './subagent.schema.js';\n\nconst SubagentCatalogPathSchema = z\n .string()\n .regex(\n /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)*$/,\n 'source_path must be relative kebab-case path',\n );\n\nexport const SubagentCatalogEntrySchema = z\n .object({\n id: SubagentIdSchema,\n supported_tools: z.array(SkillToolSchema).min(1),\n source_path: SubagentCatalogPathSchema,\n })\n .strict();\n\nexport const SubagentCatalogSchema = z\n .object({\n subagents: z.array(SubagentCatalogEntrySchema),\n })\n .strict();\n\nexport type SubagentCatalogEntry = z.infer<typeof SubagentCatalogEntrySchema>;\nexport type SubagentCatalog = z.infer<typeof SubagentCatalogSchema>;\n","import { z } from 'zod';\nimport { InstalledSubagentSchema } from './subagent.schema.js';\n\nexport const SubagentManifestSchema = z\n .object({\n subagents: z.array(InstalledSubagentSchema),\n cliVersion: z.string().optional(),\n generatedAt: z.string().datetime({ offset: true }),\n })\n .strict();\n\nexport type SubagentManifest = z.infer<typeof SubagentManifestSchema>;\n","import { z } from 'zod';\nimport { SkillToolSchema } from './skill.schema.js';\n\nexport const INTEGRATION_ID = {\n CONTEXT_PROMOTION: 'context-promotion',\n PC: 'pc',\n} as const;\n\nexport const INTEGRATION_COMPONENT_TYPE = {\n SKILL: 'skill',\n CODEX_HOOK: 'codex-hook',\n RECEIPT_CONFIG: 'receipt-config',\n} as const;\n\nexport const IntegrationIdSchema = z.union([z.literal(INTEGRATION_ID.CONTEXT_PROMOTION), z.literal(INTEGRATION_ID.PC)]);\n\nconst IntegrationSkillComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/),\n tools: z.array(SkillToolSchema).min(1),\n owned: z.boolean(),\n })\n .strict();\n\nconst IntegrationCodexHookComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n id: IntegrationIdSchema,\n command: z.string().min(1),\n owned: z.boolean(),\n })\n .strict();\n\nconst IntegrationReceiptConfigComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n id: z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/),\n storagePath: z.string().min(1),\n owned: z.boolean(),\n })\n .strict();\n\nexport const IntegrationComponentSchema = z.union([\n IntegrationSkillComponentSchema,\n IntegrationCodexHookComponentSchema,\n IntegrationReceiptConfigComponentSchema,\n]);\n\nexport const InstalledIntegrationSchema = z\n .object({\n id: IntegrationIdSchema,\n components: z.array(IntegrationComponentSchema),\n installedAt: z.string().min(1),\n updatedAt: z.string().min(1),\n })\n .strict();\n\nexport const IntegrationManifestSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('ai-ops-integrations-manifest'),\n integrations: z.array(InstalledIntegrationSchema),\n cliVersion: z.string().min(1),\n generatedAt: z.string().min(1),\n })\n .strict();\n\nexport type IntegrationId = z.infer<typeof IntegrationIdSchema>;\nexport type IntegrationComponent = z.infer<typeof IntegrationComponentSchema>;\nexport type InstalledIntegration = z.infer<typeof InstalledIntegrationSchema>;\nexport type IntegrationManifest = z.infer<typeof IntegrationManifestSchema>;\n","import { z } from 'zod';\nimport { INTEGRATION_COMPONENT_TYPE, IntegrationIdSchema } from './integration.schema.js';\n\nconst ComponentIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'component id must be kebab-case');\n\nexport const IntegrationCatalogSkillComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n id: ComponentIdSchema,\n tools: z.array(z.literal('codex')).min(1),\n })\n .strict();\n\nexport const IntegrationCatalogCodexHookComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n id: IntegrationIdSchema,\n })\n .strict();\n\nexport const IntegrationCatalogReceiptConfigComponentSchema = z\n .object({\n type: z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n id: ComponentIdSchema,\n storage_path: z.string().min(1),\n })\n .strict();\n\nexport const IntegrationCatalogComponentSchema = z.union([\n IntegrationCatalogSkillComponentSchema,\n IntegrationCatalogCodexHookComponentSchema,\n IntegrationCatalogReceiptConfigComponentSchema,\n]);\n\nexport const IntegrationCatalogEntrySchema = z\n .object({\n id: IntegrationIdSchema,\n description: z.string().min(1),\n components: z.array(IntegrationCatalogComponentSchema).min(1),\n })\n .strict()\n .superRefine((entry, ctx) => {\n const hasSkill = entry.components.some((component) => component.type === INTEGRATION_COMPONENT_TYPE.SKILL);\n const hasCodexHook = entry.components.some((component) => component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK);\n const hasReceiptConfig = entry.components.some(\n (component) => component.type === INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n );\n\n if (!hasSkill) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a skill component: ${entry.id}`,\n });\n }\n if (!hasCodexHook) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a codex-hook component: ${entry.id}`,\n });\n }\n if (!hasReceiptConfig) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['components'],\n message: `integration must declare a receipt-config component: ${entry.id}`,\n });\n }\n });\n\nexport const IntegrationCatalogSchema = z\n .object({\n integrations: z.array(IntegrationCatalogEntrySchema),\n })\n .strict()\n .superRefine((catalog, ctx) => {\n const seen = new Set<string>();\n for (const [index, entry] of catalog.integrations.entries()) {\n if (seen.has(entry.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['integrations', index, 'id'],\n message: `duplicate integration id: ${entry.id}`,\n });\n }\n seen.add(entry.id);\n }\n });\n\nexport type IntegrationCatalogEntry = z.infer<typeof IntegrationCatalogEntrySchema>;\nexport type IntegrationCatalogComponent = z.infer<typeof IntegrationCatalogComponentSchema>;\nexport type IntegrationCatalog = z.infer<typeof IntegrationCatalogSchema>;\n","import { z } from 'zod';\n\nconst PackIdSchema = z.string().regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'id must be kebab-case');\nconst PackSourcePathSchema = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)*$/, 'source_path must be relative kebab-case path');\n\nexport const PackCatalogEntrySchema = z\n .object({\n id: PackIdSchema,\n source_path: PackSourcePathSchema,\n })\n .strict();\n\nexport const PackCatalogSchema = z\n .object({\n packs: z.array(PackCatalogEntrySchema),\n })\n .strict();\n\nexport type PackCatalogEntry = z.infer<typeof PackCatalogEntrySchema>;\nexport type PackCatalog = z.infer<typeof PackCatalogSchema>;\n","import { z } from 'zod';\nimport { INTEGRATION_COMPONENT_TYPE, IntegrationComponentSchema, IntegrationIdSchema } from './integration.schema.js';\nimport { IntegrationCatalogComponentSchema } from './integration-catalog.schema.js';\nimport { ProjectLayerDocumentStatusSchema } from './project-layer.schema.js';\nimport { SkillKindSchema, SkillToolSchema } from './skill.schema.js';\nimport { SubagentIdSchema } from './subagent.schema.js';\n\nconst nullableString = z.string().nullable();\n\nexport const StudioProjectStateSchema = z.union([\n z.literal('ready'),\n z.literal('uninitialized'),\n z.literal('degraded'),\n]);\n\nexport const StudioProjectDocumentProvenanceSchema = z.union([\n z.literal('ai-ops-managed'),\n z.literal('project-owned'),\n z.literal('pack-document'),\n z.literal('context-only'),\n]);\n\nexport const StudioRuntimeFileStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n })\n .strict();\n\nexport const StudioSourceStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n parsed: z.boolean(),\n generatedAt: nullableString,\n error: nullableString,\n })\n .strict();\n\nexport const StudioProjectIssueSourceSchema = z.union([\n z.literal('manifest'),\n z.literal('context-layer'),\n z.literal('docs-status'),\n z.literal('frontmatter'),\n z.literal('managed-section'),\n z.literal('file-system'),\n z.literal('source-hash'),\n z.literal('unknown'),\n]);\n\nexport const StudioProjectIssueSchema = z\n .object({\n level: z.union([z.literal('error'), z.literal('warning')]),\n code: z.string().min(1),\n message: z.string().min(1),\n source: StudioProjectIssueSourceSchema,\n affectedPath: nullableString,\n suggestedActionLabel: nullableString,\n })\n .strict();\n\nexport const StudioProjectDocumentSchema = z\n .object({\n path: z.string().min(1),\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)),\n update_when: z.array(z.string().min(1)),\n indexedContentHash: z.string().min(1),\n currentContentHash: nullableString,\n contentHashMatches: z.boolean().nullable(),\n provenance: StudioProjectDocumentProvenanceSchema,\n content: nullableString,\n trustWarning: nullableString,\n readError: nullableString,\n })\n .strict();\n\nexport const StudioProjectSnapshotSchema = z\n .object({\n root: z.string().min(1),\n state: StudioProjectStateSchema,\n files: z\n .object({\n manifest: StudioSourceStateSchema,\n contextIndex: StudioSourceStateSchema,\n docsStatus: StudioSourceStateSchema,\n })\n .strict(),\n audit: z\n .object({\n currentSourceHash: nullableString,\n hasErrors: z.boolean(),\n hasWarnings: z.boolean(),\n issues: z.array(StudioProjectIssueSchema),\n })\n .strict(),\n documents: z.array(StudioProjectDocumentSchema),\n })\n .strict();\n\nexport const StudioIntegrationComponentStatusSchema = z\n .object({\n type: z.union([\n z.literal(INTEGRATION_COMPONENT_TYPE.SKILL),\n z.literal(INTEGRATION_COMPONENT_TYPE.CODEX_HOOK),\n z.literal(INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG),\n ]),\n id: z.string().min(1),\n installed: z.boolean(),\n owned: z.boolean().nullable(),\n catalog: IntegrationCatalogComponentSchema,\n installedComponent: IntegrationComponentSchema.nullable(),\n })\n .strict();\n\nexport const StudioIntegrationSnapshotSchema = z\n .object({\n id: IntegrationIdSchema,\n description: z.string().min(1),\n installed: z.boolean(),\n installedAt: nullableString,\n updatedAt: nullableString,\n components: z.array(StudioIntegrationComponentStatusSchema),\n })\n .strict();\n\nexport const StudioInstalledPathStateSchema = z\n .object({\n path: z.string().min(1),\n exists: z.boolean(),\n })\n .strict();\n\nexport const StudioSkillSnapshotSchema = z\n .object({\n id: z.string().min(1),\n kind: SkillKindSchema,\n description: z.string().min(1),\n supported_tools: z.array(SkillToolSchema),\n groups: z.array(z.string().min(1)),\n installed: z.boolean(),\n installedTools: z.array(SkillToolSchema),\n installedPaths: z.array(StudioInstalledPathStateSchema),\n sourceHash: nullableString,\n })\n .strict();\n\nexport const StudioSubagentSnapshotSchema = z\n .object({\n id: SubagentIdSchema,\n description: z.string().min(1),\n supported_tools: z.array(SkillToolSchema),\n installed: z.boolean(),\n installedTools: z.array(SkillToolSchema),\n installedPaths: z.array(StudioInstalledPathStateSchema),\n sourceHash: nullableString,\n })\n .strict();\n\nexport const StudioHookSnapshotSchema = z\n .object({\n id: z.string().min(1),\n statusMessage: z.string().min(1),\n hooksPath: nullableString,\n installed: z.boolean(),\n error: nullableString,\n })\n .strict();\n\nexport const StudioRuntimeSnapshotSchema = z\n .object({\n available: z.boolean(),\n unavailableReason: nullableString,\n userBasePath: nullableString,\n codexHomePath: nullableString,\n manifests: z\n .object({\n integrations: StudioSourceStateSchema,\n skills: StudioSourceStateSchema,\n subagents: StudioSourceStateSchema,\n hooks: StudioSourceStateSchema,\n })\n .strict(),\n integrations: z.array(StudioIntegrationSnapshotSchema),\n skills: z.array(StudioSkillSnapshotSchema),\n subagents: z.array(StudioSubagentSnapshotSchema),\n hooks: z.array(StudioHookSnapshotSchema),\n })\n .strict();\n\nexport const StudioSnapshotSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('ai-ops-studio-snapshot'),\n generatedAt: z.string().datetime({ offset: true }),\n cliVersion: z.string().min(1),\n project: StudioProjectSnapshotSchema,\n runtime: StudioRuntimeSnapshotSchema,\n })\n .strict();\n\nexport type StudioProjectState = z.infer<typeof StudioProjectStateSchema>;\nexport type StudioProjectDocumentProvenance = z.infer<typeof StudioProjectDocumentProvenanceSchema>;\nexport type StudioSourceState = z.infer<typeof StudioSourceStateSchema>;\nexport type StudioProjectIssueSource = z.infer<typeof StudioProjectIssueSourceSchema>;\nexport type StudioProjectIssue = z.infer<typeof StudioProjectIssueSchema>;\nexport type StudioProjectDocument = z.infer<typeof StudioProjectDocumentSchema>;\nexport type StudioProjectSnapshot = z.infer<typeof StudioProjectSnapshotSchema>;\nexport type StudioIntegrationComponentStatus = z.infer<typeof StudioIntegrationComponentStatusSchema>;\nexport type StudioIntegrationSnapshot = z.infer<typeof StudioIntegrationSnapshotSchema>;\nexport type StudioInstalledPathState = z.infer<typeof StudioInstalledPathStateSchema>;\nexport type StudioSkillSnapshot = z.infer<typeof StudioSkillSnapshotSchema>;\nexport type StudioSubagentSnapshot = z.infer<typeof StudioSubagentSnapshotSchema>;\nexport type StudioHookSnapshot = z.infer<typeof StudioHookSnapshotSchema>;\nexport type StudioRuntimeSnapshot = z.infer<typeof StudioRuntimeSnapshotSchema>;\nexport type StudioSnapshot = z.infer<typeof StudioSnapshotSchema>;\n","import { readFileSync, readdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { parse } from 'yaml';\nimport { parseMarkdownFrontmatter } from './markdown/frontmatter.js';\nimport { parseFlatToml } from '@/features/subagents/toml.js';\nimport {\n CodexSubagentFrontmatterSchema,\n IntegrationCatalogSchema,\n SkillCatalogSchema,\n SkillFrontmatterSchema,\n SubagentCatalogSchema,\n SubagentMarkdownFrontmatterSchema,\n} from '@/core/schemas/index.js';\nimport type { Skill, SkillCatalog, Subagent, SubagentCatalog } from '@/core/schemas/index.js';\nimport type { IntegrationCatalog, IntegrationCatalogEntry } from '@/core/schemas/index.js';\n\nconst loadSkillDirectoryFiles = (skillDir: string): Skill['files'] => {\n const files: Skill['files'] = [];\n\n const walk = (relativeDir = ''): void => {\n const absDir = relativeDir.length > 0 ? join(skillDir, relativeDir) : skillDir;\n const entries = readdirSync(absDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n\n files.push({\n path: nextRelativePath,\n content: readFileSync(join(skillDir, nextRelativePath), 'utf-8'),\n });\n }\n };\n\n walk();\n return files;\n};\n\nexport const loadSkillCatalog = (skillsDir: string): SkillCatalog =>\n SkillCatalogSchema.parse(JSON.parse(readFileSync(resolve(skillsDir, 'skill-registry.json'), 'utf-8')));\n\nexport const loadAllSkills = (skillsDir: string): Skill[] => {\n const catalog = loadSkillCatalog(skillsDir);\n const entries = [...catalog.skills].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n const directory = resolve(skillsDir, entry.source_path);\n const skillMdPath = join(directory, 'SKILL.md');\n const rawSkillMd = readFileSync(skillMdPath, 'utf-8');\n const { frontmatter } = parseMarkdownFrontmatter(rawSkillMd);\n const parsed = SkillFrontmatterSchema.parse(frontmatter);\n if (parsed.name !== entry.id) {\n throw new Error(`Skill directory and frontmatter name mismatch: ${entry.id} != ${parsed.name}`);\n }\n\n const files = loadSkillDirectoryFiles(directory);\n if (entry.kind === 'reference' && !files.some((file) => file.path === 'references/reference.md')) {\n throw new Error(`Reference skill must include references/reference.md: ${parsed.name}`);\n }\n\n return {\n id: entry.id,\n kind: entry.kind,\n description: parsed.description,\n supported_tools: [...entry.supported_tools],\n groups: [...entry.groups],\n directory,\n files,\n };\n });\n};\n\nconst readRequiredTextFile = (filePath: string): string => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch (error) {\n const cause = error instanceof Error ? `: ${error.message}` : '';\n throw new Error(`Required subagent source file is missing: ${filePath}${cause}`);\n }\n};\n\nconst assertSubagentFrontmatterName = (params: { id: string; tool: string; name: string }): void => {\n if (params.name !== params.id) {\n throw new Error(`Subagent ${params.tool} frontmatter name mismatch: ${params.id} != ${params.name}`);\n }\n};\n\nexport const loadSubagentCatalog = (subagentsDir: string): SubagentCatalog =>\n SubagentCatalogSchema.parse(JSON.parse(readFileSync(resolve(subagentsDir, 'subagent-registry.json'), 'utf-8')));\n\nexport const loadIntegrationCatalog = (integrationsDir: string): IntegrationCatalog =>\n IntegrationCatalogSchema.parse(\n JSON.parse(readFileSync(resolve(integrationsDir, 'integration-registry.json'), 'utf-8')),\n );\n\nexport const loadAllIntegrations = (integrationsDir: string): IntegrationCatalogEntry[] =>\n [...loadIntegrationCatalog(integrationsDir).integrations].sort((a, b) => a.id.localeCompare(b.id));\n\nexport const loadAllSubagents = (subagentsDir: string): Subagent[] => {\n const catalog = loadSubagentCatalog(subagentsDir);\n const entries = [...catalog.subagents].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n const directory = resolve(subagentsDir, entry.source_path);\n const prompt = readRequiredTextFile(join(directory, 'PROMPT.md'));\n const claudeRaw = readRequiredTextFile(join(directory, 'claude.frontmatter.yaml'));\n const codexRaw = readRequiredTextFile(join(directory, 'codex.frontmatter.toml'));\n const geminiRaw = readRequiredTextFile(join(directory, 'gemini.frontmatter.yaml'));\n const claude = SubagentMarkdownFrontmatterSchema.parse(parse(claudeRaw));\n const codex = CodexSubagentFrontmatterSchema.parse(parseFlatToml(codexRaw));\n const gemini = SubagentMarkdownFrontmatterSchema.parse(parse(geminiRaw));\n\n assertSubagentFrontmatterName({ id: entry.id, tool: 'claude', name: claude.name });\n assertSubagentFrontmatterName({ id: entry.id, tool: 'codex', name: codex.name });\n assertSubagentFrontmatterName({ id: entry.id, tool: 'gemini', name: gemini.name });\n\n return {\n id: entry.id,\n supported_tools: [...entry.supported_tools],\n source_path: entry.source_path,\n directory,\n prompt,\n frontmatter: {\n claude: {\n raw: claudeRaw,\n parsed: claude,\n },\n codex: {\n raw: codexRaw,\n parsed: codex,\n },\n gemini: {\n raw: geminiRaw,\n parsed: gemini,\n },\n },\n };\n });\n};\n","import { parse } from 'yaml';\n\nexport const parseMarkdownFrontmatter = (content: string): { frontmatter: unknown; body: string } => {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---\\n?/);\n if (!match) {\n throw new Error('Missing YAML frontmatter');\n }\n\n return {\n frontmatter: parse(match[1]),\n body: content.slice(match[0].length),\n };\n};\n","type TomlPrimitive = string | number | boolean | string[];\n\nconst parseTomlValue = (value: string): TomlPrimitive => {\n const trimmed = value.trim();\n\n if (trimmed.startsWith('\"') || trimmed.startsWith('[')) {\n const parsed = JSON.parse(trimmed) as unknown;\n if (typeof parsed === 'string') {\n return parsed;\n }\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string')) {\n return parsed;\n }\n throw new Error(`Unsupported TOML value: ${value}`);\n }\n\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n\n const numericValue = Number(trimmed);\n if (Number.isFinite(numericValue)) {\n return numericValue;\n }\n\n throw new Error(`Unsupported TOML value: ${value}`);\n};\n\nexport const parseFlatToml = (content: string): Record<string, TomlPrimitive> => {\n const result: Record<string, TomlPrimitive> = {};\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0 || trimmed.startsWith('#')) {\n continue;\n }\n\n const match = trimmed.match(/^([A-Za-z0-9_-]+)\\s*=\\s*(.+)$/);\n if (!match) {\n throw new Error(`Unsupported TOML line: ${line}`);\n }\n\n const [, key, value] = match;\n result[key] = parseTomlValue(value);\n }\n\n return result;\n};\n\nconst renderTomlValue = (value: TomlPrimitive): string => {\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return `[${value.map((item) => JSON.stringify(item)).join(', ')}]`;\n};\n\nexport const renderFlatToml = (entries: readonly [string, TomlPrimitive][]): string =>\n entries.map(([key, value]) => `${key} = ${renderTomlValue(value)}`).join('\\n');\n","import { createHash } from 'node:crypto';\nimport { readFileSync, readdirSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { InstalledSkill } from '@/core/schemas/index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// dist/bin/index.js(bundle) 기준: ../../package.json = apps/cli/package.json\nexport const getCliVersion = (): string => {\n try {\n const pkgPath = resolve(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n return 'unknown';\n }\n};\n\n// 문자열 배열 → SHA-256 → 6-hex (caller가 정렬 책임)\nexport const computeHash = (contents: readonly string[]): string =>\n createHash('sha256').update(contents.join('')).digest('hex').slice(0, 6);\n\nconst loadDirectoryContents = (baseDir: string): string[] => {\n const contents: string[] = [];\n\n const walk = (relativeDir = ''): void => {\n const absDir = relativeDir.length > 0 ? join(baseDir, relativeDir) : baseDir;\n const entries = readdirSync(absDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n contents.push(`${nextRelativePath}:${readFileSync(join(baseDir, nextRelativePath), 'utf-8')}`);\n }\n };\n\n walk();\n return contents;\n};\n\n// compiler data 전체(context-layer, skills, packs, subagents) 해시\nexport const computeSourceHash = (dataDir: string): string => {\n return computeHash(loadDirectoryContents(resolve(dataDir)));\n};\n\nexport const computeInstalledSkillHash = (params: {\n kind: InstalledSkill['kind'];\n description: string;\n tools: readonly string[];\n files: readonly string[];\n}): string => computeHash([params.kind, params.description, ...[...params.tools].sort(), ...[...params.files].sort()]);\n\nexport const computeInstalledSubagentHash = (params: {\n id: string;\n tools: readonly string[];\n prompt: string;\n metadataFiles: readonly string[];\n}): string => computeHash([params.id, params.prompt, ...[...params.tools].sort(), ...[...params.metadataFiles].sort()]);\n","import { join } from 'node:path';\nimport { computeInstalledSkillHash } from '@/shared/source-hash.js';\nimport type { InstalledSkill, Skill, ToolId } from '@/core/schemas/index.js';\n\nconst AGENT_SKILLS_DIR = '.agents/skills';\nconst CLAUDE_SKILLS_DIR = '.claude/skills';\n\ntype SkillPackageFile = {\n relativePath: string;\n content: string;\n};\n\nexport type SkillPackage = {\n skillId: string;\n rootDir: string;\n files: SkillPackageFile[];\n};\n\nconst buildRootDirs = (skillId: string, toolIds: readonly ToolId[]): string[] => {\n const dirs: string[] = [];\n if (toolIds.some((toolId) => toolId === 'codex' || toolId === 'gemini')) {\n dirs.push(join(AGENT_SKILLS_DIR, skillId));\n }\n if (toolIds.includes('claude-code')) {\n dirs.push(join(CLAUDE_SKILLS_DIR, skillId));\n }\n return dirs;\n};\n\nconst normalizeSelectedTools = (skill: Skill, requestedTools: readonly ToolId[]): ToolId[] => {\n const supportedToolSet = new Set(skill.supported_tools);\n return requestedTools.filter((toolId) => supportedToolSet.has(toolId));\n};\n\nexport const buildSkillInstallPlan = (params: {\n skill: Skill;\n requestedTools: readonly ToolId[];\n}): { packages: SkillPackage[]; installedSkill: InstalledSkill } => {\n const selectedTools = normalizeSelectedTools(params.skill, params.requestedTools);\n if (selectedTools.length === 0) {\n throw new Error(`Skill ${params.skill.id} does not support the requested tools`);\n }\n\n const rootDirs = buildRootDirs(params.skill.id, selectedTools);\n const skillHash = computeInstalledSkillHash({\n kind: params.skill.kind,\n description: params.skill.description,\n tools: selectedTools,\n files: params.skill.files.map((file) => `${file.path}:${file.content}`),\n });\n\n const packages = rootDirs.map((rootDir) => {\n const files: SkillPackageFile[] = params.skill.files.map((file) => ({\n relativePath: join(rootDir, file.path),\n content: file.content,\n }));\n\n return {\n skillId: params.skill.id,\n rootDir,\n files,\n };\n });\n\n return {\n packages,\n installedSkill: {\n id: params.skill.id,\n kind: params.skill.kind,\n tools: selectedTools,\n installed_paths: rootDirs,\n sourceHash: skillHash,\n },\n };\n};\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { SkillRegistrySchema } from '@/core/schemas/index.js';\nimport type { SkillRegistry } from '@/core/schemas/index.js';\n\nexport const SKILL_REGISTRY_FILENAME = 'skills-manifest.json';\n\nconst LEGACY_SKILL_ID_MAP = {\n 'engineering-standards-pack': 'backend-service-standards',\n} as const;\n\nexport const resolveCanonicalSkillId = (skillId: string): string =>\n LEGACY_SKILL_ID_MAP[skillId as keyof typeof LEGACY_SKILL_ID_MAP] ?? skillId;\n\nexport const parseSkillRegistry = (json: string): SkillRegistry => SkillRegistrySchema.parse(JSON.parse(json));\n\nexport const serializeSkillRegistry = (registry: SkillRegistry): string => JSON.stringify(registry, null, 2) + '\\n';\n\nexport const resolveSkillRegistryPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', SKILL_REGISTRY_FILENAME);\n\nexport const readSkillRegistry = (registryPath: string): SkillRegistry | null => {\n let raw: string;\n try {\n raw = readFileSync(registryPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseSkillRegistry(raw);\n};\n\nexport const writeSkillRegistry = (registryPath: string, registry: SkillRegistry): void => {\n mkdirSync(dirname(registryPath), { recursive: true });\n writeFileSync(registryPath, serializeSkillRegistry(registry), 'utf-8');\n};\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport type { SkillPackage } from './renderer.js';\n\nexport const installSkillPackages = (basePath: string, packages: readonly SkillPackage[]): string[] => {\n const writtenRoots: string[] = [];\n\n for (const skillPackage of packages) {\n const absRoot = resolve(basePath, skillPackage.rootDir);\n if (existsSync(absRoot)) {\n rmSync(absRoot, { recursive: true, force: true });\n }\n\n for (const file of skillPackage.files) {\n const absPath = resolve(basePath, file.relativePath);\n mkdirSync(dirname(absPath), { recursive: true });\n writeFileSync(absPath, file.content + '\\n', 'utf-8');\n }\n\n writtenRoots.push(skillPackage.rootDir);\n }\n\n return writtenRoots;\n};\n\nexport const removeDirectories = (basePath: string, relativeDirs: readonly string[]): string[] => {\n const removed: string[] = [];\n\n for (const relativeDir of relativeDirs) {\n const absPath = resolve(basePath, relativeDir);\n if (!existsSync(absPath)) continue;\n rmSync(absPath, { recursive: true, force: true });\n removed.push(relativeDir);\n }\n\n return removed;\n};\n","import type { InstalledSkill, ToolId } from '@/core/schemas/index.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { resolveCanonicalSkillId } from './registry-io.js';\n\nexport const resolveRequestedTools = (params: {\n requested?: readonly string[];\n supported: readonly string[];\n}): ToolId[] => {\n if (params.requested === undefined || params.requested.length === 0) {\n return [...params.supported] as ToolId[];\n }\n\n const supportedSet = new Set(params.supported);\n const invalid = params.requested.filter((tool) => !supportedSet.has(tool));\n if (invalid.length > 0) {\n throw new Error(`Unsupported tools requested: ${invalid.join(', ')}`);\n }\n\n return [...params.requested] as ToolId[];\n};\n\nconst TOOL_ORDER = [SKILL_TOOL.CLAUDE_CODE, SKILL_TOOL.CODEX, SKILL_TOOL.GEMINI] as const;\n\nexport const mergeSkillTools = (params: { existing?: readonly string[]; requested: readonly ToolId[] }): ToolId[] => {\n const merged = new Set([...(params.existing ?? []), ...params.requested]);\n return TOOL_ORDER.filter((tool) => merged.has(tool));\n};\n\nexport const subtractSkillTools = (params: {\n requested: readonly ToolId[];\n installed?: readonly string[];\n}): ToolId[] => {\n const installed = new Set(params.installed ?? []);\n return params.requested.filter((tool) => !installed.has(tool));\n};\n\nexport const upsertInstalledSkill = (\n installedSkills: readonly InstalledSkill[],\n nextSkill: InstalledSkill,\n): InstalledSkill[] => {\n const nextSkillId = resolveCanonicalSkillId(nextSkill.id);\n const remaining = installedSkills.filter((skill) => resolveCanonicalSkillId(skill.id) !== nextSkillId);\n return [...remaining, nextSkill];\n};\n\nexport const removeInstalledSkill = (installedSkills: readonly InstalledSkill[], skillId: string): InstalledSkill[] => {\n const targetSkillId = resolveCanonicalSkillId(skillId);\n return installedSkills.filter((skill) => resolveCanonicalSkillId(skill.id) !== targetSkillId);\n};\n\nexport const findInstalledSkill = (\n installedSkills: readonly InstalledSkill[],\n skillId: string,\n): InstalledSkill | undefined => {\n const targetSkillId = resolveCanonicalSkillId(skillId);\n return installedSkills.find((skill) => resolveCanonicalSkillId(skill.id) === targetSkillId);\n};\n","import { join } from 'node:path';\nimport { COMPILER_DATA_DIR } from './paths.js';\n\nexport const resolveCompilerDataDir = (): string => COMPILER_DATA_DIR;\n\nexport const resolveSkillsDir = (): string => join(COMPILER_DATA_DIR, 'skills');\n\nexport const resolveSubagentsDir = (): string => join(COMPILER_DATA_DIR, 'subagents');\n\nexport const resolvePacksDir = (): string => join(COMPILER_DATA_DIR, 'packs');\n\nexport const resolveIntegrationsDir = (): string => join(COMPILER_DATA_DIR, 'integrations');\n\nexport const resolveReferenceSkillsDir = (): string => join(resolveSkillsDir(), 'reference-skills');\n\nexport const resolveTaskSkillsDir = (): string => join(resolveSkillsDir(), 'task-skills');\n\nexport const resolveSkillCatalogPath = (): string => join(resolveSkillsDir(), 'skill-registry.json');\n\nexport const resolveIntegrationCatalogPath = (): string => join(resolveIntegrationsDir(), 'integration-registry.json');\n\n// project-only 설치 기준 디렉토리\nexport const resolveBasePath = (): string => process.cwd();\n\nexport const resolveUserBasePath = (): string => {\n const userBasePath = process.env.AI_OPS_HOME ?? process.env.HOME;\n if (!userBasePath) {\n throw new Error('AI_OPS_HOME or HOME is required for user/global component commands');\n }\n return userBasePath;\n};\n","import { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n// src/core/* 또는 dist/bin/index.js 기준에서도 공통으로 패키지 루트/data를 가리키도록 계산\n// src/core/paths.ts → ../../data = apps/cli/data\n// dist/bin/index.js (bundle) → ../../data = apps/cli/data\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport const COMPILER_DATA_DIR = resolve(__dirname, '..', '..', 'data');\n","import type { Command } from 'commander';\nimport { codexHookInstallCommand, codexHookStatusCommand, codexHookUninstallCommand } from './commands.js';\n\nexport const registerCodexHookCommands = (program: Command): void => {\n const command = program.command('codex-hook').description('Codex hooks 설정 관리');\n\n command\n .command('install <hookId>')\n .description('Codex hook 설치')\n .option('--command <command>', 'hook에 저장할 context-promotion 실행 명령')\n .action((hookId, opts: { command?: string }) => codexHookInstallCommand(hookId, opts));\n command.command('status <hookId>').description('Codex hook 설치 상태 확인').action((hookId) => codexHookStatusCommand(hookId));\n command.command('uninstall <hookId>').description('Codex hook 제거').action((hookId) => codexHookUninstallCommand(hookId));\n};\n","import * as p from '@clack/prompts';\nimport {\n CODEX_PERMISSION_PROFILE,\n inspectCodexSafePermissions,\n installCodexSafePermissions,\n uninstallCodexSafePermissions,\n} from './core.js';\nimport type { CodexPermissionProfile, CodexSafePermissionFileStatus, CodexSafePermissionStatus } from './core.js';\nimport { resolveUserBasePath } from '../../shared/command-paths.js';\n\nconst resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex permission commands');\n }\n return `${home}/.codex`;\n};\n\nconst resolveHomePath = (): string => {\n const home = process.env.HOME;\n if (!home) {\n throw new Error('HOME is required for Codex safe-local permissions');\n }\n return home;\n};\n\nconst resolvePersonalContextRoot = (): string => `${resolveHomePath()}/.personal-project-contexts`;\n\nconst assertCodexPermissionProfile = (profile: string): CodexPermissionProfile => {\n if (profile === CODEX_PERMISSION_PROFILE.SAFE_LOCAL) {\n return profile;\n }\n throw new Error(`Unknown Codex permission profile: ${profile}`);\n};\n\nconst reportCodexPermissionsError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nconst formatFileStatus = (label: string, status: CodexSafePermissionFileStatus): string =>\n [\n `${label}: ${status.installed ? 'installed' : 'not installed'}`,\n `path: ${status.path}`,\n `changed: ${status.changed ? 'yes' : 'no'}`,\n `conflict: ${status.conflict ?? 'none'}`,\n ].join('\\n');\n\nconst formatStatus = (status: CodexSafePermissionStatus): string =>\n [\n formatFileStatus('config', status.config),\n formatFileStatus('rules', status.rules),\n formatFileStatus('hook', status.hook),\n ].join('\\n\\n');\n\nconst statusHasConflict = (status: CodexSafePermissionStatus): boolean =>\n [status.config, status.rules, status.hook].some((fileStatus) => fileStatus.conflict !== null);\n\nconst resolveSafePermissionPaths = (): {\n codexHomePath: string;\n userBasePath: string;\n personalContextRoot: string;\n} => ({\n codexHomePath: resolveCodexHomePath(),\n userBasePath: resolveUserBasePath(),\n personalContextRoot: resolvePersonalContextRoot(),\n});\n\nexport const codexPermissionsInstallCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions install ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n const status = installCodexSafePermissions(resolveSafePermissionPaths());\n p.log.info(formatStatus(status));\n if (statusHasConflict(status)) {\n process.exitCode = 1;\n }\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions install 완료');\n};\n\nexport const codexPermissionsStatusCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions status ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n p.log.info(formatStatus(inspectCodexSafePermissions(resolveSafePermissionPaths())));\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions status 완료');\n};\n\nexport const codexPermissionsUninstallCommand = async (profile: string): Promise<void> => {\n p.intro(`ai-ops codex-permissions uninstall ${profile}`);\n try {\n assertCodexPermissionProfile(profile);\n p.log.info(formatStatus(uninstallCodexSafePermissions(resolveSafePermissionPaths())));\n } catch (error) {\n reportCodexPermissionsError(error);\n }\n p.outro('ai-ops codex-permissions uninstall 완료');\n};\n\nexport const codexPermissionsPermissionRequestHookCommand = async (profile: string): Promise<void> => {\n try {\n assertCodexPermissionProfile(profile);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n `${JSON.stringify({\n systemMessage: `ai-ops codex permission hook skipped: ${message}`,\n })}\\n`,\n );\n }\n};\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport type { CodexSafePermissionFileStatus } from './types.js';\n\n// ----- shared helpers -----\n\nconst isNodeFileNotFoundError = (error: unknown): boolean => {\n if (!(error instanceof Error) || !('code' in error)) {\n return false;\n }\n return error.code === 'ENOENT';\n};\n\nexport const readTextFileOrEmpty = (filePath: string): string => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch (error) {\n if (isNodeFileNotFoundError(error)) {\n return '';\n }\n throw error;\n }\n};\n\nexport const writeTextFile = (filePath: string, content: string): void => {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, 'utf-8');\n};\n\nexport const isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const readJsonRecord = (filePath: string): Record<string, unknown> => {\n try {\n const parsed: unknown = JSON.parse(readFileSync(filePath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n throw new Error('hooks.json must contain a JSON object');\n }\n return parsed;\n } catch (error) {\n if (isNodeFileNotFoundError(error)) {\n return {};\n }\n throw error;\n }\n};\n\nexport const getArray = (record: Record<string, unknown>, key: string): unknown[] => {\n const existing = record[key];\n return Array.isArray(existing) ? existing : [];\n};\n\nconst escapeRegExp = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nexport const stripBlock = (content: string, start: string, end: string): string => {\n const pattern = new RegExp(`\\\\n?${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}\\\\n?`, 'g');\n return content\n .replace(pattern, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trimStart();\n};\n\nexport const hasBlock = (content: string, start: string, end: string): boolean => {\n const pattern = new RegExp(`${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}`);\n return pattern.test(content);\n};\n\nexport const replaceOrAppendBlock = (content: string, start: string, end: string, block: string): string => {\n const cleanBlock = block.endsWith('\\n') ? block : `${block}\\n`;\n const pattern = new RegExp(`${escapeRegExp(start)}[\\\\s\\\\S]*?${escapeRegExp(end)}\\\\n?`, 'g');\n if (pattern.test(content)) {\n return content.replace(pattern, cleanBlock);\n }\n const separator = content.trim().length > 0 && !content.endsWith('\\n') ? '\\n\\n' : content.length > 0 ? '\\n' : '';\n return `${content}${separator}${cleanBlock}`;\n};\n\nexport const insertBlockBeforeFirstTable = (content: string, block: string): string => {\n const cleanBlock = block.endsWith('\\n') ? block : `${block}\\n`;\n if (content.trim().length === 0) {\n return cleanBlock;\n }\n\n const lines = content.split('\\n');\n const firstTableIndex = lines.findIndex(\n (line) => !line.trimStart().startsWith('#') && /^\\s*\\[[^\\]]+\\]\\s*(?:#.*)?$/.test(line),\n );\n if (firstTableIndex < 0) {\n const separator = content.endsWith('\\n') ? '\\n' : '\\n\\n';\n return `${content}${separator}${cleanBlock}`;\n }\n\n const before = lines.slice(0, firstTableIndex).join('\\n').trimEnd();\n const after = lines.slice(firstTableIndex).join('\\n').trimStart();\n return `${[before, cleanBlock.trimEnd(), after].filter((section) => section.length > 0).join('\\n\\n')}\\n`;\n};\n\nexport const quoteTomlString = (value: string): string => JSON.stringify(value);\n\nexport const readActiveStringAssignment = (content: string, key: string): string | null => {\n for (const line of content.split('\\n')) {\n if (line.trimStart().startsWith('#')) {\n continue;\n }\n const match = new RegExp(`^\\\\s*${key}\\\\s*=\\\\s*[\"']([^\"']+)[\"']`).exec(line);\n if (match) {\n return match[1];\n }\n }\n return null;\n};\n\nexport const readTopLevelStringAssignment = (content: string, key: string): string | null => {\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed.length === 0 || trimmed.startsWith('#')) {\n continue;\n }\n if (/^\\[[^\\]]+\\]\\s*(?:#.*)?$/.test(trimmed)) {\n return null;\n }\n const match = new RegExp(`^\\\\s*${key}\\\\s*=\\\\s*[\"']([^\"']+)[\"']`).exec(line);\n if (match) {\n return match[1];\n }\n }\n return null;\n};\n\nexport const hasActiveTable = (content: string, tableName: string): boolean => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tableName)}\\\\]\\\\s*(?:#.*)?$`);\n return content.split('\\n').some((line) => !line.trimStart().startsWith('#') && tablePattern.test(line));\n};\n\nexport const hasActiveTablePrefix = (content: string, tablePrefix: string): boolean => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tablePrefix)}(?:\\\\.|\\\\])`);\n return content.split('\\n').some((line) => !line.trimStart().startsWith('#') && tablePattern.test(line));\n};\n\nexport const findTableRange = (lines: readonly string[], tableName: string): { start: number; end: number } | null => {\n const tablePattern = new RegExp(`^\\\\s*\\\\[${escapeRegExp(tableName)}\\\\]\\\\s*(?:#.*)?$`);\n const start = lines.findIndex((line) => tablePattern.test(line));\n if (start < 0) {\n return null;\n }\n const nextTable = lines.findIndex((line, index) => index > start && /^\\s*\\[[^\\]]+\\]\\s*(?:#.*)?$/.test(line));\n return {\n start,\n end: nextTable < 0 ? lines.length : nextTable,\n };\n};\n\nexport const buildFileStatus = (params: {\n path: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n}): CodexSafePermissionFileStatus => ({\n path: params.path,\n installed: params.installed,\n changed: params.changed,\n conflict: params.conflict,\n});\n","import { join } from \"node:path\";\n\n// ----- types -----\n\nexport const CODEX_PERMISSION_PROFILE = {\n SAFE_LOCAL: 'safe-local',\n} as const;\n\nexport type CodexPermissionProfile = (typeof CODEX_PERMISSION_PROFILE)[keyof typeof CODEX_PERMISSION_PROFILE];\n\nexport type CodexSafePermissionPaths = {\n codexHomePath: string;\n userBasePath: string;\n personalContextRoot: string;\n};\n\nexport type CodexSafePermissionFileStatus = {\n path: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n};\n\nexport type CodexSafePermissionStatus = {\n config: CodexSafePermissionFileStatus;\n rules: CodexSafePermissionFileStatus;\n hook: CodexSafePermissionFileStatus;\n};\n\nexport type ConfigEditResult = {\n content: string;\n installed: boolean;\n changed: boolean;\n conflict: string | null;\n};\n\nexport type HookCleanupResult = {\n config: Record<string, unknown>;\n removed: boolean;\n};\n\n// ----- constants -----\n\nexport const SAFE_LOCAL_CODEX_PERMISSION_NAME = 'ai-ops-safe-local';\n\nexport const PROFILE_BLOCK_START = '# ai-ops:safe-permissions:profile:start';\nexport const PROFILE_BLOCK_END = '# ai-ops:safe-permissions:profile:end';\n\nexport const LEGACY_CONFIG_BLOCK_START = '# ai-ops:safe-permissions:config:start';\nexport const LEGACY_CONFIG_BLOCK_END = '# ai-ops:safe-permissions:config:end';\nexport const LEGACY_WRITABLE_ROOTS_BLOCK_START = '# ai-ops:safe-permissions:writable-roots:start';\nexport const LEGACY_WRITABLE_ROOTS_BLOCK_END = '# ai-ops:safe-permissions:writable-roots:end';\nexport const LEGACY_RULES_BLOCK_START = '# ai-ops:safe-permissions:start';\nexport const LEGACY_RULES_BLOCK_END = '# ai-ops:safe-permissions:end';\nexport const LEGACY_PERMISSION_HOOK_MARKER = 'codex-permissions hook permission-request safe-local';\n\nexport const PERMISSION_REQUEST_EVENT = 'PermissionRequest';\n\nexport const CONFIG_CONFLICT_SANDBOX =\n 'sandbox_mode/sandbox_workspace_write is active; safe-local v2 uses permission profiles and cannot mix with older sandbox settings';\nexport const CONFIG_CONFLICT_DEFAULT_PERMISSIONS =\n 'default_permissions is already set to another profile; safe-local v2 will not replace user-owned permission defaults';\nexport const CONFIG_CONFLICT_EXISTING_PROFILE =\n 'permissions.ai-ops-safe-local already exists outside the ai-ops managed block; safe-local v2 will not rewrite user-owned profile tables';\n\n// ----- filesystem paths -----\n\nexport const resolveCodexConfigPath = (codexHomePath: string): string => join(codexHomePath, 'config.toml');\n\nexport const resolveCodexRulesPath = (codexHomePath: string): string => join(codexHomePath, 'rules', 'default.rules');\n\nexport const resolveCodexHooksPathForPermissions = (codexHomePath: string): string => join(codexHomePath, 'hooks.json');\n","import type { CodexSafePermissionFileStatus, ConfigEditResult, HookCleanupResult } from \"./types.js\";\nimport { LEGACY_PERMISSION_HOOK_MARKER, LEGACY_RULES_BLOCK_END, LEGACY_RULES_BLOCK_START, PERMISSION_REQUEST_EVENT } from \"./types.js\";\nimport { buildFileStatus, getArray, hasBlock, isJsonRecord, readJsonRecord, stripBlock, writeTextFile } from \"./file-utils.js\";\n\n// ----- rules/default.rules legacy cleanup -----\n\nexport const cleanupLegacyRules = (content: string): ConfigEditResult => {\n const nextContent = stripBlock(content, LEGACY_RULES_BLOCK_START, LEGACY_RULES_BLOCK_END);\n return {\n content: nextContent,\n installed: true,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const inspectLegacyRules = (content: string): ConfigEditResult => ({\n content,\n installed: !hasBlock(content, LEGACY_RULES_BLOCK_START, LEGACY_RULES_BLOCK_END),\n changed: false,\n conflict: null,\n});\n\n// ----- hooks.json legacy cleanup -----\n\nconst handlerMatchesLegacySafeLocalPermissionHook = (handler: unknown): boolean =>\n isJsonRecord(handler) &&\n typeof handler.command === 'string' &&\n handler.command.includes(LEGACY_PERMISSION_HOOK_MARKER);\n\nconst configHasLegacySafeLocalPermissionHook = (config: Record<string, unknown>): boolean => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return false;\n }\n return getArray(hooks, PERMISSION_REQUEST_EVENT).some(\n (group) => isJsonRecord(group) && getArray(group, 'hooks').some(handlerMatchesLegacySafeLocalPermissionHook),\n );\n};\n\nconst removeLegacySafeLocalPermissionHook = (config: Record<string, unknown>): HookCleanupResult => {\n const hooks = config.hooks;\n if (!isJsonRecord(hooks)) {\n return { config, removed: false };\n }\n\n const previousGroups = getArray(hooks, PERMISSION_REQUEST_EVENT);\n let removed = false;\n const nextGroups = previousGroups\n .map((group) => {\n if (!isJsonRecord(group)) {\n return group;\n }\n const previousHandlers = getArray(group, 'hooks');\n const nextHandlers = previousHandlers.filter((handler) => {\n const matches = handlerMatchesLegacySafeLocalPermissionHook(handler);\n if (matches) {\n removed = true;\n }\n return !matches;\n });\n if (nextHandlers.length === 0) {\n return null;\n }\n return {\n ...group,\n hooks: nextHandlers,\n };\n })\n .filter((group): group is Exclude<unknown, null> => group !== null);\n\n if (!removed) {\n return { config, removed: false };\n }\n\n if (nextGroups.length > 0) {\n hooks[PERMISSION_REQUEST_EVENT] = nextGroups;\n } else {\n delete hooks[PERMISSION_REQUEST_EVENT];\n }\n return { config, removed: true };\n};\n\nexport const cleanupLegacyHookConfig = (hooksPath: string): CodexSafePermissionFileStatus => {\n const config = readJsonRecord(hooksPath);\n const cleanup = removeLegacySafeLocalPermissionHook(config);\n if (cleanup.removed) {\n writeTextFile(hooksPath, `${JSON.stringify(cleanup.config, null, 2)}\\n`);\n }\n return buildFileStatus({\n path: hooksPath,\n installed: !configHasLegacySafeLocalPermissionHook(cleanup.config),\n changed: cleanup.removed,\n conflict: null,\n });\n};\n\nexport const inspectLegacyHookConfig = (hooksPath: string): CodexSafePermissionFileStatus => {\n const config = readJsonRecord(hooksPath);\n return buildFileStatus({\n path: hooksPath,\n installed: !configHasLegacySafeLocalPermissionHook(config),\n changed: false,\n conflict: null,\n });\n};\n","import { join } from 'node:path';\nimport type { CodexSafePermissionPaths, ConfigEditResult } from './types.js';\nimport {\n CONFIG_CONFLICT_DEFAULT_PERMISSIONS,\n CONFIG_CONFLICT_EXISTING_PROFILE,\n CONFIG_CONFLICT_SANDBOX,\n LEGACY_CONFIG_BLOCK_END,\n LEGACY_CONFIG_BLOCK_START,\n LEGACY_WRITABLE_ROOTS_BLOCK_END,\n LEGACY_WRITABLE_ROOTS_BLOCK_START,\n PROFILE_BLOCK_END,\n PROFILE_BLOCK_START,\n SAFE_LOCAL_CODEX_PERMISSION_NAME,\n} from './types.js';\nimport {\n findTableRange,\n hasActiveTable,\n hasActiveTablePrefix,\n insertBlockBeforeFirstTable,\n quoteTomlString,\n readActiveStringAssignment,\n readTopLevelStringAssignment,\n replaceOrAppendBlock,\n stripBlock,\n} from './file-utils.js';\n\n// ----- config.toml management -----\n\nconst buildPermissionProfileBlock = (paths: CodexSafePermissionPaths, includeDefaultPermissions: boolean): string =>\n [\n PROFILE_BLOCK_START,\n ...(includeDefaultPermissions\n ? [`default_permissions = ${quoteTomlString(SAFE_LOCAL_CODEX_PERMISSION_NAME)}`, '']\n : []),\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}]`,\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.filesystem]`,\n 'glob_scan_max_depth = 3',\n '\":minimal\" = \"read\"',\n `${quoteTomlString(paths.personalContextRoot)} = \"write\"`,\n `${quoteTomlString(join(paths.userBasePath, '.ai-ops', 'context-promotion'))} = \"write\"`,\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.filesystem.\":project_roots\"]`,\n '\".\" = \"write\"',\n '\".git\" = \"read\"',\n '\".codex\" = \"read\"',\n '\".codex/plans\" = \"write\"',\n '\"**/*.env\" = \"none\"',\n '',\n `[permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}.network]`,\n 'enabled = false',\n PROFILE_BLOCK_END,\n '',\n ].join('\\n');\n\nconst stripLegacySandboxModeBlock = (content: string): string =>\n stripBlock(content, LEGACY_CONFIG_BLOCK_START, LEGACY_CONFIG_BLOCK_END);\n\nconst removeLegacyManagedSandboxWorkspaceWriteTable = (content: string): string => {\n const lines = content.split('\\n');\n const tableRange = findTableRange(lines, 'sandbox_workspace_write');\n if (!tableRange) {\n return content;\n }\n\n const tableText = lines.slice(tableRange.start, tableRange.end).join('\\n');\n if (!tableText.includes(LEGACY_WRITABLE_ROOTS_BLOCK_START) || !tableText.includes(LEGACY_WRITABLE_ROOTS_BLOCK_END)) {\n return content;\n }\n\n const tableWithoutManagedRoots = stripBlock(\n tableText,\n ` ${LEGACY_WRITABLE_ROOTS_BLOCK_START}`,\n ` ${LEGACY_WRITABLE_ROOTS_BLOCK_END}`,\n );\n const residue = tableWithoutManagedRoots\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith('#'));\n const isOnlyManagedWritableRootsTable =\n residue.length === 3 &&\n residue[0] === '[sandbox_workspace_write]' &&\n residue[1] === 'writable_roots = [' &&\n residue[2] === ']';\n\n if (!isOnlyManagedWritableRootsTable) {\n return content;\n }\n\n const nextLines = [...lines.slice(0, tableRange.start), ...lines.slice(tableRange.end)];\n return `${nextLines\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trimStart()\n .trimEnd()}\\n`;\n};\n\nconst cleanupLegacySandboxConfig = (content: string): string =>\n removeLegacyManagedSandboxWorkspaceWriteTable(stripLegacySandboxModeBlock(content));\n\nexport const editConfigForInstall = (content: string, paths: CodexSafePermissionPaths): ConfigEditResult => {\n const withoutCurrentProfileBlock = stripBlock(content, PROFILE_BLOCK_START, PROFILE_BLOCK_END);\n const withoutLegacy = cleanupLegacySandboxConfig(withoutCurrentProfileBlock);\n const activeDefaultPermissions = readTopLevelStringAssignment(withoutLegacy, 'default_permissions');\n\n if (\n readActiveStringAssignment(withoutLegacy, 'sandbox_mode') ||\n hasActiveTable(withoutLegacy, 'sandbox_workspace_write')\n ) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_SANDBOX,\n };\n }\n\n if (activeDefaultPermissions && activeDefaultPermissions !== SAFE_LOCAL_CODEX_PERMISSION_NAME) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_DEFAULT_PERMISSIONS,\n };\n }\n\n if (hasActiveTablePrefix(withoutLegacy, `permissions.${SAFE_LOCAL_CODEX_PERMISSION_NAME}`)) {\n return {\n content,\n installed: false,\n changed: false,\n conflict: CONFIG_CONFLICT_EXISTING_PROFILE,\n };\n }\n\n const shouldWriteDefaultPermissions = activeDefaultPermissions !== SAFE_LOCAL_CODEX_PERMISSION_NAME;\n const profileBlock = buildPermissionProfileBlock(paths, shouldWriteDefaultPermissions);\n const nextContent = shouldWriteDefaultPermissions\n ? insertBlockBeforeFirstTable(withoutLegacy, profileBlock)\n : replaceOrAppendBlock(withoutLegacy, PROFILE_BLOCK_START, PROFILE_BLOCK_END, profileBlock);\n\n return {\n content: nextContent,\n installed: true,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const editConfigForUninstall = (content: string): ConfigEditResult => {\n const withoutProfile = stripBlock(content, PROFILE_BLOCK_START, PROFILE_BLOCK_END);\n const withoutLegacy = cleanupLegacySandboxConfig(withoutProfile);\n const nextContent = withoutLegacy.trim().length > 0 ? `${withoutLegacy.trimEnd()}\\n` : '';\n return {\n content: nextContent,\n installed: false,\n changed: nextContent !== content,\n conflict: null,\n };\n};\n\nexport const inspectConfig = (content: string, paths: CodexSafePermissionPaths): ConfigEditResult => {\n const edited = editConfigForInstall(content, paths);\n if (edited.conflict) {\n return edited;\n }\n return {\n content,\n installed: !edited.changed,\n changed: false,\n conflict: null,\n };\n};\n","import { readTextFileOrEmpty, buildFileStatus, writeTextFile } from \"./file-utils.js\";\nimport { cleanupLegacyHookConfig, cleanupLegacyRules, inspectLegacyHookConfig, inspectLegacyRules } from \"./legacy-cleanup.js\";\nimport { editConfigForInstall, editConfigForUninstall, inspectConfig } from \"./config.js\";\nimport { resolveCodexConfigPath, resolveCodexHooksPathForPermissions, resolveCodexRulesPath } from \"./types.js\";\nimport type { CodexSafePermissionPaths, CodexSafePermissionStatus } from \"./types.js\";\n\nexport * from \"./types.js\";\n\n// ----- public lifecycle -----\n\nexport const installCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n const configEdit = editConfigForInstall(readTextFileOrEmpty(configPath), paths);\n if (configEdit.conflict) {\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...inspectLegacyRules(readTextFileOrEmpty(rulesPath)) }),\n hook: inspectLegacyHookConfig(hooksPath),\n };\n }\n if (configEdit.changed) {\n writeTextFile(configPath, configEdit.content);\n }\n\n const rulesEdit = cleanupLegacyRules(readTextFileOrEmpty(rulesPath));\n if (rulesEdit.changed) {\n writeTextFile(rulesPath, rulesEdit.content);\n }\n\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...rulesEdit }),\n hook: cleanupLegacyHookConfig(hooksPath),\n };\n};\n\nexport const uninstallCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n const configEdit = editConfigForUninstall(readTextFileOrEmpty(configPath));\n if (configEdit.changed) {\n writeTextFile(configPath, configEdit.content);\n }\n\n const rulesEdit = cleanupLegacyRules(readTextFileOrEmpty(rulesPath));\n if (rulesEdit.changed) {\n writeTextFile(rulesPath, rulesEdit.content);\n }\n\n return {\n config: buildFileStatus({ path: configPath, ...configEdit }),\n rules: buildFileStatus({ path: rulesPath, ...rulesEdit }),\n hook: cleanupLegacyHookConfig(hooksPath),\n };\n};\n\nexport const inspectCodexSafePermissions = (paths: CodexSafePermissionPaths): CodexSafePermissionStatus => {\n const configPath = resolveCodexConfigPath(paths.codexHomePath);\n const rulesPath = resolveCodexRulesPath(paths.codexHomePath);\n const hooksPath = resolveCodexHooksPathForPermissions(paths.codexHomePath);\n\n return {\n config: buildFileStatus({ path: configPath, ...inspectConfig(readTextFileOrEmpty(configPath), paths) }),\n rules: buildFileStatus({ path: rulesPath, ...inspectLegacyRules(readTextFileOrEmpty(rulesPath)) }),\n hook: inspectLegacyHookConfig(hooksPath),\n };\n};\n","import type { Command } from 'commander';\nimport {\n codexPermissionsInstallCommand,\n codexPermissionsPermissionRequestHookCommand,\n codexPermissionsStatusCommand,\n codexPermissionsUninstallCommand,\n} from './commands.js';\n\nexport const registerCodexPermissionsCommands = (program: Command): void => {\n const command = program.command('codex-permissions').description('Codex safe permission 설정 관리');\n\n command.command('install <profile>').description('Codex safe permission profile 설치').action((profile) =>\n codexPermissionsInstallCommand(profile),\n );\n command.command('status <profile>').description('Codex safe permission profile 상태 확인').action((profile) =>\n codexPermissionsStatusCommand(profile),\n );\n command.command('uninstall <profile>').description('Codex safe permission profile 제거').action((profile) =>\n codexPermissionsUninstallCommand(profile),\n );\n\n const hookCommand = command.command('hook', { hidden: true }).description('Deprecated Codex permission hook 내부 명령');\n hookCommand\n .command('permission-request <profile>', { hidden: true })\n .description('Deprecated no-op Codex PermissionRequest hook entrypoint')\n .action((profile) => codexPermissionsPermissionRequestHookCommand(profile));\n};\n","import * as p from '@clack/prompts';\nimport {\n CONTEXT_PROMOTION_DECISION,\n CONTEXT_PROMOTION_SCOPE,\n evaluateContextPromotionPostToolUseHook,\n getContextPromotionStatus,\n pruneContextPromotionReceipts,\n readContextPromotionReceiptIndex,\n resolveContextPromotion,\n} from './core.js';\nimport type { ContextPromotionDecision, ContextPromotionScope } from './core.js';\nimport { resolveBasePath, resolveUserBasePath } from '../../shared/command-paths.js';\n\ntype ContextPromotionStatusOptions = {\n json?: boolean;\n};\n\ntype ContextPromotionResolveOptions = {\n decision?: string;\n summary?: string;\n scope?: string[];\n target?: string[];\n};\n\ntype ContextPromotionPruneOptions = {\n max?: string;\n};\n\nconst VALID_DECISIONS = [\n CONTEXT_PROMOTION_DECISION.PROMOTED,\n CONTEXT_PROMOTION_DECISION.NO_PROMOTION,\n] as const satisfies readonly ContextPromotionDecision[];\n\nconst VALID_SCOPES = [\n CONTEXT_PROMOTION_SCOPE.CORE,\n CONTEXT_PROMOTION_SCOPE.PROJECT_LOCAL,\n CONTEXT_PROMOTION_SCOPE.GLOBAL,\n] as const satisfies readonly ContextPromotionScope[];\n\nconst parseDecision = (decision: string | undefined): ContextPromotionDecision => {\n const parsed = VALID_DECISIONS.find((candidate) => candidate === decision);\n if (parsed) {\n return parsed;\n }\n throw new Error(`decision must be one of: ${VALID_DECISIONS.join(', ')}`);\n};\n\nconst parseScopes = (scopes: readonly string[] | undefined): ContextPromotionScope[] => {\n const requestedScopes = scopes ?? [];\n return requestedScopes.map((scope) => {\n const parsed = VALID_SCOPES.find((candidate) => candidate === scope);\n if (!parsed) {\n throw new Error(`scope must be one of: ${VALID_SCOPES.join(', ')}`);\n }\n return parsed;\n });\n};\n\nconst parseMax = (max: string | undefined): number => {\n if (max === undefined) {\n return 50;\n }\n const parsed = Number.parseInt(max, 10);\n if (!Number.isFinite(parsed) || parsed < 1) {\n throw new Error('max must be a positive integer');\n }\n return parsed;\n};\n\nconst readStdin = async (): Promise<string> =>\n new Promise((resolve, reject) => {\n let raw = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk: string) => {\n raw += chunk;\n });\n process.stdin.on('end', () => resolve(raw));\n process.stdin.on('error', reject);\n });\n\nconst reportContextPromotionError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const contextPromotionStatusCommand = async (opts: ContextPromotionStatusOptions): Promise<void> => {\n try {\n const status = getContextPromotionStatus({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n });\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(status, null, 2) + '\\n');\n return;\n }\n\n p.intro('ai-ops context-promotion status');\n p.log.info(\n [\n `git root: ${status.gitRoot ?? 'not found'}`,\n `context layer: ${status.hasContextLayer ? 'found' : 'not found'}`,\n `HEAD: ${status.commitHash ?? 'not available'}`,\n `fingerprint: ${status.fingerprint ?? 'not available'}`,\n `receipt: ${status.receipt ? 'found' : 'missing'}`,\n `receipt store: ${status.receiptIndexPath ?? 'not available'}`,\n ].join('\\n'),\n );\n p.outro('ai-ops context-promotion status 완료');\n } catch (error) {\n reportContextPromotionError(error);\n }\n};\n\nexport const contextPromotionResolveCommand = async (opts: ContextPromotionResolveOptions): Promise<void> => {\n p.intro('ai-ops context-promotion resolve');\n try {\n const nextStatus = resolveContextPromotion({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n input: {\n decision: parseDecision(opts.decision),\n summary: opts.summary ?? '',\n scopes: parseScopes(opts.scope),\n targets: opts.target ?? [],\n },\n });\n p.log.success(`receipt 기록 완료: ${nextStatus.commitHash ?? nextStatus.fingerprint ?? 'unknown'}`);\n } catch (error) {\n reportContextPromotionError(error);\n }\n p.outro('ai-ops context-promotion resolve 완료');\n};\n\nexport const contextPromotionPruneCommand = async (opts: ContextPromotionPruneOptions): Promise<void> => {\n p.intro('ai-ops context-promotion prune');\n try {\n const status = getContextPromotionStatus({\n cwd: resolveBasePath(),\n userBasePath: resolveUserBasePath(),\n });\n if (!status.receiptIndexPath) {\n p.log.warn('prune할 receipt store를 찾지 못했습니다.');\n p.outro('ai-ops context-promotion prune 완료');\n return;\n }\n\n const maxReceipts = parseMax(opts.max);\n const before = readContextPromotionReceiptIndex(status.receiptIndexPath)?.receipts.length ?? 0;\n const next = pruneContextPromotionReceipts({ indexPath: status.receiptIndexPath, maxReceipts });\n const after = next?.receipts.length ?? 0;\n p.log.success(`receipt prune 완료: ${before} -> ${after}`);\n } catch (error) {\n reportContextPromotionError(error);\n }\n p.outro('ai-ops context-promotion prune 완료');\n};\n\nexport const contextPromotionPreToolUseHookCommand = async (): Promise<void> => {\n await readStdin();\n};\n\nexport const contextPromotionPostToolUseHookCommand = async (): Promise<void> => {\n try {\n const raw = await readStdin();\n const hookInput = raw.trim().length > 0 ? JSON.parse(raw) : {};\n const output = evaluateContextPromotionPostToolUseHook({\n hookInput,\n userBasePath: resolveUserBasePath(),\n });\n if (output) {\n process.stdout.write(JSON.stringify(output) + '\\n');\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n JSON.stringify({\n systemMessage: `ai-ops context promotion hook skipped: ${message}`,\n }) + '\\n',\n );\n }\n};\n","import { z } from 'zod';\n\n// ----- types -----\n\nexport type SuccessfulGitCommitPostToolUse = {\n cwd: string;\n command: string;\n};\n\n// ----- schemas -----\n\nconst HookToolInputSchema = z\n .object({\n command: z.string().optional(),\n })\n .passthrough();\n\nconst ToolUseHookInputSchema = z\n .object({\n hook_event_name: z.string(),\n cwd: z.string(),\n tool_name: z.string().optional(),\n tool_input: z.unknown().optional(),\n tool_response: z.unknown().optional(),\n })\n .passthrough();\n\n// ----- git commit command detection -----\n\nconst SHELL_CONTROL_TOKENS = new Set(['&&', '||', ';', '|', '(', ')']);\nconst SHELL_SCRIPT_FLAGS = new Set(['-c', '-lc']);\nconst GIT_GLOBAL_OPTIONS_WITH_VALUE = new Set([\n '-C',\n '-c',\n '--git-dir',\n '--work-tree',\n '--namespace',\n '--config-env',\n '--exec-path',\n]);\n\nconst basename = (token: string): string => token.replace(/\\\\/g, '/').split('/').at(-1) ?? token;\n\nconst isAssignmentToken = (token: string): boolean => /^[A-Za-z_][A-Za-z0-9_]*=/.test(token);\n\nconst tokenizeShellLike = (command: string): string[] => {\n const tokens: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | null = null;\n\n const pushCurrent = (): void => {\n if (current.length > 0) {\n tokens.push(current);\n current = '';\n }\n };\n\n for (let index = 0; index < command.length; index += 1) {\n const char = command[index];\n const nextChar = command[index + 1];\n\n if (quote) {\n if (char === quote) {\n quote = null;\n continue;\n }\n current += char;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (/\\s/.test(char)) {\n pushCurrent();\n continue;\n }\n\n if ((char === '&' && nextChar === '&') || (char === '|' && nextChar === '|')) {\n pushCurrent();\n tokens.push(`${char}${nextChar}`);\n index += 1;\n continue;\n }\n\n if (char === ';' || char === '|' || char === '(' || char === ')') {\n pushCurrent();\n tokens.push(char);\n continue;\n }\n\n current += char;\n }\n\n pushCurrent();\n return tokens;\n};\n\nconst splitCommandSegments = (tokens: readonly string[]): string[][] => {\n const segments: string[][] = [];\n let current: string[] = [];\n\n for (const token of tokens) {\n if (SHELL_CONTROL_TOKENS.has(token)) {\n if (current.length > 0) {\n segments.push(current);\n current = [];\n }\n continue;\n }\n current.push(token);\n }\n\n if (current.length > 0) {\n segments.push(current);\n }\n\n return segments;\n};\n\nconst firstExecutableIndex = (segment: readonly string[]): number => {\n let index = 0;\n\n while (index < segment.length && isAssignmentToken(segment[index])) {\n index += 1;\n }\n\n if (segment[index] === 'env') {\n index += 1;\n while (index < segment.length && isAssignmentToken(segment[index])) {\n index += 1;\n }\n }\n\n if (segment[index] === 'command' || segment[index] === 'sudo') {\n index += 1;\n }\n\n return index;\n};\n\nconst segmentInvokesGitCommit = (segment: readonly string[]): boolean => {\n const executableIndex = firstExecutableIndex(segment);\n if (executableIndex >= segment.length || basename(segment[executableIndex]) !== 'git') {\n return false;\n }\n\n for (let index = executableIndex + 1; index < segment.length; index += 1) {\n const token = segment[index];\n if (GIT_GLOBAL_OPTIONS_WITH_VALUE.has(token)) {\n index += 1;\n continue;\n }\n if (token.startsWith('-')) {\n continue;\n }\n return token === 'commit';\n }\n\n return false;\n};\n\nconst segmentInvokesShellScriptWithGitCommit = (segment: readonly string[]): boolean => {\n const executableIndex = firstExecutableIndex(segment);\n const executable = segment[executableIndex];\n if (!executable || !['bash', 'sh', 'zsh'].includes(basename(executable))) {\n return false;\n }\n\n for (let index = executableIndex + 1; index < segment.length - 1; index += 1) {\n if (SHELL_SCRIPT_FLAGS.has(segment[index]) && isGitCommitCommand(segment[index + 1])) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const isGitCommitCommand = (command: string): boolean => {\n const segments = splitCommandSegments(tokenizeShellLike(command));\n return segments.some(\n (segment) => segmentInvokesGitCommit(segment) || segmentInvokesShellScriptWithGitCommit(segment),\n );\n};\n\n// ----- tool response success guard -----\n\nconst isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst numberField = (record: Record<string, unknown>, keys: readonly string[]): number | null => {\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'number') {\n return value;\n }\n }\n return null;\n};\n\nconst booleanField = (record: Record<string, unknown>, keys: readonly string[]): boolean | null => {\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'boolean') {\n return value;\n }\n }\n return null;\n};\n\nconst GIT_COMMIT_FAILURE_OUTPUT_PATTERNS = [\n /(^|\\n)\\s*fatal:/i,\n /(^|\\n)\\s*error:/i,\n /(^|\\n)\\s*nothing to commit\\b/i,\n /(^|\\n)\\s*no changes added to commit\\b/i,\n /(^|\\n).*aborting commit\\b/i,\n /(^|\\n).*commit failed\\b/i,\n /(^|\\n).*failed to .*commit\\b/i,\n /(^|\\n).*command failed\\b/i,\n /(^|\\n).*non-zero exit\\b/i,\n /(^|\\n).*exit (code|status)\\s+[1-9]\\d*\\b/i,\n /(^|\\n).*exited with code\\s+[1-9]\\d*\\b/i,\n /(^|\\n).*hook.*(failed|declined|error|exit(?:ed)? with code|non-zero)/i,\n] as const;\n\nconst GIT_COMMIT_SUCCESS_OUTPUT_PATTERN = /(^|\\n)\\[[^\\]\\n]+ [a-f0-9]{7,40}\\]/i;\n\nconst stringIndicatesGitCommitSuccess = (output: string): boolean => GIT_COMMIT_SUCCESS_OUTPUT_PATTERN.test(output);\n\nconst stringIndicatesGitCommitFailureOrSuccess = (output: string): boolean | null =>\n stringIndicatesGitCommitSuccess(output)\n ? false\n : GIT_COMMIT_FAILURE_OUTPUT_PATTERNS.some((pattern) => pattern.test(output))\n ? true\n : null;\n\nconst recordStringFieldsIndicateGitCommitFailure = (record: Record<string, unknown>): boolean =>\n ['message', 'output', 'stdout', 'stderr', 'error', 'combinedOutput'].some((key) => {\n const value = record[key];\n return typeof value === 'string' && stringIndicatesGitCommitFailureOrSuccess(value) === true;\n });\n\nconst toolResponseIndicatesFailure = (toolResponse: unknown): boolean => {\n if (typeof toolResponse === 'string') {\n return stringIndicatesGitCommitFailureOrSuccess(toolResponse) === true;\n }\n\n if (!isJsonRecord(toolResponse)) {\n return false;\n }\n\n const success = booleanField(toolResponse, ['success', 'ok']);\n if (success === false) {\n return true;\n }\n\n const exitCode = numberField(toolResponse, ['exit_code', 'exitCode', 'status', 'code']);\n if (exitCode !== null && exitCode !== 0) {\n return true;\n }\n\n return recordStringFieldsIndicateGitCommitFailure(toolResponse);\n};\n\nexport const parseSuccessfulGitCommitPostToolUseHook = (hookInput: unknown): SuccessfulGitCommitPostToolUse | null => {\n const parsed = ToolUseHookInputSchema.safeParse(hookInput);\n if (!parsed.success) {\n return null;\n }\n if (parsed.data.hook_event_name !== 'PostToolUse' || parsed.data.tool_name !== 'Bash') {\n return null;\n }\n\n const toolInput = HookToolInputSchema.safeParse(parsed.data.tool_input);\n const command = toolInput.success ? (toolInput.data.command ?? '') : '';\n if (!isGitCommitCommand(command) || toolResponseIndicatesFailure(parsed.data.tool_response)) {\n return null;\n }\n\n return {\n cwd: parsed.data.cwd,\n command,\n };\n};\n","import { z } from \"zod\";\n\n// ----- types -----\n\nexport const CONTEXT_PROMOTION_DECISION = {\n PROMOTED: 'promoted',\n NO_PROMOTION: 'no-promotion',\n} as const;\n\nexport const CONTEXT_PROMOTION_SCOPE = {\n CORE: 'core',\n PROJECT_LOCAL: 'project-local',\n GLOBAL: 'global',\n} as const;\n\nexport const ContextPromotionDecisionSchema = z.union([\n z.literal(CONTEXT_PROMOTION_DECISION.PROMOTED),\n z.literal(CONTEXT_PROMOTION_DECISION.NO_PROMOTION),\n]);\n\nexport const ContextPromotionScopeSchema = z.union([\n z.literal(CONTEXT_PROMOTION_SCOPE.CORE),\n z.literal(CONTEXT_PROMOTION_SCOPE.PROJECT_LOCAL),\n z.literal(CONTEXT_PROMOTION_SCOPE.GLOBAL),\n]);\n\nexport const ContextPromotionReceiptSchema = z\n .object({\n fingerprint: z.string().regex(/^[a-f0-9]{16}$/),\n commitHash: z\n .string()\n .regex(/^(NO_HEAD|[a-f0-9]{40})$/)\n .optional(),\n decision: ContextPromotionDecisionSchema,\n scopes: z.array(ContextPromotionScopeSchema),\n targets: z.array(z.string().min(1)),\n summary: z.string().min(1),\n resolvedAt: z.string().min(1),\n })\n .strict();\n\nexport const ContextPromotionReceiptIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-promotion-receipts'),\n projectKey: z.string().regex(/^[a-f0-9]{12}$/),\n projectRoot: z.string().min(1),\n receipts: z.array(ContextPromotionReceiptSchema),\n })\n .strict();\n\nexport type ContextPromotionDecision = z.infer<typeof ContextPromotionDecisionSchema>;\nexport type ContextPromotionScope = z.infer<typeof ContextPromotionScopeSchema>;\nexport type ContextPromotionReceipt = z.infer<typeof ContextPromotionReceiptSchema>;\nexport type ContextPromotionReceiptIndex = z.infer<typeof ContextPromotionReceiptIndexSchema>;\n\nexport type ContextPromotionProjectStatus = {\n cwd: string;\n gitRoot: string | null;\n hasContextLayer: boolean;\n projectKey: string | null;\n commitHash: string | null;\n fingerprint: string | null;\n receipt: ContextPromotionReceipt | null;\n receiptIndexPath: string | null;\n};\n\nexport type ContextPromotionResolveInput = {\n decision: ContextPromotionDecision;\n summary: string;\n scopes: readonly ContextPromotionScope[];\n targets: readonly string[];\n};\n\nexport type ContextPromotionPostToolUseHookOutput = {\n decision: 'block';\n reason: string;\n hookSpecificOutput: {\n hookEventName: 'PostToolUse';\n additionalContext: string;\n };\n};\n\n// ----- constants -----\n\nexport const RECEIPT_INDEX_FILENAME = 'receipts-index.json';\nexport const DEFAULT_PRUNE_MAX = 50;\n","import { createHash } from \"node:crypto\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, statSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// ----- hashing -----\n\nconst hashHex = (parts: readonly string[], length: number): string =>\n createHash('sha256').update(parts.join('\\0')).digest('hex').slice(0, length);\n\nexport const buildContextPromotionProjectKey = (gitRoot: string): string => hashHex([resolve(gitRoot)], 12);\n\n// ----- git helpers -----\n\nconst runGit = (cwd: string, args: readonly string[]): string =>\n execFileSync('git', [...args], {\n cwd,\n encoding: 'utf-8',\n maxBuffer: 20 * 1024 * 1024,\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n\nexport const resolveContextPromotionGitRoot = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--show-toplevel']).trim();\n } catch {\n return null;\n }\n};\n\nexport const readGitHead = (gitRoot: string): string => {\n try {\n return runGit(gitRoot, ['rev-parse', '--verify', 'HEAD']).trim();\n } catch {\n return 'NO_HEAD';\n }\n};\n\nconst readUntrackedFingerprintParts = (gitRoot: string): string[] => {\n const raw = runGit(gitRoot, ['ls-files', '--others', '--exclude-standard', '-z']);\n const paths = raw\n .split('\\0')\n .filter((path) => path.length > 0)\n .sort((a, b) => a.localeCompare(b));\n\n return paths.map((relativePath) => {\n const absolutePath = join(gitRoot, relativePath);\n try {\n const stat = statSync(absolutePath);\n if (!stat.isFile()) {\n return `${relativePath}:non-file`;\n }\n const content = readFileSync(absolutePath);\n return `${relativePath}:${createHash('sha256').update(content).digest('hex')}`;\n } catch {\n throw new Error(`Unable to read untracked path for context promotion fingerprint: ${relativePath}`);\n }\n });\n};\n\nconst readTrackedWorkingTreeFingerprintParts = (gitRoot: string): string[] => {\n const rawDiff = runGit(gitRoot, ['diff', '--raw', '-z']);\n const rawNames = runGit(gitRoot, ['diff', '--name-only', '-z']);\n const paths = rawNames\n .split('\\0')\n .filter((path) => path.length > 0)\n .sort((a, b) => a.localeCompare(b));\n\n return [\n `raw:${rawDiff}`,\n ...paths.map((relativePath) => {\n const absolutePath = join(gitRoot, relativePath);\n if (!existsSync(absolutePath)) {\n return `${relativePath}:deleted`;\n }\n\n const stat = statSync(absolutePath);\n if (!stat.isFile()) {\n return `${relativePath}:non-file`;\n }\n\n const content = readFileSync(absolutePath);\n return `${relativePath}:${createHash('sha256').update(content).digest('hex')}`;\n }),\n ];\n};\n\nconst readGitIndexFingerprintParts = (gitRoot: string): string[] => [\n `index:${runGit(gitRoot, ['ls-files', '-s', '-z'])}`,\n `staged-raw:${runGit(gitRoot, ['diff', '--cached', '--raw', '-z'])}`,\n];\n\nexport const computeContextPromotionFingerprint = (gitRoot: string): string =>\n hashHex(\n [\n `head:${readGitHead(gitRoot)}`,\n ...readGitIndexFingerprintParts(gitRoot),\n ...readTrackedWorkingTreeFingerprintParts(gitRoot).map((part) => `tracked-working-tree:${part}`),\n ...readUntrackedFingerprintParts(gitRoot).map((part) => `untracked:${part}`),\n ],\n 16,\n );\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { ContextPromotionReceiptIndexSchema, DEFAULT_PRUNE_MAX, RECEIPT_INDEX_FILENAME } from \"./types.js\";\nimport type { ContextPromotionReceipt, ContextPromotionReceiptIndex } from \"./types.js\";\n\n// ----- receipt storage -----\n\nexport const resolveContextPromotionReceiptIndexPath = (params: { userBasePath: string; projectKey: string }): string =>\n join(params.userBasePath, '.ai-ops', 'context-promotion', 'projects', params.projectKey, RECEIPT_INDEX_FILENAME);\n\nexport const parseContextPromotionReceiptIndex = (json: string): ContextPromotionReceiptIndex =>\n ContextPromotionReceiptIndexSchema.parse(JSON.parse(json));\n\nexport const serializeContextPromotionReceiptIndex = (index: ContextPromotionReceiptIndex): string =>\n JSON.stringify(index, null, 2) + '\\n';\n\nexport const readContextPromotionReceiptIndex = (indexPath: string): ContextPromotionReceiptIndex | null => {\n try {\n return parseContextPromotionReceiptIndex(readFileSync(indexPath, 'utf-8'));\n } catch {\n return null;\n }\n};\n\nconst writeContextPromotionReceiptIndex = (indexPath: string, index: ContextPromotionReceiptIndex): void => {\n mkdirSync(dirname(indexPath), { recursive: true });\n writeFileSync(indexPath, serializeContextPromotionReceiptIndex(index), 'utf-8');\n};\n\nexport const buildEmptyReceiptIndex = (params: { projectKey: string; projectRoot: string }): ContextPromotionReceiptIndex => ({\n schemaVersion: 1,\n kind: 'context-promotion-receipts',\n projectKey: params.projectKey,\n projectRoot: params.projectRoot,\n receipts: [],\n});\n\nconst sortReceiptsByResolvedAtDesc = (receipts: readonly ContextPromotionReceipt[]): ContextPromotionReceipt[] =>\n [...receipts].sort((a, b) => b.resolvedAt.localeCompare(a.resolvedAt));\n\nexport const findContextPromotionReceipt = (params: {\n index: ContextPromotionReceiptIndex | null;\n fingerprint: string;\n commitHash: string;\n}): ContextPromotionReceipt | null => {\n const receipts = params.index?.receipts ?? [];\n return (\n receipts.find((receipt) => receipt.commitHash === params.commitHash) ??\n receipts.find((receipt) => receipt.fingerprint === params.fingerprint) ??\n null\n );\n};\n\nexport const upsertContextPromotionReceipt = (params: {\n indexPath: string;\n projectKey: string;\n projectRoot: string;\n receipt: ContextPromotionReceipt;\n maxReceipts?: number;\n}): ContextPromotionReceiptIndex => {\n const previous = readContextPromotionReceiptIndex(params.indexPath);\n const index =\n previous?.projectKey === params.projectKey\n ? previous\n : buildEmptyReceiptIndex({ projectKey: params.projectKey, projectRoot: params.projectRoot });\n const remaining = index.receipts.filter((receipt) => {\n if (receipt.fingerprint === params.receipt.fingerprint) {\n return false;\n }\n if (params.receipt.commitHash && receipt.commitHash === params.receipt.commitHash) {\n return false;\n }\n return true;\n });\n const maxReceipts = params.maxReceipts ?? DEFAULT_PRUNE_MAX;\n const receipts = sortReceiptsByResolvedAtDesc([params.receipt, ...remaining]).slice(0, maxReceipts);\n const nextIndex = {\n ...index,\n projectRoot: params.projectRoot,\n receipts,\n };\n writeContextPromotionReceiptIndex(params.indexPath, nextIndex);\n return nextIndex;\n};\n\nexport const pruneContextPromotionReceipts = (params: {\n indexPath: string;\n maxReceipts: number;\n}): ContextPromotionReceiptIndex | null => {\n const index = readContextPromotionReceiptIndex(params.indexPath);\n if (!index) {\n return null;\n }\n\n const nextIndex = {\n ...index,\n receipts: sortReceiptsByResolvedAtDesc(index.receipts).slice(0, params.maxReceipts),\n };\n writeContextPromotionReceiptIndex(params.indexPath, nextIndex);\n return nextIndex;\n};\n","import { existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH } from '../project-layer/index.js';\nimport {\n buildContextPromotionProjectKey,\n computeContextPromotionFingerprint,\n readGitHead,\n resolveContextPromotionGitRoot,\n} from './git.js';\nimport {\n findContextPromotionReceipt,\n readContextPromotionReceiptIndex,\n resolveContextPromotionReceiptIndexPath,\n upsertContextPromotionReceipt,\n} from './receipts.js';\nimport { CONTEXT_PROMOTION_DECISION, ContextPromotionReceiptSchema } from './types.js';\nimport type { ContextPromotionProjectStatus, ContextPromotionReceipt, ContextPromotionResolveInput } from './types.js';\n\n// ----- status and resolve -----\n\nexport const hasContextPromotionLayer = (gitRoot: string): boolean =>\n existsSync(join(gitRoot, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH));\n\nexport const getContextPromotionStatus = (params: {\n cwd: string;\n userBasePath: string;\n}): ContextPromotionProjectStatus => {\n const cwd = resolve(params.cwd);\n const gitRoot = resolveContextPromotionGitRoot(cwd);\n if (!gitRoot) {\n return {\n cwd,\n gitRoot: null,\n hasContextLayer: false,\n projectKey: null,\n commitHash: null,\n fingerprint: null,\n receipt: null,\n receiptIndexPath: null,\n };\n }\n\n const hasContextLayer = hasContextPromotionLayer(gitRoot);\n const projectKey = buildContextPromotionProjectKey(gitRoot);\n const commitHash = readGitHead(gitRoot);\n const receiptIndexPath = resolveContextPromotionReceiptIndexPath({\n userBasePath: params.userBasePath,\n projectKey,\n });\n if (!hasContextLayer) {\n return {\n cwd,\n gitRoot,\n hasContextLayer,\n projectKey,\n commitHash,\n fingerprint: null,\n receipt: null,\n receiptIndexPath,\n };\n }\n\n const fingerprint = computeContextPromotionFingerprint(gitRoot);\n const index = readContextPromotionReceiptIndex(receiptIndexPath);\n\n return {\n cwd,\n gitRoot,\n hasContextLayer,\n projectKey,\n commitHash,\n fingerprint,\n receipt: findContextPromotionReceipt({ index, fingerprint, commitHash }),\n receiptIndexPath,\n };\n};\n\nexport const buildContextPromotionReceipt = (params: {\n fingerprint: string;\n commitHash: string;\n input: ContextPromotionResolveInput;\n resolvedAt?: string;\n}): ContextPromotionReceipt => {\n const summary = params.input.summary.trim();\n if (summary.length === 0) {\n throw new Error('summary is required');\n }\n\n if (params.input.decision === CONTEXT_PROMOTION_DECISION.PROMOTED && params.input.scopes.length === 0) {\n throw new Error('at least one scope is required for promoted decisions');\n }\n\n return ContextPromotionReceiptSchema.parse({\n fingerprint: params.fingerprint,\n commitHash: params.commitHash,\n decision: params.input.decision,\n scopes: [...params.input.scopes],\n targets: [...params.input.targets],\n summary,\n resolvedAt: params.resolvedAt ?? new Date().toISOString(),\n });\n};\n\nexport const resolveContextPromotion = (params: {\n cwd: string;\n userBasePath: string;\n input: ContextPromotionResolveInput;\n}): ContextPromotionProjectStatus => {\n const status = getContextPromotionStatus({ cwd: params.cwd, userBasePath: params.userBasePath });\n if (!status.gitRoot || !status.projectKey || !status.commitHash || !status.fingerprint || !status.receiptIndexPath) {\n throw new Error('git repository is required for context promotion receipts');\n }\n if (!status.hasContextLayer) {\n throw new Error('ai-ops context layer is required for context promotion receipts');\n }\n\n const receipt = buildContextPromotionReceipt({\n fingerprint: status.fingerprint,\n commitHash: status.commitHash,\n input: params.input,\n });\n upsertContextPromotionReceipt({\n indexPath: status.receiptIndexPath,\n projectKey: status.projectKey,\n projectRoot: status.gitRoot,\n receipt,\n });\n\n return getContextPromotionStatus({ cwd: params.cwd, userBasePath: params.userBasePath });\n};\n","import { join } from 'node:path';\nimport { COMPILER_DATA_DIR } from '@/shared/paths.js';\nimport type { ProjectLayerTool } from '@/core/schemas/index.js';\n\n// ----- constants -----\n\nexport const PROJECT_LAYER_MANIFEST_RELATIVE_PATH = '.ai-ops/manifest.json';\nexport const PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH = '.ai-ops/context-layer.json';\nexport const CUSTOM_PROJECT_RULES_DIR = 'docs/agent/project-rules';\n\nexport const CONTEXT_LAYER_DATA_DIR = join(COMPILER_DATA_DIR, 'context-layer');\n\nexport const TOOL_ORDER = ['codex', 'gemini', 'claude-code'] as const satisfies readonly ProjectLayerTool[];\n\nexport const DEFAULT_TOOLS = TOOL_ORDER;\n\nexport const TEMPLATE_PATHS = [\n 'AGENTS.md',\n 'GEMINI.md',\n 'CLAUDE.md',\n 'docs/agent/workflow.md',\n 'docs/agent/terminology.md',\n 'docs/agent/rules/00-agent-baseline.md',\n 'docs/agent/rules/routing-rules.md',\n 'docs/agent/rules/doc-update-rules.md',\n 'docs/agent/rules/stop-rules.md',\n 'docs/agent/checks/impact-checklist.md',\n 'docs/agent/maps/codebase-map.md',\n 'docs/business/terminology.md',\n 'docs/business/business-rules.md',\n 'docs/docs-status.md',\n] as const;\n\nexport const PROJECT_OWNED_PATHS = new Set<string>([\n 'docs/docs-status.md',\n 'docs/agent/maps/codebase-map.md',\n 'docs/business/terminology.md',\n 'docs/business/business-rules.md',\n]);\n\nexport const RESERVED_DOCUMENT_WARNINGS = [\n '판단 근거로 사용하지 마세요',\n 'Do not use this document as current decision-making evidence',\n] as const;\n","import { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { isSafeProjectLayerPath } from \"@/core/schemas/index.js\";\nimport { CONTEXT_LAYER_DATA_DIR, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\n\n// ----- path helpers -----\n\nexport const resolveProjectLayerManifestPath = (basePath: string): string =>\n join(basePath, PROJECT_LAYER_MANIFEST_RELATIVE_PATH);\n\nexport const resolveProjectLayerContextIndexPath = (basePath: string): string =>\n join(basePath, PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH);\n\nexport const resolveTemplatePath = (relativePath: string): string => join(CONTEXT_LAYER_DATA_DIR, relativePath);\n\nexport const toRelativeDir = (relativePath: string): string => dirname(relativePath);\n\nexport const resolveProjectLayerFilePath = (basePath: string, relativePath: string): string => {\n if (!isSafeProjectLayerPath(relativePath)) {\n throw new Error(`Unsafe project layer path: ${relativePath}`);\n }\n\n const absoluteBasePath = resolve(basePath);\n const absolutePath = resolve(absoluteBasePath, relativePath);\n const relativeFromBase = relative(absoluteBasePath, absolutePath);\n\n if (relativeFromBase === '' || relativeFromBase.startsWith('..') || isAbsolute(relativeFromBase)) {\n throw new Error(`Unsafe project layer path: ${relativePath}`);\n }\n\n return absolutePath;\n};\n","import { ProjectLayerContextIndexSchema, ProjectLayerManifestSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\n\n// ----- parsing and serialization -----\n\nexport const parseProjectLayerManifest = (json: string): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse(JSON.parse(json));\n\nexport const serializeProjectLayerManifest = (manifest: ProjectLayerManifest): string =>\n JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const parseProjectLayerContextIndex = (json: string): ProjectLayerContextIndex =>\n ProjectLayerContextIndexSchema.parse(JSON.parse(json));\n\nexport const serializeProjectLayerContextIndex = (contextIndex: ProjectLayerContextIndex): string =>\n JSON.stringify(contextIndex, null, 2) + '\\n';\n","const MANAGED_MARKER = '<!-- managed by ai-ops -->';\nconst META_PATTERN = /^<!-- sourceHash: ([a-f0-9]{6}) \\| generatedAt: (.+) -->$/;\n\nconst SECTION_START = '<!-- ai-ops:start -->';\nconst SECTION_END = '<!-- ai-ops:end -->';\n\nexport const hasLegacyHeader = (content: string): boolean => content.includes(MANAGED_MARKER);\n\nexport const wrapWithSection = (content: string, meta: { sourceHash: string; generatedAt: string }): string => {\n const metaLine = `<!-- sourceHash: ${meta.sourceHash} | generatedAt: ${meta.generatedAt} -->`;\n return `${SECTION_START}\\n${metaLine}\\n\\n${content}\\n${SECTION_END}`;\n};\n\nexport const hasAiOpsSection = (content: string): boolean =>\n content.includes(SECTION_START) && content.includes(SECTION_END);\n\nexport const stripAiOpsSection = (content: string): string => {\n const startIdx = content.indexOf(SECTION_START);\n const endIdx = content.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return content;\n\n const before = content.slice(0, startIdx).trimEnd();\n const after = content.slice(endIdx + SECTION_END.length).trimStart();\n return before + (after ? '\\n\\n' + after : '') + '\\n';\n};\n\nexport const extractAiOpsSectionContent = (content: string): string | null => {\n const startIdx = content.indexOf(SECTION_START);\n const endIdx = content.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return null;\n\n const section = content.slice(startIdx + SECTION_START.length, endIdx).trim();\n const lines = section.split('\\n');\n const [, ...contentLines] = lines;\n return contentLines.join('\\n').trimStart();\n};\n\nexport const replaceAiOpsSection = (existing: string, newSection: string): string => {\n const startIdx = existing.indexOf(SECTION_START);\n const endIdx = existing.indexOf(SECTION_END);\n if (startIdx === -1 || endIdx === -1) return existing;\n\n const before = existing.slice(0, startIdx).trimEnd();\n const after = existing.slice(endIdx + SECTION_END.length).trimStart();\n\n // filter(Boolean)으로 빈 before/after 제거 → 불필요한 선행 \\n\\n 방지\n return [before, newSection, after].filter(Boolean).join('\\n\\n') + '\\n';\n};\n\nexport const parseAiOpsMeta = (content: string): { sourceHash: string; generatedAt: string } | null => {\n const startIdx = content.indexOf(SECTION_START);\n if (startIdx === -1) return null;\n\n const lines = content.slice(startIdx).split('\\n');\n // lines[0] = '<!-- ai-ops:start -->', lines[1] = meta line\n const metaLine = lines[1] ?? '';\n const match = META_PATTERN.exec(metaLine);\n if (!match) return null;\n\n return { sourceHash: match[1], generatedAt: match[2] };\n};\n","import { parseMarkdownFrontmatter } from \"@/shared/markdown/frontmatter.js\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { extractAiOpsSectionContent } from \"./managed-header.js\";\nimport { ProjectLayerFrontmatterSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerFrontmatter } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerDocumentReadResult } from \"./types.js\";\n\nexport const parseProjectLayerFrontmatter = (content: string): ProjectLayerFrontmatter => {\n const { frontmatter } = parseMarkdownFrontmatter(content);\n return ProjectLayerFrontmatterSchema.parse(frontmatter);\n};\n\nexport const parseProjectLayerDocument = (path: string, rawContent: string): ProjectLayerDocumentReadResult => {\n const managedContent = extractAiOpsSectionContent(rawContent);\n const content = managedContent ?? rawContent;\n const frontmatter = parseProjectLayerFrontmatter(content);\n\n return {\n path,\n status: frontmatter.status,\n layer: frontmatter.layer,\n owner: frontmatter.owner,\n read_when: frontmatter.read_when,\n update_when: frontmatter.update_when,\n contentHash: computeHash([content.trimEnd()]),\n content,\n };\n};\n","import { readFileSync } from \"node:fs\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { ProjectLayerToolSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerTool } from \"@/core/schemas/index.js\";\nimport { DEFAULT_TOOLS, PROJECT_OWNED_PATHS, RESERVED_DOCUMENT_WARNINGS, TEMPLATE_PATHS, TOOL_ORDER } from \"./constants.js\";\nimport { parseProjectLayerFrontmatter } from \"./document.logic.js\";\nimport { resolveTemplatePath } from \"./path.util.js\";\nimport type { ProjectLayerTemplateSpec } from \"./types.js\";\n\n// ----- template loading -----\n\nexport const resolveProjectLayerTools = (requestedTools?: readonly string[]): ProjectLayerTool[] => {\n if (requestedTools === undefined || requestedTools.length === 0) {\n return [...DEFAULT_TOOLS];\n }\n\n const parsedTools = requestedTools.map((tool) => ProjectLayerToolSchema.parse(tool));\n const toolSet = new Set(parsedTools);\n return TOOL_ORDER.filter((tool) => toolSet.has(tool));\n};\n\nconst shouldIncludeTemplate = (relativePath: string, tools: readonly ProjectLayerTool[]): boolean => {\n if (relativePath === 'GEMINI.md') return tools.includes('gemini');\n if (relativePath === 'CLAUDE.md') return tools.includes('claude-code');\n return true;\n};\n\nconst buildDocsStatusRows = (specs: readonly ProjectLayerTemplateSpec[]): string =>\n specs.map((spec) => `| ${spec.path} | ${spec.frontmatter.status} | ${spec.frontmatter.owner} |`).join('\\n');\n\nconst includesReservedDocumentWarning = (content: string): boolean =>\n RESERVED_DOCUMENT_WARNINGS.some((warning) => content.includes(warning));\n\nconst loadTemplateSpec = (relativePath: string, content: string): ProjectLayerTemplateSpec => {\n const frontmatter = parseProjectLayerFrontmatter(content);\n const ownership = PROJECT_OWNED_PATHS.has(relativePath) ? 'project' : 'managed';\n\n if (frontmatter.status === 'Reserved' && !includesReservedDocumentWarning(content)) {\n throw new Error(`Reserved template must include warning text: ${relativePath}`);\n }\n\n return {\n path: relativePath,\n content,\n ownership,\n frontmatter,\n contentHash: computeHash([content.trimEnd()]),\n };\n};\n\nexport const loadProjectLayerTemplateSpecs = (\n tools: readonly ProjectLayerTool[],\n): readonly ProjectLayerTemplateSpec[] => {\n const selectedPaths = TEMPLATE_PATHS.filter((relativePath) => shouldIncludeTemplate(relativePath, tools));\n const nonStatusSpecs = selectedPaths\n .filter((relativePath) => relativePath !== 'docs/docs-status.md')\n .map((relativePath) => loadTemplateSpec(relativePath, readFileSync(resolveTemplatePath(relativePath), 'utf-8')));\n\n const statusTemplate = readFileSync(resolveTemplatePath('docs/docs-status.md'), 'utf-8');\n const statusPlaceholderSpec = loadTemplateSpec('docs/docs-status.md', statusTemplate);\n const specsForStatus = [...nonStatusSpecs, statusPlaceholderSpec].sort((a, b) => a.path.localeCompare(b.path));\n const statusContent = statusTemplate.replace('{{documents_table}}', buildDocsStatusRows(specsForStatus));\n const statusSpec = loadTemplateSpec('docs/docs-status.md', statusContent);\n\n return [...nonStatusSpecs, statusSpec].sort((a, b) => a.path.localeCompare(b.path));\n};\n\nexport const computeProjectLayerSourceHash = (specs: readonly ProjectLayerTemplateSpec[]): string =>\n computeHash(specs.map((spec) => `${spec.path}:${spec.content}`));\n","import { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { ProjectLayerManifestSchema } from '@/core/schemas/index.js';\nimport type { ProjectLayerManifest, ProjectLayerProjectFile } from '@/core/schemas/index.js';\nimport { CUSTOM_PROJECT_RULES_DIR } from './constants.js';\nimport { parseProjectLayerDocument } from './document.logic.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\n\nconst isMarkdownPath = (path: string): boolean => path.endsWith('.md');\n\nconst hasMarkdownFrontmatter = (content: string): boolean => content.startsWith('---\\n');\n\nconst assertCustomProjectRuleContract = (params: { path: string; owner: string; layer: string }): void => {\n if (params.owner !== 'project') {\n throw new Error(`${params.path} owner는 project여야 합니다. 현재 값: ${params.owner}`);\n }\n\n if (params.layer !== 'agent') {\n throw new Error(`${params.path} layer는 agent여야 합니다. 현재 값: ${params.layer}`);\n }\n};\n\nexport const isCustomProjectRulePath = (path: string): boolean =>\n path.startsWith(`${CUSTOM_PROJECT_RULES_DIR}/`) && isMarkdownPath(path);\n\nconst collectMarkdownPaths = (params: { basePath: string; relativeDir: string }): string[] => {\n const absoluteDir = resolveProjectLayerFilePath(params.basePath, params.relativeDir);\n if (!existsSync(absoluteDir)) {\n return [];\n }\n\n return readdirSync(absoluteDir, { withFileTypes: true }).flatMap((entry) => {\n const relativePath = `${params.relativeDir}/${entry.name}`;\n if (entry.isDirectory()) {\n return collectMarkdownPaths({ basePath: params.basePath, relativeDir: relativePath });\n }\n\n return entry.isFile() && isMarkdownPath(relativePath) ? [relativePath] : [];\n });\n};\n\nexport const discoverCustomProjectRuleFiles = (basePath: string): ProjectLayerProjectFile[] =>\n collectMarkdownPaths({ basePath, relativeDir: CUSTOM_PROJECT_RULES_DIR })\n .sort((left, right) => left.localeCompare(right))\n .flatMap((path) => {\n const content = readFileSync(resolveProjectLayerFilePath(basePath, path), 'utf-8');\n if (!hasMarkdownFrontmatter(content)) {\n return [];\n }\n\n try {\n const document = parseProjectLayerDocument(path, content);\n assertCustomProjectRuleContract({\n path,\n owner: document.owner,\n layer: document.layer,\n });\n\n return [\n {\n path,\n templateHash: document.contentHash,\n created: false,\n },\n ];\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n throw new Error(`${path} frontmatter 파싱 실패: ${reason}`);\n }\n });\n\nexport const syncCustomProjectRuleFiles = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n}): ProjectLayerManifest => {\n const customFiles = discoverCustomProjectRuleFiles(params.basePath);\n const customPathSet = new Set(customFiles.map((file) => file.path));\n const projectFilesByPath = new Map<string, ProjectLayerProjectFile>();\n\n for (const file of params.manifest.project_files) {\n if (!isCustomProjectRulePath(file.path) || customPathSet.has(file.path)) {\n projectFilesByPath.set(file.path, file);\n }\n }\n\n for (const file of customFiles) {\n projectFilesByPath.set(file.path, file);\n }\n\n return ProjectLayerManifestSchema.parse({\n ...params.manifest,\n project_files: [...projectFilesByPath.values()].sort((left, right) => left.path.localeCompare(right.path)),\n });\n};\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport { ProjectLayerContextIndexSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\nimport { parseProjectLayerContextIndex, parseProjectLayerManifest, serializeProjectLayerContextIndex, serializeProjectLayerManifest } from \"./serialization.js\";\nimport { parseProjectLayerDocument } from \"./document.logic.js\";\nimport { resolveProjectLayerContextIndexPath, resolveProjectLayerFilePath, resolveProjectLayerManifestPath } from \"./path.util.js\";\nimport { updateDocsStatusProjectFileRecord, updateDocsStatusTable } from \"./docs-status.logic.js\";\nimport { syncCustomProjectRuleFiles } from \"./custom-project-rules.js\";\n\n// ----- manifest and index I/O -----\n\nexport const readProjectLayerManifest = (basePath: string): ProjectLayerManifest | null => {\n try {\n return parseProjectLayerManifest(readFileSync(resolveProjectLayerManifestPath(basePath), 'utf-8'));\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n};\n\nexport const writeProjectLayerManifest = (basePath: string, manifest: ProjectLayerManifest): void => {\n const manifestPath = resolveProjectLayerManifestPath(basePath);\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeProjectLayerManifest(manifest), 'utf-8');\n};\n\nexport const readProjectLayerContextIndex = (basePath: string): ProjectLayerContextIndex | null => {\n try {\n return parseProjectLayerContextIndex(readFileSync(resolveProjectLayerContextIndexPath(basePath), 'utf-8'));\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n};\n\nexport const writeProjectLayerContextIndex = (basePath: string, contextIndex: ProjectLayerContextIndex): void => {\n const contextIndexPath = resolveProjectLayerContextIndexPath(basePath);\n mkdirSync(dirname(contextIndexPath), { recursive: true });\n writeFileSync(contextIndexPath, serializeProjectLayerContextIndex(contextIndex), 'utf-8');\n};\n\n// ----- install and update -----\n\nexport const buildContextIndexFromDisk = (params: {\n basePath: string;\n documentPaths: readonly string[];\n generatedAt: string;\n}): ProjectLayerContextIndex => {\n const documents = params.documentPaths.map((path) =>\n parseProjectLayerDocument(path, readFileSync(resolveProjectLayerFilePath(params.basePath, path), 'utf-8')),\n );\n\n return ProjectLayerContextIndexSchema.parse({\n schemaVersion: 1,\n kind: 'context-layer-index',\n documents: documents.map(({ content: _content, ...document }) => document),\n generatedAt: params.generatedAt,\n });\n};\n\nexport const computeProjectFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nexport const collectDocumentPathsFromManifest = (manifest: ProjectLayerManifest): string[] =>\n [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n ...manifest.packs.flatMap((pack) => pack.documents.map((file) => file.path)),\n ].sort();\n\nexport const refreshProjectLayerDerivedState = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n generatedAt: string;\n}): {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n} => {\n const manifestWithCustomRules = syncCustomProjectRuleFiles({\n basePath: params.basePath,\n manifest: params.manifest,\n });\n const documentPaths = collectDocumentPathsFromManifest(manifestWithCustomRules);\n const docsStatusHashes = updateDocsStatusTable(params.basePath, documentPaths);\n const manifest = updateDocsStatusProjectFileRecord({\n manifest: manifestWithCustomRules,\n beforeHash: docsStatusHashes.beforeHash,\n afterHash: docsStatusHashes.afterHash,\n });\n const contextIndex = buildContextIndexFromDisk({\n basePath: params.basePath,\n documentPaths,\n generatedAt: params.generatedAt,\n });\n\n writeProjectLayerContextIndex(params.basePath, contextIndex);\n\n return {\n manifest,\n contextIndex,\n };\n};\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport type { ProjectLayerManifest } from '@/core/schemas/index.js';\nimport { ProjectLayerManifestSchema } from '@/core/schemas/index.js';\nimport { computeHash } from '@/shared/source-hash.js';\nimport { parseProjectLayerDocument } from './document.logic.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\nimport type { DocsStatusEntry, DocsStatusTableBounds, ProjectLayerDocumentReadResult, ProjectLayerIssue } from './types.js';\n\nconst docsStatusIssue = (code: string, message: string): ProjectLayerIssue => ({\n level: 'error',\n code,\n message,\n});\n\nconst computeDocsStatusFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nconst parseMarkdownTableCells = (line: string): string[] | null => {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {\n return null;\n }\n\n return trimmed\n .slice(1, -1)\n .split('|')\n .map((cell) => cell.trim());\n};\n\nconst isDocsStatusHeaderLine = (line: string): boolean => {\n const cells = parseMarkdownTableCells(line);\n return (\n cells !== null &&\n cells.length === 3 &&\n cells[0] === 'path' &&\n cells[1] === 'status' &&\n cells[2] === 'owner'\n );\n};\n\nconst isMarkdownDividerCell = (cell: string): boolean => /^:?-{3,}:?$/.test(cell);\n\nconst isDocsStatusDividerLine = (line: string): boolean => {\n const cells = parseMarkdownTableCells(line);\n return cells !== null && cells.length === 3 && cells.every(isMarkdownDividerCell);\n};\n\nexport const findDocsStatusTableBounds = (lines: readonly string[]): DocsStatusTableBounds | null => {\n const headerIndex = lines.findIndex(isDocsStatusHeaderLine);\n const dividerIndex = headerIndex + 1;\n\n if (headerIndex < 0 || !isDocsStatusDividerLine(lines[dividerIndex] ?? '')) {\n return null;\n }\n\n let tableEndIndex = dividerIndex + 1;\n while (tableEndIndex < lines.length && parseMarkdownTableCells(lines[tableEndIndex] ?? '') !== null) {\n tableEndIndex += 1;\n }\n\n return { headerIndex, dividerIndex, tableEndIndex };\n};\n\nexport const parseDocsStatusEntries = (content: string): DocsStatusEntry[] => {\n const document = parseProjectLayerDocument('docs/docs-status.md', content);\n const lines = document.content.split('\\n');\n const tableBounds = findDocsStatusTableBounds(lines);\n if (tableBounds === null) {\n return [];\n }\n\n const rows = lines.slice(tableBounds.dividerIndex + 1, tableBounds.tableEndIndex);\n\n return rows.flatMap((line) => {\n const cells = parseMarkdownTableCells(line);\n if (cells === null || cells.length < 3) return [];\n\n return [\n {\n path: cells[0],\n status: cells[1],\n owner: cells[2],\n },\n ];\n });\n};\n\nexport const buildDocsStatusRowsFromDisk = (params: {\n basePath: string;\n documentPaths: readonly string[];\n}): string[] =>\n params.documentPaths.map((path) => {\n const document = parseProjectLayerDocument(path, readFileSync(resolveProjectLayerFilePath(params.basePath, path), 'utf-8'));\n return `| ${document.path} | ${document.status} | ${document.owner} |`;\n });\n\nexport const replaceDocsStatusRows = (content: string, rows: readonly string[]): string => {\n const lines = content.trimEnd().split('\\n');\n const tableBounds = findDocsStatusTableBounds(lines);\n\n if (tableBounds === null) {\n throw new Error('docs/docs-status.md table header not found');\n }\n\n return (\n [...lines.slice(0, tableBounds.dividerIndex + 1), ...rows, ...lines.slice(tableBounds.tableEndIndex)].join('\\n') +\n '\\n'\n );\n};\n\nexport const updateDocsStatusTable = (basePath: string, documentPaths: readonly string[]): { beforeHash: string; afterHash: string } => {\n const docsStatusPath = 'docs/docs-status.md';\n const absolutePath = resolveProjectLayerFilePath(basePath, docsStatusPath);\n const beforeHash = computeDocsStatusFileHash(basePath, docsStatusPath);\n const rows = buildDocsStatusRowsFromDisk({ basePath, documentPaths });\n const nextContent = replaceDocsStatusRows(readFileSync(absolutePath, 'utf-8'), rows);\n writeFileSync(absolutePath, nextContent, 'utf-8');\n\n return {\n beforeHash,\n afterHash: computeDocsStatusFileHash(basePath, docsStatusPath),\n };\n};\n\nexport const updateDocsStatusProjectFileRecord = (params: {\n manifest: ProjectLayerManifest;\n beforeHash: string;\n afterHash: string;\n}): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...params.manifest,\n project_files: params.manifest.project_files.map((file) => {\n if (file.path !== 'docs/docs-status.md' || !file.created || file.templateHash !== params.beforeHash) {\n return file;\n }\n\n return {\n ...file,\n templateHash: params.afterHash,\n };\n }),\n });\n\nexport const compareDocsStatusEntry = (params: {\n expected: ProjectLayerDocumentReadResult;\n entry: DocsStatusEntry | undefined;\n}): ProjectLayerIssue[] => {\n const entry = params.entry;\n if (entry === undefined) {\n return [docsStatusIssue('docs-status-missing-document', `docs-status 누락: ${params.expected.path}`)];\n }\n\n const issues: ProjectLayerIssue[] = [];\n if (entry.status !== params.expected.status) {\n issues.push(docsStatusIssue('docs-status-mismatch', `${params.expected.path} docs-status status 불일치`));\n }\n\n if (entry.owner !== params.expected.owner) {\n issues.push(docsStatusIssue('docs-status-mismatch', `${params.expected.path} docs-status owner 불일치`));\n }\n\n return issues;\n};\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { computeHash, getCliVersion } from \"@/shared/source-hash.js\";\nimport { ProjectLayerManifestSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerManifest, ProjectLayerPackRecord, ProjectLayerProjectFile, ProjectLayerTool } from \"@/core/schemas/index.js\";\nimport { hasAiOpsSection, hasLegacyHeader, replaceAiOpsSection, stripAiOpsSection, wrapWithSection } from \"./managed-header.js\";\nimport { computeProjectLayerSourceHash, loadProjectLayerTemplateSpecs } from \"./templates.js\";\nimport { resolveProjectLayerFilePath } from \"./path.util.js\";\nimport { readProjectLayerManifest, refreshProjectLayerDerivedState, writeProjectLayerManifest } from \"./state-io.js\";\nimport { removeManagedProjectFile } from \"./uninstall.logic.js\";\nimport type { ManagedInstallResult, ProjectFileInstallResult, ProjectLayerInstallResult, ProjectLayerTemplateSpec } from \"./types.js\";\n\nconst installManagedFiles = (\n basePath: string,\n specs: readonly ProjectLayerTemplateSpec[],\n meta: { sourceHash: string; generatedAt: string },\n): ManagedInstallResult => {\n const written: string[] = [];\n const appended: string[] = [];\n\n for (const spec of specs) {\n const absolutePath = resolveProjectLayerFilePath(basePath, spec.path);\n const wrappedContent = wrapWithSection(spec.content, meta);\n\n if (!existsSync(absolutePath)) {\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, wrappedContent + '\\n', 'utf-8');\n written.push(spec.path);\n continue;\n }\n\n const existing = readFileSync(absolutePath, 'utf-8');\n if (hasAiOpsSection(existing)) {\n writeFileSync(absolutePath, replaceAiOpsSection(existing, wrappedContent), 'utf-8');\n const stripped = stripAiOpsSection(existing);\n (stripped.trim().length > 0 ? appended : written).push(spec.path);\n continue;\n }\n\n if (hasLegacyHeader(existing)) {\n writeFileSync(absolutePath, wrappedContent + '\\n', 'utf-8');\n written.push(spec.path);\n continue;\n }\n\n writeFileSync(absolutePath, existing.trimEnd() + '\\n\\n' + wrappedContent + '\\n', 'utf-8');\n appended.push(spec.path);\n }\n\n return { written, appended };\n};\n\nconst installProjectFiles = (params: {\n basePath: string;\n specs: readonly ProjectLayerTemplateSpec[];\n previousProjectFiles?: readonly ProjectLayerProjectFile[];\n}): ProjectFileInstallResult => {\n const records: ProjectLayerProjectFile[] = [];\n const created: string[] = [];\n const refreshed: string[] = [];\n const preserved: string[] = [];\n const previousByPath = new Map((params.previousProjectFiles ?? []).map((file) => [file.path, file]));\n\n for (const spec of params.specs) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, spec.path);\n const previous = previousByPath.get(spec.path);\n\n if (!existsSync(absolutePath)) {\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, spec.content + '\\n', 'utf-8');\n created.push(spec.path);\n records.push({\n path: spec.path,\n templateHash: spec.contentHash,\n created: true,\n });\n continue;\n }\n\n const existingContent = readFileSync(absolutePath, 'utf-8').trimEnd();\n const existingHash = computeHash([existingContent]);\n\n if (previous?.created === true && existingHash === previous.templateHash) {\n if (existingHash !== spec.contentHash) {\n writeFileSync(absolutePath, spec.content + '\\n', 'utf-8');\n refreshed.push(spec.path);\n } else {\n preserved.push(spec.path);\n }\n\n records.push({\n path: spec.path,\n templateHash: spec.contentHash,\n created: true,\n });\n continue;\n }\n\n preserved.push(spec.path);\n records.push({\n path: spec.path,\n templateHash: previous?.templateHash ?? spec.contentHash,\n created: previous?.created ?? false,\n });\n }\n\n return { records, created, refreshed, preserved };\n};\n\nconst buildProjectLayerManifest = (params: {\n tools: readonly ProjectLayerTool[];\n managedFiles: readonly string[];\n projectFiles: readonly ProjectLayerProjectFile[];\n packs: readonly ProjectLayerPackRecord[];\n sourceHash: string;\n cliVersion: string;\n generatedAt: string;\n settings?: Record<string, unknown>;\n}): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n schemaVersion: 1,\n kind: 'project-operating-layer',\n tools: [...params.tools],\n managed_files: params.managedFiles.map((path) => ({\n path,\n sourceHash: params.sourceHash,\n })),\n project_files: [...params.projectFiles],\n packs: [...params.packs],\n settings: params.settings ?? {},\n sourceHash: params.sourceHash,\n cliVersion: params.cliVersion,\n generatedAt: params.generatedAt,\n });\n\nconst retireUnselectedManagedFiles = (params: {\n basePath: string;\n previousManifest: ProjectLayerManifest | null;\n nextManagedPaths: readonly string[];\n}): void => {\n if (!params.previousManifest) return;\n\n const nextManagedPathSet = new Set(params.nextManagedPaths);\n for (const file of params.previousManifest.managed_files) {\n if (!nextManagedPathSet.has(file.path)) {\n removeManagedProjectFile(params.basePath, file.path);\n }\n }\n};\n\nexport const installProjectLayer = (params: {\n basePath: string;\n tools: readonly ProjectLayerTool[];\n previousManifest?: ProjectLayerManifest | null;\n}): ProjectLayerInstallResult => {\n const previousManifest =\n params.previousManifest === undefined ? readProjectLayerManifest(params.basePath) : params.previousManifest;\n const specs = loadProjectLayerTemplateSpecs(params.tools);\n const sourceHash = computeProjectLayerSourceHash(specs);\n const generatedAt = new Date().toISOString();\n const managedSpecs = specs.filter((spec) => spec.ownership === 'managed');\n const projectSpecs = specs.filter((spec) => spec.ownership === 'project');\n const managedPaths = managedSpecs.map((spec) => spec.path);\n retireUnselectedManagedFiles({\n basePath: params.basePath,\n previousManifest,\n nextManagedPaths: managedPaths,\n });\n const managedResult = installManagedFiles(params.basePath, managedSpecs, { sourceHash, generatedAt });\n const projectResult = installProjectFiles({\n basePath: params.basePath,\n specs: projectSpecs,\n previousProjectFiles: previousManifest?.project_files,\n });\n const provisionalManifest = buildProjectLayerManifest({\n tools: params.tools,\n managedFiles: managedPaths,\n projectFiles: projectResult.records,\n packs: previousManifest?.packs ?? [],\n sourceHash,\n cliVersion: getCliVersion(),\n generatedAt,\n settings: previousManifest?.settings,\n });\n const { manifest, contextIndex } = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: provisionalManifest,\n generatedAt,\n });\n\n writeProjectLayerManifest(params.basePath, manifest);\n\n return {\n manifest,\n contextIndex,\n written: managedResult.written,\n appended: managedResult.appended,\n createdProjectFiles: projectResult.created,\n refreshedProjectFiles: projectResult.refreshed,\n preservedProjectFiles: projectResult.preserved,\n };\n};\n\nexport const updateProjectLayer = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n}): ProjectLayerInstallResult => {\n const specs = loadProjectLayerTemplateSpecs(params.manifest.tools);\n const sourceHash = computeProjectLayerSourceHash(specs);\n const generatedAt = new Date().toISOString();\n const managedSpecs = specs.filter((spec) => spec.ownership === 'managed');\n const projectSpecs = specs.filter((spec) => spec.ownership === 'project');\n const managedResult = installManagedFiles(params.basePath, managedSpecs, { sourceHash, generatedAt });\n const projectResult = installProjectFiles({\n basePath: params.basePath,\n specs: projectSpecs,\n previousProjectFiles: params.manifest.project_files,\n });\n const provisionalManifest = buildProjectLayerManifest({\n tools: params.manifest.tools,\n managedFiles: managedSpecs.map((spec) => spec.path),\n projectFiles: projectResult.records,\n packs: params.manifest.packs,\n sourceHash,\n cliVersion: getCliVersion(),\n generatedAt,\n settings: params.manifest.settings,\n });\n const { manifest, contextIndex } = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: provisionalManifest,\n generatedAt,\n });\n\n writeProjectLayerManifest(params.basePath, manifest);\n\n return {\n manifest,\n contextIndex,\n written: managedResult.written,\n appended: managedResult.appended,\n createdProjectFiles: projectResult.created,\n refreshedProjectFiles: projectResult.refreshed,\n preservedProjectFiles: projectResult.preserved,\n };\n};\n","import { existsSync, readFileSync, readdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { computeHash } from \"@/shared/source-hash.js\";\nimport type { ProjectLayerManifest, ProjectLayerPackFileRecord, ProjectLayerProjectFile } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\nimport { hasAiOpsSection, stripAiOpsSection } from \"./managed-header.js\";\nimport { resolveProjectLayerFilePath, toRelativeDir } from \"./path.util.js\";\nimport type { ProjectLayerRemoveResult } from \"./types.js\";\n\n// ----- uninstall -----\n\nexport function removeManagedProjectFile(basePath: string, relativePath: string): ProjectLayerRemoveResult {\n const absolutePath = resolveProjectLayerFilePath(basePath, relativePath);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [relativePath] };\n }\n\n const content = readFileSync(absolutePath, 'utf-8');\n if (!hasAiOpsSection(content)) {\n return { deleted: [], cleaned: [], preserved: [relativePath], notFound: [] };\n }\n\n const stripped = stripAiOpsSection(content);\n if (stripped.trim().length === 0) {\n rmSync(absolutePath);\n return { deleted: [relativePath], cleaned: [], preserved: [], notFound: [] };\n }\n\n writeFileSync(absolutePath, stripped, 'utf-8');\n return { deleted: [], cleaned: [relativePath], preserved: [], notFound: [] };\n}\n\nconst removeCreateOnlyProjectFile = (basePath: string, file: ProjectLayerProjectFile): ProjectLayerRemoveResult => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [file.path] };\n }\n\n const content = readFileSync(absolutePath, 'utf-8').trimEnd();\n const currentHash = computeHash([content]);\n if (file.created && currentHash === file.templateHash) {\n rmSync(absolutePath);\n return { deleted: [file.path], cleaned: [], preserved: [], notFound: [] };\n }\n\n return { deleted: [], cleaned: [], preserved: [file.path], notFound: [] };\n};\n\nconst removePackOwnedFile = (basePath: string, file: ProjectLayerPackFileRecord): ProjectLayerRemoveResult => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n return { deleted: [], cleaned: [], preserved: [], notFound: [file.path] };\n }\n\n const currentHash = computeHash([readFileSync(absolutePath, 'utf-8').trimEnd()]);\n if (currentHash === file.sourceHash) {\n rmSync(absolutePath);\n return { deleted: [file.path], cleaned: [], preserved: [], notFound: [] };\n }\n\n return { deleted: [], cleaned: [], preserved: [file.path], notFound: [] };\n};\n\nconst mergeRemoveResults = (results: readonly ProjectLayerRemoveResult[]): ProjectLayerRemoveResult => ({\n deleted: results.flatMap((result) => result.deleted),\n cleaned: results.flatMap((result) => result.cleaned),\n preserved: results.flatMap((result) => result.preserved),\n notFound: results.flatMap((result) => result.notFound),\n});\n\nconst removeEmptyDirs = (basePath: string, relativePaths: readonly string[]): void => {\n const dirs = [...new Set(relativePaths.map(toRelativeDir).filter((dir) => dir !== '.'))].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const dir of [...dirs, '.ai-ops']) {\n const absoluteDir = resolveProjectLayerFilePath(basePath, dir);\n if (!existsSync(absoluteDir)) continue;\n\n try {\n if (readdirSync(absoluteDir).length === 0) {\n rmSync(absoluteDir, { recursive: true });\n }\n } catch {\n // Ignore cleanup failures.\n }\n }\n};\n\nexport const uninstallProjectLayer = (basePath: string, manifest: ProjectLayerManifest): ProjectLayerRemoveResult => {\n const managedResults = manifest.managed_files.map((file) => removeManagedProjectFile(basePath, file.path));\n const projectResults = manifest.project_files.map((file) => removeCreateOnlyProjectFile(basePath, file));\n const packResults = manifest.packs.flatMap((pack) =>\n [...pack.documents, ...pack.files].map((file) => removePackOwnedFile(basePath, file)),\n );\n const stateFiles = [PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH];\n\n for (const stateFile of stateFiles) {\n rmSync(resolveProjectLayerFilePath(basePath, stateFile), { force: true });\n }\n\n const result = mergeRemoveResults([...managedResults, ...projectResults, ...packResults]);\n removeEmptyDirs(basePath, [...result.deleted, ...stateFiles]);\n return result;\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { parseAiOpsMeta } from \"./managed-header.js\";\nimport type { ProjectLayerContextDocument, ProjectLayerContextIndex, ProjectLayerManifest } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH } from \"./constants.js\";\nimport { computeProjectLayerSourceHash, loadProjectLayerTemplateSpecs } from \"./templates.js\";\nimport { parseProjectLayerDocument } from \"./document.logic.js\";\nimport { resolveProjectLayerFilePath } from \"./path.util.js\";\nimport { collectDocumentPathsFromManifest, readProjectLayerContextIndex, readProjectLayerManifest } from \"./state-io.js\";\nimport { compareDocsStatusEntry, parseDocsStatusEntries } from \"./docs-status.logic.js\";\nimport { syncCustomProjectRuleFiles } from \"./custom-project-rules.js\";\nimport type {\n DocsStatusEntry,\n ProjectLayerDocumentReadResult,\n ProjectLayerIssue,\n ProjectLayerIssueLevel,\n ProjectLayerReport,\n} from './types.js';\n\n// ----- diff and audit -----\n\nexport const issue = (level: ProjectLayerIssueLevel, code: string, message: string): ProjectLayerIssue => ({\n level,\n code,\n message,\n});\n\nconst readDocumentSafely = (basePath: string, path: string): ProjectLayerDocumentReadResult | ProjectLayerIssue => {\n try {\n const absolutePath = resolveProjectLayerFilePath(basePath, path);\n if (!existsSync(absolutePath)) {\n return issue('error', 'missing-file', `파일 없음: ${path}`);\n }\n\n return parseProjectLayerDocument(path, readFileSync(absolutePath, 'utf-8'));\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n return issue('error', 'invalid-frontmatter', `${path} frontmatter 파싱 실패: ${reason}`);\n }\n};\n\nconst buildContextIndexMap = (contextIndex: ProjectLayerContextIndex | null): Map<string, ProjectLayerContextDocument> =>\n new Map((contextIndex?.documents ?? []).map((document) => [document.path, document]));\n\nconst compareArray = (left: readonly string[], right: readonly string[]): boolean =>\n left.length === right.length && left.every((value, index) => value === right[index]);\n\nconst compareProjectFileRecords = (\n left: readonly ProjectLayerManifest['project_files'][number][],\n right: readonly ProjectLayerManifest['project_files'][number][],\n): boolean =>\n left.length === right.length &&\n left.every((file, index) => {\n const other = right[index];\n return other !== undefined && file.path === other.path && file.templateHash === other.templateHash && file.created === other.created;\n });\n\nexport const compareContextDocument = (params: {\n expected: ProjectLayerDocumentReadResult;\n indexed: ProjectLayerContextDocument | undefined;\n}): ProjectLayerIssue[] => {\n const indexed = params.indexed;\n if (indexed === undefined) {\n return [issue('error', 'context-missing-document', `context-layer 누락: ${params.expected.path}`)];\n }\n\n const issues: ProjectLayerIssue[] = [];\n const scalarKeys = ['status', 'layer', 'owner', 'contentHash'] as const;\n\n for (const key of scalarKeys) {\n if (params.expected[key] !== indexed[key]) {\n issues.push(\n issue('error', 'context-document-mismatch', `${params.expected.path} context ${key} 불일치`),\n );\n }\n }\n\n if (!compareArray(params.expected.read_when, indexed.read_when)) {\n issues.push(issue('error', 'context-document-mismatch', `${params.expected.path} context read_when 불일치`));\n }\n\n if (!compareArray(params.expected.update_when, indexed.update_when)) {\n issues.push(issue('error', 'context-document-mismatch', `${params.expected.path} context update_when 불일치`));\n }\n\n return issues;\n};\n\nexport const diffProjectLayer = (basePath: string): ProjectLayerReport => {\n let manifest: ProjectLayerManifest | null;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n return {\n currentSourceHash: null,\n issues: [issue('error', 'invalid-manifest', `${PROJECT_LAYER_MANIFEST_RELATIVE_PATH} 파싱 실패: ${reason}`)],\n };\n }\n\n if (!manifest) {\n return {\n currentSourceHash: null,\n issues: [issue('error', 'missing-manifest', `${PROJECT_LAYER_MANIFEST_RELATIVE_PATH}가 없습니다.`)],\n };\n }\n\n const specs = loadProjectLayerTemplateSpecs(manifest.tools);\n const currentSourceHash = computeProjectLayerSourceHash(specs);\n let contextIndex: ProjectLayerContextIndex | null = null;\n const issues: ProjectLayerIssue[] = [];\n let syncedManifest = manifest;\n\n try {\n syncedManifest = syncCustomProjectRuleFiles({ basePath, manifest });\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(issue('error', 'invalid-custom-project-rule', reason));\n }\n\n try {\n contextIndex = readProjectLayerContextIndex(basePath);\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(\n issue('error', 'invalid-context-index', `${PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH} 파싱 실패: ${reason}`),\n );\n }\n\n const contextMap = buildContextIndexMap(contextIndex);\n const expectedManagedPaths = new Set(specs.filter((spec) => spec.ownership === 'managed').map((spec) => spec.path));\n const manifestManagedPaths = new Set(manifest.managed_files.map((file) => file.path));\n\n if (manifest.sourceHash !== currentSourceHash) {\n issues.push(\n issue('warning', 'source-hash-drift', `template sourceHash 변경: ${manifest.sourceHash} -> ${currentSourceHash}`),\n );\n }\n\n if (contextIndex === null) {\n issues.push(issue('error', 'missing-context-index', `${PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH}가 없습니다.`));\n }\n\n if (!compareProjectFileRecords(manifest.project_files, syncedManifest.project_files)) {\n issues.push(\n issue(\n 'warning',\n 'custom-project-rules-drift',\n '`docs/agent/project-rules/**/*.md` discovery 결과가 manifest와 다릅니다. `ai-ops update`로 동기화하세요.',\n ),\n );\n }\n\n for (const expectedPath of expectedManagedPaths) {\n if (!manifestManagedPaths.has(expectedPath)) {\n issues.push(issue('error', 'manifest-missing-managed-file', `manifest managed_files 누락: ${expectedPath}`));\n }\n }\n\n for (const file of manifest.managed_files) {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n continue;\n }\n\n const content = readFileSync(absolutePath, 'utf-8');\n const meta = parseAiOpsMeta(content);\n if (!meta) {\n issues.push(issue('error', 'missing-managed-section', `managed section 메타 없음: ${file.path}`));\n continue;\n }\n\n if (meta.sourceHash !== currentSourceHash) {\n issues.push(\n issue('warning', 'managed-source-hash-drift', `${file.path} sourceHash 변경: ${meta.sourceHash} -> ${currentSourceHash}`),\n );\n }\n }\n\n for (const file of syncedManifest.project_files) {\n if (!existsSync(resolveProjectLayerFilePath(basePath, file.path))) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n\n for (const pack of syncedManifest.packs) {\n for (const file of [...pack.documents, ...pack.files]) {\n if (!existsSync(resolveProjectLayerFilePath(basePath, file.path))) {\n issues.push(issue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n }\n\n for (const path of collectDocumentPathsFromManifest(syncedManifest)) {\n const document = readDocumentSafely(basePath, path);\n if ('code' in document) {\n issues.push(document);\n continue;\n }\n issues.push(...compareContextDocument({ expected: document, indexed: contextMap.get(path) }));\n }\n\n return { currentSourceHash, issues };\n};\n\nexport const auditProjectLayer = (basePath: string): ProjectLayerReport => {\n const diffReport = diffProjectLayer(basePath);\n let manifest: ProjectLayerManifest | null;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch {\n return diffReport;\n }\n\n if (!manifest) {\n return diffReport;\n }\n\n let contextIndex: ProjectLayerContextIndex | null = null;\n try {\n contextIndex = readProjectLayerContextIndex(basePath);\n } catch {\n contextIndex = null;\n }\n let syncedManifest = manifest;\n try {\n syncedManifest = syncCustomProjectRuleFiles({ basePath, manifest });\n } catch {\n return diffReport;\n }\n const documentPaths = collectDocumentPathsFromManifest(syncedManifest);\n const documentPathSet = new Set(documentPaths);\n const contextPathSet = new Set(contextIndex?.documents.map((document) => document.path) ?? []);\n const issues = [...diffReport.issues];\n const docsStatusPath = resolveProjectLayerFilePath(basePath, 'docs/docs-status.md');\n\n if (!existsSync(docsStatusPath)) {\n issues.push(issue('error', 'missing-docs-status', 'docs/docs-status.md가 없습니다.'));\n return { currentSourceHash: diffReport.currentSourceHash, issues };\n }\n\n let docsStatusEntries: DocsStatusEntry[] = [];\n try {\n docsStatusEntries = parseDocsStatusEntries(readFileSync(docsStatusPath, 'utf-8'));\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'unknown error';\n issues.push(issue('error', 'invalid-docs-status', `docs/docs-status.md 파싱 실패: ${reason}`));\n }\n\n const docsStatusMap = new Map(docsStatusEntries.map((entry) => [entry.path, entry]));\n\n for (const path of documentPaths) {\n const document = readDocumentSafely(basePath, path);\n if ('code' in document) {\n continue;\n }\n\n issues.push(...compareDocsStatusEntry({ expected: document, entry: docsStatusMap.get(path) }));\n }\n\n for (const entry of docsStatusEntries) {\n if (!documentPathSet.has(entry.path)) {\n issues.push(issue('warning', 'docs-status-extra-document', `docs-status에 manifest 외 문서가 있습니다: ${entry.path}`));\n }\n }\n\n for (const contextPath of contextPathSet) {\n if (!documentPathSet.has(contextPath)) {\n issues.push(issue('warning', 'context-extra-document', `context-layer에 manifest 외 문서가 있습니다: ${contextPath}`));\n }\n }\n\n return { currentSourceHash: diffReport.currentSourceHash, issues };\n};\n","import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport {\n ProjectLayerManifestSchema,\n} from '@/core/schemas/index.js';\nimport type {\n ProjectLayerContextIndex,\n ProjectLayerManifest,\n ProjectLayerPackFileRecord,\n ProjectLayerPackRecord,\n} from '@/core/schemas/index.js';\nimport { computeHash, getCliVersion } from '@/shared/source-hash.js';\nimport {\n readProjectLayerManifest,\n refreshProjectLayerDerivedState,\n writeProjectLayerManifest,\n} from './state-io.js';\nimport { resolveProjectLayerFilePath } from './path.util.js';\nimport { DEFAULT_PACKS_DIR, resolvePackById } from './pack-source.logic.js';\nimport type { ProjectLayerPackSource, ProjectLayerPackSourceFile } from './pack-source.logic.js';\n\n// ----- types -----\n\nexport type ProjectLayerPackApplyResult = {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n written: string[];\n refreshed: string[];\n preserved: string[];\n deleted: string[];\n notFound: string[];\n};\n\nexport type ProjectLayerPackIssueLevel = 'error' | 'warning';\n\nexport type ProjectLayerPackIssue = {\n level: ProjectLayerPackIssueLevel;\n code: string;\n message: string;\n};\n\nexport type ProjectLayerPackReport = {\n issues: ProjectLayerPackIssue[];\n};\n\ntype PackFileApplyResult = {\n written: string[];\n refreshed: string[];\n preserved: string[];\n deleted: string[];\n notFound: string[];\n};\n\n// ----- file application -----\n\nconst serializePackFileContent = (content: string): string => (content.length === 0 ? '' : content.trimEnd() + '\\n');\n\nconst readProjectFileHash = (basePath: string, relativePath: string): string =>\n computeHash([readFileSync(resolveProjectLayerFilePath(basePath, relativePath), 'utf-8').trimEnd()]);\n\nconst writePackFile = (basePath: string, file: ProjectLayerPackSourceFile): void => {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n mkdirSync(dirname(absolutePath), { recursive: true });\n writeFileSync(absolutePath, serializePackFileContent(file.content), 'utf-8');\n};\n\nconst buildPackFileRecords = (files: readonly ProjectLayerPackSourceFile[]): ProjectLayerPackFileRecord[] =>\n files.map((file) => ({\n path: file.path,\n sourceHash: file.sourceHash,\n }));\n\nconst buildPackRecord = (params: {\n pack: ProjectLayerPackSource;\n installedAt: string;\n}): ProjectLayerPackRecord => ({\n id: params.pack.id,\n sourceHash: params.pack.sourceHash,\n documents: buildPackFileRecords(params.pack.documents),\n files: buildPackFileRecords(params.pack.files),\n installedAt: params.installedAt,\n});\n\nconst applyPackSourceFiles = (params: {\n basePath: string;\n pack: ProjectLayerPackSource;\n previousRecord: ProjectLayerPackRecord | null;\n}): PackFileApplyResult => {\n const written: string[] = [];\n const refreshed: string[] = [];\n const preserved: string[] = [];\n const deleted: string[] = [];\n const notFound: string[] = [];\n const sourceFiles = [...params.pack.documents, ...params.pack.files];\n const sourceByPath = new Map(sourceFiles.map((file) => [file.path, file]));\n const previousByPath = new Map(\n [...(params.previousRecord?.documents ?? []), ...(params.previousRecord?.files ?? [])].map((file) => [\n file.path,\n file,\n ]),\n );\n\n for (const file of sourceFiles) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, file.path);\n const previous = previousByPath.get(file.path);\n\n if (!existsSync(absolutePath)) {\n writePackFile(params.basePath, file);\n written.push(file.path);\n continue;\n }\n\n if (previous === undefined) {\n preserved.push(file.path);\n continue;\n }\n\n const currentHash = readProjectFileHash(params.basePath, file.path);\n if (currentHash !== previous.sourceHash) {\n preserved.push(file.path);\n continue;\n }\n\n if (currentHash !== file.sourceHash) {\n writePackFile(params.basePath, file);\n refreshed.push(file.path);\n }\n }\n\n for (const previous of previousByPath.values()) {\n if (sourceByPath.has(previous.path)) {\n continue;\n }\n\n const absolutePath = resolveProjectLayerFilePath(params.basePath, previous.path);\n if (!existsSync(absolutePath)) {\n notFound.push(previous.path);\n continue;\n }\n\n if (readProjectFileHash(params.basePath, previous.path) === previous.sourceHash) {\n rmSync(absolutePath);\n deleted.push(previous.path);\n } else {\n preserved.push(previous.path);\n }\n }\n\n return { written, refreshed, preserved, deleted, notFound };\n};\n\nconst removePackFiles = (basePath: string, record: ProjectLayerPackRecord): PackFileApplyResult => {\n const deleted: string[] = [];\n const preserved: string[] = [];\n const notFound: string[] = [];\n\n for (const file of [...record.documents, ...record.files]) {\n const absolutePath = resolveProjectLayerFilePath(basePath, file.path);\n if (!existsSync(absolutePath)) {\n notFound.push(file.path);\n continue;\n }\n\n if (readProjectFileHash(basePath, file.path) === file.sourceHash) {\n rmSync(absolutePath);\n deleted.push(file.path);\n } else {\n preserved.push(file.path);\n }\n }\n\n return { written: [], refreshed: [], preserved, deleted, notFound };\n};\n\nconst removeEmptyDirs = (basePath: string, relativePaths: readonly string[]): void => {\n const dirs = [...new Set(relativePaths.map((path) => dirname(path)).filter((dir) => dir !== '.'))].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const dir of dirs) {\n const absoluteDir = resolveProjectLayerFilePath(basePath, dir);\n if (!existsSync(absoluteDir)) {\n continue;\n }\n\n try {\n if (readdirSync(absoluteDir).length === 0) {\n rmSync(absoluteDir, { recursive: true });\n }\n } catch {\n // Directory cleanup is best-effort only.\n }\n }\n};\n\n// ----- manifest updates -----\n\nconst requireProjectLayerManifest = (basePath: string): ProjectLayerManifest => {\n const manifest = readProjectLayerManifest(basePath);\n if (!manifest) {\n throw new Error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n }\n return manifest;\n};\n\nconst upsertPackRecord = (\n manifest: ProjectLayerManifest,\n record: ProjectLayerPackRecord,\n generatedAt: string,\n): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...manifest,\n packs: [...manifest.packs.filter((pack) => pack.id !== record.id), record],\n cliVersion: getCliVersion(),\n generatedAt,\n });\n\nconst removePackRecord = (manifest: ProjectLayerManifest, packId: string, generatedAt: string): ProjectLayerManifest =>\n ProjectLayerManifestSchema.parse({\n ...manifest,\n packs: manifest.packs.filter((pack) => pack.id !== packId),\n cliVersion: getCliVersion(),\n generatedAt,\n });\n\nconst writeManifestWithDerivedState = (params: {\n basePath: string;\n manifest: ProjectLayerManifest;\n generatedAt: string;\n}): {\n manifest: ProjectLayerManifest;\n contextIndex: ProjectLayerContextIndex;\n} => {\n const derived = refreshProjectLayerDerivedState({\n basePath: params.basePath,\n manifest: params.manifest,\n generatedAt: params.generatedAt,\n });\n writeProjectLayerManifest(params.basePath, derived.manifest);\n return derived;\n};\n\n// ----- lifecycle -----\n\nexport const installProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n packsDir?: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (previousRecord) {\n return updateProjectLayerPack(params);\n }\n\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, params.packId);\n const installedAt = new Date().toISOString();\n const applyResult = applyPackSourceFiles({ basePath: params.basePath, pack, previousRecord: null });\n const nextManifest = upsertPackRecord(manifest, buildPackRecord({ pack, installedAt }), installedAt);\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt: installedAt,\n });\n\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\nexport const updateProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n packsDir?: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (!previousRecord) {\n throw new Error(`설치된 pack을 찾지 못했습니다: ${params.packId}`);\n }\n\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, params.packId);\n const generatedAt = new Date().toISOString();\n const applyResult = applyPackSourceFiles({ basePath: params.basePath, pack, previousRecord });\n const nextManifest = upsertPackRecord(\n manifest,\n buildPackRecord({ pack, installedAt: previousRecord.installedAt }),\n generatedAt,\n );\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt,\n });\n\n removeEmptyDirs(params.basePath, applyResult.deleted);\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\nexport const uninstallProjectLayerPack = (params: {\n basePath: string;\n packId: string;\n}): ProjectLayerPackApplyResult => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const previousRecord = manifest.packs.find((pack) => pack.id === params.packId);\n if (!previousRecord) {\n throw new Error(`설치된 pack을 찾지 못했습니다: ${params.packId}`);\n }\n\n const generatedAt = new Date().toISOString();\n const applyResult = removePackFiles(params.basePath, previousRecord);\n const nextManifest = removePackRecord(manifest, params.packId, generatedAt);\n const derived = writeManifestWithDerivedState({\n basePath: params.basePath,\n manifest: nextManifest,\n generatedAt,\n });\n\n removeEmptyDirs(params.basePath, applyResult.deleted);\n return { ...applyResult, manifest: derived.manifest, contextIndex: derived.contextIndex };\n};\n\n// ----- diff -----\n\nconst packIssue = (\n level: ProjectLayerPackIssueLevel,\n code: string,\n message: string,\n): ProjectLayerPackIssue => ({\n level,\n code,\n message,\n});\n\nexport const diffProjectLayerPack = (params: {\n basePath: string;\n packId?: string;\n packsDir?: string;\n}): ProjectLayerPackReport => {\n const manifest = requireProjectLayerManifest(params.basePath);\n const targets = params.packId ? manifest.packs.filter((pack) => pack.id === params.packId) : manifest.packs;\n const issues: ProjectLayerPackIssue[] = [];\n\n if (targets.length === 0) {\n return { issues: [packIssue('warning', 'missing-pack', '비교할 설치된 pack이 없습니다.')] };\n }\n\n for (const record of targets) {\n const pack = resolvePackById(params.packsDir ?? DEFAULT_PACKS_DIR, record.id);\n if (record.sourceHash !== pack.sourceHash) {\n issues.push(\n packIssue('warning', 'pack-source-hash-drift', `${record.id} sourceHash 변경: ${record.sourceHash} -> ${pack.sourceHash}`),\n );\n }\n\n for (const file of [...record.documents, ...record.files]) {\n const absolutePath = resolveProjectLayerFilePath(params.basePath, file.path);\n if (!existsSync(absolutePath)) {\n issues.push(packIssue('error', 'missing-file', `파일 없음: ${file.path}`));\n }\n }\n }\n\n return { issues };\n};\n","import { readFileSync, readdirSync } from 'node:fs';\nimport { isAbsolute, join, relative, resolve } from 'node:path';\nimport { PackCatalogSchema, ProjectLayerFrontmatterSchema, isSafeProjectLayerPath } from '@/core/schemas/index.js';\nimport type { PackCatalog } from '@/core/schemas/index.js';\nimport { parseMarkdownFrontmatter } from '@/shared/markdown/frontmatter.js';\nimport { COMPILER_DATA_DIR } from '@/shared/paths.js';\nimport { computeHash } from '@/shared/source-hash.js';\n\nexport type ProjectLayerPackSourceFile = {\n path: string;\n content: string;\n sourceHash: string;\n};\n\nexport type ProjectLayerPackSource = {\n id: string;\n sourceHash: string;\n documents: ProjectLayerPackSourceFile[];\n files: ProjectLayerPackSourceFile[];\n};\n\nconst PACK_REGISTRY_FILENAME = 'pack-registry.json';\nconst SPEC_LIFECYCLE_PACK_ID = 'spec-lifecycle';\nconst PACK_INSTALL_ROOT = 'docs/specs/';\nconst RESERVED_DOCUMENT_WARNINGS = [\n '판단 근거로 사용하지 마세요',\n 'Do not use this document as current decision-making evidence',\n] as const;\n\nexport const DEFAULT_PACKS_DIR = join(COMPILER_DATA_DIR, 'packs');\n\nconst includesReservedDocumentWarning = (content: string): boolean =>\n RESERVED_DOCUMENT_WARNINGS.some((warning) => content.includes(warning));\n\nconst readPackCatalog = (packsDir: string): PackCatalog =>\n PackCatalogSchema.parse(JSON.parse(readFileSync(join(packsDir, PACK_REGISTRY_FILENAME), 'utf-8')));\n\nconst assertPackInstallPath = (path: string): void => {\n if (!isSafeProjectLayerPath(path) || !path.startsWith(PACK_INSTALL_ROOT)) {\n throw new Error(`Unsafe pack path: ${path}`);\n }\n};\n\nconst readPackSourceFiles = (packDir: string): ProjectLayerPackSourceFile[] => {\n const files: ProjectLayerPackSourceFile[] = [];\n\n const walk = (relativeDir = ''): void => {\n const absoluteDir = relativeDir.length > 0 ? join(packDir, relativeDir) : packDir;\n const entries = readdirSync(absoluteDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const nextRelativePath = relativeDir.length > 0 ? join(relativeDir, entry.name) : entry.name;\n if (entry.isDirectory()) {\n walk(nextRelativePath);\n continue;\n }\n\n assertPackInstallPath(nextRelativePath);\n const content = readFileSync(join(packDir, nextRelativePath), 'utf-8');\n files.push({\n path: nextRelativePath,\n content,\n sourceHash: computeHash([content.trimEnd()]),\n });\n }\n };\n\n walk();\n return files;\n};\n\nconst splitPackSourceFiles = (files: readonly ProjectLayerPackSourceFile[]): {\n documents: ProjectLayerPackSourceFile[];\n files: ProjectLayerPackSourceFile[];\n} => {\n const documents: ProjectLayerPackSourceFile[] = [];\n const regularFiles: ProjectLayerPackSourceFile[] = [];\n\n for (const file of files) {\n if (!file.path.endsWith('.md')) {\n regularFiles.push(file);\n continue;\n }\n\n const { frontmatter } = parseMarkdownFrontmatter(file.content);\n const parsed = ProjectLayerFrontmatterSchema.parse(frontmatter);\n if (parsed.status === 'Reserved' && !includesReservedDocumentWarning(file.content)) {\n throw new Error(`Reserved pack document must include warning text: ${file.path}`);\n }\n documents.push(file);\n }\n\n return { documents, files: regularFiles };\n};\n\nexport const loadAllPacks = (packsDir: string): ProjectLayerPackSource[] => {\n const catalog = readPackCatalog(packsDir);\n const entries = [...catalog.packs].sort((a, b) => a.id.localeCompare(b.id));\n\n return entries.map((entry) => {\n if (entry.id !== SPEC_LIFECYCLE_PACK_ID) {\n throw new Error(`Unsupported pack id: ${entry.id}`);\n }\n\n const packDir = resolve(packsDir, entry.source_path);\n const relativeFromPacks = relative(resolve(packsDir), packDir);\n if (relativeFromPacks.length === 0 || relativeFromPacks.startsWith('..') || isAbsolute(relativeFromPacks)) {\n throw new Error(`Pack source path escapes packs dir: ${entry.source_path}`);\n }\n\n const files = readPackSourceFiles(packDir);\n const split = splitPackSourceFiles(files);\n\n return {\n id: entry.id,\n sourceHash: computeHash(files.map((file) => `${file.path}:${file.content}`).sort()),\n documents: split.documents,\n files: split.files,\n };\n });\n};\n\nexport const resolvePackById = (packsDir: string, packId: string): ProjectLayerPackSource => {\n const pack = loadAllPacks(packsDir).find((candidate) => candidate.id === packId);\n if (!pack) {\n throw new Error(`Unknown pack: ${packId}`);\n }\n return pack;\n};\n","import { getContextPromotionStatus } from \"./status.js\";\nimport { parseSuccessfulGitCommitPostToolUseHook } from \"./tool-use-hook.js\";\nimport type { ContextPromotionPostToolUseHookOutput, ContextPromotionProjectStatus } from \"./types.js\";\n\n// ----- hook guard -----\n\nexport const buildContextPromotionReviewPrompt = (status: ContextPromotionProjectStatus): string => {\n const projectRoot = status.gitRoot ?? status.cwd;\n const cdCommand = `cd ${JSON.stringify(projectRoot)}`;\n\n return [\n 'Context Promotion Review should run for the completed work commit and review-loop learnings.',\n '',\n `Project root: ${projectRoot}`,\n 'This project root is authoritative for this review.',\n '',\n 'Use the `context-promotion-review` skill to review the just-created HEAD commit plus current conversation/review-loop learnings for reusable operating knowledge.',\n '',\n 'Scope boundary:',\n `- Before inspecting files, anchor shell work in the project root above. If needed, run \\`${cdCommand}\\` first.`,\n '- Do not inspect other repositories, parent directories, or earlier conversation workspaces.',\n '- Do not search the web or external documentation for this review.',\n '- If `AGENTS.md`, `docs/agent/*`, `docs/docs-status.md`, or other context-layer files are absent, report them as absent; do not substitute files from another repo.',\n '- Use only the just-created `HEAD` commit, current conversation/review-loop learnings, post-commit worktree state, and files under the project root.',\n '',\n 'Review requirements:',\n '- Do not amend, rewrite, or mix changes into the work commit.',\n '- Inspect the post-commit worktree state before deciding: run `git status --short`, `git diff --name-only`, `git diff --cached --name-only`, and `git ls-files --others --exclude-standard`.',\n '- Inspect the completed commit before deciding: run `git show --stat HEAD`, `git show --name-only HEAD`, and `git show HEAD` when detail is needed.',\n '- Cross-check existing `AGENTS.md`, `docs/agent/*`, `docs/docs-status.md`, and `.ai-ops/context-layer.json` first.',\n '- Treat `already-covered` as valid only when the Active context layer already has the same agent behavior rule; plans, tests, README, runbooks, and operator docs are evidence, not automatic coverage.',\n '- Check whether user corrections, repeated review findings, command routines, dirty worktree, untracked files, changeset pollution, or staging-scope hygiene produced a reusable `project-local` candidate.',\n '- Before `no-promotion`, briefly report near-miss or discarded candidates with reasons.',\n '- Classify candidates as `core`, `project-local`, `global`, `already-covered`, or `no-promotion`.',\n '- Ask the user before editing any file.',\n '- If promotion is approved, edit only the approved context/global files, then stop for user inspection without committing.',\n '- After approved updates or a no-promotion/already-covered decision, run `ai-ops context-promotion resolve --decision <promoted|no-promotion> --summary \"<summary>\"` with any approved `--scope` and `--target` values.',\n '- Re-run `ai-ops context-promotion status` and confirm a receipt exists for the current HEAD.',\n '',\n `Project: ${projectRoot}`,\n `HEAD: ${status.commitHash ?? 'unknown'}`,\n `Fingerprint: ${status.fingerprint ?? 'unknown'}`,\n ].join('\\n');\n};\n\nconst buildContextPromotionStatusFailurePrompt = (cwd: string, error: unknown): string => {\n const message = error instanceof Error ? error.message : 'unknown error';\n return [\n 'Context Promotion Review could not inspect the completed work commit.',\n '',\n 'The work command has already finished; do not amend or rewrite it for this hook.',\n 'Do not search the web or inspect another repository to repair this hook review.',\n '',\n 'Run `ai-ops context-promotion status` to inspect the failure, then decide whether a manual promotion review is needed.',\n '',\n `Project cwd: ${cwd}`,\n `Error: ${message}`,\n ].join('\\n');\n};\n\nconst buildPostToolUseOutput = (prompt: string): ContextPromotionPostToolUseHookOutput => ({\n decision: 'block',\n reason: prompt,\n hookSpecificOutput: {\n hookEventName: 'PostToolUse',\n additionalContext: prompt,\n },\n});\n\nexport const evaluateContextPromotionPostToolUseHook = (params: {\n hookInput: unknown;\n userBasePath: string;\n}): ContextPromotionPostToolUseHookOutput | null => {\n const hookInput = parseSuccessfulGitCommitPostToolUseHook(params.hookInput);\n if (!hookInput) {\n return null;\n }\n\n let status: ContextPromotionProjectStatus;\n try {\n status = getContextPromotionStatus({\n cwd: hookInput.cwd,\n userBasePath: params.userBasePath,\n });\n } catch (error) {\n return buildPostToolUseOutput(buildContextPromotionStatusFailurePrompt(hookInput.cwd, error));\n }\n\n if (!status.hasContextLayer || status.receipt) {\n return null;\n }\n\n return buildPostToolUseOutput(buildContextPromotionReviewPrompt(status));\n};\n","import type { Command } from 'commander';\nimport {\n contextPromotionPostToolUseHookCommand,\n contextPromotionPreToolUseHookCommand,\n contextPromotionPruneCommand,\n contextPromotionResolveCommand,\n contextPromotionStatusCommand,\n} from './commands.js';\n\nexport const registerContextPromotionCommands = (program: Command): void => {\n const command = program.command('context-promotion').description('context promotion review receipt 관리');\n\n command\n .command('status')\n .description('현재 context promotion receipt 상태 확인')\n .option('--json', 'JSON으로 출력', false)\n .action((opts: { json?: boolean }) => contextPromotionStatusCommand(opts));\n\n command\n .command('resolve')\n .description('현재 HEAD 커밋에 대한 context promotion review receipt 기록')\n .requiredOption('--decision <decision>', 'promoted|no-promotion')\n .requiredOption('--summary <summary>', 'review 결정 요약')\n .option('--scope <scope...>', '승격 scope (core|project-local|global)')\n .option('--target <path...>', '승격 대상 파일 또는 자산')\n .action((opts: { decision?: string; summary?: string; scope?: string[]; target?: string[] }) =>\n contextPromotionResolveCommand(opts),\n );\n\n command\n .command('prune')\n .description('user-local context promotion receipts 정리')\n .option('--max <number>', '유지할 receipt 수', '50')\n .action((opts: { max?: string }) => contextPromotionPruneCommand(opts));\n\n const hookCommand = command.command('hook').description('Codex hook 내부 명령');\n hookCommand\n .command('pre-tool-use')\n .description('Deprecated no-op Codex PreToolUse hook entrypoint')\n .action(() => contextPromotionPreToolUseHookCommand());\n hookCommand\n .command('post-tool-use')\n .description('Codex PostToolUse hook entrypoint')\n .action(() => contextPromotionPostToolUseHookCommand());\n};\n","import * as p from '@clack/prompts';\nimport {\n INTEGRATION_COMPONENT_TYPE,\n INTEGRATION_ID,\n} from '@/core/schemas/index.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport {\n inspectCodexHook,\n resolveCodexHooksPath,\n uninstallCodexHook,\n} from '../codex-hooks/core.js';\nimport { evaluatePcPostToolUseHook, getPcHandoffStatus } from '../pc/core.js';\nimport {\n findInstalledIntegration,\n readIntegrationManifest,\n resolveIntegrationManifestPath,\n writeUserIntegrationState,\n} from './manifest-io.js';\nimport { resolveBasePath, resolveUserBasePath } from '../../shared/command-paths.js';\nimport {\n buildInstalledIntegration,\n buildReceiptConfigComponents,\n componentWasOwned,\n ensureHookComponent,\n ensureSkillComponent,\n formatComponentStatus,\n hasInstalledCodexSkill,\n removeOwnedSkill,\n} from './components.js';\nimport {\n loadIntegrationDefinitions,\n parseIntegrationId,\n resolveCodexHomePath,\n resolveIntegrationDefinition,\n resolvePersonalContextRoot,\n} from './definitions.js';\nimport type { IntegrationInstallOptions } from './definitions.js';\nimport { readStdin, reportIntegrationError } from './stdio.js';\n\nexport const integrationListCommand = async (): Promise<void> => {\n p.intro('ai-ops integration list');\n try {\n const manifest = readIntegrationManifest(resolveIntegrationManifestPath(resolveUserBasePath()));\n const installed = new Set((manifest?.integrations ?? []).map((integration) => integration.id));\n const lines = loadIntegrationDefinitions().map((definition) => {\n const suffix = installed.has(definition.id) ? 'installed' : 'not installed';\n return `- ${definition.id} - ${suffix} - ${definition.description}`;\n });\n p.log.info(lines.join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration list 완료');\n};\n\nexport const integrationInstallCommand = async (\n integrationId: string,\n opts: IntegrationInstallOptions = {},\n): Promise<void> => {\n p.intro(`ai-ops integration install ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const manifestPath = resolveIntegrationManifestPath(basePath);\n const previous = findInstalledIntegration(readIntegrationManifest(manifestPath)?.integrations ?? [], definition.id);\n const skillComponent = ensureSkillComponent({\n basePath,\n cliVersion,\n skillId: definition.skillComponent.id,\n previouslyOwned: componentWasOwned({\n previous,\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: definition.skillComponent.id,\n }),\n });\n const hookComponent = ensureHookComponent({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n hookId: definition.hookComponent.id,\n definition: definition.hookDefinition,\n command: opts.command,\n previouslyOwned: componentWasOwned({\n previous,\n type: INTEGRATION_COMPONENT_TYPE.CODEX_HOOK,\n id: definition.hookComponent.id,\n }),\n });\n\n const installedIntegration = buildInstalledIntegration({\n definition,\n previous,\n components: [skillComponent, hookComponent, ...buildReceiptConfigComponents(definition.receiptConfigComponents)],\n });\n writeUserIntegrationState({\n manifestPath,\n cliVersion,\n nextIntegration: installedIntegration,\n });\n\n p.log.success(`integration 설치 완료: ${definition.id}`);\n p.log.info(installedIntegration.components.map(formatComponentStatus).join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration install 완료');\n};\n\nexport const integrationStatusCommand = async (integrationId: string): Promise<void> => {\n p.intro(`ai-ops integration status ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const manifest = readIntegrationManifest(resolveIntegrationManifestPath(basePath));\n const installedIntegration = findInstalledIntegration(manifest?.integrations ?? [], definition.id);\n const hookStatus = inspectCodexHook({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n definition: definition.hookDefinition,\n });\n const lines = [\n `integration installed: ${installedIntegration ? 'yes' : 'no'}`,\n `skill installed: ${hasInstalledCodexSkill({ basePath, skillId: definition.skillComponent.id }) ? 'yes' : 'no'}`,\n `hook installed: ${hookStatus.installed ? 'yes' : 'no'}`,\n `hooks file: ${hookStatus.hooksPath}`,\n ];\n\n if (definition.id === INTEGRATION_ID.PC) {\n const pcStatus = getPcHandoffStatus({\n cwd: resolveBasePath(),\n contextRoot: resolvePersonalContextRoot(),\n });\n lines.push(\n `pc context ready: ${pcStatus.ready ? 'yes' : 'no'}`,\n `pc skip reason: ${pcStatus.skipReason ?? 'none'}`,\n `pc workspace: ${pcStatus.workspaceId ?? 'not found'}`,\n `pc active workstream: ${pcStatus.activeWorkstreamId ?? 'not found'}`,\n `pc last confirmed commit: ${pcStatus.lastConfirmedCommitHash ?? 'not found'}`,\n );\n }\n\n if (installedIntegration) {\n lines.push(`owned components: ${installedIntegration.components.map(formatComponentStatus).join(', ')}`);\n }\n\n p.log.info(lines.join('\\n'));\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration status 완료');\n};\n\nexport const integrationUninstallCommand = async (integrationId: string): Promise<void> => {\n p.intro(`ai-ops integration uninstall ${integrationId}`);\n try {\n const definition = resolveIntegrationDefinition(integrationId);\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const manifestPath = resolveIntegrationManifestPath(basePath);\n const installedIntegration = findInstalledIntegration(\n readIntegrationManifest(manifestPath)?.integrations ?? [],\n definition.id,\n );\n\n if (!installedIntegration) {\n p.log.warn('설치된 integration manifest entry를 찾지 못했습니다.');\n p.outro('ai-ops integration uninstall 완료');\n return;\n }\n\n const removed: string[] = [];\n for (const component of installedIntegration.components) {\n if (!component.owned) {\n continue;\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.SKILL) {\n removed.push(...removeOwnedSkill({ basePath, cliVersion, skillId: component.id }));\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n const result = uninstallCodexHook({\n hooksPath: resolveCodexHooksPath(resolveCodexHomePath()),\n definition: definition.hookDefinition,\n });\n if (result.removed) {\n removed.push(result.hooksPath);\n }\n }\n }\n\n writeUserIntegrationState({\n manifestPath,\n cliVersion,\n removeIntegrationId: definition.id,\n });\n p.log.success(removed.length > 0 ? `제거 완료: ${removed.join(', ')}` : '제거할 owned component 없음');\n } catch (error) {\n reportIntegrationError(error);\n }\n p.outro('ai-ops integration uninstall 완료');\n};\n\nexport const integrationPostToolUseHookCommand = async (integrationId: string): Promise<void> => {\n try {\n const id = parseIntegrationId(integrationId);\n const raw = await readStdin();\n const hookInput = raw.trim().length > 0 ? JSON.parse(raw) : {};\n if (id !== INTEGRATION_ID.PC) {\n return;\n }\n\n const output = evaluatePcPostToolUseHook({\n hookInput,\n contextRoot: resolvePersonalContextRoot(),\n });\n if (output) {\n process.stdout.write(JSON.stringify(output) + '\\n');\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stdout.write(\n JSON.stringify({\n systemMessage: `ai-ops integration hook skipped: ${message}`,\n }) + '\\n',\n );\n }\n};\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { join, resolve, sep } from \"node:path\";\nimport { extractSection, normalizeFieldValue, normalizePath, parseListField, pathContains, readTextFileOrNull } from \"./markdown.js\";\nimport type { PcHandoffStatus, PcWorkspaceCandidate, PcWorkspaceEntry } from \"./types.js\";\n\n// ----- git helpers -----\n\nconst runGit = (cwd: string, args: readonly string[]): string =>\n execFileSync('git', [...args], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim();\n\nexport const resolveGitRoot = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--show-toplevel']);\n } catch {\n return null;\n }\n};\n\nexport const readGitHead = (cwd: string): string | null => {\n try {\n return runGit(cwd, ['rev-parse', '--verify', 'HEAD']);\n } catch {\n return null;\n }\n};\n\n// ----- pc context preflight -----\n\nconst listWorkspaceStatePaths = (contextRoot: string): string[] => {\n const workspacesDir = join(contextRoot, 'workspaces');\n if (!existsSync(workspacesDir)) {\n return [];\n }\n\n return readdirSync(workspacesDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => join(workspacesDir, entry.name, 'workspace-state.md'))\n .filter((statePath) => existsSync(statePath))\n .sort((a, b) => a.localeCompare(b));\n};\n\nconst parseWorkspaceCandidate = (statePath: string): PcWorkspaceCandidate | null => {\n const content = readTextFileOrNull(statePath);\n if (!content) {\n return null;\n }\n const workspaceRoot = parseListField(content, ['워크스페이스 루트', 'Workspace Root']);\n if (!workspaceRoot) {\n return null;\n }\n\n const activeSection = extractSection(content, ['활성 Workstream', 'Active Workstream']);\n const activeWorkstreamId = parseListField(activeSection, ['ID', 'Workstream ID', 'Active Workstream']);\n const workspaceDir = resolve(statePath, '..');\n const id =\n parseListField(content, ['워크스페이스 ID', 'Workspace ID']) ?? workspaceDir.split(sep).at(-1) ?? 'unknown';\n\n return {\n id,\n statePath,\n workspaceDir,\n workspaceRoot,\n activeWorkstreamId,\n };\n};\n\nconst findMatchingWorkspace = (params: { cwd: string; contextRoot: string }): PcWorkspaceCandidate | null => {\n const candidates = listWorkspaceStatePaths(params.contextRoot)\n .map(parseWorkspaceCandidate)\n .filter((candidate): candidate is PcWorkspaceCandidate => candidate !== null)\n .filter((candidate) => pathContains(candidate.workspaceRoot, params.cwd))\n .sort((a, b) => normalizePath(b.workspaceRoot).length - normalizePath(a.workspaceRoot).length);\n\n return candidates[0] ?? null;\n};\n\nconst parseRepoEntry = (entryPath: string): PcWorkspaceEntry | null => {\n const content = readTextFileOrNull(entryPath);\n if (!content) {\n return null;\n }\n const id = parseListField(content, ['엔트리 ID', 'Entry ID']);\n if (!id) {\n return null;\n }\n\n return {\n id,\n path: parseListField(content, ['경로', 'Path']),\n gitRoot: parseListField(content, ['Git 루트', 'Git Root']),\n };\n};\n\nconst findCurrentEntry = (params: { cwd: string; workspaceDir: string }): PcWorkspaceEntry | null => {\n const reposDir = join(params.workspaceDir, 'repos');\n if (!existsSync(reposDir)) {\n return null;\n }\n\n const entries = readdirSync(reposDir, { withFileTypes: true })\n .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))\n .map((entry) => parseRepoEntry(join(reposDir, entry.name)))\n .filter((entry): entry is PcWorkspaceEntry => entry !== null)\n .filter((entry) => {\n const paths = [entry.path, entry.gitRoot].filter((path): path is string => path !== null);\n return paths.some((path) => pathContains(path, params.cwd));\n })\n .sort((a, b) => {\n const aLength = Math.max(0, ...[a.path, a.gitRoot].map((path) => (path ? normalizePath(path).length : 0)));\n const bLength = Math.max(0, ...[b.path, b.gitRoot].map((path) => (path ? normalizePath(path).length : 0)));\n return bLength - aLength;\n });\n\n return entries[0] ?? null;\n};\n\nconst parseWorkstreamScopeEntryIds = (content: string): string[] => {\n const scopeSection = extractSection(content, ['범위', 'Scope']);\n if (scopeSection.length === 0) {\n return [];\n }\n\n const lines = scopeSection.split('\\n');\n const ids: string[] = [];\n let inEntryBlock = false;\n\n for (const line of lines) {\n if (/^-\\s*(엔트리|Entries|Entry):/.test(line)) {\n inEntryBlock = true;\n const inlineValue = normalizeFieldValue(line.split(':').slice(1).join(':'));\n if (inlineValue && !inlineValue.includes('<')) {\n ids.push(...inlineValue.split(',').map((value) => value.trim().replace(/^`|`$/g, '')));\n }\n continue;\n }\n\n if (inEntryBlock && /^-\\s+\\S/.test(line)) {\n inEntryBlock = false;\n }\n\n if (!inEntryBlock) {\n continue;\n }\n\n const nestedMatch = /^\\s+-\\s+`?([a-z0-9]+(?:-[a-z0-9]+)*)`?/.exec(line);\n if (nestedMatch) {\n ids.push(nestedMatch[1]);\n }\n }\n\n return [...new Set(ids.filter((id) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id)))];\n};\n\nconst parseLastConfirmedCommitHash = (params: { content: string; entryId: string }): string | null => {\n const section = extractSection(params.content, ['마지막 확인 Commit', 'Last Confirmed Commit']);\n if (section.length === 0) {\n return null;\n }\n\n const escapedEntryId = params.entryId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = new RegExp(`^-\\\\s+\\`?${escapedEntryId}\\`?:\\\\s*([a-f0-9]{40})\\\\b`, 'imu').exec(section);\n return match?.[1] ?? null;\n};\n\nexport const getPcHandoffStatus = (params: { cwd: string; contextRoot: string }): PcHandoffStatus => {\n const cwd = normalizePath(params.cwd);\n const contextRoot = normalizePath(params.contextRoot);\n if (!existsSync(contextRoot)) {\n return {\n cwd,\n contextRoot,\n workspaceId: null,\n workspaceRoot: null,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'pc context root not found',\n };\n }\n\n const workspace = findMatchingWorkspace({ cwd, contextRoot });\n if (!workspace) {\n return {\n cwd,\n contextRoot,\n workspaceId: null,\n workspaceRoot: null,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'matching pc workspace not found',\n };\n }\n\n if (!workspace.activeWorkstreamId) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: null,\n activeWorkstreamPath: null,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'active pc workstream not selected',\n };\n }\n\n const activeWorkstreamPath = join(workspace.workspaceDir, 'workstreams', `${workspace.activeWorkstreamId}.md`);\n const activeWorkstreamContent = readTextFileOrNull(activeWorkstreamPath);\n if (!activeWorkstreamContent) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'active pc workstream file not found',\n };\n }\n\n const currentEntry = findCurrentEntry({ cwd, workspaceDir: workspace.workspaceDir });\n if (!currentEntry) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: null,\n lastConfirmedCommitHash: null,\n ready: false,\n skipReason: 'current repo is not registered in pc workspace',\n };\n }\n\n const lastConfirmedCommitHash = parseLastConfirmedCommitHash({\n content: activeWorkstreamContent,\n entryId: currentEntry.id,\n });\n\n const scopeEntryIds = parseWorkstreamScopeEntryIds(activeWorkstreamContent);\n if (scopeEntryIds.length > 0 && !scopeEntryIds.includes(currentEntry.id)) {\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: currentEntry.id,\n lastConfirmedCommitHash,\n ready: false,\n skipReason: 'current repo is outside the active pc workstream scope',\n };\n }\n\n return {\n cwd,\n contextRoot,\n workspaceId: workspace.id,\n workspaceRoot: workspace.workspaceRoot,\n activeWorkstreamId: workspace.activeWorkstreamId,\n activeWorkstreamPath,\n currentEntryId: currentEntry.id,\n lastConfirmedCommitHash,\n ready: true,\n skipReason: null,\n };\n};\n","import { readFileSync } from \"node:fs\";\nimport { resolve, sep } from \"node:path\";\n\n// ----- path and markdown helpers -----\n\nexport const normalizePath = (path: string): string => resolve(path.replace(/^~(?=$|\\/)/, process.env.HOME ?? '~'));\n\nexport const pathContains = (parentPath: string, childPath: string): boolean => {\n const parent = normalizePath(parentPath);\n const child = normalizePath(childPath);\n return child === parent || child.startsWith(`${parent}${sep}`);\n};\n\nexport const normalizeFieldValue = (value: string | null): string | null => {\n const trimmed = value?.trim() ?? '';\n if (trimmed.length === 0 || ['none', 'null', '-', '<empty>'].includes(trimmed.toLowerCase())) {\n return null;\n }\n return trimmed.replace(/^`|`$/g, '');\n};\n\nexport const extractSection = (content: string, headings: readonly string[]): string => {\n const headingPattern = headings.map((heading) => heading.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const match = new RegExp(`^##\\\\s+(?:${headingPattern})\\\\s*$`, 'mu').exec(content);\n if (!match) {\n return '';\n }\n const start = match.index + match[0].length;\n const rest = content.slice(start);\n const nextHeading = /^##\\s+/mu.exec(rest);\n return nextHeading ? rest.slice(0, nextHeading.index) : rest;\n};\n\nexport const parseListField = (content: string, labels: readonly string[]): string | null => {\n for (const label of labels) {\n const escapedLabel = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = new RegExp(`^-\\\\s+${escapedLabel}:\\\\s*(.+)$`, 'mu').exec(content);\n const value = normalizeFieldValue(match?.[1] ?? null);\n if (value) {\n return value;\n }\n }\n return null;\n};\n\nexport const readTextFileOrNull = (filePath: string): string | null => {\n try {\n return readFileSync(filePath, 'utf-8');\n } catch {\n return null;\n }\n};\n\n// ----- git helpers -----\n","import { readGitHead, resolveGitRoot } from \"./status.js\";\nimport { parseSuccessfulGitCommitPostToolUseHook } from \"../context-promotion/tool-use-hook.js\";\nimport type { PcHandoffStatus, PcPostToolUseHookOutput } from \"./types.js\";\nimport { getPcHandoffStatus } from \"./status.js\";\n\n// ----- hook output -----\n\nconst buildPcDonePrompt = (params: { status: PcHandoffStatus; head: string; gitRoot: string }): string =>\n [\n 'A successful git commit just created a new HEAD commit.',\n '',\n 'Run `$pc:done` now to record the handoff for the active personal project context.',\n '',\n 'Important guardrails:',\n '- Do not create or initialize a new pc context from this hook.',\n '- If `$pc:done` cannot match the prepared workspace, active workstream, or current repo scope, skip and briefly say why.',\n '- If the active workstream already records this HEAD as the last confirmed commit, skip without writing another handoff.',\n '- Do not modify the product repo for this hook; `$pc:done` may only update `~/.personal-project-contexts/` and commit that context repo.',\n '- Use the just-created HEAD commit as the newest evidence for completed work and the next first action.',\n '',\n `Project git root: ${params.gitRoot}`,\n `HEAD: ${params.head}`,\n `pc context root: ${params.status.contextRoot}`,\n `pc workspace: ${params.status.workspaceId ?? 'unknown'} (${params.status.workspaceRoot ?? 'unknown'})`,\n `active workstream: ${params.status.activeWorkstreamId ?? 'unknown'}`,\n `current entry: ${params.status.currentEntryId ?? 'unknown'}`,\n `last confirmed commit: ${params.status.lastConfirmedCommitHash ?? 'none'}`,\n ].join('\\n');\n\nconst buildPostToolUseOutput = (prompt: string): PcPostToolUseHookOutput => ({\n decision: 'block',\n reason: prompt,\n hookSpecificOutput: {\n hookEventName: 'PostToolUse',\n additionalContext: prompt,\n },\n});\n\nexport const evaluatePcPostToolUseHook = (params: {\n hookInput: unknown;\n contextRoot: string;\n}): PcPostToolUseHookOutput | null => {\n const gitCommitHook = parseSuccessfulGitCommitPostToolUseHook(params.hookInput);\n if (!gitCommitHook) {\n return null;\n }\n\n const gitRoot = resolveGitRoot(gitCommitHook.cwd);\n if (!gitRoot) {\n return null;\n }\n\n const head = readGitHead(gitRoot);\n if (!head) {\n return null;\n }\n\n const status = getPcHandoffStatus({\n cwd: gitCommitHook.cwd,\n contextRoot: params.contextRoot,\n });\n if (!status.ready) {\n return null;\n }\n if (status.lastConfirmedCommitHash === head) {\n return null;\n }\n\n return buildPostToolUseOutput(buildPcDonePrompt({ status, head, gitRoot }));\n};\n","import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { IntegrationManifestSchema } from '@/core/schemas/index.js';\nimport type { InstalledIntegration, IntegrationId, IntegrationManifest } from '@/core/schemas/index.js';\n\nexport const INTEGRATION_MANIFEST_FILENAME = 'integrations-manifest.json';\n\nexport const parseIntegrationManifest = (json: string): IntegrationManifest =>\n IntegrationManifestSchema.parse(JSON.parse(json));\n\nexport const serializeIntegrationManifest = (manifest: IntegrationManifest): string =>\n JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const resolveIntegrationManifestPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', INTEGRATION_MANIFEST_FILENAME);\n\nexport const readIntegrationManifest = (manifestPath: string): IntegrationManifest | null => {\n let raw: string;\n try {\n raw = readFileSync(manifestPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseIntegrationManifest(raw);\n};\n\nexport const writeIntegrationManifest = (manifestPath: string, manifest: IntegrationManifest): void => {\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeIntegrationManifest(manifest), 'utf-8');\n};\n\nexport const findInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n integrationId: IntegrationId,\n): InstalledIntegration | undefined => integrations.find((integration) => integration.id === integrationId);\n\nexport const upsertInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n nextIntegration: InstalledIntegration,\n): InstalledIntegration[] => [\n ...integrations.filter((integration) => integration.id !== nextIntegration.id),\n nextIntegration,\n];\n\nexport const removeInstalledIntegration = (\n integrations: readonly InstalledIntegration[],\n integrationId: IntegrationId,\n): InstalledIntegration[] => integrations.filter((integration) => integration.id !== integrationId);\n\nexport const writeUserIntegrationState = (params: {\n manifestPath: string;\n cliVersion: string;\n nextIntegration?: InstalledIntegration;\n removeIntegrationId?: IntegrationId;\n}): void => {\n const previous = readIntegrationManifest(params.manifestPath);\n const integrations = params.removeIntegrationId\n ? removeInstalledIntegration(previous?.integrations ?? [], params.removeIntegrationId)\n : params.nextIntegration\n ? upsertInstalledIntegration(previous?.integrations ?? [], params.nextIntegration)\n : (previous?.integrations ?? []);\n\n if (integrations.length === 0) {\n rmSync(params.manifestPath, { force: true });\n return;\n }\n\n writeIntegrationManifest(params.manifestPath, {\n schemaVersion: 1,\n kind: 'ai-ops-integrations-manifest',\n integrations,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n","import { existsSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type {\n InstalledIntegration,\n InstalledSkill,\n IntegrationComponent,\n IntegrationId,\n Skill,\n} from '@/core/schemas/index.js';\nimport { INTEGRATION_COMPONENT_TYPE, SKILL_TOOL } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport {\n buildCodexHookCommand,\n inspectCodexHook,\n installCodexHook,\n} from '../codex-hooks/core.js';\nimport type { CodexHookDefinition } from '../codex-hooks/core.js';\nimport { installSkillPackages, removeDirectories } from '../skills/install-files.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from '../skills/registry-io.js';\nimport { buildSkillInstallPlan } from '../skills/renderer.js';\nimport { findInstalledSkill, mergeSkillTools, removeInstalledSkill, upsertInstalledSkill } from '../skills/state.js';\nimport { resolveSkillsDir } from '../../shared/command-paths.js';\nimport type { IntegrationDefinition } from './definitions.js';\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] =>\n (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n\nconst resolveSkillById = (skillId: string): Skill => {\n const skill = loadAllSkills(resolveSkillsDir()).find((candidate) => candidate.id === skillId);\n if (!skill) {\n throw new Error(`Unknown skill: ${skillId}`);\n }\n return skill;\n};\n\nexport const hasInstalledCodexSkill = (params: { basePath: string; skillId: string }): boolean => {\n const installedSkill = findInstalledSkill(readInstalledSkills(params.basePath), params.skillId);\n return (\n installedSkill?.tools.includes(SKILL_TOOL.CODEX) === true &&\n existsSync(join(params.basePath, '.agents/skills', params.skillId, 'SKILL.md'))\n );\n};\n\nconst writeUserSkillState = (params: {\n basePath: string;\n cliVersion: string;\n nextSkill?: InstalledSkill;\n removeSkillId?: string;\n}): void => {\n const registryPath = resolveSkillRegistryPath(params.basePath);\n const previous = readSkillRegistry(registryPath);\n const skills = params.removeSkillId\n ? removeInstalledSkill(previous?.skills ?? [], params.removeSkillId)\n : params.nextSkill\n ? upsertInstalledSkill(previous?.skills ?? [], params.nextSkill)\n : (previous?.skills ?? []);\n\n if (skills.length === 0) {\n rmSync(registryPath, { force: true });\n return;\n }\n\n writeSkillRegistry(registryPath, {\n skills,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nexport const ensureSkillComponent = (params: {\n basePath: string;\n cliVersion: string;\n skillId: string;\n previouslyOwned: boolean;\n}): IntegrationComponent => {\n const skill = resolveSkillById(params.skillId);\n const installedSkills = readInstalledSkills(params.basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, skill.id);\n const requestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: [SKILL_TOOL.CODEX],\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill,\n requestedTools,\n });\n\n const alreadyCurrent =\n existingInstalledSkill?.sourceHash === installedSkill.sourceHash &&\n existingInstalledSkill.tools.includes(SKILL_TOOL.CODEX) &&\n existsSync(join(params.basePath, '.agents/skills', params.skillId, 'SKILL.md'));\n\n if (alreadyCurrent) {\n return {\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: params.skillId,\n tools: [SKILL_TOOL.CODEX],\n owned: params.previouslyOwned,\n };\n }\n\n installSkillPackages(params.basePath, packages);\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSkill: installedSkill,\n });\n\n return {\n type: INTEGRATION_COMPONENT_TYPE.SKILL,\n id: params.skillId,\n tools: [SKILL_TOOL.CODEX],\n owned: true,\n };\n};\n\nexport const ensureHookComponent = (params: {\n hooksPath: string;\n hookId: IntegrationId;\n definition: CodexHookDefinition;\n command?: string;\n previouslyOwned: boolean;\n}): IntegrationComponent => {\n const command = buildCodexHookCommand({\n definition: params.definition,\n overrideCommand: params.command,\n });\n const installedBefore = inspectCodexHook({\n hooksPath: params.hooksPath,\n definition: params.definition,\n }).installed;\n const result = installCodexHook({\n hooksPath: params.hooksPath,\n definition: params.definition,\n command,\n });\n\n return {\n type: INTEGRATION_COMPONENT_TYPE.CODEX_HOOK,\n id: params.hookId,\n command,\n owned: params.previouslyOwned || result.changed || !installedBefore,\n };\n};\n\nexport const buildReceiptConfigComponents = (\n components: readonly IntegrationDefinition['receiptConfigComponents'][number][],\n): IntegrationComponent[] =>\n components.map((component) => ({\n type: INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n id: component.id,\n storagePath: component.storage_path,\n owned: false,\n }));\n\nexport const componentWasOwned = (params: {\n previous?: InstalledIntegration;\n type: IntegrationComponent['type'];\n id: string;\n}): boolean =>\n params.previous?.components.some(\n (component) => component.type === params.type && component.id === params.id && component.owned,\n ) ?? false;\n\nexport const buildInstalledIntegration = (params: {\n definition: IntegrationDefinition;\n previous?: InstalledIntegration;\n components: readonly IntegrationComponent[];\n}): InstalledIntegration => {\n const now = new Date().toISOString();\n return {\n id: params.definition.id,\n components: [...params.components],\n installedAt: params.previous?.installedAt ?? now,\n updatedAt: now,\n };\n};\n\nexport const removeOwnedSkill = (params: { basePath: string; cliVersion: string; skillId: string }): string[] => {\n const installedSkill = findInstalledSkill(readInstalledSkills(params.basePath), params.skillId);\n if (!installedSkill) {\n return [];\n }\n\n const removed = removeDirectories(params.basePath, installedSkill.installed_paths);\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n removeSkillId: params.skillId,\n });\n return removed;\n};\n\nexport const formatComponentStatus = (component: IntegrationComponent): string => {\n const owner = component.owned ? 'owned' : 'pre-existing';\n if (component.type === INTEGRATION_COMPONENT_TYPE.SKILL) {\n return `skill:${component.id} (${owner})`;\n }\n if (component.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n return `codex-hook:${component.id} (${owner})`;\n }\n return `receipt-config:${component.id} (${owner})`;\n};\n","import type {\n IntegrationCatalogComponent,\n IntegrationCatalogEntry,\n IntegrationId,\n} from '@/core/schemas/index.js';\nimport { INTEGRATION_COMPONENT_TYPE } from '@/core/schemas/index.js';\nimport { loadAllIntegrations } from '@/shared/catalog-loader.js';\nimport { CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK } from '../codex-hooks/core.js';\nimport type { CodexHookDefinition } from '../codex-hooks/core.js';\nimport { resolveIntegrationsDir } from '../../shared/command-paths.js';\n\nexport type IntegrationInstallOptions = {\n command?: string;\n};\n\nexport type IntegrationDefinition = IntegrationCatalogEntry & {\n skillComponent: Extract<IntegrationCatalogComponent, { type: typeof INTEGRATION_COMPONENT_TYPE.SKILL }>;\n hookComponent: Extract<IntegrationCatalogComponent, { type: typeof INTEGRATION_COMPONENT_TYPE.CODEX_HOOK }>;\n receiptConfigComponents: Extract<\n IntegrationCatalogComponent,\n { type: typeof INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG }\n >[];\n hookDefinition: CodexHookDefinition;\n};\n\nconst CODEX_HOOK_DEFINITIONS = [CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK] as const;\n\nexport const resolveCodexHomePath = (): string => {\n const codexHome = process.env.CODEX_HOME;\n if (codexHome && codexHome.length > 0) {\n return codexHome;\n }\n const home = process.env.HOME;\n if (!home) {\n throw new Error('CODEX_HOME or HOME is required for Codex hook commands');\n }\n return `${home}/.codex`;\n};\n\nexport const resolvePersonalContextRoot = (): string => {\n const home = process.env.HOME;\n if (!home) {\n throw new Error('HOME is required for pc integration commands');\n }\n return `${home}/.personal-project-contexts`;\n};\n\nconst resolveCodexHookDefinition = (hookId: IntegrationId): CodexHookDefinition => {\n const hookDefinition = CODEX_HOOK_DEFINITIONS.find((definition) => definition.id === hookId);\n if (!hookDefinition) {\n throw new Error(`Unknown Codex hook for integration: ${hookId}`);\n }\n return hookDefinition;\n};\n\nconst resolveCatalogSkillComponent = (entry: IntegrationCatalogEntry): IntegrationDefinition['skillComponent'] => {\n const component = entry.components.find((candidate) => candidate.type === INTEGRATION_COMPONENT_TYPE.SKILL);\n if (!component || component.type !== INTEGRATION_COMPONENT_TYPE.SKILL) {\n throw new Error(`Integration catalog entry must declare a skill component: ${entry.id}`);\n }\n return component;\n};\n\nconst resolveCatalogHookComponent = (entry: IntegrationCatalogEntry): IntegrationDefinition['hookComponent'] => {\n const component = entry.components.find((candidate) => candidate.type === INTEGRATION_COMPONENT_TYPE.CODEX_HOOK);\n if (!component || component.type !== INTEGRATION_COMPONENT_TYPE.CODEX_HOOK) {\n throw new Error(`Integration catalog entry must declare a codex-hook component: ${entry.id}`);\n }\n return component;\n};\n\nconst resolveCatalogReceiptConfigComponents = (\n entry: IntegrationCatalogEntry,\n): IntegrationDefinition['receiptConfigComponents'] =>\n entry.components.filter(\n (component): component is IntegrationDefinition['receiptConfigComponents'][number] =>\n component.type === INTEGRATION_COMPONENT_TYPE.RECEIPT_CONFIG,\n );\n\nexport const loadIntegrationDefinitions = (): IntegrationDefinition[] =>\n loadAllIntegrations(resolveIntegrationsDir()).map((entry) => {\n const hookComponent = resolveCatalogHookComponent(entry);\n return {\n ...entry,\n skillComponent: resolveCatalogSkillComponent(entry),\n hookComponent,\n receiptConfigComponents: resolveCatalogReceiptConfigComponents(entry),\n hookDefinition: resolveCodexHookDefinition(hookComponent.id),\n };\n });\n\nexport const parseIntegrationId = (integrationId: string): IntegrationId => {\n const definition = loadIntegrationDefinitions().find((candidate) => candidate.id === integrationId);\n if (!definition) {\n throw new Error(`Unknown integration: ${integrationId}`);\n }\n return definition.id;\n};\n\nexport const resolveIntegrationDefinition = (integrationId: string): IntegrationDefinition => {\n const definition = loadIntegrationDefinitions().find((candidate) => candidate.id === integrationId);\n if (!definition) {\n throw new Error(`Unknown integration: ${integrationId}`);\n }\n return definition;\n};\n","import * as p from '@clack/prompts';\n\nexport const reportIntegrationError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const readStdin = async (): Promise<string> =>\n new Promise((resolve, reject) => {\n let raw = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk: string) => {\n raw += chunk;\n });\n process.stdin.on('end', () => resolve(raw));\n process.stdin.on('error', reject);\n });\n","import type { Command } from 'commander';\nimport {\n integrationInstallCommand,\n integrationListCommand,\n integrationPostToolUseHookCommand,\n integrationStatusCommand,\n integrationUninstallCommand,\n} from './commands.js';\n\nexport const registerIntegrationCommands = (program: Command): void => {\n const command = program.command('integration').description('user/global runtime integration 설치/조회/제거');\n\n command.command('list').description('사용 가능한 integration 목록').action(() => integrationListCommand());\n command\n .command('install <integrationId>')\n .description('integration 설치')\n .option('--command <command>', 'Codex hook에 저장할 실행 명령')\n .action((integrationId, opts: { command?: string }) => integrationInstallCommand(integrationId, opts));\n command.command('status <integrationId>').description('integration 설치 상태 확인').action((integrationId) =>\n integrationStatusCommand(integrationId),\n );\n command.command('uninstall <integrationId>').description('integration 제거').action((integrationId) =>\n integrationUninstallCommand(integrationId),\n );\n\n command\n .command('hook')\n .description('integration hook 내부 명령')\n .command('post-tool-use <integrationId>')\n .description('Codex PostToolUse integration hook entrypoint')\n .action((integrationId) => integrationPostToolUseHookCommand(integrationId));\n};\n","import * as p from '@clack/prompts';\nimport { auditProjectLayer } from './audit.logic.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\n\nexport const auditCommand = async (): Promise<void> => {\n p.intro('ai-ops audit');\n\n const report = auditProjectLayer(resolveBasePath());\n if (report.issues.length === 0) {\n p.log.success('audit 통과. manifest, context-layer, frontmatter, docs-status가 일치합니다.');\n p.outro('ai-ops audit 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n\n p.outro('ai-ops audit 완료');\n};\n","import * as p from '@clack/prompts';\nimport { diffProjectLayer } from './audit.logic.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\n\nexport const diffCommand = async (): Promise<void> => {\n p.intro('ai-ops diff');\n\n const report = diffProjectLayer(resolveBasePath());\n if (report.issues.length === 0) {\n p.log.success('변경 사항 없음. 최신 상태입니다.');\n p.outro('ai-ops diff 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n\n p.outro('ai-ops diff 완료');\n};\n","import * as p from '@clack/prompts';\nimport type { ProjectLayerTool } from '@/core/schemas/index.js';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { installProjectLayer } from './lifecycle.logic.js';\nimport { readProjectLayerManifest } from './state-io.js';\nimport { resolveProjectLayerTools } from './templates.js';\n\ntype InitCommandOptions = {\n tool?: string[];\n};\n\nconst TOOL_OPTIONS = [\n { value: 'codex' as ProjectLayerTool, label: 'Codex' },\n { value: 'gemini' as ProjectLayerTool, label: 'Gemini CLI' },\n { value: 'claude-code' as ProjectLayerTool, label: 'Claude Code' },\n];\n\nconst promptTools = async (): Promise<ProjectLayerTool[] | null> => {\n const selectedTools = await p.multiselect<ProjectLayerTool>({\n message: 'AI 도구 adapter를 선택하세요',\n options: TOOL_OPTIONS,\n initialValues: TOOL_OPTIONS.map((option) => option.value),\n required: true,\n });\n\n return p.isCancel(selectedTools) ? null : resolveProjectLayerTools(selectedTools);\n};\n\nexport const initCommand = async (opts: InitCommandOptions = {}): Promise<void> => {\n p.intro('ai-ops init');\n const basePath = resolveBasePath();\n\n const tools = opts.tool && opts.tool.length > 0 ? resolveProjectLayerTools(opts.tool) : await promptTools();\n if (tools === null) {\n p.cancel('취소됨');\n process.exit(0);\n }\n\n let previousManifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n previousManifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops init 실패' });\n return;\n }\n\n let result: ReturnType<typeof installProjectLayer>;\n try {\n result = installProjectLayer({\n basePath,\n tools,\n previousManifest,\n });\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops init 실패' });\n return;\n }\n\n p.log.success(`project operating layer 설치 완료: ${result.manifest.managed_files.length + result.manifest.project_files.length}개 파일`);\n p.log.info(`도구 adapter: ${result.manifest.tools.join(', ')}`);\n if (result.appended.length > 0) {\n p.log.info(`기존 파일에 managed section 추가:\\n${result.appended.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshedProjectFiles.length > 0) {\n p.log.info(`unmodified project-owned 파일 갱신:\\n${result.refreshedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preservedProjectFiles.length > 0) {\n p.log.info(`기존 project-owned 파일 보존:\\n${result.preservedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops init 완료');\n};\n","import * as p from '@clack/prompts';\nimport { ZodError } from 'zod';\n\nexport const formatProjectLayerCommandError = (error: unknown): string => {\n if (error instanceof ZodError) {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : 'manifest';\n return `${path}: ${issue.message}`;\n })\n .join('; ');\n }\n\n return error instanceof Error ? error.message : 'unknown error';\n};\n\nexport const reportInvalidProjectLayerManifest = (params: { error: unknown; outro: string }): void => {\n const reason = formatProjectLayerCommandError(params.error);\n p.log.error(`[invalid-manifest] .ai-ops/manifest.json 파싱 실패: ${reason}`);\n process.exitCode = 1;\n p.outro(params.outro);\n};\n\nexport const reportProjectLayerApplyError = (params: { error: unknown; outro: string }): void => {\n const reason = formatProjectLayerCommandError(params.error);\n p.log.error(`[project-layer-apply] project operating layer 적용 실패: ${reason}`);\n process.exitCode = 1;\n p.outro(params.outro);\n};\n","import * as p from '@clack/prompts';\nimport {\n diffProjectLayerPack,\n installProjectLayerPack,\n uninstallProjectLayerPack,\n updateProjectLayerPack,\n} from './pack.logic.js';\nimport { loadAllPacks } from './pack-source.logic.js';\nimport type { ProjectLayerManifest } from '@/core/schemas/index.js';\nimport { resolveBasePath, resolvePacksDir } from '../../shared/command-paths.js';\nimport { readProjectLayerManifest } from './state-io.js';\n\nconst readManifestForPackCommand = (basePath: string): ProjectLayerManifest | null => {\n try {\n return readProjectLayerManifest(basePath);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(`.ai-ops/manifest.json 파싱 실패: ${message}`);\n process.exitCode = 1;\n return null;\n }\n};\n\nconst reportPackError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n p.log.error(message);\n process.exitCode = 1;\n};\n\nexport const packListCommand = async (): Promise<void> => {\n const basePath = resolveBasePath();\n const packs = loadAllPacks(resolvePacksDir());\n const manifest = readManifestForPackCommand(basePath);\n const installedPackIds = new Set(manifest?.packs.map((pack) => pack.id) ?? []);\n\n p.intro('ai-ops pack list');\n p.log.info(\n packs\n .map((pack) => {\n const suffix = installedPackIds.has(pack.id) ? 'installed' : 'not installed';\n return `- ${pack.id} - ${suffix}`;\n })\n .join('\\n'),\n );\n p.outro('ai-ops pack list 완료');\n};\n\nexport const packInstallCommand = async (packId: string): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro(`ai-ops pack install ${packId}`);\n try {\n const result = installProjectLayerPack({ basePath, packId, packsDir: resolvePacksDir() });\n p.log.success(`pack 설치 완료: ${packId}`);\n if (result.written.length > 0) {\n p.log.info(`생성:\\n${result.written.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshed.length > 0) {\n p.log.info(`갱신:\\n${result.refreshed.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack install 완료');\n};\n\nexport const packDiffCommand = async (packId: string | undefined): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops pack diff');\n try {\n const report = diffProjectLayerPack({ basePath, packId, packsDir: resolvePacksDir() });\n if (report.issues.length === 0) {\n p.log.success('변경 사항 없음. pack이 최신 상태입니다.');\n p.outro('ai-ops pack diff 완료');\n return;\n }\n\n for (const item of report.issues) {\n const line = `[${item.code}] ${item.message}`;\n if (item.level === 'error') {\n p.log.error(line);\n } else {\n p.log.warn(line);\n }\n }\n\n if (report.issues.some((item) => item.level === 'error')) {\n process.exitCode = 1;\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack diff 완료');\n};\n\nexport const packUpdateCommand = async (packId: string | undefined): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops pack update');\n try {\n const manifest = readManifestForPackCommand(basePath);\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n process.exitCode = 1;\n p.outro('ai-ops pack update 완료');\n return;\n }\n\n const targetPackIds = packId ? [packId] : manifest.packs.map((pack) => pack.id);\n if (targetPackIds.length === 0) {\n p.log.warn('갱신할 설치된 pack이 없습니다.');\n p.outro('ai-ops pack update 완료');\n return;\n }\n\n for (const targetPackId of targetPackIds) {\n const result = updateProjectLayerPack({ basePath, packId: targetPackId, packsDir: resolvePacksDir() });\n p.log.success(`pack 갱신 완료: ${targetPackId}`);\n if (result.refreshed.length > 0) {\n p.log.info(`갱신:\\n${result.refreshed.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack update 완료');\n};\n\nexport const packUninstallCommand = async (packId: string): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro(`ai-ops pack uninstall ${packId}`);\n try {\n const result = uninstallProjectLayerPack({ basePath, packId });\n p.log.success(`pack 제거 완료: ${packId}`);\n if (result.deleted.length > 0) {\n p.log.info(`삭제:\\n${result.deleted.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n } catch (error) {\n reportPackError(error);\n }\n p.outro('ai-ops pack uninstall 완료');\n};\n","import * as p from '@clack/prompts';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { readProjectLayerManifest } from './state-io.js';\nimport { uninstallProjectLayer } from './uninstall.logic.js';\n\ntype UninstallCommandOptions = {\n yes?: boolean;\n};\n\nexport const uninstallCommand = async (opts: UninstallCommandOptions = {}): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops uninstall');\n\n let manifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops uninstall 실패' });\n return;\n }\n\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. project operating layer가 설치되어 있지 않습니다.');\n process.exitCode = 1;\n p.outro('ai-ops uninstall 실패');\n return;\n }\n\n const targetFiles = [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n '.ai-ops/context-layer.json',\n '.ai-ops/manifest.json',\n ];\n\n p.log.info(`처리 대상 (${targetFiles.length}개):\\n${targetFiles.map((file) => ` ${file}`).join('\\n')}`);\n\n if (!opts.yes) {\n const confirmed = await p.confirm({\n message: 'project operating layer를 제거하시겠습니까?',\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel('취소됨');\n process.exit(0);\n }\n }\n\n let result: ReturnType<typeof uninstallProjectLayer>;\n try {\n result = uninstallProjectLayer(basePath, manifest);\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops uninstall 실패' });\n return;\n }\n\n if (result.deleted.length > 0) {\n p.log.success(`삭제 완료:\\n${result.deleted.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.cleaned.length > 0) {\n p.log.success(`managed section 제거, 사용자 내용 보존:\\n${result.cleaned.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preserved.length > 0) {\n p.log.info(`수정되었거나 기존에 있던 project-owned 파일 보존:\\n${result.preserved.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.notFound.length > 0) {\n p.log.info(`이미 없음:\\n${result.notFound.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops uninstall 완료');\n};\n","import * as p from '@clack/prompts';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { reportInvalidProjectLayerManifest, reportProjectLayerApplyError } from './command-errors.js';\nimport { diffProjectLayer } from './audit.logic.js';\nimport { updateProjectLayer } from './lifecycle.logic.js';\nimport { readProjectLayerManifest } from './state-io.js';\n\nexport const updateCommand = async (opts: { force: boolean }): Promise<void> => {\n const basePath = resolveBasePath();\n\n p.intro('ai-ops update');\n\n let manifest: ReturnType<typeof readProjectLayerManifest>;\n try {\n manifest = readProjectLayerManifest(basePath);\n } catch (error) {\n reportInvalidProjectLayerManifest({ error, outro: 'ai-ops update 실패' });\n return;\n }\n\n if (!manifest) {\n p.log.error('.ai-ops/manifest.json이 없습니다. 먼저 ai-ops init을 실행하세요.');\n process.exit(1);\n }\n\n const diffReport = diffProjectLayer(basePath);\n if (diffReport.issues.length === 0 && !opts.force) {\n p.log.info('변경 사항이 없습니다.');\n p.outro('ai-ops update 완료');\n return;\n }\n\n let result: ReturnType<typeof updateProjectLayer>;\n try {\n result = updateProjectLayer({ basePath, manifest });\n } catch (error) {\n reportProjectLayerApplyError({ error, outro: 'ai-ops update 실패' });\n return;\n }\n\n p.log.success(`managed 파일 갱신: ${result.manifest.managed_files.length}개`);\n if (result.createdProjectFiles.length > 0) {\n p.log.info(`누락된 project-owned 파일 복구:\\n${result.createdProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.refreshedProjectFiles.length > 0) {\n p.log.info(`unmodified project-owned 파일 갱신:\\n${result.refreshedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n if (result.preservedProjectFiles.length > 0) {\n p.log.info(`project-owned 파일 보존:\\n${result.preservedProjectFiles.map((file) => ` ${file}`).join('\\n')}`);\n }\n\n p.outro('ai-ops update 완료');\n};\n","import type { Command } from 'commander';\nimport { auditCommand } from './audit-command.js';\nimport { diffCommand } from './diff-command.js';\nimport { initCommand } from './init-command.js';\nimport {\n packDiffCommand,\n packInstallCommand,\n packListCommand,\n packUninstallCommand,\n packUpdateCommand,\n} from './pack-command.js';\nimport { uninstallCommand } from './uninstall-command.js';\nimport { updateCommand } from './update-command.js';\n\nexport const registerProjectLayerCommands = (program: Command): void => {\n program\n .command('init')\n .description('project operating layer 초기 설치')\n .option('--tool <tool...>', '대상 도구 adapter 지정 (codex|gemini|claude-code)')\n .action((opts: { tool?: string[] }) => initCommand(opts));\n\n program\n .command('update')\n .description('project operating layer 갱신')\n .option('--force', '변경 없어도 강제 재설치', false)\n .action((opts: { force: boolean }) => updateCommand(opts));\n\n program.command('diff').description('project operating layer drift 비교').action(() => diffCommand());\n program.command('audit').description('project operating layer 상태 검사').action(() => auditCommand());\n\n program\n .command('uninstall')\n .description('project operating layer 제거')\n .option('--yes', '확인 프롬프트 없이 제거', false)\n .action((opts: { yes?: boolean }) => uninstallCommand(opts));\n\n const packCommand = program.command('pack').description('optional project operating layer pack 설치/조회/갱신');\n\n packCommand.command('list').description('사용 가능한 pack 목록').action(() => packListCommand());\n packCommand.command('install <packId>').description('pack 설치').action((packId) => packInstallCommand(packId));\n packCommand.command('diff [packId]').description('pack 변경 비교').action((packId) => packDiffCommand(packId));\n packCommand.command('update [packId]').description('pack 갱신').action((packId) => packUpdateCommand(packId));\n packCommand.command('uninstall <packId>').description('pack 제거').action((packId) => packUninstallCommand(packId));\n};\n","import * as p from '@clack/prompts';\nimport { rmSync } from 'node:fs';\nimport type { InstalledSkill, Skill, ToolId } from '@/core/schemas/index.js';\nimport { loadAllSkills } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { buildSkillInstallPlan } from './renderer.js';\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath, writeSkillRegistry } from './registry-io.js';\nimport { resolveSkillsDir, resolveUserBasePath } from '../../shared/command-paths.js';\nimport {\n findInstalledSkill,\n mergeSkillTools,\n removeInstalledSkill,\n resolveRequestedTools,\n upsertInstalledSkill,\n} from './state.js';\nimport { installSkillPackages, removeDirectories } from './install-files.js';\n\ntype SkillCommandOptions = {\n tool?: string[];\n};\n\nconst loadCompilerInputs = (): {\n allSkills: ReturnType<typeof loadAllSkills>;\n cliVersion: string;\n} => {\n return {\n allSkills: loadAllSkills(resolveSkillsDir()),\n cliVersion: getCliVersion(),\n };\n};\n\nconst resolveSkillById = (skills: readonly Skill[], skillId: string): Skill => {\n const canonicalSkillId = resolveCanonicalSkillId(skillId);\n const skill = skills.find((candidate) => candidate.id === canonicalSkillId);\n if (!skill) {\n throw new Error(`Unknown skill: ${skillId}`);\n }\n return skill;\n};\n\nconst writeUserSkillState = (params: {\n basePath: string;\n cliVersion: string;\n nextSkill?: InstalledSkill;\n removeSkillId?: string;\n}): void => {\n const registryPath = resolveSkillRegistryPath(params.basePath);\n const previous = readSkillRegistry(registryPath);\n const skills = params.removeSkillId\n ? removeInstalledSkill(previous?.skills ?? [], params.removeSkillId)\n : params.nextSkill\n ? upsertInstalledSkill(previous?.skills ?? [], params.nextSkill)\n : (previous?.skills ?? []);\n\n if (skills.length === 0) {\n rmSync(registryPath, { force: true });\n return;\n }\n\n writeSkillRegistry(registryPath, {\n skills,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nconst readInstalledSkills = (basePath: string): InstalledSkill[] => {\n return (readSkillRegistry(resolveSkillRegistryPath(basePath))?.skills ?? []).map((installedSkill) => ({\n ...installedSkill,\n id: resolveCanonicalSkillId(installedSkill.id),\n }));\n};\n\nconst installSkill = (params: {\n skill: Skill;\n requestedTools: readonly ToolId[];\n basePath: string;\n cliVersion: string;\n}): InstalledSkill => {\n const installedSkills = readInstalledSkills(params.basePath);\n const existingInstalledSkill = findInstalledSkill(installedSkills, params.skill.id);\n const nextRequestedTools = mergeSkillTools({\n existing: existingInstalledSkill?.tools,\n requested: params.requestedTools,\n });\n const { packages, installedSkill } = buildSkillInstallPlan({\n skill: params.skill,\n requestedTools: nextRequestedTools,\n });\n installSkillPackages(params.basePath, packages);\n\n writeUserSkillState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSkill: installedSkill,\n });\n\n return installedSkill;\n};\n\nexport const skillListCommand = async (): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n\n p.intro('ai-ops skill list');\n const sections = [\n { kind: 'reference' as const, title: 'reference skills' },\n { kind: 'task' as const, title: 'task skills' },\n ]\n .map(({ kind, title }) => {\n const lines = allSkills\n .filter((skill) => skill.kind === kind)\n .map((skill) => {\n const installed = findInstalledSkill(installedSkills, skill.id);\n const suffix = installed ? `installed for ${installed.tools.join(', ')}` : 'not installed';\n return `- ${skill.id} - ${suffix}`;\n });\n\n if (lines.length === 0) {\n return null;\n }\n\n return `${title}\\n${lines.join('\\n')}`;\n })\n .filter((section): section is string => section !== null);\n\n p.log.info(sections.join('\\n\\n'));\n p.outro('ai-ops skill list 완료');\n};\n\nexport const skillInstallCommand = async (skillId: string, opts: SkillCommandOptions): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills, cliVersion } = loadCompilerInputs();\n const skill = resolveSkillById(allSkills, skillId);\n const requestedTools = resolveRequestedTools({ requested: opts.tool, supported: skill.supported_tools });\n\n p.intro(`ai-ops skill install ${skillId}`);\n const installedSkill = installSkill({\n skill,\n requestedTools,\n basePath,\n cliVersion,\n });\n\n p.log.success(`설치 완료: ${installedSkill.id} (${installedSkill.installed_paths.join(', ')})`);\n p.outro('ai-ops skill install 완료');\n};\n\nexport const skillDiffCommand = async (skillId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const targets = skillId ? installedSkills.filter((skill) => skill.id === skillId) : installedSkills;\n\n p.intro('ai-ops skill diff');\n\n if (targets.length === 0) {\n p.log.warn('비교할 설치된 skill이 없습니다.');\n p.outro('ai-ops skill diff 완료');\n return;\n }\n\n const lines = targets.map((installedSkill) => {\n const skill = resolveSkillById(allSkills, installedSkill.id);\n const { installedSkill: next } = buildSkillInstallPlan({\n skill,\n requestedTools: installedSkill.tools,\n });\n const changed = next.sourceHash !== installedSkill.sourceHash;\n return `- ${installedSkill.id}: ${changed ? 'changed' : 'up-to-date'} (${installedSkill.sourceHash} -> ${next.sourceHash})`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops skill diff 완료');\n};\n\nexport const skillUpdateCommand = async (skillId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSkills, cliVersion } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const targets = skillId ? installedSkills.filter((skill) => skill.id === skillId) : installedSkills;\n\n p.intro('ai-ops skill update');\n\n if (targets.length === 0) {\n p.log.warn('갱신할 설치된 skill이 없습니다.');\n p.outro('ai-ops skill update 완료');\n return;\n }\n\n const nextInstalledSkills = targets.map((installedSkill) => {\n const skill = resolveSkillById(allSkills, installedSkill.id);\n const { packages, installedSkill: next } = buildSkillInstallPlan({\n skill,\n requestedTools: installedSkill.tools,\n });\n installSkillPackages(basePath, packages);\n return next;\n });\n\n const registryPath = resolveSkillRegistryPath(basePath);\n const previous = readSkillRegistry(registryPath);\n const nextSkillIds = new Set(nextInstalledSkills.map((skill) => skill.id));\n const untouched = (previous?.skills ?? []).filter(\n (installedSkill) => !nextSkillIds.has(resolveCanonicalSkillId(installedSkill.id)),\n );\n writeSkillRegistry(registryPath, {\n skills: [...untouched, ...nextInstalledSkills],\n cliVersion,\n generatedAt: new Date().toISOString(),\n });\n\n p.log.success(`갱신 완료: ${nextInstalledSkills.map((skill) => skill.id).join(', ')}`);\n p.outro('ai-ops skill update 완료');\n};\n\nexport const skillUninstallCommand = async (skillId: string): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { cliVersion } = loadCompilerInputs();\n const installedSkills = readInstalledSkills(basePath);\n const installedSkill = findInstalledSkill(installedSkills, skillId);\n\n p.intro(`ai-ops skill uninstall ${skillId}`);\n\n if (!installedSkill) {\n p.log.warn('설치된 skill을 찾지 못했습니다.');\n p.outro('ai-ops skill uninstall 완료');\n return;\n }\n\n const removed = removeDirectories(basePath, installedSkill.installed_paths);\n\n writeUserSkillState({\n basePath,\n cliVersion,\n removeSkillId: skillId,\n });\n\n p.log.success(`제거 완료: ${removed.join(', ')}`);\n p.outro('ai-ops skill uninstall 완료');\n};\n","import type { Command } from 'commander';\nimport {\n skillDiffCommand,\n skillInstallCommand,\n skillListCommand,\n skillUninstallCommand,\n skillUpdateCommand,\n} from './commands.js';\n\nexport const registerSkillCommands = (program: Command): void => {\n const skillCommand = program.command('skill').description('에이전트 skill 설치/조회/갱신');\n const applyInstallOptions = (command: Command): Command => command.option('--tool <tool...>', '대상 도구 지정');\n\n skillCommand.command('list').description('사용 가능한 skill 목록').action(() => skillListCommand());\n applyInstallOptions(skillCommand.command('install <skillId>').description('skill 설치')).action((skillId, opts) =>\n skillInstallCommand(skillId, opts),\n );\n skillCommand.command('diff [skillId]').description('skill 변경 비교').action((skillId) => skillDiffCommand(skillId));\n skillCommand.command('update [skillId]').description('skill 갱신').action((skillId) => skillUpdateCommand(skillId));\n skillCommand.command('uninstall <skillId>').description('skill 제거').action((skillId) => skillUninstallCommand(skillId));\n};\n","import { join } from 'node:path';\nimport { resolveBasePath } from '../../shared/command-paths.js';\nimport { buildStudioSnapshot } from './snapshot.js';\n\ntype StudioSnapshotCommandOptions = {\n json?: boolean;\n};\n\nconst resolveOptionalUserBasePath = (): string | null => process.env.AI_OPS_HOME ?? process.env.HOME ?? null;\n\nconst resolveOptionalCodexHomePath = (): string | null => {\n if (process.env.CODEX_HOME && process.env.CODEX_HOME.length > 0) {\n return process.env.CODEX_HOME;\n }\n if (process.env.HOME && process.env.HOME.length > 0) {\n return join(process.env.HOME, '.codex');\n }\n return null;\n};\n\nconst reportStudioSnapshotError = (error: unknown): void => {\n const message = error instanceof Error ? error.message : 'unknown error';\n process.stderr.write(`[studio-snapshot] ${message}\\n`);\n process.exitCode = 1;\n};\n\nexport const studioSnapshotCommand = async (opts: StudioSnapshotCommandOptions): Promise<void> => {\n if (opts.json !== true) {\n process.stderr.write('[studio-snapshot] --json is required\\n');\n process.exitCode = 1;\n return;\n }\n\n try {\n const snapshot = buildStudioSnapshot({\n basePath: resolveBasePath(),\n userBasePath: resolveOptionalUserBasePath(),\n codexHomePath: resolveOptionalCodexHomePath(),\n });\n process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\\n`);\n } catch (error) {\n reportStudioSnapshotError(error);\n }\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { ProjectLayerContextIndexSchema, ProjectLayerDocumentStatusSchema } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerContextDocument, ProjectLayerManifest, StudioProjectDocument, StudioProjectDocumentProvenance, StudioProjectSnapshot, StudioSourceState } from \"@/core/schemas/index.js\";\nimport { PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH, PROJECT_LAYER_MANIFEST_RELATIVE_PATH, auditProjectLayer, parseProjectLayerDocument, readProjectLayerManifest, resolveProjectLayerContextIndexPath, resolveProjectLayerFilePath, resolveProjectLayerManifestPath } from \"../project-layer/index.js\";\nimport { buildKnownAuditPaths, normalizeStudioProjectIssue } from \"./issue-normalization.js\";\nimport { DOCS_STATUS_RELATIVE_PATH, buildSourceState, createMissingSourceState, getErrorMessage, getTrustWarning, hasErrors, hasWarnings } from \"./snapshot-shared.js\";\nimport type { ProjectContextIndexReadResult, ProjectManifestReadResult } from \"./snapshot-shared.js\";\n\nconst RecoverableContextDocumentSchema = z\n .object({\n status: ProjectLayerDocumentStatusSchema,\n layer: z.string().min(1),\n owner: z.string().min(1),\n read_when: z.array(z.string().min(1)),\n update_when: z.array(z.string().min(1)),\n path: z.string().min(1),\n contentHash: z.string().min(1),\n });\n\nconst RecoverableContextIndexSchema = z\n .object({\n schemaVersion: z.literal(1),\n kind: z.literal('context-layer-index'),\n documents: z.array(z.unknown()),\n generatedAt: z.string().min(1),\n });\n\n// ----- project snapshot -----\n\nconst readProjectManifestSnapshot = (basePath: string): ProjectManifestReadResult => {\n const manifestPath = resolveProjectLayerManifestPath(basePath);\n if (!existsSync(manifestPath)) {\n return {\n source: createMissingSourceState(PROJECT_LAYER_MANIFEST_RELATIVE_PATH),\n manifest: null,\n };\n }\n\n try {\n const manifest = readProjectLayerManifest(basePath);\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n exists: true,\n parsed: manifest !== null,\n generatedAt: manifest?.generatedAt ?? null,\n }),\n manifest,\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n manifest: null,\n };\n }\n};\n\nconst readProjectContextIndexSnapshot = (basePath: string): ProjectContextIndexReadResult => {\n const contextIndexPath = resolveProjectLayerContextIndexPath(basePath);\n if (!existsSync(contextIndexPath)) {\n return {\n source: createMissingSourceState(PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH),\n contextIndex: null,\n };\n }\n\n try {\n const parsedJson: unknown = JSON.parse(readFileSync(contextIndexPath, 'utf-8'));\n const strictContextIndex = ProjectLayerContextIndexSchema.safeParse(parsedJson);\n if (strictContextIndex.success) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: true,\n generatedAt: strictContextIndex.data.generatedAt,\n }),\n contextIndex: strictContextIndex.data,\n };\n }\n\n const recoverableContextIndex = RecoverableContextIndexSchema.safeParse(parsedJson);\n if (!recoverableContextIndex.success) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: strictContextIndex.error.message,\n }),\n contextIndex: null,\n };\n }\n\n const documents = recoverableContextIndex.data.documents.flatMap((document): ProjectLayerContextDocument[] => {\n const parsedDocument = RecoverableContextDocumentSchema.safeParse(document);\n return parsedDocument.success ? [parsedDocument.data] : [];\n });\n\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n generatedAt: recoverableContextIndex.data.generatedAt,\n error: strictContextIndex.error.message,\n }),\n contextIndex: {\n schemaVersion: 1,\n kind: 'context-layer-index',\n documents,\n generatedAt: recoverableContextIndex.data.generatedAt,\n },\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n contextIndex: null,\n };\n }\n};\n\nconst readDocsStatusSourceState = (basePath: string): StudioSourceState => {\n const docsStatusPath = resolveProjectLayerFilePath(basePath, DOCS_STATUS_RELATIVE_PATH);\n if (!existsSync(docsStatusPath)) {\n return createMissingSourceState(DOCS_STATUS_RELATIVE_PATH);\n }\n\n try {\n parseProjectLayerDocument(DOCS_STATUS_RELATIVE_PATH, readFileSync(docsStatusPath, 'utf-8'));\n return buildSourceState({\n path: DOCS_STATUS_RELATIVE_PATH,\n exists: true,\n parsed: true,\n });\n } catch (error) {\n return buildSourceState({\n path: DOCS_STATUS_RELATIVE_PATH,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n });\n }\n};\n\nconst buildDocumentProvenance = (\n manifest: ProjectLayerManifest | null,\n path: string,\n): StudioProjectDocumentProvenance => {\n if (manifest?.managed_files.some((file) => file.path === path) === true) {\n return 'ai-ops-managed';\n }\n if (manifest?.project_files.some((file) => file.path === path) === true) {\n return 'project-owned';\n }\n if (manifest?.packs.some((pack) => pack.documents.some((document) => document.path === path)) === true) {\n return 'pack-document';\n }\n return 'context-only';\n};\n\nconst buildDocumentReadError = (code: string, message: string): string => `${code}: ${message}`;\n\nconst buildProjectDocumentSnapshot = (params: {\n basePath: string;\n indexed: ProjectLayerContextDocument;\n provenance: StudioProjectDocumentProvenance;\n}): StudioProjectDocument => {\n let absolutePath: string;\n try {\n absolutePath = resolveProjectLayerFilePath(params.basePath, params.indexed.path);\n } catch (error) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('unsafe-path', getErrorMessage(error)),\n };\n }\n\n if (!existsSync(absolutePath)) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('missing-file', `파일 없음: ${params.indexed.path}`),\n };\n }\n\n try {\n const document = parseProjectLayerDocument(params.indexed.path, readFileSync(absolutePath, 'utf-8'));\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: document.contentHash,\n contentHashMatches: document.contentHash === params.indexed.contentHash,\n provenance: params.provenance,\n content: document.content,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: null,\n };\n } catch (error) {\n return {\n path: params.indexed.path,\n status: params.indexed.status,\n layer: params.indexed.layer,\n owner: params.indexed.owner,\n read_when: params.indexed.read_when,\n update_when: params.indexed.update_when,\n indexedContentHash: params.indexed.contentHash,\n currentContentHash: null,\n contentHashMatches: null,\n provenance: params.provenance,\n content: null,\n trustWarning: getTrustWarning(params.indexed.status),\n readError: buildDocumentReadError('invalid-frontmatter', getErrorMessage(error)),\n };\n }\n};\n\nconst resolveProjectState = (params: {\n manifest: ProjectManifestReadResult;\n contextIndex: ProjectContextIndexReadResult;\n docsStatus: StudioSourceState;\n documents: readonly StudioProjectDocument[];\n hasAuditErrors: boolean;\n}): StudioProjectSnapshot['state'] => {\n const isUninitialized = !params.manifest.source.exists && !params.contextIndex.source.exists;\n if (isUninitialized) {\n return 'uninitialized';\n }\n\n const hasParseError =\n (params.manifest.source.exists && !params.manifest.source.parsed) ||\n (params.contextIndex.source.exists && !params.contextIndex.source.parsed) ||\n (params.docsStatus.exists && !params.docsStatus.parsed);\n const hasDocumentReadError = params.documents.some((document) => document.readError !== null);\n if (hasParseError || params.hasAuditErrors || hasDocumentReadError) {\n return 'degraded';\n }\n\n return 'ready';\n};\n\nexport const buildProjectSnapshot = (basePath: string): StudioProjectSnapshot => {\n const root = resolve(basePath);\n const manifest = readProjectManifestSnapshot(root);\n const contextIndex = readProjectContextIndexSnapshot(root);\n const docsStatus = readDocsStatusSourceState(root);\n const auditReport = auditProjectLayer(root);\n const documents =\n contextIndex.contextIndex?.documents.map((indexed) =>\n buildProjectDocumentSnapshot({\n basePath: root,\n indexed,\n provenance: buildDocumentProvenance(manifest.manifest, indexed.path),\n }),\n ) ?? [];\n const auditHasErrors = hasErrors(auditReport.issues);\n const knownAuditPaths = buildKnownAuditPaths({\n manifest: manifest.manifest,\n contextIndex: contextIndex.contextIndex,\n documents,\n });\n const auditIssues = auditReport.issues.map((issue) => normalizeStudioProjectIssue(issue, knownAuditPaths));\n\n return {\n root,\n state: resolveProjectState({\n manifest,\n contextIndex,\n docsStatus,\n documents,\n hasAuditErrors: auditHasErrors,\n }),\n files: {\n manifest: manifest.source,\n contextIndex: contextIndex.source,\n docsStatus,\n },\n audit: {\n currentSourceHash: auditReport.currentSourceHash,\n hasErrors: auditHasErrors,\n hasWarnings: hasWarnings(auditIssues),\n issues: auditIssues,\n },\n documents,\n };\n};\n","import { join } from \"node:path\";\nimport type { ProjectLayerContextDocument, ProjectLayerManifest, StudioSourceState } from \"@/core/schemas/index.js\";\n\n// ----- types -----\n\nexport type BuildStudioSnapshotParams = {\n basePath: string;\n userBasePath?: string | null;\n codexHomePath?: string | null;\n generatedAt?: string;\n cliVersion?: string;\n};\n\nexport type ProjectManifestReadResult = {\n source: StudioSourceState;\n manifest: ProjectLayerManifest | null;\n};\n\nexport type ProjectContextIndexReadResult = {\n source: StudioSourceState;\n contextIndex: ProjectLayerContextIndex | null;\n};\n\nexport type RuntimeReadResult<T> = {\n source: StudioSourceState;\n value: T | null;\n};\n\nexport const DOCS_STATUS_RELATIVE_PATH = \"docs/docs-status.md\";\n\n// ----- shared helpers -----\n\nexport const getErrorMessage = (error: unknown): string => (error instanceof Error ? error.message : 'unknown error');\n\nexport const resolveDefaultUserBasePath = (): string | null => process.env.AI_OPS_HOME ?? process.env.HOME ?? null;\n\nexport const resolveDefaultCodexHomePath = (): string | null => {\n if (process.env.CODEX_HOME && process.env.CODEX_HOME.length > 0) {\n return process.env.CODEX_HOME;\n }\n if (process.env.HOME && process.env.HOME.length > 0) {\n return join(process.env.HOME, '.codex');\n }\n return null;\n};\n\nexport const buildSourceState = (params: {\n path: string;\n exists: boolean;\n parsed: boolean;\n generatedAt?: string | null;\n error?: string | null;\n}): StudioSourceState => ({\n path: params.path,\n exists: params.exists,\n parsed: params.parsed,\n generatedAt: params.generatedAt ?? null,\n error: params.error ?? null,\n});\n\nexport const createMissingSourceState = (path: string): StudioSourceState =>\n buildSourceState({ path, exists: false, parsed: false });\n\nexport const createUnavailableSourceState = (params: { path: string; reason: string }): StudioSourceState =>\n buildSourceState({\n path: params.path,\n exists: false,\n parsed: false,\n error: params.reason,\n });\n\nexport const hasErrors = (issues: readonly { level: string }[]): boolean => issues.some((issue) => issue.level === 'error');\n\nexport const hasWarnings = (issues: readonly { level: string }[]): boolean => issues.some((issue) => issue.level === 'warning');\n\nexport const getTrustWarning = (status: ProjectLayerContextDocument['status']): string | null => {\n if (status === 'Reserved') {\n return 'Reserved document is not current decision-making evidence.';\n }\n if (status === 'Draft') {\n return 'Draft document requires review before use as decision-making evidence.';\n }\n if (status === 'Archived') {\n return 'Archived document is historical record and should not guide current operation.';\n }\n return null;\n};\n\nexport const uniqueStrings = (values: readonly string[]): string[] => [...new Set(values.filter((value) => value.length > 0))];\n","import {\n PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n resolveProjectLayerFilePath,\n} from \"../project-layer/index.js\";\nimport type { ProjectLayerContextIndex, ProjectLayerManifest, StudioProjectDocument, StudioProjectIssue, StudioProjectIssueSource } from \"@/core/schemas/index.js\";\nimport type { ProjectLayerIssue } from \"../project-layer/index.js\";\nimport { DOCS_STATUS_RELATIVE_PATH, uniqueStrings } from \"./snapshot-shared.js\";\n\nconst AUDIT_ISSUE_SOURCES_BY_CODE = {\n 'missing-manifest': 'manifest',\n 'invalid-manifest': 'manifest',\n 'manifest-missing-managed-file': 'manifest',\n 'missing-context-index': 'context-layer',\n 'invalid-context-index': 'context-layer',\n 'context-missing-document': 'context-layer',\n 'context-document-mismatch': 'context-layer',\n 'context-extra-document': 'context-layer',\n 'missing-docs-status': 'docs-status',\n 'invalid-docs-status': 'docs-status',\n 'docs-status-missing-document': 'docs-status',\n 'docs-status-mismatch': 'docs-status',\n 'docs-status-extra-document': 'docs-status',\n 'missing-file': 'file-system',\n 'invalid-frontmatter': 'frontmatter',\n 'missing-managed-section': 'managed-section',\n 'source-hash-drift': 'source-hash',\n 'managed-source-hash-drift': 'source-hash',\n 'invalid-custom-project-rule': 'frontmatter',\n 'custom-project-rules-drift': 'manifest',\n} as const satisfies Record<string, StudioProjectIssueSource>;\n\nconst AUDIT_ISSUE_ACTION_LABELS_BY_SOURCE = {\n manifest: 'Review manifest record',\n 'context-layer': 'Review context index',\n 'docs-status': 'Review docs status',\n frontmatter: 'Review frontmatter',\n 'managed-section': 'Review managed section',\n 'file-system': 'Review missing file',\n 'source-hash': 'Review source hash',\n unknown: null,\n} as const satisfies Record<StudioProjectIssueSource, string | null>;\n\nconst getManifestDocumentPaths = (manifest: ProjectLayerManifest | null): string[] =>\n manifest === null\n ? []\n : [\n ...manifest.managed_files.map((file) => file.path),\n ...manifest.project_files.map((file) => file.path),\n ...manifest.packs.flatMap((pack) => pack.documents.map((file) => file.path)),\n ...manifest.packs.flatMap((pack) => pack.files.map((file) => file.path)),\n ];\n\nexport const buildKnownAuditPaths = (params: {\n manifest: ProjectLayerManifest | null;\n contextIndex: ProjectLayerContextIndex | null;\n documents: readonly StudioProjectDocument[];\n}): string[] =>\n uniqueStrings([\n PROJECT_LAYER_MANIFEST_RELATIVE_PATH,\n PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH,\n DOCS_STATUS_RELATIVE_PATH,\n ...getManifestDocumentPaths(params.manifest),\n ...(params.contextIndex?.documents.map((document) => document.path) ?? []),\n ...params.documents.map((document) => document.path),\n ]).sort((left, right) => right.length - left.length || left.localeCompare(right));\n\nconst findKnownPathInMessage = (message: string, knownPaths: readonly string[]): string | null =>\n knownPaths.find((path) => message.includes(path)) ?? null;\n\nconst parsePathLikeToken = (value: string): string | null => {\n const trimmed = value.trim().replace(/[.,;)]$/, '');\n if (trimmed.length === 0) {\n return null;\n }\n\n try {\n resolveProjectLayerFilePath('/', trimmed);\n return trimmed;\n } catch {\n return null;\n }\n};\n\nconst extractTrailingIssuePath = (message: string): string | null => {\n const trailingSegment = message.split(':').at(-1);\n if (trailingSegment === undefined) {\n return null;\n }\n\n const [firstToken] = trailingSegment.trim().split(/\\s+/);\n return firstToken === undefined ? null : parsePathLikeToken(firstToken);\n};\n\nconst extractLeadingIssuePath = (message: string): string | null => {\n const [firstToken] = message.trim().split(/\\s+/);\n return firstToken === undefined ? null : parsePathLikeToken(firstToken);\n};\n\nconst resolveIssueSource = (issue: ProjectLayerIssue): StudioProjectIssueSource =>\n AUDIT_ISSUE_SOURCES_BY_CODE[issue.code] ?? 'unknown';\n\nconst resolveIssueAffectedPath = (params: {\n issue: ProjectLayerIssue;\n source: StudioProjectIssueSource;\n knownPaths: readonly string[];\n}): string | null => {\n if (params.issue.code === 'missing-manifest' || params.issue.code === 'invalid-manifest') {\n return PROJECT_LAYER_MANIFEST_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'missing-context-index' || params.issue.code === 'invalid-context-index') {\n return PROJECT_LAYER_CONTEXT_INDEX_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'missing-docs-status' || params.issue.code === 'invalid-docs-status') {\n return DOCS_STATUS_RELATIVE_PATH;\n }\n\n if (params.issue.code === 'source-hash-drift') {\n return null;\n }\n\n if (params.issue.code === 'invalid-custom-project-rule') {\n return extractLeadingIssuePath(params.issue.message);\n }\n\n const knownPath = findKnownPathInMessage(params.issue.message, params.knownPaths);\n if (knownPath !== null) {\n return knownPath;\n }\n\n if (params.source === 'unknown') {\n return null;\n }\n\n return extractTrailingIssuePath(params.issue.message);\n};\n\nexport const normalizeStudioProjectIssue = (\n issue: ProjectLayerIssue,\n knownPaths: readonly string[] = [],\n): StudioProjectIssue => {\n const source = resolveIssueSource(issue);\n\n return {\n level: issue.level,\n code: issue.code,\n message: issue.message,\n source,\n affectedPath: resolveIssueAffectedPath({ issue, source, knownPaths }),\n suggestedActionLabel: AUDIT_ISSUE_ACTION_LABELS_BY_SOURCE[source],\n };\n};\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { COMPILER_DATA_DIR } from \"@/shared/paths.js\";\nimport { loadAllIntegrations, loadAllSkills, loadAllSubagents } from \"@/shared/catalog-loader.js\";\nimport { CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK, inspectCodexHook, resolveCodexHooksPath } from \"../codex-hooks/core.js\";\nimport type { CodexHookDefinition } from \"../codex-hooks/core.js\";\nimport { findInstalledIntegration, readIntegrationManifest, resolveIntegrationManifestPath } from \"../integrations/manifest-io.js\";\nimport { readSkillRegistry, resolveCanonicalSkillId, resolveSkillRegistryPath } from \"../skills/registry-io.js\";\nimport { readSubagentManifest, resolveSubagentManifestPath } from \"../subagents/manifest-io.js\";\nimport type { IntegrationCatalogComponent, IntegrationComponent, InstalledIntegration, InstalledSkill, InstalledSubagent, Skill, StudioHookSnapshot, StudioInstalledPathState, StudioIntegrationComponentStatus, StudioIntegrationSnapshot, StudioRuntimeSnapshot, StudioSourceState, Subagent } from \"@/core/schemas/index.js\";\nimport { buildSourceState, createMissingSourceState, createUnavailableSourceState, getErrorMessage } from \"./snapshot-shared.js\";\nimport type { RuntimeReadResult } from \"./snapshot-shared.js\";\n\n// ----- constants -----\n\nconst INTEGRATIONS_DATA_DIR = join(COMPILER_DATA_DIR, 'integrations');\nconst SKILLS_DATA_DIR = join(COMPILER_DATA_DIR, 'skills');\nconst SUBAGENTS_DATA_DIR = join(COMPILER_DATA_DIR, 'subagents');\n\nconst INTEGRATIONS_MANIFEST_FALLBACK_PATH = '.ai-ops/integrations-manifest.json';\nconst SKILLS_MANIFEST_FALLBACK_PATH = '.ai-ops/skills-manifest.json';\nconst SUBAGENTS_MANIFEST_FALLBACK_PATH = '.ai-ops/subagents-manifest.json';\nconst HOOKS_FALLBACK_PATH = '.codex/hooks.json';\n\nconst KNOWN_CODEX_HOOK_DEFINITIONS = [CONTEXT_PROMOTION_CODEX_HOOK, PC_CODEX_HOOK] as const;\n\n// ----- runtime snapshot -----\n\nconst readRuntimeManifest = <T>(params: {\n manifestPath: string | null;\n fallbackPath: string;\n unavailableReason: string | null;\n read: (manifestPath: string) => T | null;\n getGeneratedAt: (value: T) => string | null;\n}): RuntimeReadResult<T> => {\n if (params.manifestPath === null) {\n return {\n source: createUnavailableSourceState({\n path: params.fallbackPath,\n reason: params.unavailableReason ?? 'Runtime home is unavailable.',\n }),\n value: null,\n };\n }\n\n if (!existsSync(params.manifestPath)) {\n return {\n source: createMissingSourceState(params.manifestPath),\n value: null,\n };\n }\n\n try {\n const value = params.read(params.manifestPath);\n return {\n source: buildSourceState({\n path: params.manifestPath,\n exists: true,\n parsed: value !== null,\n generatedAt: value === null ? null : params.getGeneratedAt(value),\n }),\n value,\n };\n } catch (error) {\n return {\n source: buildSourceState({\n path: params.manifestPath,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n }),\n value: null,\n };\n }\n};\n\nconst isJsonRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readHooksSourceState = (codexHomePath: string | null, unavailableReason: string | null): StudioSourceState => {\n if (codexHomePath === null) {\n return createUnavailableSourceState({\n path: HOOKS_FALLBACK_PATH,\n reason: unavailableReason ?? 'CODEX_HOME or HOME is required for Codex hooks.',\n });\n }\n\n const hooksPath = resolveCodexHooksPath(codexHomePath);\n if (!existsSync(hooksPath)) {\n return createMissingSourceState(hooksPath);\n }\n\n try {\n const parsed: unknown = JSON.parse(readFileSync(hooksPath, 'utf-8'));\n if (!isJsonRecord(parsed)) {\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: false,\n error: 'hooks.json must contain a JSON object',\n });\n }\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: true,\n });\n } catch (error) {\n return buildSourceState({\n path: hooksPath,\n exists: true,\n parsed: false,\n error: getErrorMessage(error),\n });\n }\n};\n\nconst getCatalogComponentId = (component: IntegrationCatalogComponent): string => component.id;\n\nconst getInstalledComponentId = (component: IntegrationComponent): string => component.id;\n\nconst findInstalledComponent = (\n integration: InstalledIntegration | undefined,\n catalogComponent: IntegrationCatalogComponent,\n): IntegrationComponent | null =>\n integration?.components.find(\n (component) =>\n component.type === catalogComponent.type && getInstalledComponentId(component) === getCatalogComponentId(catalogComponent),\n ) ?? null;\n\nconst buildIntegrationComponentStatus = (params: {\n catalogComponent: IntegrationCatalogComponent;\n installedComponent: IntegrationComponent | null;\n}): StudioIntegrationComponentStatus => ({\n type: params.catalogComponent.type,\n id: getCatalogComponentId(params.catalogComponent),\n installed: params.installedComponent !== null,\n owned: params.installedComponent?.owned ?? null,\n catalog: params.catalogComponent,\n installedComponent: params.installedComponent,\n});\n\nconst buildIntegrationSnapshots = (installedIntegrations: readonly InstalledIntegration[]): StudioIntegrationSnapshot[] => {\n const catalog = loadAllIntegrations(INTEGRATIONS_DATA_DIR);\n return catalog.map((entry) => {\n const installedIntegration = findInstalledIntegration(installedIntegrations, entry.id);\n return {\n id: entry.id,\n description: entry.description,\n installed: installedIntegration !== undefined,\n installedAt: installedIntegration?.installedAt ?? null,\n updatedAt: installedIntegration?.updatedAt ?? null,\n components: entry.components.map((catalogComponent) =>\n buildIntegrationComponentStatus({\n catalogComponent,\n installedComponent: findInstalledComponent(installedIntegration, catalogComponent),\n }),\n ),\n };\n });\n};\n\nconst buildInstalledPathStates = (params: {\n userBasePath: string | null;\n installedPaths: readonly string[];\n}): StudioInstalledPathState[] => {\n if (params.userBasePath === null) {\n return params.installedPaths.map((path) => ({ path, exists: false }));\n }\n\n return params.installedPaths.map((path) => ({\n path,\n exists: existsSync(join(params.userBasePath ?? '', path)),\n }));\n};\n\nconst buildInstalledSkillMap = (installedSkills: readonly InstalledSkill[]): Map<string, InstalledSkill> =>\n new Map(\n installedSkills.map((skill) => [\n resolveCanonicalSkillId(skill.id),\n {\n ...skill,\n id: resolveCanonicalSkillId(skill.id),\n },\n ]),\n );\n\nconst buildSkillSnapshots = (params: {\n userBasePath: string | null;\n installedSkills: readonly InstalledSkill[];\n}): StudioRuntimeSnapshot['skills'] => {\n const installed = buildInstalledSkillMap(params.installedSkills);\n return loadAllSkills(SKILLS_DATA_DIR).map((skill: Skill) => {\n const installedSkill = installed.get(skill.id);\n return {\n id: skill.id,\n kind: skill.kind,\n description: skill.description,\n supported_tools: skill.supported_tools,\n groups: skill.groups,\n installed: installedSkill !== undefined,\n installedTools: installedSkill?.tools ?? [],\n installedPaths: buildInstalledPathStates({\n userBasePath: params.userBasePath,\n installedPaths: installedSkill?.installed_paths ?? [],\n }),\n sourceHash: installedSkill?.sourceHash ?? null,\n };\n });\n};\n\nconst buildInstalledSubagentMap = (installedSubagents: readonly InstalledSubagent[]): Map<string, InstalledSubagent> =>\n new Map(installedSubagents.map((subagent) => [subagent.id, subagent]));\n\nconst buildSubagentSnapshots = (params: {\n userBasePath: string | null;\n installedSubagents: readonly InstalledSubagent[];\n}): StudioRuntimeSnapshot['subagents'] => {\n const installed = buildInstalledSubagentMap(params.installedSubagents);\n return loadAllSubagents(SUBAGENTS_DATA_DIR).map((subagent: Subagent) => {\n const installedSubagent = installed.get(subagent.id);\n return {\n id: subagent.id,\n description: subagent.frontmatter.codex.parsed.description,\n supported_tools: subagent.supported_tools,\n installed: installedSubagent !== undefined,\n installedTools: installedSubagent?.tools ?? [],\n installedPaths: buildInstalledPathStates({\n userBasePath: params.userBasePath,\n installedPaths: installedSubagent?.installed_paths ?? [],\n }),\n sourceHash: installedSubagent?.sourceHash ?? null,\n };\n });\n};\n\nconst buildHookSnapshot = (params: {\n codexHomePath: string | null;\n definition: CodexHookDefinition;\n unavailableReason: string | null;\n}): StudioHookSnapshot => {\n if (params.codexHomePath === null) {\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath: null,\n installed: false,\n error: params.unavailableReason ?? 'CODEX_HOME or HOME is required for Codex hooks.',\n };\n }\n\n const hooksPath = resolveCodexHooksPath(params.codexHomePath);\n try {\n const status = inspectCodexHook({\n hooksPath,\n definition: params.definition,\n });\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath: status.hooksPath,\n installed: status.installed,\n error: null,\n };\n } catch (error) {\n return {\n id: params.definition.id,\n statusMessage: params.definition.statusMessage,\n hooksPath,\n installed: false,\n error: getErrorMessage(error),\n };\n }\n};\n\nexport const buildRuntimeSnapshot = (params: {\n userBasePath: string | null;\n codexHomePath: string | null;\n}): StudioRuntimeSnapshot => {\n const userUnavailableReason =\n params.userBasePath === null ? 'AI_OPS_HOME or HOME is required for user/global runtime manifests.' : null;\n const codexUnavailableReason =\n params.codexHomePath === null ? 'CODEX_HOME or HOME is required for Codex hooks.' : null;\n const integrationManifest = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveIntegrationManifestPath(params.userBasePath),\n fallbackPath: INTEGRATIONS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readIntegrationManifest,\n getGeneratedAt: (manifest) => manifest.generatedAt,\n });\n const skillRegistry = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveSkillRegistryPath(params.userBasePath),\n fallbackPath: SKILLS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readSkillRegistry,\n getGeneratedAt: (registry) => registry.generatedAt,\n });\n const subagentManifest = readRuntimeManifest({\n manifestPath: params.userBasePath === null ? null : resolveSubagentManifestPath(params.userBasePath),\n fallbackPath: SUBAGENTS_MANIFEST_FALLBACK_PATH,\n unavailableReason: userUnavailableReason,\n read: readSubagentManifest,\n getGeneratedAt: (manifest) => manifest.generatedAt,\n });\n const hooks = readHooksSourceState(params.codexHomePath, codexUnavailableReason);\n const installedIntegrations = integrationManifest.value?.integrations ?? [];\n const installedSkills = skillRegistry.value?.skills ?? [];\n const installedSubagents = subagentManifest.value?.subagents ?? [];\n\n return {\n available: params.userBasePath !== null,\n unavailableReason: userUnavailableReason,\n userBasePath: params.userBasePath,\n codexHomePath: params.codexHomePath,\n manifests: {\n integrations: integrationManifest.source,\n skills: skillRegistry.source,\n subagents: subagentManifest.source,\n hooks,\n },\n integrations: buildIntegrationSnapshots(installedIntegrations),\n skills: buildSkillSnapshots({\n userBasePath: params.userBasePath,\n installedSkills,\n }),\n subagents: buildSubagentSnapshots({\n userBasePath: params.userBasePath,\n installedSubagents,\n }),\n hooks: KNOWN_CODEX_HOOK_DEFINITIONS.map((definition) =>\n buildHookSnapshot({\n codexHomePath: params.codexHomePath,\n definition,\n unavailableReason: codexUnavailableReason,\n }),\n ),\n };\n};\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { SubagentManifestSchema } from '@/core/schemas/index.js';\nimport type { SubagentManifest } from '@/core/schemas/index.js';\n\nexport const SUBAGENT_MANIFEST_FILENAME = 'subagents-manifest.json';\n\nexport const parseSubagentManifest = (json: string): SubagentManifest =>\n SubagentManifestSchema.parse(JSON.parse(json));\n\nexport const serializeSubagentManifest = (manifest: SubagentManifest): string => JSON.stringify(manifest, null, 2) + '\\n';\n\nexport const resolveSubagentManifestPath = (userBasePath: string): string =>\n join(userBasePath, '.ai-ops', SUBAGENT_MANIFEST_FILENAME);\n\nexport const readSubagentManifest = (manifestPath: string): SubagentManifest | null => {\n let raw: string;\n try {\n raw = readFileSync(manifestPath, 'utf-8');\n } catch {\n return null;\n }\n\n return parseSubagentManifest(raw);\n};\n\nexport const writeSubagentManifest = (manifestPath: string, manifest: SubagentManifest): void => {\n mkdirSync(dirname(manifestPath), { recursive: true });\n writeFileSync(manifestPath, serializeSubagentManifest(manifest), 'utf-8');\n};\n","import { getCliVersion } from \"@/shared/source-hash.js\";\nimport { StudioSnapshotSchema } from \"@/core/schemas/index.js\";\nimport type { StudioSnapshot } from \"@/core/schemas/index.js\";\nimport { buildProjectSnapshot } from \"./project-snapshot.js\";\nimport { buildRuntimeSnapshot } from \"./runtime-snapshot.js\";\nimport { resolveDefaultCodexHomePath, resolveDefaultUserBasePath } from \"./snapshot-shared.js\";\nimport type { BuildStudioSnapshotParams } from \"./snapshot-shared.js\";\n\nexport type { BuildStudioSnapshotParams } from \"./snapshot-shared.js\";\nexport { normalizeStudioProjectIssue } from \"./issue-normalization.js\";\n\n// ----- public API -----\n\nexport const buildStudioSnapshot = (params: BuildStudioSnapshotParams): StudioSnapshot => {\n const generatedAt = params.generatedAt ?? new Date().toISOString();\n const userBasePath = params.userBasePath === undefined ? resolveDefaultUserBasePath() : params.userBasePath;\n const codexHomePath = params.codexHomePath === undefined ? resolveDefaultCodexHomePath() : params.codexHomePath;\n\n return StudioSnapshotSchema.parse({\n schemaVersion: 1,\n kind: 'ai-ops-studio-snapshot',\n generatedAt,\n cliVersion: params.cliVersion ?? getCliVersion(),\n project: buildProjectSnapshot(params.basePath),\n runtime: buildRuntimeSnapshot({\n userBasePath,\n codexHomePath,\n }),\n });\n};\n","import type { Command } from 'commander';\nimport { studioSnapshotCommand } from './commands.js';\n\nexport const registerStudioCommands = (program: Command): void => {\n const studioCommand = program.command('studio').description('ai-ops Studio read-only helpers');\n\n studioCommand\n .command('snapshot')\n .description('Studio read-only snapshot JSON 생성')\n .requiredOption('--json', 'JSON으로 출력')\n .action((opts: { json?: boolean }) => studioSnapshotCommand(opts));\n};\n","import * as p from '@clack/prompts';\nimport { existsSync, rmSync } from 'node:fs';\nimport type { InstalledSubagent, Subagent, ToolId } from '@/core/schemas/index.js';\nimport { loadAllSubagents } from '@/shared/catalog-loader.js';\nimport { getCliVersion } from '@/shared/source-hash.js';\nimport { readSubagentManifest, resolveSubagentManifestPath, writeSubagentManifest } from './manifest-io.js';\nimport { buildSubagentInstallPlan } from './renderer.js';\nimport { resolveSubagentsDir, resolveUserBasePath } from '../../shared/command-paths.js';\nimport { installSubagentPackages, removeSubagentFiles } from './install-files.js';\nimport {\n findInstalledSubagent,\n mergeSubagentTools,\n removeInstalledSubagent,\n resolveInstalledSubagentPaths,\n resolveRequestedSubagentTools,\n upsertInstalledSubagent,\n} from './state.js';\n\ntype SubagentCommandOptions = {\n tool?: string[];\n};\n\nconst loadCompilerInputs = (): {\n allSubagents: ReturnType<typeof loadAllSubagents>;\n cliVersion: string;\n} => {\n return {\n allSubagents: loadAllSubagents(resolveSubagentsDir()),\n cliVersion: getCliVersion(),\n };\n};\n\nconst resolveSubagentById = (subagents: readonly Subagent[], subagentId: string): Subagent => {\n const subagent = subagents.find((candidate) => candidate.id === subagentId);\n if (!subagent) {\n throw new Error(`Unknown subagent: ${subagentId}`);\n }\n return subagent;\n};\n\nconst writeUserSubagentState = (params: {\n basePath: string;\n cliVersion: string;\n nextSubagent?: InstalledSubagent;\n removeSubagentId?: string;\n}): void => {\n const manifestPath = resolveSubagentManifestPath(params.basePath);\n const previous = readSubagentManifest(manifestPath);\n const subagents = params.removeSubagentId\n ? removeInstalledSubagent(previous?.subagents ?? [], params.removeSubagentId)\n : params.nextSubagent\n ? upsertInstalledSubagent(previous?.subagents ?? [], params.nextSubagent)\n : (previous?.subagents ?? []);\n\n if (subagents.length === 0) {\n rmSync(manifestPath, { force: true });\n return;\n }\n\n writeSubagentManifest(manifestPath, {\n subagents,\n cliVersion: params.cliVersion,\n generatedAt: new Date().toISOString(),\n });\n};\n\nconst readInstalledSubagents = (basePath: string): InstalledSubagent[] =>\n readSubagentManifest(resolveSubagentManifestPath(basePath))?.subagents ?? [];\n\nconst warnMissingSkills = (requiredSkills: ReturnType<typeof buildSubagentInstallPlan>['requiredSkills']): void => {\n const missing = requiredSkills.filter((skill) => !existsSync(skill.path));\n if (missing.length === 0) {\n return;\n }\n\n p.log.warn(\n [\n '필요한 skill이 아직 설치되지 않았습니다. subagent 설치는 계속 진행합니다.',\n ...missing.map((skill) => `- ${skill.tool}:${skill.skillName} (${skill.path})`),\n ].join('\\n'),\n );\n};\n\nconst installSubagent = (params: {\n subagent: Subagent;\n requestedTools: readonly ToolId[];\n basePath: string;\n cliVersion: string;\n}): InstalledSubagent => {\n const installedSubagents = readInstalledSubagents(params.basePath);\n const existingInstalledSubagent = findInstalledSubagent(installedSubagents, params.subagent.id);\n const nextRequestedTools = mergeSubagentTools({\n existing: existingInstalledSubagent?.tools,\n requested: params.requestedTools,\n });\n const { packages, installedSubagent, requiredSkills } = buildSubagentInstallPlan({\n subagent: params.subagent,\n requestedTools: nextRequestedTools,\n userBasePath: params.basePath,\n });\n installSubagentPackages(params.basePath, packages);\n warnMissingSkills(requiredSkills);\n\n writeUserSubagentState({\n basePath: params.basePath,\n cliVersion: params.cliVersion,\n nextSubagent: installedSubagent,\n });\n\n return installedSubagent;\n};\n\nexport const subagentListCommand = async (): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n\n p.intro('ai-ops subagent list');\n const lines = allSubagents.map((subagent) => {\n const installed = findInstalledSubagent(installedSubagents, subagent.id);\n const suffix = installed ? `installed for ${installed.tools.join(', ')}` : 'not installed';\n return `- ${subagent.id} - ${suffix}`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops subagent list 완료');\n};\n\nexport const subagentInstallCommand = async (subagentId: string, opts: SubagentCommandOptions): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents, cliVersion } = loadCompilerInputs();\n const subagent = resolveSubagentById(allSubagents, subagentId);\n const requestedTools = resolveRequestedSubagentTools({ requested: opts.tool, supported: subagent.supported_tools });\n\n p.intro(`ai-ops subagent install ${subagentId}`);\n const installedSubagent = installSubagent({\n subagent,\n requestedTools,\n basePath,\n cliVersion,\n });\n\n p.log.success(`설치 완료: ${installedSubagent.id} (${installedSubagent.installed_paths.join(', ')})`);\n p.outro('ai-ops subagent install 완료');\n};\n\nexport const subagentDiffCommand = async (subagentId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n const targets = subagentId\n ? installedSubagents.filter((subagent) => subagent.id === subagentId)\n : installedSubagents;\n\n p.intro('ai-ops subagent diff');\n\n if (targets.length === 0) {\n p.log.warn('비교할 설치된 subagent가 없습니다.');\n p.outro('ai-ops subagent diff 완료');\n return;\n }\n\n const lines = targets.map((installedSubagent) => {\n const subagent = resolveSubagentById(allSubagents, installedSubagent.id);\n const { installedSubagent: next } = buildSubagentInstallPlan({\n subagent,\n requestedTools: installedSubagent.tools,\n userBasePath: basePath,\n });\n const changed = next.sourceHash !== installedSubagent.sourceHash;\n return `- ${installedSubagent.id}: ${changed ? 'changed' : 'up-to-date'} (${installedSubagent.sourceHash} -> ${next.sourceHash})`;\n });\n\n p.log.info(lines.join('\\n'));\n p.outro('ai-ops subagent diff 완료');\n};\n\nexport const subagentUpdateCommand = async (subagentId: string | undefined): Promise<void> => {\n const basePath = resolveUserBasePath();\n const { allSubagents, cliVersion } = loadCompilerInputs();\n const installedSubagents = readInstalledSubagents(basePath);\n const targets = subagentId\n ? installedSubagents.filter((subagent) => subagent.id === subagentId)\n : installedSubagents;\n\n p.intro('ai-ops subagent update');\n\n if (targets.length === 0) {\n p.log.warn('갱신할 설치된 subagent가 없습니다.');\n p.outro('ai-ops subagent update 완료');\n return;\n }\n\n const nextInstalledSubagents = targets.map((installedSubagent) => {\n const subagent = resolveSubagentById(allSubagents, installedSubagent.id);\n const { packages, installedSubagent: next, requiredSkills } = buildSubagentInstallPlan({\n subagent,\n requestedTools: installedSubagent.tools,\n userBasePath: basePath,\n });\n installSubagentPackages(basePath, packages);\n warnMissingSkills(requiredSkills);\n return next;\n });\n\n const manifestPath = resolveSubagentManifestPath(basePath);\n const previous = readSubagentManifest(manifestPath);\n const nextSubagentIds = new Set(nextInstalledSubagents.map((subagent) => subagent.id));\n const untouched = (previous?.subagents ?? []).filter((subagent) => !nextSubagentIds.has(subagent.id));\n writeSubagentManifest(manifestPath, {\n subagents: [...untouched, ...nextInstalledSubagents],\n cliVersion,\n generatedAt: new Date().toISOString(),\n });\n\n p.log.success(`갱신 완료: ${nextInstalledSubagents.map((subagent) => subagent.id).join(', ')}`);\n p.outro('ai-ops subagent update 완료');\n};\n\nexport const subagentUninstallCommand = async (subagentId: string): Promise<void> => {\n const basePath = resolveUserBasePath();\n const cliVersion = getCliVersion();\n const installedSubagents = readInstalledSubagents(basePath);\n const installedSubagent = findInstalledSubagent(installedSubagents, subagentId);\n\n p.intro(`ai-ops subagent uninstall ${subagentId}`);\n\n if (!installedSubagent) {\n p.log.warn('설치된 subagent를 찾지 못했습니다.');\n p.outro('ai-ops subagent uninstall 완료');\n return;\n }\n\n const removed = removeSubagentFiles(basePath, resolveInstalledSubagentPaths(installedSubagent));\n\n writeUserSubagentState({\n basePath,\n cliVersion,\n removeSubagentId: subagentId,\n });\n\n p.log.success(`제거 완료: ${removed.join(', ')}`);\n p.outro('ai-ops subagent uninstall 완료');\n};\n","import { resolve } from 'node:path';\nimport { computeInstalledSubagentHash } from '@/shared/source-hash.js';\nimport { buildSubagentRelativePath } from '@/core/schemas/subagent-paths.js';\nimport { renderFlatToml } from './toml.js';\nimport type { CodexSubagentFrontmatter, InstalledSubagent, Subagent, ToolId } from '@/core/schemas/index.js';\n\ntype SubagentPackageFile = {\n relativePath: string;\n content: string;\n};\n\nexport type SubagentPackage = {\n subagentId: string;\n files: SubagentPackageFile[];\n};\n\nexport type RequiredSubagentSkill = {\n tool: ToolId;\n skillName: string;\n path: string;\n};\n\nconst normalizeSelectedTools = (subagent: Subagent, requestedTools: readonly ToolId[]): ToolId[] => {\n const supportedToolSet = new Set(subagent.supported_tools);\n return requestedTools.filter((toolId) => supportedToolSet.has(toolId));\n};\n\nconst renderMarkdownSubagent = (params: { rawFrontmatter: string; prompt: string }): string =>\n `---\\n${params.rawFrontmatter.trimEnd()}\\n---\\n\\n${params.prompt.trimEnd()}\\n`;\n\nconst getCodexTomlEntries = (frontmatter: CodexSubagentFrontmatter): [string, string | number | boolean | string[]][] =>\n Object.entries(frontmatter).filter(\n (entry): entry is [string, string | number | boolean | string[]] =>\n entry[0] !== 'skill_names' &&\n (typeof entry[1] === 'string' ||\n typeof entry[1] === 'number' ||\n typeof entry[1] === 'boolean' ||\n (Array.isArray(entry[1]) && entry[1].every((item) => typeof item === 'string'))),\n );\n\nconst renderCodexSubagent = (params: {\n frontmatter: CodexSubagentFrontmatter;\n prompt: string;\n userBasePath: string;\n}): string => {\n const metadata = renderFlatToml(getCodexTomlEntries(params.frontmatter));\n const skills = (params.frontmatter.skill_names ?? []).map((skillName) => {\n const skillPath = resolve(params.userBasePath, '.agents', 'skills', skillName, 'SKILL.md');\n return `[[skills.config]]\\npath = ${JSON.stringify(skillPath)}\\nenabled = true`;\n });\n const sections = [metadata, `developer_instructions = ${JSON.stringify(params.prompt.trimEnd())}`, ...skills].filter(\n (section) => section.length > 0,\n );\n\n return sections.join('\\n\\n') + '\\n';\n};\n\nconst renderSubagentForTool = (params: { subagent: Subagent; toolId: ToolId; userBasePath: string }): string => {\n if (params.toolId === 'claude-code') {\n return renderMarkdownSubagent({\n rawFrontmatter: params.subagent.frontmatter.claude.raw,\n prompt: params.subagent.prompt,\n });\n }\n\n if (params.toolId === 'gemini') {\n return renderMarkdownSubagent({\n rawFrontmatter: params.subagent.frontmatter.gemini.raw,\n prompt: params.subagent.prompt,\n });\n }\n\n return renderCodexSubagent({\n frontmatter: params.subagent.frontmatter.codex.parsed,\n prompt: params.subagent.prompt,\n userBasePath: params.userBasePath,\n });\n};\n\nconst getSelectedMetadataFiles = (subagent: Subagent, selectedTools: readonly ToolId[]): string[] =>\n selectedTools.map((toolId) => {\n if (toolId === 'claude-code') return `claude:${subagent.frontmatter.claude.raw}`;\n if (toolId === 'gemini') return `gemini:${subagent.frontmatter.gemini.raw}`;\n return `codex:${subagent.frontmatter.codex.raw}`;\n });\n\nconst getStringArray = (value: unknown): string[] => {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((item): item is string => typeof item === 'string');\n};\n\nconst buildRequiredSubagentSkills = (params: {\n subagent: Subagent;\n selectedTools: readonly ToolId[];\n userBasePath: string;\n}): RequiredSubagentSkill[] => {\n const required: RequiredSubagentSkill[] = [];\n\n if (params.selectedTools.includes('codex')) {\n for (const skillName of params.subagent.frontmatter.codex.parsed.skill_names ?? []) {\n required.push({\n tool: 'codex',\n skillName,\n path: resolve(params.userBasePath, '.agents', 'skills', skillName, 'SKILL.md'),\n });\n }\n }\n\n if (params.selectedTools.includes('claude-code')) {\n for (const skillName of getStringArray(params.subagent.frontmatter.claude.parsed['skills'])) {\n required.push({\n tool: 'claude-code',\n skillName,\n path: resolve(params.userBasePath, '.claude', 'skills', skillName, 'SKILL.md'),\n });\n }\n }\n\n return required;\n};\n\nexport const buildSubagentInstallPlan = (params: {\n subagent: Subagent;\n requestedTools: readonly ToolId[];\n userBasePath: string;\n}): {\n packages: SubagentPackage[];\n installedSubagent: InstalledSubagent;\n requiredSkills: RequiredSubagentSkill[];\n} => {\n const selectedTools = normalizeSelectedTools(params.subagent, params.requestedTools);\n if (selectedTools.length === 0) {\n throw new Error(`Subagent ${params.subagent.id} does not support the requested tools`);\n }\n\n const files = selectedTools.map((toolId) => ({\n relativePath: buildSubagentRelativePath(params.subagent.id, toolId),\n content: renderSubagentForTool({\n subagent: params.subagent,\n toolId,\n userBasePath: params.userBasePath,\n }),\n }));\n const subagentHash = computeInstalledSubagentHash({\n id: params.subagent.id,\n tools: selectedTools,\n prompt: params.subagent.prompt,\n metadataFiles: getSelectedMetadataFiles(params.subagent, selectedTools),\n });\n\n return {\n packages: [\n {\n subagentId: params.subagent.id,\n files,\n },\n ],\n installedSubagent: {\n id: params.subagent.id,\n tools: selectedTools,\n installed_paths: files.map((file) => file.relativePath),\n sourceHash: subagentHash,\n },\n requiredSkills: buildRequiredSubagentSkills({\n subagent: params.subagent,\n selectedTools,\n userBasePath: params.userBasePath,\n }),\n };\n};\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, isAbsolute, relative, resolve } from 'node:path';\nimport type { SubagentPackage } from './renderer.js';\n\nconst resolveInsideBasePath = (basePath: string, relativePath: string): string => {\n const absBasePath = resolve(basePath);\n const absPath = resolve(absBasePath, relativePath);\n const fromBase = relative(absBasePath, absPath);\n\n if (fromBase.length === 0 || fromBase.startsWith('..') || isAbsolute(fromBase)) {\n throw new Error(`Subagent path escapes AI_OPS_HOME: ${relativePath}`);\n }\n\n return absPath;\n};\n\nexport const installSubagentPackages = (basePath: string, packages: readonly SubagentPackage[]): string[] => {\n const written: string[] = [];\n\n for (const subagentPackage of packages) {\n for (const file of subagentPackage.files) {\n const absPath = resolveInsideBasePath(basePath, file.relativePath);\n if (existsSync(absPath)) {\n rmSync(absPath, { recursive: true, force: true });\n }\n mkdirSync(dirname(absPath), { recursive: true });\n writeFileSync(absPath, file.content.trimEnd() + '\\n', 'utf-8');\n written.push(file.relativePath);\n }\n }\n\n return written;\n};\n\nexport const removeSubagentFiles = (basePath: string, relativePaths: readonly string[]): string[] => {\n const removed: string[] = [];\n\n for (const relativePath of relativePaths) {\n const absPath = resolveInsideBasePath(basePath, relativePath);\n if (!existsSync(absPath)) continue;\n rmSync(absPath, { recursive: true, force: true });\n removed.push(relativePath);\n }\n\n return removed;\n};\n","import type { InstalledSubagent, ToolId } from '@/core/schemas/index.js';\nimport { SKILL_TOOL } from '@/core/schemas/index.js';\nimport { buildSubagentRelativePath } from '@/core/schemas/subagent-paths.js';\n\nexport const resolveRequestedSubagentTools = (params: {\n requested?: readonly string[];\n supported: readonly string[];\n}): ToolId[] => {\n if (params.requested === undefined || params.requested.length === 0) {\n return [...params.supported] as ToolId[];\n }\n\n const supportedSet = new Set(params.supported);\n const invalid = params.requested.filter((tool) => !supportedSet.has(tool));\n if (invalid.length > 0) {\n throw new Error(`Unsupported tools requested: ${invalid.join(', ')}`);\n }\n\n return [...params.requested] as ToolId[];\n};\n\nconst TOOL_ORDER = [SKILL_TOOL.CLAUDE_CODE, SKILL_TOOL.CODEX, SKILL_TOOL.GEMINI] as const;\n\nexport const mergeSubagentTools = (params: { existing?: readonly string[]; requested: readonly ToolId[] }): ToolId[] => {\n const merged = new Set([...(params.existing ?? []), ...params.requested]);\n return TOOL_ORDER.filter((tool) => merged.has(tool));\n};\n\nexport const upsertInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n nextSubagent: InstalledSubagent,\n): InstalledSubagent[] => {\n const remaining = installedSubagents.filter((subagent) => subagent.id !== nextSubagent.id);\n return [...remaining, nextSubagent];\n};\n\nexport const removeInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n subagentId: string,\n): InstalledSubagent[] => installedSubagents.filter((subagent) => subagent.id !== subagentId);\n\nexport const findInstalledSubagent = (\n installedSubagents: readonly InstalledSubagent[],\n subagentId: string,\n): InstalledSubagent | undefined => installedSubagents.find((subagent) => subagent.id === subagentId);\n\nexport const resolveInstalledSubagentPaths = (installedSubagent: InstalledSubagent): string[] =>\n installedSubagent.tools.map((tool) => buildSubagentRelativePath(installedSubagent.id, tool));\n","import type { Command } from 'commander';\nimport {\n subagentDiffCommand,\n subagentInstallCommand,\n subagentListCommand,\n subagentUninstallCommand,\n subagentUpdateCommand,\n} from './commands.js';\n\nexport const registerSubagentCommands = (program: Command): void => {\n const subagentCommand = program.command('subagent').description('에이전트 subagent 설치/조회/갱신');\n const applyInstallOptions = (command: Command): Command => command.option('--tool <tool...>', '대상 도구 지정');\n\n subagentCommand.command('list').description('사용 가능한 subagent 목록').action(() => subagentListCommand());\n applyInstallOptions(subagentCommand.command('install <subagentId>').description('subagent 설치')).action(\n (subagentId, opts) => subagentInstallCommand(subagentId, opts),\n );\n subagentCommand\n .command('diff [subagentId]')\n .description('subagent 변경 비교')\n .action((subagentId) => subagentDiffCommand(subagentId));\n subagentCommand\n .command('update [subagentId]')\n .description('subagent 갱신')\n .action((subagentId) => subagentUpdateCommand(subagentId));\n subagentCommand\n .command('uninstall <subagentId>')\n .description('subagent 제거')\n .action((subagentId) => subagentUninstallCommand(subagentId));\n};\n","import { createProgram } from '@/cli/program.js';\n\ncreateProgram().parse();\n"],"mappings":"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","names":["existsSync","join","z","z","z","z","z","z","join","z","z","z","z","z","z","z","z","z","z","z","z","readFileSync","join","parse","join","readFileSync","parse","readFileSync","readdirSync","dirname","join","resolve","join","join","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","mkdirSync","writeFileSync","dirname","resolve","join","dirname","resolve","fileURLToPath","__dirname","join","existsSync","join","p","mkdirSync","readFileSync","writeFileSync","dirname","isJsonRecord","readJsonRecord","getArray","join","isJsonRecord","getArray","readJsonRecord","join","join","resolveCodexHomePath","p","z","isJsonRecord","z","createHash","existsSync","readFileSync","join","resolve","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","join","resolve","join","join","TOOL_ORDER","dirname","join","resolve","join","dirname","resolve","readFileSync","TOOL_ORDER","readFileSync","existsSync","readdirSync","readFileSync","existsSync","readdirSync","readFileSync","mkdirSync","readFileSync","writeFileSync","dirname","readFileSync","writeFileSync","readFileSync","writeFileSync","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","existsSync","readFileSync","readdirSync","rmSync","writeFileSync","existsSync","readFileSync","rmSync","writeFileSync","readdirSync","existsSync","mkdirSync","dirname","writeFileSync","readFileSync","existsSync","readFileSync","existsSync","readFileSync","existsSync","mkdirSync","readFileSync","readdirSync","rmSync","writeFileSync","dirname","readFileSync","readdirSync","isAbsolute","join","relative","resolve","RESERVED_DOCUMENT_WARNINGS","join","includesReservedDocumentWarning","readFileSync","readdirSync","resolve","relative","isAbsolute","readFileSync","mkdirSync","dirname","writeFileSync","existsSync","rmSync","removeEmptyDirs","readdirSync","pack","existsSync","join","resolve","resolve","p","execFileSync","existsSync","readdirSync","join","resolve","sep","readFileSync","resolve","runGit","execFileSync","readGitHead","join","existsSync","readdirSync","resolve","sep","buildPostToolUseOutput","readGitHead","mkdirSync","readFileSync","rmSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","rmSync","existsSync","rmSync","join","readInstalledSkills","existsSync","join","rmSync","resolveCodexHomePath","resolvePersonalContextRoot","p","readStdin","resolve","resolveCodexHomePath","resolvePersonalContextRoot","readStdin","p","p","p","p","issue","p","p","p","p","rmSync","resolveSkillById","writeUserSkillState","rmSync","readInstalledSkills","join","existsSync","readFileSync","resolve","z","join","issue","issue","z","existsSync","readFileSync","resolve","issue","existsSync","readFileSync","join","mkdirSync","readFileSync","writeFileSync","dirname","join","join","readFileSync","mkdirSync","dirname","writeFileSync","join","existsSync","isJsonRecord","readFileSync","join","p","existsSync","rmSync","resolve","normalizeSelectedTools","resolve","existsSync","mkdirSync","rmSync","writeFileSync","dirname","isAbsolute","relative","resolve","TOOL_ORDER","loadCompilerInputs","rmSync","existsSync"]}