@fractary/codex-cli 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../src/config/migrate-config.ts","../src/config/config-types.ts","../src/client/codex-client.ts","../src/cli.ts","../src/commands/init.ts","../src/commands/fetch.ts","../src/client/get-client.ts","../src/commands/cache/index.ts","../src/commands/cache/list.ts","../src/commands/cache/clear.ts","../src/commands/cache/stats.ts","../src/commands/sync/index.ts","../src/commands/sync/project.ts","../src/commands/sync/org.ts","../src/commands/types/index.ts","../src/commands/types/list.ts","../src/commands/types/show.ts","../src/commands/types/add.ts","../src/commands/types/remove.ts","../src/commands/health.ts","../src/commands/migrate.ts"],"names":["path2","CodexError","ConfigurationError","readYamlConfig","resolveEnvVarsInConfig","path4","result","execSync","fs2","chalk","CodexClient","Command","fs3","formatSize","path5","getEnvironmentBranch","path6","formatTtl","path7","path8","fileExists","fs4","path9","fs5","path10"],"mappings":"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","file":"cli.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\r\n * Configuration migration utility\r\n *\r\n * Converts legacy v2.x JSON config to v3.0 YAML format\r\n */\r\n\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\nimport * as yaml from 'js-yaml';\r\nimport {\r\n type CodexYamlConfig,\r\n type LegacyCodexConfig,\r\n type StorageProviderConfig,\r\n parseDuration,\r\n parseSize\r\n} from './config-types';\r\n\r\n/**\r\n * Migration result\r\n */\r\nexport interface MigrationResult {\r\n success: boolean;\r\n yamlConfig: CodexYamlConfig;\r\n warnings: string[];\r\n backupPath?: string;\r\n}\r\n\r\n/**\r\n * Detect if a config file is legacy JSON format\r\n */\r\nexport async function isLegacyConfig(configPath: string): Promise<boolean> {\r\n try {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = JSON.parse(content);\r\n\r\n // Check for legacy v2.x structure\r\n return (\r\n config.version === '3.0' ||\r\n config.organizationSlug !== undefined ||\r\n config.directories !== undefined ||\r\n config.rules !== undefined\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Migrate legacy JSON config to v3.0 YAML format\r\n */\r\nexport async function migrateConfig(\r\n legacyConfigPath: string,\r\n options?: {\r\n createBackup?: boolean;\r\n backupSuffix?: string;\r\n }\r\n): Promise<MigrationResult> {\r\n const warnings: string[] = [];\r\n\r\n try {\r\n // Read legacy config\r\n const content = await fs.readFile(legacyConfigPath, 'utf-8');\r\n const legacy: LegacyCodexConfig = JSON.parse(content);\r\n\r\n // Create backup if requested\r\n let backupPath: string | undefined;\r\n if (options?.createBackup !== false) {\r\n const suffix = options?.backupSuffix || new Date().toISOString().replace(/[:.]/g, '-');\r\n backupPath = `${legacyConfigPath}.backup-${suffix}`;\r\n await fs.writeFile(backupPath, content, 'utf-8');\r\n }\r\n\r\n // Build YAML config\r\n const yamlConfig: CodexYamlConfig = {\r\n organization: legacy.organization || legacy.organizationSlug || 'default'\r\n };\r\n\r\n // Migrate cache configuration\r\n if (legacy.cache) {\r\n yamlConfig.cacheDir = legacy.cache.directory || '.codex-cache';\r\n\r\n // Note: Legacy config had cache.defaultTtl, cache.maxSize with string formats\r\n // These are now handled by CacheManager config separately\r\n }\r\n\r\n // Migrate storage providers\r\n if (legacy.storage?.providers) {\r\n yamlConfig.storage = [];\r\n\r\n // Convert providers object to array\r\n for (const [type, config] of Object.entries(legacy.storage.providers)) {\r\n if (type === 'github') {\r\n const githubConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: githubConfig.token || '${GITHUB_TOKEN}',\r\n apiBaseUrl: githubConfig.baseUrl || 'https://api.github.com',\r\n branch: githubConfig.branch || 'main',\r\n priority: 50\r\n });\r\n } else if (type === 'http') {\r\n const httpConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'http',\r\n baseUrl: httpConfig.baseUrl,\r\n headers: httpConfig.headers,\r\n timeout: httpConfig.timeout || 30000,\r\n priority: 100\r\n });\r\n } else if (type === 'local') {\r\n const localConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'local',\r\n basePath: localConfig.basePath || './knowledge',\r\n followSymlinks: localConfig.followSymlinks || false,\r\n priority: 10\r\n });\r\n } else {\r\n warnings.push(`Unknown storage provider type: ${type}`);\r\n }\r\n }\r\n\r\n // If no providers configured, add default GitHub\r\n if (yamlConfig.storage.length === 0) {\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n });\r\n warnings.push('No storage providers found, added default GitHub provider');\r\n }\r\n }\r\n\r\n // Migrate custom types\r\n if (legacy.types?.custom && Array.isArray(legacy.types.custom)) {\r\n yamlConfig.types = {\r\n custom: {}\r\n };\r\n\r\n for (const customType of legacy.types.custom) {\r\n if (customType.name) {\r\n yamlConfig.types.custom[customType.name] = {\r\n description: customType.description,\r\n patterns: customType.patterns || [],\r\n defaultTtl: customType.defaultTtl,\r\n archiveAfterDays: customType.archiveAfterDays,\r\n archiveStorage: customType.archiveStorage\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Migrate sync configuration\r\n if (legacy.sync) {\r\n yamlConfig.sync = {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n };\r\n\r\n if (legacy.sync.environments) {\r\n warnings.push('Sync environments are not directly supported in v3.0 - please configure sync rules manually');\r\n }\r\n }\r\n\r\n // Migrate MCP configuration\r\n if (legacy.mcp) {\r\n yamlConfig.mcp = {\r\n enabled: legacy.mcp.enabled || false,\r\n port: legacy.mcp.port || 3000\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n yamlConfig,\r\n warnings,\r\n backupPath\r\n };\r\n } catch (error) {\r\n throw new Error(\r\n `Migration failed: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write YAML config to file\r\n */\r\nexport async function writeYamlConfig(\r\n config: CodexYamlConfig,\r\n outputPath: string\r\n): Promise<void> {\r\n // Ensure directory exists\r\n const dir = path.dirname(outputPath);\r\n await fs.mkdir(dir, { recursive: true });\r\n\r\n // Convert to YAML with nice formatting\r\n const yamlContent = yaml.dump(config, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true,\r\n sortKeys: false\r\n });\r\n\r\n // Write to file\r\n await fs.writeFile(outputPath, yamlContent, 'utf-8');\r\n}\r\n\r\n/**\r\n * Get default YAML config\r\n */\r\nexport function getDefaultYamlConfig(organization: string): CodexYamlConfig {\r\n return {\r\n organization,\r\n cacheDir: '.codex-cache',\r\n\r\n storage: [\r\n {\r\n type: 'local',\r\n basePath: './knowledge',\r\n followSymlinks: false,\r\n priority: 10\r\n },\r\n {\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n },\r\n {\r\n type: 'http',\r\n baseUrl: 'https://codex.example.com',\r\n timeout: 30000,\r\n priority: 100\r\n }\r\n ],\r\n\r\n types: {\r\n custom: {}\r\n },\r\n\r\n permissions: {\r\n default: 'read',\r\n rules: [\r\n {\r\n pattern: 'internal/**',\r\n permission: 'none'\r\n },\r\n {\r\n pattern: 'public/**',\r\n permission: 'read'\r\n }\r\n ]\r\n },\r\n\r\n sync: {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n },\r\n\r\n mcp: {\r\n enabled: false,\r\n port: 3000\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Read YAML config from file\r\n */\r\nexport async function readYamlConfig(configPath: string): Promise<CodexYamlConfig> {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = yaml.load(content) as CodexYamlConfig;\r\n\r\n if (!config.organization) {\r\n throw new Error('Invalid config: organization is required');\r\n }\r\n\r\n return config;\r\n}\r\n","/**\r\n * Configuration types for Codex v3.0 YAML format\r\n *\r\n * Based on the SDK's Configuration Guide:\r\n * https://github.com/fractary/codex/blob/main/docs/guides/configuration.md\r\n */\r\n\r\n/**\r\n * Storage provider type\r\n */\r\nexport type StorageProviderType = 'local' | 'github' | 'http' | 's3';\r\n\r\n/**\r\n * Local filesystem storage configuration\r\n */\r\nexport interface LocalStorageConfig {\r\n type: 'local';\r\n basePath: string;\r\n followSymlinks?: boolean;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * GitHub storage configuration\r\n */\r\nexport interface GitHubStorageConfig {\r\n type: 'github';\r\n token?: string; // Or use environment variable\r\n apiBaseUrl?: string; // For GitHub Enterprise\r\n rawBaseUrl?: string;\r\n branch?: string;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * HTTP storage configuration\r\n */\r\nexport interface HttpStorageConfig {\r\n type: 'http';\r\n baseUrl: string;\r\n headers?: Record<string, string>;\r\n timeout?: number;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * S3 storage configuration (future)\r\n */\r\nexport interface S3StorageConfig {\r\n type: 's3';\r\n bucket: string;\r\n region?: string;\r\n accessKeyId?: string;\r\n secretAccessKey?: string;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * Union type for all storage providers\r\n */\r\nexport type StorageProviderConfig =\r\n | LocalStorageConfig\r\n | GitHubStorageConfig\r\n | HttpStorageConfig\r\n | S3StorageConfig;\r\n\r\n/**\r\n * Cache configuration\r\n */\r\nexport interface CacheConfig {\r\n directory?: string;\r\n defaultTtl?: number; // In seconds\r\n maxSize?: number; // In bytes\r\n maxMemoryEntries?: number;\r\n maxMemorySize?: number; // In bytes\r\n enablePersistence?: boolean;\r\n}\r\n\r\n/**\r\n * Custom artifact type definition\r\n */\r\nexport interface CustomTypeConfig {\r\n name: string;\r\n description?: string;\r\n patterns: string[];\r\n defaultTtl?: number; // In seconds\r\n archiveAfterDays?: number | null;\r\n archiveStorage?: 'local' | 'cloud' | 'drive' | null;\r\n}\r\n\r\n/**\r\n * Types configuration\r\n */\r\nexport interface TypesConfig {\r\n custom?: Record<string, Omit<CustomTypeConfig, 'name'>>;\r\n}\r\n\r\n/**\r\n * Permission level\r\n */\r\nexport type PermissionLevel = 'none' | 'read' | 'write' | 'admin';\r\n\r\n/**\r\n * Permission rule\r\n */\r\nexport interface PermissionRule {\r\n pattern: string;\r\n permission: PermissionLevel;\r\n users?: string[];\r\n}\r\n\r\n/**\r\n * Permissions configuration\r\n */\r\nexport interface PermissionsConfig {\r\n default?: PermissionLevel;\r\n rules?: PermissionRule[];\r\n}\r\n\r\n/**\r\n * Sync configuration\r\n */\r\nexport interface SyncConfig {\r\n bidirectional?: boolean;\r\n conflictResolution?: 'prompt' | 'local' | 'remote' | 'newest' | 'skip';\r\n exclude?: string[];\r\n rules?: SyncRule[];\r\n}\r\n\r\n/**\r\n * Sync rule\r\n */\r\nexport interface SyncRule {\r\n pattern: string;\r\n direction?: 'to-codex' | 'from-codex' | 'bidirectional';\r\n}\r\n\r\n/**\r\n * MCP server configuration\r\n */\r\nexport interface McpConfig {\r\n enabled?: boolean;\r\n port?: number;\r\n}\r\n\r\n/**\r\n * Codex v3.0 YAML configuration\r\n *\r\n * This is the format that will be written to .fractary/codex.yaml\r\n */\r\nexport interface CodexYamlConfig {\r\n organization: string;\r\n cacheDir?: string;\r\n storage?: StorageProviderConfig[];\r\n types?: TypesConfig;\r\n permissions?: PermissionsConfig;\r\n sync?: SyncConfig;\r\n mcp?: McpConfig;\r\n}\r\n\r\n/**\r\n * Legacy JSON configuration (v2.x)\r\n *\r\n * This is the format currently used in .fractary/plugins/codex/config.json\r\n */\r\nexport interface LegacyCodexConfig {\r\n version?: string;\r\n organization?: string;\r\n organizationSlug?: string;\r\n cache?: {\r\n directory?: string;\r\n defaultTtl?: string | number;\r\n maxSize?: string | number;\r\n cleanupInterval?: string;\r\n };\r\n storage?: {\r\n providers?: Record<string, any>;\r\n defaultProvider?: string;\r\n };\r\n types?: {\r\n custom?: any[];\r\n };\r\n sync?: {\r\n environments?: Record<string, string>;\r\n defaultEnvironment?: string;\r\n };\r\n mcp?: {\r\n enabled?: boolean;\r\n port?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Parse a duration string to seconds\r\n *\r\n * Supports formats like: \"1h\", \"24h\", \"7d\", \"1w\", \"1M\", \"1y\"\r\n */\r\nexport function parseDuration(duration: string | number): number {\r\n if (typeof duration === 'number') {\r\n return duration;\r\n }\r\n\r\n const match = duration.match(/^(\\d+)([smhdwMy])$/);\r\n if (!match) {\r\n throw new Error(`Invalid duration format: ${duration}`);\r\n }\r\n\r\n const [, valueStr, unit] = match;\r\n const value = parseInt(valueStr, 10);\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n case 'w': return value * 604800;\r\n case 'M': return value * 2592000; // 30 days\r\n case 'y': return value * 31536000; // 365 days\r\n default: throw new Error(`Unknown duration unit: ${unit}`);\r\n }\r\n}\r\n\r\n/**\r\n * Parse a size string to bytes\r\n *\r\n * Supports formats like: \"100MB\", \"1GB\", \"50MB\"\r\n */\r\nexport function parseSize(size: string | number): number {\r\n if (typeof size === 'number') {\r\n return size;\r\n }\r\n\r\n const match = size.match(/^(\\d+(?:\\.\\d+)?)\\s*(B|KB|MB|GB)$/i);\r\n if (!match) {\r\n throw new Error(`Invalid size format: ${size}`);\r\n }\r\n\r\n const [, valueStr, unit] = match;\r\n const value = parseFloat(valueStr);\r\n\r\n switch (unit.toUpperCase()) {\r\n case 'B': return value;\r\n case 'KB': return value * 1024;\r\n case 'MB': return value * 1024 * 1024;\r\n case 'GB': return value * 1024 * 1024 * 1024;\r\n default: throw new Error(`Unknown size unit: ${unit}`);\r\n }\r\n}\r\n\r\n/**\r\n * Resolve environment variables in a string\r\n *\r\n * Supports ${VAR_NAME} syntax\r\n */\r\nexport function resolveEnvVars(value: string): string {\r\n return value.replace(/\\$\\{([^}]+)\\}/g, (_, varName) => {\r\n const envValue = process.env[varName];\r\n if (envValue === undefined) {\r\n console.warn(`Warning: Environment variable ${varName} is not set`);\r\n return `\\${${varName}}`; // Keep original if not found\r\n }\r\n return envValue;\r\n });\r\n}\r\n\r\n/**\r\n * Deep resolve environment variables in an object\r\n */\r\nexport function resolveEnvVarsInConfig<T>(config: T): T {\r\n if (typeof config === 'string') {\r\n return resolveEnvVars(config) as any;\r\n }\r\n\r\n if (Array.isArray(config)) {\r\n return config.map(item => resolveEnvVarsInConfig(item)) as any;\r\n }\r\n\r\n if (config !== null && typeof config === 'object') {\r\n const result: any = {};\r\n for (const [key, value] of Object.entries(config)) {\r\n result[key] = resolveEnvVarsInConfig(value);\r\n }\r\n return result;\r\n }\r\n\r\n return config;\r\n}\r\n","/**\r\n * CodexClient - Unified client wrapper for Codex SDK\r\n *\r\n * Following the pattern from the CLI Integration Guide:\r\n * https://github.com/fractary/codex/blob/main/docs/guides/cli-integration.md\r\n *\r\n * This wrapper encapsulates CacheManager, StorageManager, and TypeRegistry,\r\n * providing a clean interface for CLI commands.\r\n */\r\n\r\n// Type-only imports\r\nimport type {\r\n CacheManager,\r\n StorageManager,\r\n TypeRegistry,\r\n CacheStats,\r\n FetchResult as SDKFetchResult,\r\n ParsedReference,\r\n ResolvedReference,\r\n FetchOptions as SDKFetchOptions,\r\n} from '@fractary/codex';\r\n// Dynamic imports for config utilities to avoid loading js-yaml at module time\r\n// import { readYamlConfig } from '../config/migrate-config';\r\n// import { resolveEnvVarsInConfig } from '../config/config-types';\r\nimport * as path from 'path';\r\n\r\n/**\r\n * Options for creating CodexClient\r\n */\r\nexport interface CodexClientOptions {\r\n cacheDir?: string;\r\n organizationSlug?: string;\r\n}\r\n\r\n/**\r\n * Options for fetch operations\r\n */\r\nexport interface FetchOptions {\r\n bypassCache?: boolean;\r\n ttl?: number;\r\n}\r\n\r\n/**\r\n * Result from fetch operation\r\n */\r\nexport interface FetchResult {\r\n content: Buffer;\r\n fromCache: boolean;\r\n metadata?: {\r\n fetchedAt?: string;\r\n expiresAt?: string;\r\n contentLength?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Unified Codex client\r\n *\r\n * Provides high-level operations for:\r\n * - Document fetching with integrated caching\r\n * - Cache management and invalidation\r\n * - Type registry access\r\n */\r\nexport class CodexClient {\r\n private cache: CacheManager;\r\n private storage: StorageManager;\r\n private types: TypeRegistry;\r\n private organization: string;\r\n\r\n /**\r\n * Private constructor - use CodexClient.create() instead\r\n */\r\n private constructor(\r\n cache: CacheManager,\r\n storage: StorageManager,\r\n types: TypeRegistry,\r\n organization: string\r\n ) {\r\n this.cache = cache;\r\n this.storage = storage;\r\n this.types = types;\r\n this.organization = organization;\r\n }\r\n\r\n /**\r\n * Create a new CodexClient instance\r\n *\r\n * @param options - Optional configuration\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await CodexClient.create();\r\n * ```\r\n */\r\n static async create(options?: CodexClientOptions): Promise<CodexClient> {\r\n // Dynamic import of SDK\r\n const {\r\n CacheManager,\r\n createStorageManager,\r\n createDefaultRegistry,\r\n CodexError,\r\n ConfigurationError\r\n } = await import('@fractary/codex');\r\n\r\n // Dynamic import of config utilities (to avoid loading js-yaml at module time)\r\n const { readYamlConfig } = await import('../config/migrate-config');\r\n const { resolveEnvVarsInConfig } = await import('../config/config-types');\r\n\r\n try {\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n // Resolve environment variables in config\r\n config = resolveEnvVarsInConfig(config);\r\n } catch (error) {\r\n throw new ConfigurationError(\r\n `Failed to load configuration from ${configPath}. Run \"fractary codex init\" to create a configuration.`\r\n );\r\n }\r\n\r\n const organization = options?.organizationSlug || config.organization;\r\n const cacheDir = options?.cacheDir || config.cacheDir || '.codex-cache';\r\n\r\n // Build storage manager config from YAML storage providers\r\n const storageConfig: any = {};\r\n\r\n if (config.storage && Array.isArray(config.storage)) {\r\n for (const provider of config.storage) {\r\n if (provider.type === 'github') {\r\n storageConfig.github = {\r\n token: provider.token || process.env.GITHUB_TOKEN,\r\n apiBaseUrl: provider.apiBaseUrl || 'https://api.github.com',\r\n branch: provider.branch || 'main'\r\n };\r\n } else if (provider.type === 'http') {\r\n storageConfig.http = {\r\n baseUrl: provider.baseUrl,\r\n headers: provider.headers,\r\n timeout: provider.timeout || 30000\r\n };\r\n } else if (provider.type === 'local') {\r\n storageConfig.local = {\r\n basePath: provider.basePath || './knowledge',\r\n followSymlinks: provider.followSymlinks || false\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Initialize storage manager\r\n const storage = createStorageManager(storageConfig);\r\n\r\n // Initialize cache manager\r\n const cache = new CacheManager({\r\n cacheDir,\r\n defaultTtl: 86400, // 24 hours\r\n maxMemoryEntries: 100,\r\n maxMemorySize: 50 * 1024 * 1024, // 50MB\r\n enablePersistence: true\r\n });\r\n\r\n // Connect storage to cache\r\n cache.setStorageManager(storage);\r\n\r\n // Initialize type registry with built-in types\r\n const types = createDefaultRegistry();\r\n\r\n // Load and register custom types from config\r\n if (config.types?.custom) {\r\n for (const [name, customType] of Object.entries(config.types.custom)) {\r\n const ct = customType as any; // Type from YAML config\r\n types.register({\r\n name,\r\n description: ct.description || `Custom type: ${name}`,\r\n patterns: ct.patterns || [],\r\n defaultTtl: ct.defaultTtl || 86400,\r\n archiveAfterDays: ct.archiveAfterDays !== undefined ? ct.archiveAfterDays : null,\r\n archiveStorage: ct.archiveStorage || null\r\n });\r\n }\r\n }\r\n\r\n return new CodexClient(cache, storage, types, organization);\r\n } catch (error) {\r\n if (error instanceof CodexError) {\r\n throw error;\r\n }\r\n throw new CodexError(\r\n `Failed to initialize CodexClient: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Fetch a document by codex:// URI\r\n *\r\n * This method:\r\n * 1. Validates the URI format\r\n * 2. Resolves the URI to a reference\r\n * 3. Uses CacheManager.get() which handles cache-first fetch\r\n *\r\n * @param uri - Codex URI (e.g., codex://org/project/path/to/file.md)\r\n * @param options - Fetch options\r\n * @returns Promise resolving to fetch result\r\n *\r\n * @throws {CodexError} If URI format is invalid or fetch fails\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await client.fetch('codex://fractary/codex/docs/README.md');\r\n * console.log(result.content.toString());\r\n * ```\r\n */\r\n async fetch(uri: string, options?: FetchOptions): Promise<FetchResult> {\r\n // Dynamic import of SDK functions\r\n const { validateUri, resolveReference, CodexError } = await import('@fractary/codex');\r\n\r\n // Validate URI early\r\n if (!validateUri(uri)) {\r\n throw new CodexError(`Invalid codex URI: ${uri}`);\r\n }\r\n\r\n // Resolve URI to reference (with cache path)\r\n const resolved = resolveReference(uri);\r\n if (!resolved) {\r\n throw new CodexError(`Failed to resolve URI: ${uri}`);\r\n }\r\n\r\n try {\r\n // If bypassing cache, fetch directly from storage\r\n if (options?.bypassCache) {\r\n const result = await this.storage.fetch(resolved);\r\n return {\r\n content: result.content,\r\n fromCache: false,\r\n metadata: {\r\n fetchedAt: new Date().toISOString(),\r\n contentLength: result.size\r\n }\r\n };\r\n }\r\n\r\n // Use CacheManager.get() which handles cache-first fetch\r\n const result = await this.cache.get(resolved, {\r\n ttl: options?.ttl\r\n });\r\n\r\n return {\r\n content: result.content,\r\n fromCache: true, // CacheManager.get handles cache logic\r\n metadata: {\r\n contentLength: result.size\r\n }\r\n };\r\n } catch (error) {\r\n throw new CodexError(\r\n `Failed to fetch ${uri}: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Invalidate cache entries\r\n *\r\n * @param pattern - Optional glob pattern to match entries\r\n * If not provided, clears all entries\r\n *\r\n * @example\r\n * ```typescript\r\n * // Clear all cache\r\n * await client.invalidateCache();\r\n *\r\n * // Clear specific URI\r\n * await client.invalidateCache('codex://fractary/codex/docs/README.md');\r\n * ```\r\n */\r\n async invalidateCache(pattern?: string): Promise<void> {\r\n if (pattern) {\r\n await this.cache.invalidate(pattern);\r\n } else {\r\n await this.cache.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n *\r\n * @returns Promise resolving to cache stats\r\n *\r\n * @example\r\n * ```typescript\r\n * const stats = await client.getCacheStats();\r\n * console.log(`Cache entries: ${stats.totalEntries}`);\r\n * console.log(`Total size: ${stats.totalSize}`);\r\n * ```\r\n */\r\n async getCacheStats(): Promise<CacheStats> {\r\n return this.cache.getStats();\r\n }\r\n\r\n /**\r\n * Get the type registry\r\n *\r\n * Provides access to built-in and custom artifact types\r\n *\r\n * @returns TypeRegistry instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const registry = client.getTypeRegistry();\r\n * const types = registry.list();\r\n * ```\r\n */\r\n getTypeRegistry(): TypeRegistry {\r\n return this.types;\r\n }\r\n\r\n /**\r\n * Get the cache manager (for advanced operations)\r\n *\r\n * @returns CacheManager instance\r\n */\r\n getCacheManager(): CacheManager {\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * Get the storage manager (for advanced operations)\r\n *\r\n * @returns StorageManager instance\r\n */\r\n getStorageManager(): StorageManager {\r\n return this.storage;\r\n }\r\n\r\n /**\r\n * Get the organization slug\r\n *\r\n * @returns Organization slug string\r\n */\r\n getOrganization(): string {\r\n return this.organization;\r\n }\r\n}\r\n\r\n// Re-export SDK error classes for convenience\r\nexport {\r\n CodexError,\r\n ConfigurationError,\r\n ValidationError,\r\n PermissionDeniedError\r\n} from '@fractary/codex';\r\n","/**\n * Fractary Codex CLI - Command-line interface for knowledge management\n *\n * Pull-based document retrieval with codex:// URI scheme and intelligent caching.\n *\n * @see https://github.com/fractary/codex\n */\n\nimport { Command } from 'commander';\nimport { initCommand } from './commands/init.js';\nimport { fetchCommand } from './commands/fetch.js';\nimport { cacheCommand } from './commands/cache/index.js';\nimport { syncCommand } from './commands/sync/index.js';\nimport { typesCommand } from './commands/types/index.js';\nimport { healthCommand } from './commands/health.js';\nimport { migrateCommand } from './commands/migrate.js';\n\n/**\n * Create and configure the CLI\n */\nfunction createCLI(): Command {\n const program = new Command('fractary-codex');\n\n program\n .description('Centralized knowledge management and distribution for AI agents')\n .version('0.2.0');\n\n // Core commands (v3.0)\n program.addCommand(initCommand()); // Initialize codex configuration\n program.addCommand(fetchCommand()); // Fetch documents by codex:// URI\n program.addCommand(cacheCommand()); // Cache management (list, clear, stats)\n program.addCommand(syncCommand()); // Bidirectional sync (project, org)\n program.addCommand(typesCommand()); // Type registry (list, show, add, remove)\n program.addCommand(healthCommand()); // Diagnostics and auto-repair\n program.addCommand(migrateCommand()); // v2.0 to v3.0 migration\n\n return program;\n}\n\n/**\n * Main execution\n */\nasync function main() {\n try {\n const program = createCLI();\n await program.parseAsync(process.argv);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n// Run the CLI\nmain();\n","/**\r\n * Initialize Codex project command (v3.0 YAML)\r\n *\r\n * Creates .fractary/codex.yaml configuration with:\r\n * - Organization detection from git remote\r\n * - Multi-provider storage configuration\r\n * - Cache configuration\r\n * - Type registry setup\r\n * - Optional MCP server registration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport { getDefaultYamlConfig, writeYamlConfig } from '../config/migrate-config';\r\n\r\n/**\r\n * Extract org from git remote URL\r\n */\r\nasync function getOrgFromGitRemote(): Promise<string | null> {\r\n try {\r\n const { execSync } = require('child_process');\r\n const remote = execSync('git remote get-url origin 2>/dev/null', { encoding: 'utf-8' }).trim();\r\n\r\n // Parse GitHub URL: git@github.com:org/repo.git or https://github.com/org/repo.git\r\n const sshMatch = remote.match(/git@github\\.com:([^/]+)\\//);\r\n const httpsMatch = remote.match(/github\\.com\\/([^/]+)\\//);\r\n\r\n return sshMatch?.[1] || httpsMatch?.[1] || null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function initCommand(): Command {\r\n const cmd = new Command('init');\r\n\r\n cmd\r\n .description('Initialize Codex v3.0 with YAML configuration')\r\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\r\n .option('--mcp', 'Enable MCP server registration')\r\n .option('--force', 'Overwrite existing configuration')\r\n .action(async (options) => {\r\n try {\r\n console.log(chalk.blue('Initializing Codex v3.0 (YAML format)...\\n'));\r\n\r\n // Resolve organization\r\n let org = options.org;\r\n\r\n if (!org) {\r\n // Try git remote first\r\n org = await getOrgFromGitRemote();\r\n }\r\n\r\n if (!org) {\r\n // Try SDK's resolveOrganization (dynamic import)\r\n try {\r\n const { resolveOrganization } = await import('@fractary/codex');\r\n org = resolveOrganization({\r\n repoName: path.basename(process.cwd())\r\n });\r\n } catch {\r\n // SDK method failed, continue\r\n }\r\n }\r\n\r\n if (!org) {\r\n // Default fallback\r\n org = path.basename(process.cwd()).split('-')[0] || 'default';\r\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`));\r\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'));\r\n } else {\r\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`));\r\n }\r\n\r\n // Config path (v3.0 YAML location)\r\n const configDir = path.join(process.cwd(), '.fractary');\r\n const configPath = path.join(configDir, 'codex.yaml');\r\n const configExists = await fileExists(configPath);\r\n\r\n // Check for legacy config\r\n const legacyConfigPath = path.join(process.cwd(), '.fractary', 'plugins', 'codex', 'config.json');\r\n const legacyExists = await fileExists(legacyConfigPath);\r\n\r\n if (configExists && !options.force) {\r\n console.log(chalk.yellow('⚠ Configuration already exists at .fractary/codex.yaml'));\r\n console.log(chalk.dim('Use --force to overwrite'));\r\n process.exit(1);\r\n }\r\n\r\n if (legacyExists && !configExists) {\r\n console.log(chalk.yellow('⚠ Legacy configuration detected at .fractary/plugins/codex/config.json'));\r\n console.log(chalk.dim('Run \"fractary codex migrate\" to upgrade to YAML format\\n'));\r\n }\r\n\r\n // Create directory structure\r\n console.log('Creating directory structure...');\r\n\r\n const dirs = [\r\n '.fractary',\r\n '.codex-cache'\r\n ];\r\n\r\n for (const dir of dirs) {\r\n await fs.mkdir(path.join(process.cwd(), dir), { recursive: true });\r\n console.log(chalk.green('✓'), chalk.dim(dir + '/'));\r\n }\r\n\r\n // Create configuration\r\n console.log('\\nCreating YAML configuration...');\r\n\r\n const config = getDefaultYamlConfig(org);\r\n\r\n // Enable MCP if requested\r\n if (options.mcp && config.mcp) {\r\n config.mcp.enabled = true;\r\n }\r\n\r\n // Write YAML config\r\n await writeYamlConfig(config, configPath);\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/codex.yaml'));\r\n\r\n // Success message\r\n console.log(chalk.green('\\n✓ Codex v3.0 initialized successfully!\\n'));\r\n\r\n console.log(chalk.bold('Configuration:'));\r\n console.log(chalk.dim(` Organization: ${org}`));\r\n console.log(chalk.dim(` Cache: .codex-cache/`));\r\n console.log(chalk.dim(` Config: .fractary/codex.yaml`));\r\n if (options.mcp) {\r\n console.log(chalk.dim(` MCP Server: Enabled (port 3000)`));\r\n }\r\n\r\n console.log(chalk.bold('\\nStorage providers configured:'));\r\n console.log(chalk.dim(' - Local filesystem (./knowledge)'));\r\n console.log(chalk.dim(' - GitHub (requires GITHUB_TOKEN)'));\r\n console.log(chalk.dim(' - HTTP endpoint'));\r\n\r\n console.log(chalk.bold('\\nNext steps:'));\r\n console.log(chalk.dim(' 1. Set your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n console.log(chalk.dim(' 2. Edit .fractary/codex.yaml to configure storage providers'));\r\n console.log(chalk.dim(' 3. Fetch a document: fractary codex fetch codex://org/project/path'));\r\n console.log(chalk.dim(' 4. Check cache: fractary codex cache list'));\r\n\r\n if (legacyExists) {\r\n console.log(chalk.yellow('\\n⚠ Legacy config detected:'));\r\n console.log(chalk.dim(' Run \"fractary codex migrate\" to convert your existing config'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Fetch document command (v3.0)\r\n *\r\n * Retrieves documents by codex:// URI reference using SDK's CodexClient:\r\n * - Cache-first retrieval for fast access\r\n * - TTL-based cache invalidation\r\n * - Multiple storage provider support\r\n * - Automatic URI validation and resolution\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../client/get-client';\r\n\r\n/**\r\n * Calculate content hash\r\n */\r\nfunction hashContent(content: Buffer): string {\r\n const crypto = require('crypto');\r\n return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);\r\n}\r\n\r\nexport function fetchCommand(): Command {\r\n const cmd = new Command('fetch');\r\n\r\n cmd\r\n .description('Fetch a document by codex:// URI reference')\r\n .argument('<uri>', 'Codex URI (e.g., codex://org/project/docs/file.md)')\r\n .option('--bypass-cache', 'Skip cache and fetch directly from source')\r\n .option('--ttl <seconds>', 'Override default TTL (in seconds)', parseInt)\r\n .option('--json', 'Output as JSON with metadata')\r\n .option('--output <file>', 'Write content to file instead of stdout')\r\n .action(async (uri: string, options) => {\r\n try {\r\n // Dynamically import validateUri to avoid loading SDK at module time\r\n const { validateUri } = await import('@fractary/codex');\r\n\r\n // Validate URI format\r\n if (!validateUri(uri)) {\r\n console.error(chalk.red('Error: Invalid URI format'));\r\n console.log(chalk.dim('Expected: codex://org/project/path/to/file.md'));\r\n console.log(chalk.dim('Example: codex://fractary/codex/docs/api.md'));\r\n process.exit(1);\r\n }\r\n\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Show fetching message (unless JSON output)\r\n if (!options.json && !options.bypassCache) {\r\n console.error(chalk.dim(`Fetching ${uri}...`));\r\n }\r\n\r\n // Fetch using CodexClient\r\n const result = await client.fetch(uri, {\r\n bypassCache: options.bypassCache,\r\n ttl: options.ttl\r\n });\r\n\r\n // Output handling\r\n if (options.json) {\r\n const output = {\r\n uri,\r\n content: result.content.toString('utf-8'),\r\n metadata: {\r\n fromCache: result.fromCache,\r\n fetchedAt: result.metadata?.fetchedAt,\r\n expiresAt: result.metadata?.expiresAt,\r\n contentLength: result.metadata?.contentLength || result.content.length,\r\n contentHash: hashContent(result.content)\r\n }\r\n };\r\n console.log(JSON.stringify(output, null, 2));\r\n } else if (options.output) {\r\n // Write to file\r\n await fs.writeFile(options.output, result.content);\r\n console.log(chalk.green('✓'), `Written to ${options.output}`);\r\n console.log(chalk.dim(` Size: ${result.content.length} bytes`));\r\n if (result.fromCache) {\r\n console.log(chalk.dim(' Source: cache'));\r\n } else {\r\n console.log(chalk.dim(' Source: storage'));\r\n }\r\n } else {\r\n // Print to stdout\r\n if (result.fromCache && !options.bypassCache) {\r\n console.error(chalk.green('✓'), chalk.dim('from cache\\n'));\r\n } else {\r\n console.error(chalk.green('✓'), chalk.dim('fetched\\n'));\r\n }\r\n console.log(result.content.toString('utf-8'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n\r\n // Provide helpful error messages\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n } else if (error.message.includes('GITHUB_TOKEN')) {\r\n console.log(chalk.dim('\\nSet your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n } else if (error.message.includes('not found') || error.message.includes('404')) {\r\n console.log(chalk.dim('\\nThe document may not exist or you may not have access.'));\r\n console.log(chalk.dim('Check the URI and ensure your storage providers are configured correctly.'));\r\n }\r\n\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Singleton getter for CodexClient\r\n *\r\n * Provides lazy initialization of the CodexClient instance.\r\n * This ensures we only create one client instance across all command invocations,\r\n * avoiding repeated configuration loading and manager initialization.\r\n *\r\n * Uses dynamic imports to avoid loading @fractary/codex SDK at module load time,\r\n * which prevents CLI hangs when running simple commands like --help.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { getClient } from './get-client';\r\n *\r\n * export async function fetchCommand(uri: string) {\r\n * const client = await getClient();\r\n * const result = await client.fetch(uri);\r\n * console.log(result.content.toString());\r\n * }\r\n * ```\r\n */\r\n\r\n// Import types only\r\nimport type { CodexClient, CodexClientOptions } from './codex-client';\r\n\r\n/**\r\n * Singleton instance\r\n */\r\nlet clientInstance: CodexClient | null = null;\r\n\r\n/**\r\n * Get the CodexClient singleton instance\r\n *\r\n * On first call, creates and initializes the client.\r\n * Subsequent calls return the same instance.\r\n *\r\n * @param options - Optional configuration (only used on first call)\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await getClient();\r\n * const stats = await client.getCacheStats();\r\n * ```\r\n */\r\nexport async function getClient(options?: CodexClientOptions): Promise<CodexClient> {\r\n if (!clientInstance) {\r\n // Dynamic import to avoid loading SDK at module time\r\n const { CodexClient } = await import('./codex-client');\r\n clientInstance = await CodexClient.create(options);\r\n }\r\n return clientInstance;\r\n}\r\n\r\n/**\r\n * Reset the singleton instance\r\n *\r\n * Useful for testing or when configuration changes require a fresh client.\r\n *\r\n * @example\r\n * ```typescript\r\n * // After changing configuration\r\n * resetClient();\r\n * const client = await getClient(); // Will create new instance\r\n * ```\r\n */\r\nexport function resetClient(): void {\r\n clientInstance = null;\r\n}\r\n\r\n/**\r\n * Check if client has been initialized\r\n *\r\n * @returns true if client instance exists\r\n */\r\nexport function isClientInitialized(): boolean {\r\n return clientInstance !== null;\r\n}\r\n","/**\r\n * Cache command group (v3.0)\r\n *\r\n * Manages the codex document cache with subcommands:\r\n * - list: View cached entries\r\n * - clear: Remove cache entries\r\n * - stats: Display cache statistics\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { cacheListCommand } from './list';\r\nimport { cacheClearCommand } from './clear';\r\nimport { cacheStatsCommand } from './stats';\r\n\r\nexport function cacheCommand(): Command {\r\n const cmd = new Command('cache');\r\n\r\n cmd\r\n .description('Manage the codex document cache');\r\n\r\n // Register subcommands\r\n cmd.addCommand(cacheListCommand());\r\n cmd.addCommand(cacheClearCommand());\r\n cmd.addCommand(cacheStatsCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache list command (v3.0)\r\n *\r\n * Lists cache information using SDK's CacheManager\r\n *\r\n * Note: The SDK's CacheManager doesn't expose individual cache entries.\r\n * Use 'cache stats' for detailed cache statistics.\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function cacheListCommand(): Command {\r\n const cmd = new Command('list');\r\n\r\n cmd\r\n .description('List cache information')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (stats.entryCount === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ entries: 0, message: 'Cache is empty' }));\r\n } else {\r\n console.log(chalk.yellow('Cache is empty.'));\r\n console.log(chalk.dim('Fetch some documents to populate the cache.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n entryCount: stats.entryCount,\r\n totalSize: stats.totalSize,\r\n freshCount: stats.freshCount,\r\n staleCount: stats.staleCount,\r\n expiredCount: stats.expiredCount\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display cache overview\r\n console.log(chalk.bold('Cache Overview\\n'));\r\n\r\n console.log(chalk.bold('Entries:'));\r\n console.log(` Total: ${chalk.cyan(stats.entryCount.toString())} entries`);\r\n console.log(` Fresh: ${chalk.green(stats.freshCount.toString())} entries`);\r\n console.log(` Stale: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')} entries`);\r\n console.log(` Expired: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')} entries`);\r\n console.log('');\r\n\r\n console.log(chalk.bold('Storage:'));\r\n console.log(` Total size: ${chalk.cyan(formatSize(stats.totalSize))}`);\r\n console.log('');\r\n\r\n // Health indicator\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n console.log('');\r\n\r\n console.log(chalk.dim('Note: Individual cache entries are managed by the SDK.'));\r\n console.log(chalk.dim('Use \"fractary codex cache stats\" for detailed statistics.'));\r\n console.log(chalk.dim('Use \"fractary codex cache clear\" to clear cache entries.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache clear command (v3.0)\r\n *\r\n * Clears cache entries using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheClearCommand(): Command {\r\n const cmd = new Command('clear');\r\n\r\n cmd\r\n .description('Clear cache entries')\r\n .option('--all', 'Clear entire cache')\r\n .option('--pattern <glob>', 'Clear entries matching URI pattern (e.g., \"codex://fractary/*\")')\r\n .option('--dry-run', 'Show what would be cleared without actually clearing')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get stats before clearing (for reporting)\r\n const statsBefore = await client.getCacheStats();\r\n\r\n if (statsBefore.entryCount === 0) {\r\n console.log(chalk.yellow('Cache is already empty. Nothing to clear.'));\r\n return;\r\n }\r\n\r\n // Determine what to clear\r\n let pattern: string | undefined;\r\n\r\n if (options.all) {\r\n pattern = undefined; // Clear all\r\n } else if (options.pattern) {\r\n pattern = options.pattern;\r\n } else {\r\n console.log(chalk.yellow('Please specify what to clear:'));\r\n console.log(chalk.dim(' --all Clear entire cache'));\r\n console.log(chalk.dim(' --pattern Clear entries matching pattern (e.g., \"codex://fractary/*\")'));\r\n console.log('');\r\n console.log(chalk.dim('Examples:'));\r\n console.log(chalk.dim(' fractary codex cache clear --all'));\r\n console.log(chalk.dim(' fractary codex cache clear --pattern \"codex://fractary/cli/*\"'));\r\n return;\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would clear:\\n'));\r\n if (pattern) {\r\n console.log(chalk.dim(` Pattern: ${pattern}`));\r\n console.log(chalk.dim(` This would invalidate matching cache entries`));\r\n } else {\r\n console.log(chalk.dim(` All cache entries (${statsBefore.entryCount} entries)`));\r\n }\r\n console.log(chalk.dim(`\\nTotal size: ${formatSize(statsBefore.totalSize)}`));\r\n return;\r\n }\r\n\r\n // Perform invalidation\r\n if (pattern) {\r\n console.log(chalk.blue(`Clearing cache entries matching pattern: ${pattern}\\n`));\r\n await client.invalidateCache(pattern);\r\n } else {\r\n console.log(chalk.blue(`Clearing entire cache (${statsBefore.entryCount} entries)...\\n`));\r\n await client.invalidateCache();\r\n }\r\n\r\n // Get stats after clearing\r\n const statsAfter = await client.getCacheStats();\r\n const entriesCleared = statsBefore.entryCount - statsAfter.entryCount;\r\n const sizeFreed = statsBefore.totalSize - statsAfter.totalSize;\r\n\r\n // Summary\r\n console.log(chalk.green(`✓ Cleared ${entriesCleared} entries (${formatSize(sizeFreed)} freed)`));\r\n\r\n if (statsAfter.entryCount > 0) {\r\n console.log(chalk.dim(` Remaining: ${statsAfter.entryCount} entries (${formatSize(statsAfter.totalSize)})`));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n","/**\r\n * Cache stats command (v3.0)\r\n *\r\n * Display cache statistics using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function cacheStatsCommand(): Command {\r\n const cmd = new Command('stats');\r\n\r\n cmd\r\n .description('Display cache statistics')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(stats, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n console.log(chalk.bold('Cache Statistics\\n'));\r\n\r\n console.log(chalk.bold('Overview'));\r\n console.log(` Total entries: ${chalk.cyan(stats.entryCount.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatSize(stats.totalSize))}`);\r\n console.log(` Fresh entries: ${chalk.green(stats.freshCount.toString())}`);\r\n console.log(` Stale entries: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')}`);\r\n console.log(` Expired entries: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')}`);\r\n console.log('');\r\n\r\n // Health indicator based on fresh vs total ratio\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n\r\n if (stats.expiredCount > 0) {\r\n console.log(chalk.dim('\\nRun \"fractary codex cache clear --pattern <pattern>\" to clean up entries.'));\r\n }\r\n\r\n if (stats.entryCount === 0) {\r\n console.log(chalk.dim('\\nNo cached entries. Fetch some documents to populate the cache.'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Sync command group (v3.0)\r\n *\r\n * Bidirectional synchronization with codex repository:\r\n * - project: Sync single project\r\n * - org: Sync all projects in organization\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { syncProjectCommand } from './project';\r\nimport { syncOrgCommand } from './org';\r\n\r\nexport function syncCommand(): Command {\r\n const cmd = new Command('sync');\r\n\r\n cmd\r\n .description('Synchronize with codex repository');\r\n\r\n // Register subcommands\r\n cmd.addCommand(syncProjectCommand());\r\n cmd.addCommand(syncOrgCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Sync project command (v3.0)\r\n *\r\n * Synchronizes a single project with the codex repository using SDK SyncManager:\r\n * - Multi-directional sync (to-codex, from-codex, bidirectional)\r\n * - Manifest tracking for sync state\r\n * - Conflict detection and resolution\r\n * - Pattern-based file filtering\r\n * - Dry-run mode\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\n// Import types only\r\nimport type {\r\n SyncDirection,\r\n SyncOptions\r\n} from '@fractary/codex';\r\nimport { readYamlConfig } from '../../config/migrate-config';\r\n\r\n/**\r\n * Get environment branch mapping\r\n */\r\nfunction getEnvironmentBranch(config: any, env: string): string {\r\n const envMap = config.sync?.environments || {\r\n dev: 'develop',\r\n test: 'test',\r\n staging: 'staging',\r\n prod: 'main'\r\n };\r\n\r\n return envMap[env] || env;\r\n}\r\n\r\n/**\r\n * Format bytes to human-readable size\r\n */\r\nfunction formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\n/**\r\n * Format duration in milliseconds\r\n */\r\nfunction formatDuration(ms: number): string {\r\n if (ms < 1000) return `${ms}ms`;\r\n return `${(ms / 1000).toFixed(1)}s`;\r\n}\r\n\r\nexport function syncProjectCommand(): Command {\r\n const cmd = new Command('project');\r\n\r\n cmd\r\n .description('Sync single project with codex repository')\r\n .argument('[name]', 'Project name (auto-detected if not provided)')\r\n .option('--env <env>', 'Target environment (dev/test/staging/prod)', 'prod')\r\n .option('--dry-run', 'Show what would sync without executing')\r\n .option('--direction <dir>', 'Sync direction (to-codex/from-codex/bidirectional)', 'bidirectional')\r\n .option('--include <pattern>', 'Include files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--exclude <pattern>', 'Exclude files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--force', 'Force sync without checking timestamps')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string | undefined, options) => {\r\n try {\r\n // Load YAML config\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n } catch (error) {\r\n console.error(chalk.red('Error:'), 'Codex not initialized.');\r\n console.log(chalk.dim('Run \"fractary codex init\" first.'));\r\n process.exit(1);\r\n }\r\n\r\n // Dynamic import to avoid loading SDK at module time\r\n const { createSyncManager, createLocalStorage, detectCurrentProject } = await import('@fractary/codex');\r\n\r\n // Determine project name\r\n let projectName = name;\r\n if (!projectName) {\r\n const detected = detectCurrentProject();\r\n projectName = detected.project || null;\r\n }\r\n\r\n if (!projectName) {\r\n console.error(chalk.red('Error:'), 'Could not determine project name.');\r\n console.log(chalk.dim('Provide project name as argument or run from a git repository.'));\r\n process.exit(1);\r\n }\r\n\r\n // Validate direction\r\n const validDirections: SyncDirection[] = ['to-codex', 'from-codex', 'bidirectional'];\r\n if (!validDirections.includes(options.direction as SyncDirection)) {\r\n console.error(chalk.red('Error:'), `Invalid direction: ${options.direction}`);\r\n console.log(chalk.dim('Valid options: to-codex, from-codex, bidirectional'));\r\n process.exit(1);\r\n }\r\n\r\n const direction = options.direction as SyncDirection;\r\n const targetBranch = getEnvironmentBranch(config, options.env);\r\n\r\n // Create LocalStorage instance\r\n const localStorage = createLocalStorage({\r\n baseDir: process.cwd()\r\n });\r\n\r\n // Create SyncManager\r\n const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get default include patterns from config\r\n const defaultPatterns = config.sync?.include || [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Combine config patterns with CLI options\r\n const includePatterns = options.include.length > 0 ? options.include : defaultPatterns;\r\n const excludePatterns = [\r\n ...(config.sync?.exclude || []),\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files\r\n const sourceDir = process.cwd();\r\n const allFiles = await syncManager.listLocalFiles(sourceDir);\r\n\r\n // Filter files by patterns (simple implementation)\r\n const targetFiles = allFiles.filter(file => {\r\n // Check exclude patterns first\r\n for (const pattern of excludePatterns) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*') + '$');\r\n if (regex.test(file.path)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check include patterns\r\n for (const pattern of includePatterns) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*') + '$');\r\n if (regex.test(file.path)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // Create sync plan\r\n const syncOptions: SyncOptions = {\r\n direction,\r\n dryRun: options.dryRun,\r\n force: options.force,\r\n include: includePatterns,\r\n exclude: excludePatterns\r\n };\r\n\r\n const plan = await syncManager.createPlan(\r\n config.organization,\r\n projectName,\r\n sourceDir,\r\n targetFiles,\r\n syncOptions\r\n );\r\n\r\n if (plan.totalFiles === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n project: projectName,\r\n organization: config.organization,\r\n files: [],\r\n synced: 0\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.yellow('No files to sync.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n const output = {\r\n project: projectName,\r\n organization: config.organization,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n dryRun: options.dryRun || false,\r\n plan: {\r\n totalFiles: plan.totalFiles,\r\n totalBytes: plan.totalBytes,\r\n estimatedTime: plan.estimatedTime,\r\n conflicts: plan.conflicts.length,\r\n skipped: plan.skipped.length\r\n },\r\n files: plan.files.map(f => ({\r\n path: f.path,\r\n operation: f.operation,\r\n size: f.size\r\n }))\r\n };\r\n\r\n if (options.dryRun) {\r\n console.log(JSON.stringify(output, null, 2));\r\n return;\r\n }\r\n\r\n // Execute and add results\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n console.log(JSON.stringify({\r\n ...output,\r\n result: {\r\n success: result.success,\r\n synced: result.synced,\r\n failed: result.failed,\r\n skipped: result.skipped,\r\n duration: result.duration,\r\n errors: result.errors\r\n }\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display sync plan\r\n console.log(chalk.bold('Sync Plan\\n'));\r\n console.log(` Project: ${chalk.cyan(projectName)}`);\r\n console.log(` Organization: ${chalk.cyan(config.organization)}`);\r\n console.log(` Environment: ${chalk.cyan(options.env)} (${targetBranch})`);\r\n console.log(` Direction: ${chalk.cyan(direction)}`);\r\n console.log(` Files: ${chalk.cyan(plan.totalFiles.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(plan.totalBytes))}`);\r\n if (plan.estimatedTime) {\r\n console.log(` Est. time: ${chalk.dim(formatDuration(plan.estimatedTime))}`);\r\n }\r\n console.log('');\r\n\r\n if (plan.conflicts.length > 0) {\r\n console.log(chalk.yellow(`⚠ ${plan.conflicts.length} conflicts detected:`));\r\n for (const conflict of plan.conflicts.slice(0, 5)) {\r\n console.log(chalk.yellow(` • ${conflict.path}`));\r\n }\r\n if (plan.conflicts.length > 5) {\r\n console.log(chalk.dim(` ... and ${plan.conflicts.length - 5} more`));\r\n }\r\n console.log('');\r\n }\r\n\r\n if (plan.skipped.length > 0) {\r\n console.log(chalk.dim(`${plan.skipped.length} files skipped (no changes)`));\r\n console.log('');\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would sync:\\n'));\r\n\r\n const filesToShow = plan.files.slice(0, 10);\r\n for (const file of filesToShow) {\r\n const arrow = direction === 'to-codex' ? '→' : direction === 'from-codex' ? '←' : '↔';\r\n const opColor = file.operation === 'create' ? chalk.green :\r\n file.operation === 'update' ? chalk.yellow :\r\n chalk.dim;\r\n console.log(\r\n chalk.dim(` ${arrow}`),\r\n opColor(file.operation.padEnd(7)),\r\n file.path,\r\n chalk.dim(`(${formatBytes(file.size || 0)})`)\r\n );\r\n }\r\n\r\n if (plan.files.length > 10) {\r\n console.log(chalk.dim(` ... and ${plan.files.length - 10} more files`));\r\n }\r\n\r\n console.log(chalk.dim(`\\nTotal: ${plan.totalFiles} files (${formatBytes(plan.totalBytes)})`));\r\n console.log(chalk.dim('Run without --dry-run to execute sync.'));\r\n return;\r\n }\r\n\r\n // Execute sync\r\n console.log(chalk.blue('Syncing...\\n'));\r\n\r\n const startTime = Date.now();\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n const duration = Date.now() - startTime;\r\n\r\n // Summary\r\n console.log('');\r\n if (result.success) {\r\n console.log(chalk.green(`✓ Sync completed successfully`));\r\n console.log(chalk.dim(` Synced: ${result.synced} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n console.log(chalk.dim(` Duration: ${formatDuration(duration)}`));\r\n } else {\r\n console.log(chalk.yellow(`⚠ Sync completed with errors`));\r\n console.log(chalk.green(` Synced: ${result.synced} files`));\r\n console.log(chalk.red(` Failed: ${result.failed} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n console.log('');\r\n console.log(chalk.red('Errors:'));\r\n for (const error of result.errors.slice(0, 5)) {\r\n console.log(chalk.red(` • ${error.path}: ${error.error}`));\r\n }\r\n if (result.errors.length > 5) {\r\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more errors`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Sync org command (v3.0)\r\n *\r\n * Synchronizes all projects in an organization with the codex repository using SDK SyncManager:\r\n * - Discovers repositories via GitHub CLI\r\n * - Parallel sync execution\r\n * - Pattern-based filtering and exclusion\r\n * - Dry-run mode\r\n * - Per-repo error handling\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport { execSync } from 'child_process';\r\n// Import types only\r\nimport type {\r\n SyncDirection,\r\n SyncOptions\r\n} from '@fractary/codex';\r\nimport { readYamlConfig } from '../../config/migrate-config';\r\n\r\ninterface RepoInfo {\r\n name: string;\r\n url: string;\r\n defaultBranch: string;\r\n}\r\n\r\ninterface OrgSyncResult {\r\n repo: string;\r\n status: 'success' | 'skipped' | 'error';\r\n filesSynced?: number;\r\n duration?: number;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Get environment branch mapping\r\n */\r\nfunction getEnvironmentBranch(config: any, env: string): string {\r\n const envMap = config.sync?.environments || {\r\n dev: 'develop',\r\n test: 'test',\r\n staging: 'staging',\r\n prod: 'main'\r\n };\r\n\r\n return envMap[env] || env;\r\n}\r\n\r\n/**\r\n * Discover repositories in organization using GitHub CLI\r\n */\r\nasync function discoverRepos(org: string): Promise<RepoInfo[]> {\r\n try {\r\n const output = execSync(\r\n `gh repo list ${org} --json name,url,defaultBranchRef --limit 100`,\r\n { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }\r\n );\r\n\r\n const repos = JSON.parse(output);\r\n return repos.map((repo: any) => ({\r\n name: repo.name,\r\n url: repo.url,\r\n defaultBranch: repo.defaultBranchRef?.name || 'main'\r\n }));\r\n } catch (error: any) {\r\n throw new Error(`Failed to discover repos: ${error.message}. Ensure GitHub CLI is installed and authenticated.`);\r\n }\r\n}\r\n\r\n/**\r\n * Check if repo should be excluded\r\n */\r\nfunction shouldExclude(repoName: string, excludePatterns: string[]): boolean {\r\n for (const pattern of excludePatterns) {\r\n // Simple glob matching\r\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\r\n if (regex.test(repoName)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Sync a single repository\r\n */\r\nasync function syncRepository(\r\n repo: RepoInfo,\r\n config: any,\r\n direction: SyncDirection,\r\n syncOptions: SyncOptions\r\n): Promise<OrgSyncResult> {\r\n const startTime = Date.now();\r\n\r\n try {\r\n // Dynamic import to avoid loading SDK at module time\r\n const { createSyncManager, createLocalStorage } = await import('@fractary/codex');\r\n\r\n // Note: In a real implementation, this would:\r\n // 1. Clone or update local copy of repo to a temp directory\r\n // 2. Create SyncManager for that directory\r\n // 3. Execute sync plan\r\n // 4. Commit and push changes if direction includes 'to-codex'\r\n\r\n // For now, we'll demonstrate the SDK integration pattern\r\n // Assuming repo is already cloned to a local directory\r\n const repoDir = path.join(process.cwd(), '..', repo.name);\r\n\r\n // Create LocalStorage for this repo\r\n const localStorage = createLocalStorage({\r\n baseDir: repoDir\r\n });\r\n\r\n // Create SyncManager\r\n const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync,\r\n manifestPath: path.join(repoDir, '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get include patterns from config\r\n const includePatterns = config.sync?.include || [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // List files in repo\r\n const allFiles = await syncManager.listLocalFiles(repoDir);\r\n\r\n // Filter by include patterns\r\n const targetFiles = allFiles.filter(file => {\r\n for (const pattern of includePatterns) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*') + '$');\r\n if (regex.test(file.path)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n // Create and execute sync plan\r\n const plan = await syncManager.createPlan(\r\n config.organization,\r\n repo.name,\r\n repoDir,\r\n targetFiles,\r\n syncOptions\r\n );\r\n\r\n if (plan.totalFiles === 0) {\r\n return {\r\n repo: repo.name,\r\n status: 'skipped',\r\n filesSynced: 0,\r\n duration: Date.now() - startTime\r\n };\r\n }\r\n\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n\r\n return {\r\n repo: repo.name,\r\n status: result.success ? 'success' : 'error',\r\n filesSynced: result.synced,\r\n duration: Date.now() - startTime,\r\n error: result.success ? undefined : `${result.failed} files failed`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n repo: repo.name,\r\n status: 'error',\r\n duration: Date.now() - startTime,\r\n error: error.message\r\n };\r\n }\r\n}\r\n\r\nexport function syncOrgCommand(): Command {\r\n const cmd = new Command('org');\r\n\r\n cmd\r\n .description('Sync all projects in organization with codex repository')\r\n .option('--env <env>', 'Target environment (dev/test/staging/prod)', 'prod')\r\n .option('--dry-run', 'Show what would sync without executing')\r\n .option('--exclude <pattern>', 'Exclude repos matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--parallel <n>', 'Number of parallel syncs', parseInt, 3)\r\n .option('--direction <dir>', 'Sync direction (to-codex/from-codex/bidirectional)', 'bidirectional')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Load YAML config\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n } catch (error) {\r\n console.error(chalk.red('Error:'), 'Codex not initialized.');\r\n console.log(chalk.dim('Run \"fractary codex init\" first.'));\r\n process.exit(1);\r\n }\r\n\r\n // Validate direction\r\n const validDirections: SyncDirection[] = ['to-codex', 'from-codex', 'bidirectional'];\r\n if (!validDirections.includes(options.direction as SyncDirection)) {\r\n console.error(chalk.red('Error:'), `Invalid direction: ${options.direction}`);\r\n console.log(chalk.dim('Valid options: to-codex, from-codex, bidirectional'));\r\n process.exit(1);\r\n }\r\n\r\n const direction = options.direction as SyncDirection;\r\n const org = config.organization;\r\n const targetBranch = getEnvironmentBranch(config, options.env);\r\n\r\n // Combine config excludes with CLI excludes\r\n const excludePatterns = [\r\n ...(config.sync?.exclude || []),\r\n ...options.exclude\r\n ];\r\n\r\n if (!options.json) {\r\n console.log(chalk.bold('Organization Sync\\n'));\r\n console.log(` Organization: ${chalk.cyan(org)}`);\r\n console.log(` Environment: ${chalk.cyan(options.env)} (${targetBranch})`);\r\n console.log(` Direction: ${chalk.cyan(direction)}`);\r\n console.log(` Parallelism: ${chalk.cyan(options.parallel.toString())}`);\r\n if (excludePatterns.length > 0) {\r\n console.log(` Excluding: ${chalk.dim(excludePatterns.join(', '))}`);\r\n }\r\n console.log('');\r\n console.log(chalk.dim('Discovering repositories...'));\r\n }\r\n\r\n // Discover repos\r\n let repos: RepoInfo[];\r\n try {\r\n repos = await discoverRepos(org);\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: error.message }));\r\n } else {\r\n console.error(chalk.red('Error:'), error.message);\r\n }\r\n process.exit(1);\r\n }\r\n\r\n // Filter excluded repos\r\n const eligibleRepos = repos.filter(repo => !shouldExclude(repo.name, excludePatterns));\r\n const excludedRepos = repos.filter(repo => shouldExclude(repo.name, excludePatterns));\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(`Found ${repos.length} repositories (${excludedRepos.length} excluded)\\n`));\r\n }\r\n\r\n if (options.dryRun) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n organization: org,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n dryRun: true,\r\n repos: {\r\n total: repos.length,\r\n eligible: eligibleRepos.map(r => r.name),\r\n excluded: excludedRepos.map(r => r.name)\r\n }\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.blue('Dry run - would sync:\\n'));\r\n\r\n for (const repo of eligibleRepos) {\r\n console.log(chalk.green(' ✓'), repo.name);\r\n }\r\n\r\n if (excludedRepos.length > 0) {\r\n console.log('');\r\n console.log(chalk.dim('Excluded:'));\r\n for (const repo of excludedRepos) {\r\n console.log(chalk.dim(` - ${repo.name}`));\r\n }\r\n }\r\n\r\n console.log(chalk.dim(`\\nTotal: ${eligibleRepos.length} repos would be synced`));\r\n console.log(chalk.dim('Run without --dry-run to execute sync.'));\r\n }\r\n return;\r\n }\r\n\r\n // Execute sync\r\n if (!options.json) {\r\n console.log(chalk.blue('Syncing repositories...\\n'));\r\n }\r\n\r\n const results: OrgSyncResult[] = [];\r\n const syncOptions: SyncOptions = {\r\n direction,\r\n dryRun: false,\r\n force: false\r\n };\r\n\r\n // Process in parallel batches\r\n for (let i = 0; i < eligibleRepos.length; i += options.parallel) {\r\n const batch = eligibleRepos.slice(i, i + options.parallel);\r\n const batchResults = await Promise.all(\r\n batch.map(repo => syncRepository(repo, config, direction, syncOptions))\r\n );\r\n\r\n for (const result of batchResults) {\r\n results.push(result);\r\n\r\n if (!options.json) {\r\n if (result.status === 'success') {\r\n console.log(\r\n chalk.green(' ✓'),\r\n result.repo,\r\n chalk.dim(`(${result.filesSynced} files in ${result.duration}ms)`)\r\n );\r\n } else if (result.status === 'skipped') {\r\n console.log(\r\n chalk.dim(' -'),\r\n result.repo,\r\n chalk.dim('(no files to sync)')\r\n );\r\n } else if (result.status === 'error') {\r\n console.log(\r\n chalk.red(' ✗'),\r\n result.repo,\r\n chalk.red(`(${result.error})`)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Summary\r\n const successful = results.filter(r => r.status === 'success');\r\n const skipped = results.filter(r => r.status === 'skipped');\r\n const failed = results.filter(r => r.status === 'error');\r\n const totalFiles = successful.reduce((sum, r) => sum + (r.filesSynced || 0), 0);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n organization: org,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n results: {\r\n total: results.length,\r\n successful: successful.length,\r\n skipped: skipped.length,\r\n failed: failed.length,\r\n filesSynced: totalFiles,\r\n details: results\r\n }\r\n }, null, 2));\r\n } else {\r\n console.log('');\r\n console.log(chalk.green(`✓ Synced ${successful.length}/${results.length} repos (${totalFiles} files)`));\r\n if (skipped.length > 0) {\r\n console.log(chalk.dim(` Skipped ${skipped.length} repos (no changes)`));\r\n }\r\n if (failed.length > 0) {\r\n console.log(chalk.red(`✗ ${failed.length} repos failed`));\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: error.message }));\r\n } else {\r\n console.error(chalk.red('Error:'), error.message);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types command group (v3.0)\r\n *\r\n * Manages the artifact type registry:\r\n * - list: View all types (built-in and custom)\r\n * - show: View details for a specific type\r\n * - add: Register a custom type\r\n * - remove: Unregister a custom type\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { typesListCommand } from './list';\r\nimport { typesShowCommand } from './show';\r\nimport { typesAddCommand } from './add';\r\nimport { typesRemoveCommand } from './remove';\r\n\r\nexport function typesCommand(): Command {\r\n const cmd = new Command('types');\r\n\r\n cmd\r\n .description('Manage artifact type registry');\r\n\r\n // Register subcommands\r\n cmd.addCommand(typesListCommand());\r\n cmd.addCommand(typesShowCommand());\r\n cmd.addCommand(typesAddCommand());\r\n cmd.addCommand(typesRemoveCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types list command (v3.0)\r\n *\r\n * Lists all artifact types using SDK's TypeRegistry\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesListCommand(): Command {\r\n const cmd = new Command('list');\r\n\r\n cmd\r\n .description('List all artifact types')\r\n .option('--json', 'Output as JSON')\r\n .option('--custom-only', 'Show only custom types')\r\n .option('--builtin-only', 'Show only built-in types')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Get all types from registry\r\n const allTypes = registry.list();\r\n\r\n // Filter based on options\r\n let types = allTypes;\r\n if (options.customOnly) {\r\n types = allTypes.filter(t => !registry.isBuiltIn(t.name));\r\n } else if (options.builtinOnly) {\r\n types = allTypes.filter(t => registry.isBuiltIn(t.name));\r\n }\r\n\r\n if (options.json) {\r\n const builtinCount = types.filter(t => registry.isBuiltIn(t.name)).length;\r\n const customCount = types.length - builtinCount;\r\n\r\n console.log(JSON.stringify({\r\n count: types.length,\r\n builtinCount,\r\n customCount,\r\n types: types.map(t => ({\r\n name: t.name,\r\n description: t.description,\r\n patterns: t.patterns,\r\n defaultTtl: t.defaultTtl,\r\n ttl: formatTtl(t.defaultTtl),\r\n builtin: registry.isBuiltIn(t.name),\r\n archiveAfterDays: t.archiveAfterDays,\r\n archiveStorage: t.archiveStorage\r\n }))\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n if (types.length === 0) {\r\n console.log(chalk.yellow('No types found.'));\r\n return;\r\n }\r\n\r\n console.log(chalk.bold('Artifact Types\\n'));\r\n\r\n // Group by built-in vs custom\r\n const builtinTypes = types.filter(t => registry.isBuiltIn(t.name));\r\n const customTypes = types.filter(t => !registry.isBuiltIn(t.name));\r\n\r\n if (builtinTypes.length > 0 && !options.customOnly) {\r\n console.log(chalk.bold('Built-in Types'));\r\n console.log(chalk.dim('─'.repeat(70)));\r\n\r\n for (const type of builtinTypes) {\r\n const patternStr = type.patterns[0] || '';\r\n console.log(` ${chalk.cyan(type.name.padEnd(12))} ${patternStr.padEnd(30)} ${chalk.dim(`TTL: ${formatTtl(type.defaultTtl)}`)}`);\r\n console.log(` ${chalk.dim(' '.repeat(12) + type.description)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n if (customTypes.length > 0 && !options.builtinOnly) {\r\n console.log(chalk.bold('Custom Types'));\r\n console.log(chalk.dim('─'.repeat(70)));\r\n\r\n for (const type of customTypes) {\r\n const patternStr = type.patterns[0] || '';\r\n console.log(` ${chalk.green(type.name.padEnd(12))} ${patternStr.padEnd(30)} ${chalk.dim(`TTL: ${formatTtl(type.defaultTtl)}`)}`);\r\n console.log(` ${chalk.dim(' '.repeat(12) + type.description)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim(`Total: ${types.length} types (${builtinTypes.length} built-in, ${customTypes.length} custom)`));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types show command (v3.0)\r\n *\r\n * Shows details for a specific artifact type using SDK's TypeRegistry\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesShowCommand(): Command {\r\n const cmd = new Command('show');\r\n\r\n cmd\r\n .description('Show details for a specific type')\r\n .argument('<name>', 'Type name')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Get type from registry\r\n const type = registry.get(name);\r\n\r\n if (!type) {\r\n console.error(chalk.red('Error:'), `Type \"${name}\" not found.`);\r\n console.log(chalk.dim('Run \"fractary codex types list\" to see available types.'));\r\n process.exit(1);\r\n }\r\n\r\n const isBuiltin = registry.isBuiltIn(name);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n name: type.name,\r\n builtin: isBuiltin,\r\n description: type.description,\r\n patterns: type.patterns,\r\n defaultTtl: type.defaultTtl,\r\n ttl: formatTtl(type.defaultTtl),\r\n archiveAfterDays: type.archiveAfterDays,\r\n archiveStorage: type.archiveStorage,\r\n syncPatterns: type.syncPatterns,\r\n excludePatterns: type.excludePatterns\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n const nameColor = isBuiltin ? chalk.cyan : chalk.green;\r\n console.log(chalk.bold(`Type: ${nameColor(name)}\\n`));\r\n\r\n console.log(` ${chalk.dim('Source:')} ${isBuiltin ? 'Built-in' : 'Custom'}`);\r\n console.log(` ${chalk.dim('Description:')} ${type.description}`);\r\n console.log(` ${chalk.dim('TTL:')} ${formatTtl(type.defaultTtl)} (${type.defaultTtl} seconds)`);\r\n console.log('');\r\n\r\n console.log(chalk.bold('Patterns'));\r\n for (const pattern of type.patterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n\r\n if (type.archiveAfterDays !== null) {\r\n console.log('');\r\n console.log(chalk.bold('Archive Settings'));\r\n console.log(` ${chalk.dim('After:')} ${type.archiveAfterDays} days`);\r\n console.log(` ${chalk.dim('Storage:')} ${type.archiveStorage || 'not set'}`);\r\n }\r\n\r\n if (type.syncPatterns && type.syncPatterns.length > 0) {\r\n console.log('');\r\n console.log(chalk.bold('Sync Patterns'));\r\n for (const pattern of type.syncPatterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n }\r\n\r\n if (type.excludePatterns && type.excludePatterns.length > 0) {\r\n console.log('');\r\n console.log(chalk.bold('Exclude Patterns'));\r\n for (const pattern of type.excludePatterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types add command (v3.0)\r\n *\r\n * Registers a custom artifact type in YAML configuration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport { readYamlConfig, writeYamlConfig } from '../../config/migrate-config';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Validate type name\r\n */\r\nfunction isValidTypeName(name: string): boolean {\r\n return /^[a-z][a-z0-9-]*$/.test(name);\r\n}\r\n\r\n/**\r\n * Parse TTL string to seconds\r\n */\r\nfunction parseTtl(ttl: string): number {\r\n const match = ttl.match(/^(\\d+)([smhd])$/);\r\n if (!match) {\r\n throw new Error('Invalid TTL format');\r\n }\r\n\r\n const value = parseInt(match[1], 10);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n default: throw new Error('Unknown TTL unit');\r\n }\r\n}\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesAddCommand(): Command {\r\n const cmd = new Command('add');\r\n\r\n cmd\r\n .description('Add a custom artifact type')\r\n .argument('<name>', 'Type name (lowercase, alphanumeric with hyphens)')\r\n .requiredOption('--pattern <glob>', 'File pattern (glob syntax)')\r\n .option('--ttl <duration>', 'Cache TTL (e.g., \"24h\", \"7d\")', '24h')\r\n .option('--description <text>', 'Type description')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Validate type name\r\n if (!isValidTypeName(name)) {\r\n console.error(chalk.red('Error:'), 'Invalid type name.');\r\n console.log(chalk.dim('Type name must be lowercase, start with a letter, and contain only letters, numbers, and hyphens.'));\r\n process.exit(1);\r\n }\r\n\r\n // Get registry to check for conflicts\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Check for built-in type conflict\r\n if (registry.isBuiltIn(name)) {\r\n console.error(chalk.red('Error:'), `Cannot override built-in type \"${name}\".`);\r\n const builtinNames = registry.list().filter(t => registry.isBuiltIn(t.name)).map(t => t.name);\r\n console.log(chalk.dim('Built-in types: ' + builtinNames.join(', ')));\r\n process.exit(1);\r\n }\r\n\r\n // Check if type already exists\r\n if (registry.has(name)) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" already exists.`);\r\n console.log(chalk.dim('Use \"fractary codex types remove\" first to remove it.'));\r\n process.exit(1);\r\n }\r\n\r\n // Parse and validate TTL\r\n let ttlSeconds: number;\r\n try {\r\n ttlSeconds = parseTtl(options.ttl);\r\n } catch {\r\n console.error(chalk.red('Error:'), 'Invalid TTL format.');\r\n console.log(chalk.dim('Expected format: <number><unit> where unit is s (seconds), m (minutes), h (hours), or d (days)'));\r\n console.log(chalk.dim('Examples: 30m, 24h, 7d'));\r\n process.exit(1);\r\n }\r\n\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const config = await readYamlConfig(configPath);\r\n\r\n // Initialize types.custom if needed\r\n if (!config.types) {\r\n config.types = { custom: {} };\r\n }\r\n if (!config.types.custom) {\r\n config.types.custom = {};\r\n }\r\n\r\n // Add the new type to config\r\n config.types.custom[name] = {\r\n description: options.description || `Custom type: ${name}`,\r\n patterns: [options.pattern],\r\n defaultTtl: ttlSeconds\r\n };\r\n\r\n // Save config\r\n await writeYamlConfig(config, configPath);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n success: true,\r\n type: {\r\n name,\r\n description: config.types.custom[name].description,\r\n patterns: config.types.custom[name].patterns,\r\n defaultTtl: ttlSeconds,\r\n ttl: formatTtl(ttlSeconds),\r\n builtin: false\r\n },\r\n message: 'Custom type added successfully. Changes will take effect on next CLI invocation.'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n console.log(chalk.green('✓'), `Added custom type \"${chalk.cyan(name)}\"`);\r\n console.log('');\r\n console.log(` ${chalk.dim('Pattern:')} ${options.pattern}`);\r\n console.log(` ${chalk.dim('TTL:')} ${formatTtl(ttlSeconds)} (${ttlSeconds} seconds)`);\r\n if (options.description) {\r\n console.log(` ${chalk.dim('Description:')} ${options.description}`);\r\n }\r\n console.log('');\r\n console.log(chalk.dim('Note: Custom type will be available on next CLI invocation.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types remove command (v3.0)\r\n *\r\n * Unregisters a custom artifact type from YAML configuration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport { readYamlConfig, writeYamlConfig } from '../../config/migrate-config';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function typesRemoveCommand(): Command {\r\n const cmd = new Command('remove');\r\n\r\n cmd\r\n .description('Remove a custom artifact type')\r\n .argument('<name>', 'Type name to remove')\r\n .option('--json', 'Output as JSON')\r\n .option('--force', 'Skip confirmation')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Get registry to check type status\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Check for built-in type\r\n if (registry.isBuiltIn(name)) {\r\n console.error(chalk.red('Error:'), `Cannot remove built-in type \"${name}\".`);\r\n console.log(chalk.dim('Built-in types are permanent and cannot be removed.'));\r\n process.exit(1);\r\n }\r\n\r\n // Check if custom type exists\r\n if (!registry.has(name)) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" not found.`);\r\n console.log(chalk.dim('Run \"fractary codex types list --custom-only\" to see custom types.'));\r\n process.exit(1);\r\n }\r\n\r\n // Get type info before removal\r\n const typeInfo = registry.get(name)!;\r\n\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const config = await readYamlConfig(configPath);\r\n\r\n // Check if custom type exists in config\r\n if (!config.types?.custom?.[name]) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" not found in configuration.`);\r\n process.exit(1);\r\n }\r\n\r\n // Remove the type from config\r\n delete config.types.custom[name];\r\n\r\n // Clean up empty objects\r\n if (Object.keys(config.types.custom).length === 0) {\r\n delete config.types.custom;\r\n }\r\n if (config.types && Object.keys(config.types).length === 0) {\r\n delete config.types;\r\n }\r\n\r\n // Save config\r\n await writeYamlConfig(config, configPath);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n success: true,\r\n removed: {\r\n name: typeInfo.name,\r\n description: typeInfo.description,\r\n patterns: typeInfo.patterns,\r\n defaultTtl: typeInfo.defaultTtl\r\n },\r\n message: 'Custom type removed successfully. Changes will take effect on next CLI invocation.'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n console.log(chalk.green('✓'), `Removed custom type \"${chalk.cyan(name)}\"`);\r\n console.log('');\r\n console.log(chalk.dim('Removed configuration:'));\r\n console.log(` ${chalk.dim('Pattern:')} ${typeInfo.patterns.join(', ')}`);\r\n console.log(` ${chalk.dim('Description:')} ${typeInfo.description}`);\r\n console.log('');\r\n console.log(chalk.dim('Note: Custom type will be removed on next CLI invocation.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Health command (v3.0)\r\n *\r\n * Comprehensive diagnostics for codex SDK setup:\r\n * - YAML configuration validation\r\n * - CodexClient initialization\r\n * - Cache health via CacheManager\r\n * - Storage provider connectivity\r\n * - Type registry validation\r\n * - Legacy configuration detection\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../client/get-client';\r\nimport { readYamlConfig } from '../config/migrate-config';\r\n\r\ninterface HealthCheck {\r\n name: string;\r\n status: 'pass' | 'warn' | 'fail';\r\n message: string;\r\n details?: string;\r\n}\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Check YAML configuration\r\n */\r\nasync function checkConfiguration(): Promise<HealthCheck> {\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const legacyConfigPath = path.join(process.cwd(), '.fractary', 'plugins', 'codex', 'config.json');\r\n\r\n try {\r\n // Check for YAML config\r\n if (!await fileExists(configPath)) {\r\n // Check for legacy config\r\n if (await fileExists(legacyConfigPath)) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'Legacy JSON configuration detected',\r\n details: 'Run \"fractary codex migrate\" to upgrade to YAML format'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Configuration',\r\n status: 'fail',\r\n message: 'No configuration found',\r\n details: 'Run \"fractary codex init\" to create configuration'\r\n };\r\n }\r\n\r\n // Validate YAML config\r\n const config = await readYamlConfig(configPath);\r\n\r\n if (!config.organization) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'No organization configured',\r\n details: 'Organization slug is required'\r\n };\r\n }\r\n\r\n // Check storage providers\r\n const providerCount = config.storage?.length || 0;\r\n if (providerCount === 0) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'No storage providers configured',\r\n details: 'At least one storage provider is recommended'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Configuration',\r\n status: 'pass',\r\n message: 'Valid YAML configuration',\r\n details: `Organization: ${config.organization}, ${providerCount} storage provider(s)`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Configuration',\r\n status: 'fail',\r\n message: 'Invalid configuration',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check SDK client initialization\r\n */\r\nasync function checkSDKClient(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const organization = client.getOrganization();\r\n\r\n return {\r\n name: 'SDK Client',\r\n status: 'pass',\r\n message: 'CodexClient initialized successfully',\r\n details: `Organization: ${organization}`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'SDK Client',\r\n status: 'fail',\r\n message: 'Failed to initialize CodexClient',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check cache health\r\n */\r\nasync function checkCache(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const stats = await client.getCacheStats();\r\n\r\n if (stats.entryCount === 0) {\r\n return {\r\n name: 'Cache',\r\n status: 'warn',\r\n message: 'Cache is empty',\r\n details: 'Fetch some documents to populate cache'\r\n };\r\n }\r\n\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n\r\n if (healthPercent < 50) {\r\n return {\r\n name: 'Cache',\r\n status: 'warn',\r\n message: `${stats.entryCount} entries (${healthPercent.toFixed(0)}% fresh)`,\r\n details: `${stats.expiredCount} expired, ${stats.staleCount} stale`\r\n };\r\n }\r\n\r\n return {\r\n name: 'Cache',\r\n status: 'pass',\r\n message: `${stats.entryCount} entries (${healthPercent.toFixed(0)}% fresh)`,\r\n details: `${formatSize(stats.totalSize)} total`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Cache',\r\n status: 'fail',\r\n message: 'Cache check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check storage providers\r\n */\r\nasync function checkStorage(): Promise<HealthCheck> {\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n\r\n try {\r\n const config = await readYamlConfig(configPath);\r\n const providers = config.storage || [];\r\n\r\n if (providers.length === 0) {\r\n return {\r\n name: 'Storage',\r\n status: 'warn',\r\n message: 'No storage providers configured',\r\n details: 'Configure at least one provider in .fractary/codex.yaml'\r\n };\r\n }\r\n\r\n const providerTypes = providers.map(p => p.type).join(', ');\r\n const hasGitHub = providers.some(p => p.type === 'github');\r\n\r\n if (hasGitHub && !process.env.GITHUB_TOKEN) {\r\n return {\r\n name: 'Storage',\r\n status: 'warn',\r\n message: `${providers.length} provider(s): ${providerTypes}`,\r\n details: 'GITHUB_TOKEN not set (required for GitHub provider)'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Storage',\r\n status: 'pass',\r\n message: `${providers.length} provider(s): ${providerTypes}`,\r\n details: 'All configured providers available'\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Storage',\r\n status: 'fail',\r\n message: 'Storage check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check type registry\r\n */\r\nasync function checkTypes(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n const allTypes = registry.list();\r\n\r\n const builtinCount = allTypes.filter(t => registry.isBuiltIn(t.name)).length;\r\n const customCount = allTypes.length - builtinCount;\r\n\r\n return {\r\n name: 'Type Registry',\r\n status: 'pass',\r\n message: `${allTypes.length} types registered`,\r\n details: `${builtinCount} built-in, ${customCount} custom`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Type Registry',\r\n status: 'fail',\r\n message: 'Type registry check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function healthCommand(): Command {\r\n const cmd = new Command('health');\r\n\r\n cmd\r\n .description('Run diagnostics on codex setup')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Run all health checks\r\n const checks: HealthCheck[] = [];\r\n\r\n checks.push(await checkConfiguration());\r\n checks.push(await checkSDKClient());\r\n checks.push(await checkCache());\r\n checks.push(await checkStorage());\r\n checks.push(await checkTypes());\r\n\r\n // Count results\r\n const passed = checks.filter(c => c.status === 'pass').length;\r\n const warned = checks.filter(c => c.status === 'warn').length;\r\n const failed = checks.filter(c => c.status === 'fail').length;\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n summary: {\r\n total: checks.length,\r\n passed,\r\n warned,\r\n failed,\r\n healthy: failed === 0\r\n },\r\n checks\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display results\r\n console.log(chalk.bold('Codex Health Check\\n'));\r\n\r\n for (const check of checks) {\r\n const icon = check.status === 'pass' ? chalk.green('✓') :\r\n check.status === 'warn' ? chalk.yellow('⚠') :\r\n chalk.red('✗');\r\n\r\n const statusColor = check.status === 'pass' ? chalk.green :\r\n check.status === 'warn' ? chalk.yellow :\r\n chalk.red;\r\n\r\n console.log(`${icon} ${chalk.bold(check.name)}`);\r\n console.log(` ${statusColor(check.message)}`);\r\n if (check.details) {\r\n console.log(` ${chalk.dim(check.details)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim('─'.repeat(60)));\r\n\r\n const overallStatus = failed > 0 ? chalk.red('UNHEALTHY') :\r\n warned > 0 ? chalk.yellow('DEGRADED') :\r\n chalk.green('HEALTHY');\r\n\r\n console.log(`Status: ${overallStatus}`);\r\n console.log(chalk.dim(`${passed} passed, ${warned} warnings, ${failed} failed`));\r\n\r\n if (failed > 0 || warned > 0) {\r\n console.log('');\r\n console.log(chalk.dim('Run checks individually for more details:'));\r\n console.log(chalk.dim(' fractary codex cache stats'));\r\n console.log(chalk.dim(' fractary codex types list'));\r\n }\r\n\r\n // Exit with error if any checks failed\r\n if (failed > 0) {\r\n process.exit(1);\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Migrate command (v3.0)\r\n *\r\n * Migrates legacy v2.x JSON configurations to v3.0 YAML format:\r\n * - Detects legacy config at .fractary/plugins/codex/config.json\r\n * - Creates backup of old config\r\n * - Transforms to v3.0 YAML format\r\n * - Writes to .fractary/codex.yaml\r\n * - Validates migration result\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport {\r\n migrateConfig,\r\n writeYamlConfig,\r\n type MigrationResult\r\n} from '../config/migrate-config';\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Read file content\r\n */\r\nasync function readFileContent(filePath: string): Promise<string> {\r\n return fs.readFile(filePath, 'utf-8');\r\n}\r\n\r\nexport function migrateCommand(): Command {\r\n const cmd = new Command('migrate');\r\n\r\n cmd\r\n .description('Migrate legacy JSON configuration to v3.0 YAML format')\r\n .option('--dry-run', 'Show migration plan without executing')\r\n .option('--no-backup', 'Skip creating backup of old config')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n const legacyConfigPath = path.join(process.cwd(), '.fractary', 'plugins', 'codex', 'config.json');\r\n const newConfigPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n\r\n // Check if legacy config exists\r\n if (!await fileExists(legacyConfigPath)) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'no_config',\r\n message: 'No legacy configuration file found',\r\n path: legacyConfigPath\r\n }));\r\n } else {\r\n console.log(chalk.yellow('⚠ No legacy configuration file found.'));\r\n console.log(chalk.dim(` Expected: ${legacyConfigPath}`));\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a new v3.0 YAML configuration.'));\r\n }\r\n return;\r\n }\r\n\r\n // Check if new YAML config already exists\r\n if (await fileExists(newConfigPath) && !options.dryRun) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'already_migrated',\r\n message: 'YAML configuration already exists',\r\n path: newConfigPath\r\n }));\r\n } else {\r\n console.log(chalk.yellow('⚠ YAML configuration already exists.'));\r\n console.log(chalk.dim(` Path: ${newConfigPath}`));\r\n console.log(chalk.dim('\\nUse \"fractary codex init --force\" to recreate.'));\r\n }\r\n return;\r\n }\r\n\r\n // Load and validate legacy config\r\n const legacyContent = await readFileContent(legacyConfigPath);\r\n let legacyConfig: any;\r\n\r\n try {\r\n legacyConfig = JSON.parse(legacyContent);\r\n } catch {\r\n console.error(chalk.red('Error:'), 'Invalid JSON in legacy config file.');\r\n process.exit(1);\r\n }\r\n\r\n if (!options.json && !options.dryRun) {\r\n console.log(chalk.blue('Migrating Codex configuration to v3.0 YAML format...\\n'));\r\n }\r\n\r\n // Perform migration using utility\r\n const migrationResult: MigrationResult = await migrateConfig(\r\n legacyConfigPath,\r\n {\r\n createBackup: options.backup !== false,\r\n backupSuffix: new Date().toISOString().replace(/[:.]/g, '-')\r\n }\r\n );\r\n\r\n // Display migration plan\r\n if (!options.json) {\r\n console.log(chalk.bold('Legacy Configuration:'));\r\n console.log(chalk.dim(` Path: ${legacyConfigPath}`));\r\n console.log(chalk.dim(` Organization: ${legacyConfig.organization || legacyConfig.organizationSlug || 'unknown'}`));\r\n console.log('');\r\n\r\n console.log(chalk.bold('Migration Changes:'));\r\n console.log(chalk.green(' + Format: JSON → YAML'));\r\n console.log(chalk.green(' + Location: .fractary/plugins/codex/ → .fractary/'));\r\n console.log(chalk.green(' + File: config.json → codex.yaml'));\r\n console.log(chalk.green(' + Storage: Multi-provider configuration'));\r\n console.log(chalk.green(' + Cache: Modern cache management'));\r\n console.log(chalk.green(' + Types: Custom type registry'));\r\n\r\n if (migrationResult.warnings.length > 0) {\r\n console.log('');\r\n console.log(chalk.yellow('Warnings:'));\r\n for (const warning of migrationResult.warnings) {\r\n console.log(chalk.yellow(' ⚠'), chalk.dim(warning));\r\n }\r\n }\r\n\r\n console.log('');\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - no changes made.'));\r\n console.log(chalk.dim('Run without --dry-run to execute migration.'));\r\n return;\r\n }\r\n }\r\n\r\n // JSON output for dry run\r\n if (options.json) {\r\n const output: any = {\r\n status: options.dryRun ? 'migration_ready' : 'migrated',\r\n dryRun: options.dryRun || false,\r\n legacyConfig: {\r\n path: legacyConfigPath,\r\n organization: legacyConfig.organization || legacyConfig.organizationSlug\r\n },\r\n newConfig: {\r\n path: newConfigPath,\r\n organization: migrationResult.yamlConfig.organization\r\n },\r\n warnings: migrationResult.warnings,\r\n backupPath: migrationResult.backupPath\r\n };\r\n\r\n console.log(JSON.stringify(output, null, 2));\r\n\r\n if (options.dryRun) {\r\n return;\r\n }\r\n }\r\n\r\n // Write new YAML config\r\n if (!options.dryRun) {\r\n await writeYamlConfig(migrationResult.yamlConfig, newConfigPath);\r\n\r\n // Create cache directory\r\n const cacheDir = path.join(process.cwd(), '.codex-cache');\r\n await fs.mkdir(cacheDir, { recursive: true });\r\n\r\n if (!options.json) {\r\n console.log(chalk.green('✓'), 'YAML configuration created');\r\n console.log(chalk.green('✓'), 'Cache directory initialized');\r\n if (migrationResult.backupPath) {\r\n console.log(chalk.green('✓'), 'Legacy config backed up');\r\n }\r\n\r\n console.log('');\r\n console.log(chalk.bold('New Configuration:'));\r\n console.log(chalk.dim(` Path: ${newConfigPath}`));\r\n console.log(chalk.dim(` Organization: ${migrationResult.yamlConfig.organization}`));\r\n console.log(chalk.dim(` Cache: ${migrationResult.yamlConfig.cacheDir || '.codex-cache'}`));\r\n console.log(chalk.dim(` Storage Providers: ${migrationResult.yamlConfig.storage?.length || 0}`));\r\n\r\n console.log('');\r\n console.log(chalk.bold('Next Steps:'));\r\n console.log(chalk.dim(' 1. Review the new configuration: .fractary/codex.yaml'));\r\n console.log(chalk.dim(' 2. Set your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n console.log(chalk.dim(' 3. Test fetching: fractary codex fetch codex://org/project/path'));\r\n\r\n if (migrationResult.backupPath) {\r\n console.log('');\r\n console.log(chalk.dim(`Backup saved: ${path.basename(migrationResult.backupPath)}`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'error',\r\n message: error.message\r\n }));\r\n } else {\r\n console.error(chalk.red('Error:'), error.message);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../src/config/migrate-config.ts","../src/config/config-types.ts","../src/client/codex-client.ts","../src/cli.ts","../src/commands/document/index.ts","../src/commands/document/fetch.ts","../src/client/get-client.ts","../src/commands/config/index.ts","../src/commands/config/init.ts","../src/commands/config/migrate.ts","../src/commands/cache/index.ts","../src/commands/cache/list.ts","../src/commands/cache/clear.ts","../src/commands/cache/stats.ts","../src/commands/cache/health.ts","../src/commands/sync.ts","../src/commands/types/index.ts","../src/commands/types/list.ts","../src/commands/types/show.ts","../src/commands/types/add.ts","../src/commands/types/remove.ts"],"names":["path2","CodexError","ConfigurationError","readYamlConfig","resolveEnvVarsInConfig","path3","result","CodexClient","chalk","fs2","Command","fs3","fileExists","fs4","path5","formatSize","fs5","path6","path7","formatTtl","path8","path9"],"mappings":"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","file":"cli.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\r\n * Configuration migration utility\r\n *\r\n * Converts legacy v2.x JSON config to v3.0 YAML format\r\n */\r\n\r\nimport * as fs from 'fs/promises';\r\nimport * as path from 'path';\r\nimport * as yaml from 'js-yaml';\r\nimport {\r\n type CodexYamlConfig,\r\n type LegacyCodexConfig,\r\n type StorageProviderConfig,\r\n parseDuration,\r\n parseSize\r\n} from './config-types';\r\n\r\n/**\r\n * Migration result\r\n */\r\nexport interface MigrationResult {\r\n success: boolean;\r\n yamlConfig: CodexYamlConfig;\r\n warnings: string[];\r\n backupPath?: string;\r\n}\r\n\r\n/**\r\n * Detect if a config file is legacy JSON format\r\n */\r\nexport async function isLegacyConfig(configPath: string): Promise<boolean> {\r\n try {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = JSON.parse(content);\r\n\r\n // Check for legacy v2.x structure\r\n return (\r\n config.version === '3.0' ||\r\n config.organizationSlug !== undefined ||\r\n config.directories !== undefined ||\r\n config.rules !== undefined\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Migrate legacy JSON config to v3.0 YAML format\r\n */\r\nexport async function migrateConfig(\r\n legacyConfigPath: string,\r\n options?: {\r\n createBackup?: boolean;\r\n backupSuffix?: string;\r\n }\r\n): Promise<MigrationResult> {\r\n const warnings: string[] = [];\r\n\r\n try {\r\n // Read legacy config\r\n const content = await fs.readFile(legacyConfigPath, 'utf-8');\r\n const legacy: LegacyCodexConfig = JSON.parse(content);\r\n\r\n // Create backup if requested\r\n let backupPath: string | undefined;\r\n if (options?.createBackup !== false) {\r\n const suffix = options?.backupSuffix || new Date().toISOString().replace(/[:.]/g, '-');\r\n backupPath = `${legacyConfigPath}.backup-${suffix}`;\r\n await fs.writeFile(backupPath, content, 'utf-8');\r\n }\r\n\r\n // Build YAML config\r\n const yamlConfig: CodexYamlConfig = {\r\n organization: legacy.organization || legacy.organizationSlug || 'default'\r\n };\r\n\r\n // Migrate cache configuration\r\n if (legacy.cache) {\r\n yamlConfig.cacheDir = legacy.cache.directory || '.fractary/codex/cache';\r\n\r\n // Note: Legacy config had cache.defaultTtl, cache.maxSize with string formats\r\n // These are now handled by CacheManager config separately\r\n }\r\n\r\n // Migrate storage providers\r\n if (legacy.storage?.providers) {\r\n yamlConfig.storage = [];\r\n\r\n // Convert providers object to array\r\n for (const [type, config] of Object.entries(legacy.storage.providers)) {\r\n if (type === 'github') {\r\n const githubConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: githubConfig.token || '${GITHUB_TOKEN}',\r\n apiBaseUrl: githubConfig.baseUrl || 'https://api.github.com',\r\n branch: githubConfig.branch || 'main',\r\n priority: 50\r\n });\r\n } else if (type === 'http') {\r\n const httpConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'http',\r\n baseUrl: httpConfig.baseUrl,\r\n headers: httpConfig.headers,\r\n timeout: httpConfig.timeout || 30000,\r\n priority: 100\r\n });\r\n } else if (type === 'local') {\r\n const localConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'local',\r\n basePath: localConfig.basePath || './knowledge',\r\n followSymlinks: localConfig.followSymlinks || false,\r\n priority: 10\r\n });\r\n } else {\r\n warnings.push(`Unknown storage provider type: ${type}`);\r\n }\r\n }\r\n\r\n // If no providers configured, add default GitHub\r\n if (yamlConfig.storage.length === 0) {\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n });\r\n warnings.push('No storage providers found, added default GitHub provider');\r\n }\r\n }\r\n\r\n // Migrate custom types\r\n if (legacy.types?.custom && Array.isArray(legacy.types.custom)) {\r\n yamlConfig.types = {\r\n custom: {}\r\n };\r\n\r\n for (const customType of legacy.types.custom) {\r\n if (customType.name) {\r\n yamlConfig.types.custom[customType.name] = {\r\n description: customType.description,\r\n patterns: customType.patterns || [],\r\n defaultTtl: customType.defaultTtl,\r\n archiveAfterDays: customType.archiveAfterDays,\r\n archiveStorage: customType.archiveStorage\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Migrate sync configuration\r\n if (legacy.sync) {\r\n yamlConfig.sync = {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n };\r\n\r\n if (legacy.sync.environments) {\r\n warnings.push('Sync environments are not directly supported in v3.0 - please configure sync rules manually');\r\n }\r\n }\r\n\r\n // Migrate MCP configuration\r\n if (legacy.mcp) {\r\n yamlConfig.mcp = {\r\n enabled: legacy.mcp.enabled || false,\r\n port: legacy.mcp.port || 3000\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n yamlConfig,\r\n warnings,\r\n backupPath\r\n };\r\n } catch (error) {\r\n throw new Error(\r\n `Migration failed: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write YAML config to file\r\n */\r\nexport async function writeYamlConfig(\r\n config: CodexYamlConfig,\r\n outputPath: string\r\n): Promise<void> {\r\n // Ensure directory exists\r\n const dir = path.dirname(outputPath);\r\n await fs.mkdir(dir, { recursive: true });\r\n\r\n // Convert to YAML with nice formatting\r\n const yamlContent = yaml.dump(config, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true,\r\n sortKeys: false\r\n });\r\n\r\n // Write to file\r\n await fs.writeFile(outputPath, yamlContent, 'utf-8');\r\n}\r\n\r\n/**\r\n * Get default YAML config (v4.0 standard)\r\n */\r\nexport function getDefaultYamlConfig(organization: string): CodexYamlConfig {\r\n return {\r\n organization,\r\n cacheDir: '.fractary/codex/cache',\r\n\r\n storage: [\r\n {\r\n type: 'local',\r\n basePath: './knowledge',\r\n followSymlinks: false,\r\n priority: 10\r\n },\r\n {\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n },\r\n {\r\n type: 'http',\r\n baseUrl: 'https://codex.example.com',\r\n timeout: 30000,\r\n priority: 100\r\n }\r\n ],\r\n\r\n types: {\r\n custom: {}\r\n },\r\n\r\n permissions: {\r\n default: 'read',\r\n rules: [\r\n {\r\n pattern: 'internal/**',\r\n permission: 'none'\r\n },\r\n {\r\n pattern: 'public/**',\r\n permission: 'read'\r\n }\r\n ]\r\n },\r\n\r\n sync: {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n },\r\n\r\n mcp: {\r\n enabled: false,\r\n port: 3000\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Read YAML config from file\r\n */\r\nexport async function readYamlConfig(configPath: string): Promise<CodexYamlConfig> {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = yaml.load(content) as CodexYamlConfig;\r\n\r\n if (!config.organization) {\r\n throw new Error('Invalid config: organization is required');\r\n }\r\n\r\n return config;\r\n}\r\n","/**\r\n * Configuration types for Codex v3.0 YAML format\r\n *\r\n * Based on the SDK's Configuration Guide:\r\n * https://github.com/fractary/codex/blob/main/docs/guides/configuration.md\r\n */\r\n\r\n/**\r\n * Storage provider type\r\n */\r\nexport type StorageProviderType = 'local' | 'github' | 'http' | 's3';\r\n\r\n/**\r\n * Local filesystem storage configuration\r\n */\r\nexport interface LocalStorageConfig {\r\n type: 'local';\r\n basePath: string;\r\n followSymlinks?: boolean;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * GitHub storage configuration\r\n */\r\nexport interface GitHubStorageConfig {\r\n type: 'github';\r\n token?: string; // Or use environment variable\r\n apiBaseUrl?: string; // For GitHub Enterprise\r\n rawBaseUrl?: string;\r\n branch?: string;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * HTTP storage configuration\r\n */\r\nexport interface HttpStorageConfig {\r\n type: 'http';\r\n baseUrl: string;\r\n headers?: Record<string, string>;\r\n timeout?: number;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * S3 storage configuration (future)\r\n */\r\nexport interface S3StorageConfig {\r\n type: 's3';\r\n bucket: string;\r\n region?: string;\r\n accessKeyId?: string;\r\n secretAccessKey?: string;\r\n priority?: number;\r\n}\r\n\r\n/**\r\n * Union type for all storage providers\r\n */\r\nexport type StorageProviderConfig =\r\n | LocalStorageConfig\r\n | GitHubStorageConfig\r\n | HttpStorageConfig\r\n | S3StorageConfig;\r\n\r\n/**\r\n * Cache configuration\r\n */\r\nexport interface CacheConfig {\r\n directory?: string;\r\n defaultTtl?: number; // In seconds\r\n maxSize?: number; // In bytes\r\n maxMemoryEntries?: number;\r\n maxMemorySize?: number; // In bytes\r\n enablePersistence?: boolean;\r\n}\r\n\r\n/**\r\n * Custom artifact type definition\r\n */\r\nexport interface CustomTypeConfig {\r\n name: string;\r\n description?: string;\r\n patterns: string[];\r\n defaultTtl?: number; // In seconds\r\n archiveAfterDays?: number | null;\r\n archiveStorage?: 'local' | 'cloud' | 'drive' | null;\r\n}\r\n\r\n/**\r\n * Types configuration\r\n */\r\nexport interface TypesConfig {\r\n custom?: Record<string, Omit<CustomTypeConfig, 'name'>>;\r\n}\r\n\r\n/**\r\n * Permission level\r\n */\r\nexport type PermissionLevel = 'none' | 'read' | 'write' | 'admin';\r\n\r\n/**\r\n * Permission rule\r\n */\r\nexport interface PermissionRule {\r\n pattern: string;\r\n permission: PermissionLevel;\r\n users?: string[];\r\n}\r\n\r\n/**\r\n * Permissions configuration\r\n */\r\nexport interface PermissionsConfig {\r\n default?: PermissionLevel;\r\n rules?: PermissionRule[];\r\n}\r\n\r\n/**\r\n * Sync configuration\r\n */\r\nexport interface SyncConfig {\r\n bidirectional?: boolean;\r\n conflictResolution?: 'prompt' | 'local' | 'remote' | 'newest' | 'skip';\r\n exclude?: string[];\r\n rules?: SyncRule[];\r\n}\r\n\r\n/**\r\n * Sync rule\r\n */\r\nexport interface SyncRule {\r\n pattern: string;\r\n direction?: 'to-codex' | 'from-codex' | 'bidirectional';\r\n}\r\n\r\n/**\r\n * MCP server configuration\r\n */\r\nexport interface McpConfig {\r\n enabled?: boolean;\r\n port?: number;\r\n}\r\n\r\n/**\r\n * Codex v3.0 YAML configuration\r\n *\r\n * This is the format that will be written to .fractary/codex.yaml\r\n */\r\nexport interface CodexYamlConfig {\r\n organization: string;\r\n cacheDir?: string;\r\n storage?: StorageProviderConfig[];\r\n types?: TypesConfig;\r\n permissions?: PermissionsConfig;\r\n sync?: SyncConfig;\r\n mcp?: McpConfig;\r\n}\r\n\r\n/**\r\n * Legacy JSON configuration (v2.x)\r\n *\r\n * This is the format currently used in .fractary/plugins/codex/config.json\r\n */\r\nexport interface LegacyCodexConfig {\r\n version?: string;\r\n organization?: string;\r\n organizationSlug?: string;\r\n cache?: {\r\n directory?: string;\r\n defaultTtl?: string | number;\r\n maxSize?: string | number;\r\n cleanupInterval?: string;\r\n };\r\n storage?: {\r\n providers?: Record<string, any>;\r\n defaultProvider?: string;\r\n };\r\n types?: {\r\n custom?: any[];\r\n };\r\n sync?: {\r\n environments?: Record<string, string>;\r\n defaultEnvironment?: string;\r\n };\r\n mcp?: {\r\n enabled?: boolean;\r\n port?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Parse a duration string to seconds\r\n *\r\n * Supports formats like: \"1h\", \"24h\", \"7d\", \"1w\", \"1M\", \"1y\"\r\n */\r\nexport function parseDuration(duration: string | number): number {\r\n if (typeof duration === 'number') {\r\n return duration;\r\n }\r\n\r\n const match = duration.match(/^(\\d+)([smhdwMy])$/);\r\n if (!match) {\r\n throw new Error(`Invalid duration format: ${duration}`);\r\n }\r\n\r\n const [, valueStr, unit] = match;\r\n const value = parseInt(valueStr, 10);\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n case 'w': return value * 604800;\r\n case 'M': return value * 2592000; // 30 days\r\n case 'y': return value * 31536000; // 365 days\r\n default: throw new Error(`Unknown duration unit: ${unit}`);\r\n }\r\n}\r\n\r\n/**\r\n * Parse a size string to bytes\r\n *\r\n * Supports formats like: \"100MB\", \"1GB\", \"50MB\"\r\n */\r\nexport function parseSize(size: string | number): number {\r\n if (typeof size === 'number') {\r\n return size;\r\n }\r\n\r\n const match = size.match(/^(\\d+(?:\\.\\d+)?)\\s*(B|KB|MB|GB)$/i);\r\n if (!match) {\r\n throw new Error(`Invalid size format: ${size}`);\r\n }\r\n\r\n const [, valueStr, unit] = match;\r\n const value = parseFloat(valueStr);\r\n\r\n switch (unit.toUpperCase()) {\r\n case 'B': return value;\r\n case 'KB': return value * 1024;\r\n case 'MB': return value * 1024 * 1024;\r\n case 'GB': return value * 1024 * 1024 * 1024;\r\n default: throw new Error(`Unknown size unit: ${unit}`);\r\n }\r\n}\r\n\r\n/**\r\n * Resolve environment variables in a string\r\n *\r\n * Supports ${VAR_NAME} syntax\r\n */\r\nexport function resolveEnvVars(value: string): string {\r\n return value.replace(/\\$\\{([^}]+)\\}/g, (_, varName) => {\r\n const envValue = process.env[varName];\r\n if (envValue === undefined) {\r\n console.warn(`Warning: Environment variable ${varName} is not set`);\r\n return `\\${${varName}}`; // Keep original if not found\r\n }\r\n return envValue;\r\n });\r\n}\r\n\r\n/**\r\n * Deep resolve environment variables in an object\r\n */\r\nexport function resolveEnvVarsInConfig<T>(config: T): T {\r\n if (typeof config === 'string') {\r\n return resolveEnvVars(config) as any;\r\n }\r\n\r\n if (Array.isArray(config)) {\r\n return config.map(item => resolveEnvVarsInConfig(item)) as any;\r\n }\r\n\r\n if (config !== null && typeof config === 'object') {\r\n const result: any = {};\r\n for (const [key, value] of Object.entries(config)) {\r\n result[key] = resolveEnvVarsInConfig(value);\r\n }\r\n return result;\r\n }\r\n\r\n return config;\r\n}\r\n","/**\r\n * CodexClient - Unified client wrapper for Codex SDK\r\n *\r\n * Following the pattern from the CLI Integration Guide:\r\n * https://github.com/fractary/codex/blob/main/docs/guides/cli-integration.md\r\n *\r\n * This wrapper encapsulates CacheManager, StorageManager, and TypeRegistry,\r\n * providing a clean interface for CLI commands.\r\n */\r\n\r\n// Type-only imports\r\nimport type {\r\n CacheManager,\r\n StorageManager,\r\n TypeRegistry,\r\n CacheStats,\r\n FetchResult as SDKFetchResult,\r\n ParsedReference,\r\n ResolvedReference,\r\n FetchOptions as SDKFetchOptions,\r\n} from '@fractary/codex';\r\n// Dynamic imports for config utilities to avoid loading js-yaml at module time\r\n// import { readYamlConfig } from '../config/migrate-config';\r\n// import { resolveEnvVarsInConfig } from '../config/config-types';\r\nimport * as path from 'path';\r\n\r\n/**\r\n * Options for creating CodexClient\r\n */\r\nexport interface CodexClientOptions {\r\n cacheDir?: string;\r\n organizationSlug?: string;\r\n}\r\n\r\n/**\r\n * Options for fetch operations\r\n */\r\nexport interface FetchOptions {\r\n bypassCache?: boolean;\r\n ttl?: number;\r\n}\r\n\r\n/**\r\n * Result from fetch operation\r\n */\r\nexport interface FetchResult {\r\n content: Buffer;\r\n fromCache: boolean;\r\n metadata?: {\r\n fetchedAt?: string;\r\n expiresAt?: string;\r\n contentLength?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Unified Codex client\r\n *\r\n * Provides high-level operations for:\r\n * - Document fetching with integrated caching\r\n * - Cache management and invalidation\r\n * - Type registry access\r\n */\r\nexport class CodexClient {\r\n private cache: CacheManager;\r\n private storage: StorageManager;\r\n private types: TypeRegistry;\r\n private organization: string;\r\n\r\n /**\r\n * Private constructor - use CodexClient.create() instead\r\n */\r\n private constructor(\r\n cache: CacheManager,\r\n storage: StorageManager,\r\n types: TypeRegistry,\r\n organization: string\r\n ) {\r\n this.cache = cache;\r\n this.storage = storage;\r\n this.types = types;\r\n this.organization = organization;\r\n }\r\n\r\n /**\r\n * Create a new CodexClient instance\r\n *\r\n * @param options - Optional configuration\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await CodexClient.create();\r\n * ```\r\n */\r\n static async create(options?: CodexClientOptions): Promise<CodexClient> {\r\n // Dynamic import of SDK\r\n const {\r\n CacheManager,\r\n createStorageManager,\r\n createDefaultRegistry,\r\n CodexError,\r\n ConfigurationError\r\n } = await import('@fractary/codex');\r\n\r\n // Dynamic import of config utilities (to avoid loading js-yaml at module time)\r\n const { readYamlConfig } = await import('../config/migrate-config');\r\n const { resolveEnvVarsInConfig } = await import('../config/config-types');\r\n\r\n try {\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n // Resolve environment variables in config\r\n config = resolveEnvVarsInConfig(config);\r\n } catch (error) {\r\n throw new ConfigurationError(\r\n `Failed to load configuration from ${configPath}. Run \"fractary codex init\" to create a configuration.`\r\n );\r\n }\r\n\r\n const organization = options?.organizationSlug || config.organization;\r\n const cacheDir = options?.cacheDir || config.cacheDir || '.codex-cache';\r\n\r\n // Build storage manager config from YAML storage providers\r\n const storageConfig: any = {};\r\n\r\n if (config.storage && Array.isArray(config.storage)) {\r\n for (const provider of config.storage) {\r\n if (provider.type === 'github') {\r\n storageConfig.github = {\r\n token: provider.token || process.env.GITHUB_TOKEN,\r\n apiBaseUrl: provider.apiBaseUrl || 'https://api.github.com',\r\n branch: provider.branch || 'main'\r\n };\r\n } else if (provider.type === 'http') {\r\n storageConfig.http = {\r\n baseUrl: provider.baseUrl,\r\n headers: provider.headers,\r\n timeout: provider.timeout || 30000\r\n };\r\n } else if (provider.type === 'local') {\r\n storageConfig.local = {\r\n basePath: provider.basePath || './knowledge',\r\n followSymlinks: provider.followSymlinks || false\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Initialize storage manager\r\n const storage = createStorageManager(storageConfig);\r\n\r\n // Initialize cache manager\r\n const cache = new CacheManager({\r\n cacheDir,\r\n defaultTtl: 86400, // 24 hours\r\n maxMemoryEntries: 100,\r\n maxMemorySize: 50 * 1024 * 1024, // 50MB\r\n enablePersistence: true\r\n });\r\n\r\n // Connect storage to cache\r\n cache.setStorageManager(storage);\r\n\r\n // Initialize type registry with built-in types\r\n const types = createDefaultRegistry();\r\n\r\n // Load and register custom types from config\r\n if (config.types?.custom) {\r\n for (const [name, customType] of Object.entries(config.types.custom)) {\r\n const ct = customType as any; // Type from YAML config\r\n types.register({\r\n name,\r\n description: ct.description || `Custom type: ${name}`,\r\n patterns: ct.patterns || [],\r\n defaultTtl: ct.defaultTtl || 86400,\r\n archiveAfterDays: ct.archiveAfterDays !== undefined ? ct.archiveAfterDays : null,\r\n archiveStorage: ct.archiveStorage || null\r\n });\r\n }\r\n }\r\n\r\n return new CodexClient(cache, storage, types, organization);\r\n } catch (error) {\r\n if (error instanceof CodexError) {\r\n throw error;\r\n }\r\n throw new CodexError(\r\n `Failed to initialize CodexClient: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Fetch a document by codex:// URI\r\n *\r\n * This method:\r\n * 1. Validates the URI format\r\n * 2. Resolves the URI to a reference\r\n * 3. Uses CacheManager.get() which handles cache-first fetch\r\n *\r\n * @param uri - Codex URI (e.g., codex://org/project/path/to/file.md)\r\n * @param options - Fetch options\r\n * @returns Promise resolving to fetch result\r\n *\r\n * @throws {CodexError} If URI format is invalid or fetch fails\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await client.fetch('codex://fractary/codex/docs/README.md');\r\n * console.log(result.content.toString());\r\n * ```\r\n */\r\n async fetch(uri: string, options?: FetchOptions): Promise<FetchResult> {\r\n // Dynamic import of SDK functions\r\n const { validateUri, resolveReference, CodexError } = await import('@fractary/codex');\r\n\r\n // Validate URI early\r\n if (!validateUri(uri)) {\r\n throw new CodexError(`Invalid codex URI: ${uri}`);\r\n }\r\n\r\n // Resolve URI to reference (with cache path)\r\n const resolved = resolveReference(uri);\r\n if (!resolved) {\r\n throw new CodexError(`Failed to resolve URI: ${uri}`);\r\n }\r\n\r\n try {\r\n // If bypassing cache, fetch directly from storage\r\n if (options?.bypassCache) {\r\n const result = await this.storage.fetch(resolved);\r\n return {\r\n content: result.content,\r\n fromCache: false,\r\n metadata: {\r\n fetchedAt: new Date().toISOString(),\r\n contentLength: result.size\r\n }\r\n };\r\n }\r\n\r\n // Use CacheManager.get() which handles cache-first fetch\r\n const result = await this.cache.get(resolved, {\r\n ttl: options?.ttl\r\n });\r\n\r\n return {\r\n content: result.content,\r\n fromCache: true, // CacheManager.get handles cache logic\r\n metadata: {\r\n contentLength: result.size\r\n }\r\n };\r\n } catch (error) {\r\n throw new CodexError(\r\n `Failed to fetch ${uri}: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Invalidate cache entries\r\n *\r\n * @param pattern - Optional glob pattern to match entries\r\n * If not provided, clears all entries\r\n *\r\n * @example\r\n * ```typescript\r\n * // Clear all cache\r\n * await client.invalidateCache();\r\n *\r\n * // Clear specific URI\r\n * await client.invalidateCache('codex://fractary/codex/docs/README.md');\r\n * ```\r\n */\r\n async invalidateCache(pattern?: string): Promise<void> {\r\n if (pattern) {\r\n await this.cache.invalidate(pattern);\r\n } else {\r\n await this.cache.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n *\r\n * @returns Promise resolving to cache stats\r\n *\r\n * @example\r\n * ```typescript\r\n * const stats = await client.getCacheStats();\r\n * console.log(`Cache entries: ${stats.totalEntries}`);\r\n * console.log(`Total size: ${stats.totalSize}`);\r\n * ```\r\n */\r\n async getCacheStats(): Promise<CacheStats> {\r\n return this.cache.getStats();\r\n }\r\n\r\n /**\r\n * Get the type registry\r\n *\r\n * Provides access to built-in and custom artifact types\r\n *\r\n * @returns TypeRegistry instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const registry = client.getTypeRegistry();\r\n * const types = registry.list();\r\n * ```\r\n */\r\n getTypeRegistry(): TypeRegistry {\r\n return this.types;\r\n }\r\n\r\n /**\r\n * Get the cache manager (for advanced operations)\r\n *\r\n * @returns CacheManager instance\r\n */\r\n getCacheManager(): CacheManager {\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * Get the storage manager (for advanced operations)\r\n *\r\n * @returns StorageManager instance\r\n */\r\n getStorageManager(): StorageManager {\r\n return this.storage;\r\n }\r\n\r\n /**\r\n * Get the organization slug\r\n *\r\n * @returns Organization slug string\r\n */\r\n getOrganization(): string {\r\n return this.organization;\r\n }\r\n}\r\n\r\n// Re-export SDK error classes for convenience\r\nexport {\r\n CodexError,\r\n ConfigurationError,\r\n ValidationError,\r\n PermissionDeniedError\r\n} from '@fractary/codex';\r\n","/**\n * Fractary Codex CLI - Command-line interface for knowledge management\n *\n * Pull-based document retrieval with codex:// URI scheme and intelligent caching.\n *\n * @see https://github.com/fractary/codex\n */\n\nimport { Command } from 'commander';\nimport { documentCommand } from './commands/document/index.js';\nimport { configCommand } from './commands/config/index.js';\nimport { cacheCommand } from './commands/cache/index.js';\nimport { syncCommand } from './commands/sync.js';\nimport { typesCommand } from './commands/types/index.js';\n\n/**\n * Create and configure the CLI\n */\nfunction createCLI(): Command {\n const program = new Command('fractary-codex');\n\n program\n .description('Centralized knowledge management and distribution for AI agents')\n .version('0.3.0');\n\n // Core commands (v3.0 - noun-verb pattern)\n program.addCommand(documentCommand()); // Document operations (fetch)\n program.addCommand(configCommand()); // Configuration operations (init, migrate)\n program.addCommand(cacheCommand()); // Cache management (list, clear, stats, health)\n program.addCommand(syncCommand()); // Bidirectional sync\n program.addCommand(typesCommand()); // Type registry (list, show, add, remove)\n\n return program;\n}\n\n/**\n * Main execution\n */\nasync function main() {\n try {\n const program = createCLI();\n await program.parseAsync(process.argv);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n// Run the CLI\nmain();\n","/**\r\n * Document command group (v3.0)\r\n *\r\n * Manages document operations with subcommands:\r\n * - fetch: Retrieve documents by URI\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { fetchCommand } from './fetch.js';\r\n\r\nexport function documentCommand(): Command {\r\n const cmd = new Command('document');\r\n\r\n cmd\r\n .description('Manage document operations');\r\n\r\n // Register subcommands\r\n cmd.addCommand(fetchCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Fetch document command (v3.0)\r\n *\r\n * Retrieves documents by codex:// URI reference using SDK's CodexClient:\r\n * - Cache-first retrieval for fast access\r\n * - TTL-based cache invalidation\r\n * - Multiple storage provider support\r\n * - Automatic URI validation and resolution\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as crypto from 'crypto';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Calculate content hash\r\n */\r\nfunction hashContent(content: Buffer): string {\r\n return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);\r\n}\r\n\r\nexport function fetchCommand(): Command {\r\n const cmd = new Command('fetch');\r\n\r\n cmd\r\n .description('Fetch a document by codex:// URI reference')\r\n .argument('<uri>', 'Codex URI (e.g., codex://org/project/docs/file.md)')\r\n .option('--bypass-cache', 'Skip cache and fetch directly from source')\r\n .option('--ttl <seconds>', 'Override default TTL (in seconds)', parseInt)\r\n .option('--json', 'Output as JSON with metadata')\r\n .option('--output <file>', 'Write content to file instead of stdout')\r\n .action(async (uri: string, options) => {\r\n try {\r\n // Dynamically import validateUri to avoid loading SDK at module time\r\n const { validateUri } = await import('@fractary/codex');\r\n\r\n // Validate URI format\r\n if (!validateUri(uri)) {\r\n console.error(chalk.red('Error: Invalid URI format'));\r\n console.log(chalk.dim('Expected: codex://org/project/path/to/file.md'));\r\n console.log(chalk.dim('Example: codex://fractary/codex/docs/api.md'));\r\n process.exit(1);\r\n }\r\n\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Show fetching message (unless JSON output)\r\n if (!options.json && !options.bypassCache) {\r\n console.error(chalk.dim(`Fetching ${uri}...`));\r\n }\r\n\r\n // Fetch using CodexClient\r\n const result = await client.fetch(uri, {\r\n bypassCache: options.bypassCache,\r\n ttl: options.ttl\r\n });\r\n\r\n // Output handling\r\n if (options.json) {\r\n const output = {\r\n uri,\r\n content: result.content.toString('utf-8'),\r\n metadata: {\r\n fromCache: result.fromCache,\r\n fetchedAt: result.metadata?.fetchedAt,\r\n expiresAt: result.metadata?.expiresAt,\r\n contentLength: result.metadata?.contentLength || result.content.length,\r\n contentHash: hashContent(result.content)\r\n }\r\n };\r\n console.log(JSON.stringify(output, null, 2));\r\n } else if (options.output) {\r\n // Write to file\r\n await fs.writeFile(options.output, result.content);\r\n console.log(chalk.green('✓'), `Written to ${options.output}`);\r\n console.log(chalk.dim(` Size: ${result.content.length} bytes`));\r\n if (result.fromCache) {\r\n console.log(chalk.dim(' Source: cache'));\r\n } else {\r\n console.log(chalk.dim(' Source: storage'));\r\n }\r\n } else {\r\n // Print to stdout\r\n if (result.fromCache && !options.bypassCache) {\r\n console.error(chalk.green('✓'), chalk.dim('from cache\\n'));\r\n } else {\r\n console.error(chalk.green('✓'), chalk.dim('fetched\\n'));\r\n }\r\n console.log(result.content.toString('utf-8'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n\r\n // Provide helpful error messages\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n } else if (error.message.includes('GITHUB_TOKEN')) {\r\n console.log(chalk.dim('\\nSet your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n } else if (error.message.includes('not found') || error.message.includes('404')) {\r\n console.log(chalk.dim('\\nThe document may not exist or you may not have access.'));\r\n console.log(chalk.dim('Check the URI and ensure your storage providers are configured correctly.'));\r\n }\r\n\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Singleton getter for CodexClient\r\n *\r\n * Provides lazy initialization of the CodexClient instance.\r\n * This ensures we only create one client instance across all command invocations,\r\n * avoiding repeated configuration loading and manager initialization.\r\n *\r\n * Uses dynamic imports to avoid loading @fractary/codex SDK at module load time,\r\n * which prevents CLI hangs when running simple commands like --help.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { getClient } from './get-client';\r\n *\r\n * export async function fetchCommand(uri: string) {\r\n * const client = await getClient();\r\n * const result = await client.fetch(uri);\r\n * console.log(result.content.toString());\r\n * }\r\n * ```\r\n */\r\n\r\n// Import types only\r\nimport type { CodexClient, CodexClientOptions } from './codex-client';\r\n\r\n/**\r\n * Singleton instance\r\n */\r\nlet clientInstance: CodexClient | null = null;\r\n\r\n/**\r\n * Get the CodexClient singleton instance\r\n *\r\n * On first call, creates and initializes the client.\r\n * Subsequent calls return the same instance.\r\n *\r\n * @param options - Optional configuration (only used on first call)\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await getClient();\r\n * const stats = await client.getCacheStats();\r\n * ```\r\n */\r\nexport async function getClient(options?: CodexClientOptions): Promise<CodexClient> {\r\n if (!clientInstance) {\r\n // Dynamic import to avoid loading SDK at module time\r\n const { CodexClient } = await import('./codex-client');\r\n clientInstance = await CodexClient.create(options);\r\n }\r\n return clientInstance;\r\n}\r\n\r\n/**\r\n * Reset the singleton instance\r\n *\r\n * Useful for testing or when configuration changes require a fresh client.\r\n *\r\n * @example\r\n * ```typescript\r\n * // After changing configuration\r\n * resetClient();\r\n * const client = await getClient(); // Will create new instance\r\n * ```\r\n */\r\nexport function resetClient(): void {\r\n clientInstance = null;\r\n}\r\n\r\n/**\r\n * Check if client has been initialized\r\n *\r\n * @returns true if client instance exists\r\n */\r\nexport function isClientInitialized(): boolean {\r\n return clientInstance !== null;\r\n}\r\n","/**\r\n * Config command group (v3.0)\r\n *\r\n * Manages configuration operations with subcommands:\r\n * - init: Initialize configuration\r\n * - migrate: Migrate configuration from v2.0 to v3.0\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { initCommand } from './init.js';\r\nimport { migrateCommand } from './migrate.js';\r\n\r\nexport function configCommand(): Command {\r\n const cmd = new Command('config');\r\n\r\n cmd\r\n .description('Manage configuration');\r\n\r\n // Register subcommands\r\n cmd.addCommand(initCommand());\r\n cmd.addCommand(migrateCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Initialize Codex project command (v3.0 YAML)\r\n *\r\n * Creates .fractary/codex.yaml configuration with:\r\n * - Organization detection from git remote\r\n * - Multi-provider storage configuration\r\n * - Cache configuration\r\n * - Type registry setup\r\n * - Optional MCP server registration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport { getDefaultYamlConfig, writeYamlConfig } from '../../config/migrate-config';\r\n\r\n/**\r\n * Extract org from git remote URL\r\n */\r\nasync function getOrgFromGitRemote(): Promise<string | null> {\r\n try {\r\n const { execSync } = require('child_process');\r\n const remote = execSync('git remote get-url origin 2>/dev/null', { encoding: 'utf-8' }).trim();\r\n\r\n // Parse GitHub URL: git@github.com:org/repo.git or https://github.com/org/repo.git\r\n const sshMatch = remote.match(/git@github\\.com:([^/]+)\\//);\r\n const httpsMatch = remote.match(/github\\.com\\/([^/]+)\\//);\r\n\r\n return sshMatch?.[1] || httpsMatch?.[1] || null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function initCommand(): Command {\r\n const cmd = new Command('init');\r\n\r\n cmd\r\n .description('Initialize Codex v3.0 with YAML configuration')\r\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\r\n .option('--mcp', 'Enable MCP server registration')\r\n .option('--force', 'Overwrite existing configuration')\r\n .action(async (options) => {\r\n try {\r\n console.log(chalk.blue('Initializing Codex v3.0 (YAML format)...\\n'));\r\n\r\n // Resolve organization\r\n let org = options.org;\r\n\r\n if (!org) {\r\n // Try git remote first\r\n org = await getOrgFromGitRemote();\r\n }\r\n\r\n if (!org) {\r\n // Try SDK's resolveOrganization (dynamic import)\r\n try {\r\n const { resolveOrganization } = await import('@fractary/codex');\r\n org = resolveOrganization({\r\n repoName: path.basename(process.cwd())\r\n });\r\n } catch {\r\n // SDK method failed, continue\r\n }\r\n }\r\n\r\n if (!org) {\r\n // Default fallback\r\n org = path.basename(process.cwd()).split('-')[0] || 'default';\r\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`));\r\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'));\r\n } else {\r\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`));\r\n }\r\n\r\n // Config path (v4.0 standard)\r\n const configDir = path.join(process.cwd(), '.fractary', 'codex');\r\n const configPath = path.join(configDir, 'config.yaml');\r\n const configExists = await fileExists(configPath);\r\n\r\n if (configExists && !options.force) {\r\n console.log(chalk.yellow('⚠ Configuration already exists at .fractary/codex/config.yaml'));\r\n console.log(chalk.dim('Use --force to overwrite'));\r\n process.exit(1);\r\n }\r\n\r\n // Create directory structure\r\n console.log('Creating directory structure...');\r\n\r\n const dirs = [\r\n '.fractary/codex',\r\n '.fractary/codex/cache'\r\n ];\r\n\r\n for (const dir of dirs) {\r\n await fs.mkdir(path.join(process.cwd(), dir), { recursive: true });\r\n console.log(chalk.green('✓'), chalk.dim(dir + '/'));\r\n }\r\n\r\n // Create configuration\r\n console.log('\\nCreating YAML configuration...');\r\n\r\n const config = getDefaultYamlConfig(org);\r\n\r\n // Enable MCP if requested\r\n if (options.mcp && config.mcp) {\r\n config.mcp.enabled = true;\r\n }\r\n\r\n // Write YAML config\r\n await writeYamlConfig(config, configPath);\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/codex/config.yaml'));\r\n\r\n // Success message\r\n console.log(chalk.green('\\n✓ Codex v4.0 initialized successfully!\\n'));\r\n\r\n console.log(chalk.bold('Configuration:'));\r\n console.log(chalk.dim(` Organization: ${org}`));\r\n console.log(chalk.dim(` Cache: .fractary/codex/cache/`));\r\n console.log(chalk.dim(` Config: .fractary/codex/config.yaml`));\r\n if (options.mcp) {\r\n console.log(chalk.dim(` MCP Server: Enabled (port 3000)`));\r\n }\r\n\r\n console.log(chalk.bold('\\nStorage providers configured:'));\r\n console.log(chalk.dim(' - Local filesystem (./knowledge)'));\r\n console.log(chalk.dim(' - GitHub (requires GITHUB_TOKEN)'));\r\n console.log(chalk.dim(' - HTTP endpoint'));\r\n\r\n console.log(chalk.bold('\\nNext steps:'));\r\n console.log(chalk.dim(' 1. Set your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n console.log(chalk.dim(' 2. Edit .fractary/codex/config.yaml to configure storage providers'));\r\n console.log(chalk.dim(' 3. Fetch a document: fractary codex fetch codex://org/project/path'));\r\n console.log(chalk.dim(' 4. Check cache: fractary codex cache list'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Migrate command (v3.0)\r\n *\r\n * Migrates legacy v2.x JSON configurations to v3.0 YAML format:\r\n * - Detects legacy config at .fractary/plugins/codex/config.json\r\n * - Creates backup of old config\r\n * - Transforms to v3.0 YAML format\r\n * - Writes to .fractary/codex.yaml\r\n * - Validates migration result\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport {\r\n migrateConfig,\r\n writeYamlConfig,\r\n type MigrationResult\r\n} from '../../config/migrate-config';\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Read file content\r\n */\r\nasync function readFileContent(filePath: string): Promise<string> {\r\n return fs.readFile(filePath, 'utf-8');\r\n}\r\n\r\nexport function migrateCommand(): Command {\r\n const cmd = new Command('migrate');\r\n\r\n cmd\r\n .description('Migrate legacy JSON configuration to v3.0 YAML format')\r\n .option('--dry-run', 'Show migration plan without executing')\r\n .option('--no-backup', 'Skip creating backup of old config')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n const legacyConfigPath = path.join(process.cwd(), '.fractary', 'plugins', 'codex', 'config.json');\r\n const newConfigPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n\r\n // Check if legacy config exists\r\n if (!await fileExists(legacyConfigPath)) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'no_config',\r\n message: 'No legacy configuration file found',\r\n path: legacyConfigPath\r\n }));\r\n } else {\r\n console.log(chalk.yellow('⚠ No legacy configuration file found.'));\r\n console.log(chalk.dim(` Expected: ${legacyConfigPath}`));\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a new v3.0 YAML configuration.'));\r\n }\r\n return;\r\n }\r\n\r\n // Check if new YAML config already exists\r\n if (await fileExists(newConfigPath) && !options.dryRun) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'already_migrated',\r\n message: 'YAML configuration already exists',\r\n path: newConfigPath\r\n }));\r\n } else {\r\n console.log(chalk.yellow('⚠ YAML configuration already exists.'));\r\n console.log(chalk.dim(` Path: ${newConfigPath}`));\r\n console.log(chalk.dim('\\nUse \"fractary codex init --force\" to recreate.'));\r\n }\r\n return;\r\n }\r\n\r\n // Load and validate legacy config\r\n const legacyContent = await readFileContent(legacyConfigPath);\r\n let legacyConfig: any;\r\n\r\n try {\r\n legacyConfig = JSON.parse(legacyContent);\r\n } catch {\r\n console.error(chalk.red('Error:'), 'Invalid JSON in legacy config file.');\r\n process.exit(1);\r\n }\r\n\r\n if (!options.json && !options.dryRun) {\r\n console.log(chalk.blue('Migrating Codex configuration to v3.0 YAML format...\\n'));\r\n }\r\n\r\n // Perform migration using utility\r\n const migrationResult: MigrationResult = await migrateConfig(\r\n legacyConfigPath,\r\n {\r\n createBackup: options.backup !== false,\r\n backupSuffix: new Date().toISOString().replace(/[:.]/g, '-')\r\n }\r\n );\r\n\r\n // Display migration plan\r\n if (!options.json) {\r\n console.log(chalk.bold('Legacy Configuration:'));\r\n console.log(chalk.dim(` Path: ${legacyConfigPath}`));\r\n console.log(chalk.dim(` Organization: ${legacyConfig.organization || legacyConfig.organizationSlug || 'unknown'}`));\r\n console.log('');\r\n\r\n console.log(chalk.bold('Migration Changes:'));\r\n console.log(chalk.green(' + Format: JSON → YAML'));\r\n console.log(chalk.green(' + Location: .fractary/plugins/codex/ → .fractary/'));\r\n console.log(chalk.green(' + File: config.json → codex.yaml'));\r\n console.log(chalk.green(' + Storage: Multi-provider configuration'));\r\n console.log(chalk.green(' + Cache: Modern cache management'));\r\n console.log(chalk.green(' + Types: Custom type registry'));\r\n\r\n if (migrationResult.warnings.length > 0) {\r\n console.log('');\r\n console.log(chalk.yellow('Warnings:'));\r\n for (const warning of migrationResult.warnings) {\r\n console.log(chalk.yellow(' ⚠'), chalk.dim(warning));\r\n }\r\n }\r\n\r\n console.log('');\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - no changes made.'));\r\n console.log(chalk.dim('Run without --dry-run to execute migration.'));\r\n return;\r\n }\r\n }\r\n\r\n // JSON output for dry run\r\n if (options.json) {\r\n const output: any = {\r\n status: options.dryRun ? 'migration_ready' : 'migrated',\r\n dryRun: options.dryRun || false,\r\n legacyConfig: {\r\n path: legacyConfigPath,\r\n organization: legacyConfig.organization || legacyConfig.organizationSlug\r\n },\r\n newConfig: {\r\n path: newConfigPath,\r\n organization: migrationResult.yamlConfig.organization\r\n },\r\n warnings: migrationResult.warnings,\r\n backupPath: migrationResult.backupPath\r\n };\r\n\r\n console.log(JSON.stringify(output, null, 2));\r\n\r\n if (options.dryRun) {\r\n return;\r\n }\r\n }\r\n\r\n // Write new YAML config\r\n if (!options.dryRun) {\r\n await writeYamlConfig(migrationResult.yamlConfig, newConfigPath);\r\n\r\n // Create cache directory\r\n const cacheDir = path.join(process.cwd(), '.codex-cache');\r\n await fs.mkdir(cacheDir, { recursive: true });\r\n\r\n if (!options.json) {\r\n console.log(chalk.green('✓'), 'YAML configuration created');\r\n console.log(chalk.green('✓'), 'Cache directory initialized');\r\n if (migrationResult.backupPath) {\r\n console.log(chalk.green('✓'), 'Legacy config backed up');\r\n }\r\n\r\n console.log('');\r\n console.log(chalk.bold('New Configuration:'));\r\n console.log(chalk.dim(` Path: ${newConfigPath}`));\r\n console.log(chalk.dim(` Organization: ${migrationResult.yamlConfig.organization}`));\r\n console.log(chalk.dim(` Cache: ${migrationResult.yamlConfig.cacheDir || '.codex-cache'}`));\r\n console.log(chalk.dim(` Storage Providers: ${migrationResult.yamlConfig.storage?.length || 0}`));\r\n\r\n console.log('');\r\n console.log(chalk.bold('Next Steps:'));\r\n console.log(chalk.dim(' 1. Review the new configuration: .fractary/codex.yaml'));\r\n console.log(chalk.dim(' 2. Set your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n console.log(chalk.dim(' 3. Test fetching: fractary codex fetch codex://org/project/path'));\r\n\r\n if (migrationResult.backupPath) {\r\n console.log('');\r\n console.log(chalk.dim(`Backup saved: ${path.basename(migrationResult.backupPath)}`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n status: 'error',\r\n message: error.message\r\n }));\r\n } else {\r\n console.error(chalk.red('Error:'), error.message);\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache command group (v3.0)\r\n *\r\n * Manages the codex document cache with subcommands:\r\n * - list: View cached entries\r\n * - clear: Remove cache entries\r\n * - stats: Display cache statistics\r\n * - health: Diagnostics and auto-repair\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { cacheListCommand } from './list';\r\nimport { cacheClearCommand } from './clear';\r\nimport { cacheStatsCommand } from './stats';\r\nimport { healthCommand } from './health';\r\n\r\nexport function cacheCommand(): Command {\r\n const cmd = new Command('cache');\r\n\r\n cmd\r\n .description('Manage the codex document cache');\r\n\r\n // Register subcommands\r\n cmd.addCommand(cacheListCommand());\r\n cmd.addCommand(cacheClearCommand());\r\n cmd.addCommand(cacheStatsCommand());\r\n cmd.addCommand(healthCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache list command (v3.0)\r\n *\r\n * Lists cache information using SDK's CacheManager\r\n *\r\n * Note: The SDK's CacheManager doesn't expose individual cache entries.\r\n * Use 'cache stats' for detailed cache statistics.\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function cacheListCommand(): Command {\r\n const cmd = new Command('list');\r\n\r\n cmd\r\n .description('List cache information')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (stats.entryCount === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ entries: 0, message: 'Cache is empty' }));\r\n } else {\r\n console.log(chalk.yellow('Cache is empty.'));\r\n console.log(chalk.dim('Fetch some documents to populate the cache.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n entryCount: stats.entryCount,\r\n totalSize: stats.totalSize,\r\n freshCount: stats.freshCount,\r\n staleCount: stats.staleCount,\r\n expiredCount: stats.expiredCount\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display cache overview\r\n console.log(chalk.bold('Cache Overview\\n'));\r\n\r\n console.log(chalk.bold('Entries:'));\r\n console.log(` Total: ${chalk.cyan(stats.entryCount.toString())} entries`);\r\n console.log(` Fresh: ${chalk.green(stats.freshCount.toString())} entries`);\r\n console.log(` Stale: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')} entries`);\r\n console.log(` Expired: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')} entries`);\r\n console.log('');\r\n\r\n console.log(chalk.bold('Storage:'));\r\n console.log(` Total size: ${chalk.cyan(formatSize(stats.totalSize))}`);\r\n console.log('');\r\n\r\n // Health indicator\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n console.log('');\r\n\r\n console.log(chalk.dim('Note: Individual cache entries are managed by the SDK.'));\r\n console.log(chalk.dim('Use \"fractary codex cache stats\" for detailed statistics.'));\r\n console.log(chalk.dim('Use \"fractary codex cache clear\" to clear cache entries.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache clear command (v3.0)\r\n *\r\n * Clears cache entries using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheClearCommand(): Command {\r\n const cmd = new Command('clear');\r\n\r\n cmd\r\n .description('Clear cache entries')\r\n .option('--all', 'Clear entire cache')\r\n .option('--pattern <glob>', 'Clear entries matching URI pattern (e.g., \"codex://fractary/*\")')\r\n .option('--dry-run', 'Show what would be cleared without actually clearing')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get stats before clearing (for reporting)\r\n const statsBefore = await client.getCacheStats();\r\n\r\n if (statsBefore.entryCount === 0) {\r\n console.log(chalk.yellow('Cache is already empty. Nothing to clear.'));\r\n return;\r\n }\r\n\r\n // Determine what to clear\r\n let pattern: string | undefined;\r\n\r\n if (options.all) {\r\n pattern = undefined; // Clear all\r\n } else if (options.pattern) {\r\n pattern = options.pattern;\r\n } else {\r\n console.log(chalk.yellow('Please specify what to clear:'));\r\n console.log(chalk.dim(' --all Clear entire cache'));\r\n console.log(chalk.dim(' --pattern Clear entries matching pattern (e.g., \"codex://fractary/*\")'));\r\n console.log('');\r\n console.log(chalk.dim('Examples:'));\r\n console.log(chalk.dim(' fractary codex cache clear --all'));\r\n console.log(chalk.dim(' fractary codex cache clear --pattern \"codex://fractary/cli/*\"'));\r\n return;\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would clear:\\n'));\r\n if (pattern) {\r\n console.log(chalk.dim(` Pattern: ${pattern}`));\r\n console.log(chalk.dim(` This would invalidate matching cache entries`));\r\n } else {\r\n console.log(chalk.dim(` All cache entries (${statsBefore.entryCount} entries)`));\r\n }\r\n console.log(chalk.dim(`\\nTotal size: ${formatSize(statsBefore.totalSize)}`));\r\n return;\r\n }\r\n\r\n // Perform invalidation\r\n if (pattern) {\r\n console.log(chalk.blue(`Clearing cache entries matching pattern: ${pattern}\\n`));\r\n await client.invalidateCache(pattern);\r\n } else {\r\n console.log(chalk.blue(`Clearing entire cache (${statsBefore.entryCount} entries)...\\n`));\r\n await client.invalidateCache();\r\n }\r\n\r\n // Get stats after clearing\r\n const statsAfter = await client.getCacheStats();\r\n const entriesCleared = statsBefore.entryCount - statsAfter.entryCount;\r\n const sizeFreed = statsBefore.totalSize - statsAfter.totalSize;\r\n\r\n // Summary\r\n console.log(chalk.green(`✓ Cleared ${entriesCleared} entries (${formatSize(sizeFreed)} freed)`));\r\n\r\n if (statsAfter.entryCount > 0) {\r\n console.log(chalk.dim(` Remaining: ${statsAfter.entryCount} entries (${formatSize(statsAfter.totalSize)})`));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n","/**\r\n * Cache stats command (v3.0)\r\n *\r\n * Display cache statistics using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function cacheStatsCommand(): Command {\r\n const cmd = new Command('stats');\r\n\r\n cmd\r\n .description('Display cache statistics')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(stats, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n console.log(chalk.bold('Cache Statistics\\n'));\r\n\r\n console.log(chalk.bold('Overview'));\r\n console.log(` Total entries: ${chalk.cyan(stats.entryCount.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatSize(stats.totalSize))}`);\r\n console.log(` Fresh entries: ${chalk.green(stats.freshCount.toString())}`);\r\n console.log(` Stale entries: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')}`);\r\n console.log(` Expired entries: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')}`);\r\n console.log('');\r\n\r\n // Health indicator based on fresh vs total ratio\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n\r\n if (stats.expiredCount > 0) {\r\n console.log(chalk.dim('\\nRun \"fractary codex cache clear --pattern <pattern>\" to clean up entries.'));\r\n }\r\n\r\n if (stats.entryCount === 0) {\r\n console.log(chalk.dim('\\nNo cached entries. Fetch some documents to populate the cache.'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Health command (v3.0)\r\n *\r\n * Comprehensive diagnostics for codex SDK setup:\r\n * - YAML configuration validation\r\n * - CodexClient initialization\r\n * - Cache health via CacheManager\r\n * - Storage provider connectivity\r\n * - Type registry validation\r\n * - Legacy configuration detection\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../../client/get-client';\r\nimport { readYamlConfig } from '../../config/migrate-config';\r\n\r\ninterface HealthCheck {\r\n name: string;\r\n status: 'pass' | 'warn' | 'fail';\r\n message: string;\r\n details?: string;\r\n}\r\n\r\n/**\r\n * Check if file exists\r\n */\r\nasync function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Check YAML configuration\r\n */\r\nasync function checkConfiguration(): Promise<HealthCheck> {\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const legacyConfigPath = path.join(process.cwd(), '.fractary', 'plugins', 'codex', 'config.json');\r\n\r\n try {\r\n // Check for YAML config\r\n if (!await fileExists(configPath)) {\r\n // Check for legacy config\r\n if (await fileExists(legacyConfigPath)) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'Legacy JSON configuration detected',\r\n details: 'Run \"fractary codex migrate\" to upgrade to YAML format'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Configuration',\r\n status: 'fail',\r\n message: 'No configuration found',\r\n details: 'Run \"fractary codex init\" to create configuration'\r\n };\r\n }\r\n\r\n // Validate YAML config\r\n const config = await readYamlConfig(configPath);\r\n\r\n if (!config.organization) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'No organization configured',\r\n details: 'Organization slug is required'\r\n };\r\n }\r\n\r\n // Check storage providers\r\n const providerCount = config.storage?.length || 0;\r\n if (providerCount === 0) {\r\n return {\r\n name: 'Configuration',\r\n status: 'warn',\r\n message: 'No storage providers configured',\r\n details: 'At least one storage provider is recommended'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Configuration',\r\n status: 'pass',\r\n message: 'Valid YAML configuration',\r\n details: `Organization: ${config.organization}, ${providerCount} storage provider(s)`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Configuration',\r\n status: 'fail',\r\n message: 'Invalid configuration',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check SDK client initialization\r\n */\r\nasync function checkSDKClient(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const organization = client.getOrganization();\r\n\r\n return {\r\n name: 'SDK Client',\r\n status: 'pass',\r\n message: 'CodexClient initialized successfully',\r\n details: `Organization: ${organization}`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'SDK Client',\r\n status: 'fail',\r\n message: 'Failed to initialize CodexClient',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check cache health\r\n */\r\nasync function checkCache(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const stats = await client.getCacheStats();\r\n\r\n if (stats.entryCount === 0) {\r\n return {\r\n name: 'Cache',\r\n status: 'warn',\r\n message: 'Cache is empty',\r\n details: 'Fetch some documents to populate cache'\r\n };\r\n }\r\n\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n\r\n if (healthPercent < 50) {\r\n return {\r\n name: 'Cache',\r\n status: 'warn',\r\n message: `${stats.entryCount} entries (${healthPercent.toFixed(0)}% fresh)`,\r\n details: `${stats.expiredCount} expired, ${stats.staleCount} stale`\r\n };\r\n }\r\n\r\n return {\r\n name: 'Cache',\r\n status: 'pass',\r\n message: `${stats.entryCount} entries (${healthPercent.toFixed(0)}% fresh)`,\r\n details: `${formatSize(stats.totalSize)} total`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Cache',\r\n status: 'fail',\r\n message: 'Cache check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check storage providers\r\n */\r\nasync function checkStorage(): Promise<HealthCheck> {\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n\r\n try {\r\n const config = await readYamlConfig(configPath);\r\n const providers = config.storage || [];\r\n\r\n if (providers.length === 0) {\r\n return {\r\n name: 'Storage',\r\n status: 'warn',\r\n message: 'No storage providers configured',\r\n details: 'Configure at least one provider in .fractary/codex.yaml'\r\n };\r\n }\r\n\r\n const providerTypes = providers.map(p => p.type).join(', ');\r\n const hasGitHub = providers.some(p => p.type === 'github');\r\n\r\n if (hasGitHub && !process.env.GITHUB_TOKEN) {\r\n return {\r\n name: 'Storage',\r\n status: 'warn',\r\n message: `${providers.length} provider(s): ${providerTypes}`,\r\n details: 'GITHUB_TOKEN not set (required for GitHub provider)'\r\n };\r\n }\r\n\r\n return {\r\n name: 'Storage',\r\n status: 'pass',\r\n message: `${providers.length} provider(s): ${providerTypes}`,\r\n details: 'All configured providers available'\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Storage',\r\n status: 'fail',\r\n message: 'Storage check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check type registry\r\n */\r\nasync function checkTypes(): Promise<HealthCheck> {\r\n try {\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n const allTypes = registry.list();\r\n\r\n const builtinCount = allTypes.filter(t => registry.isBuiltIn(t.name)).length;\r\n const customCount = allTypes.length - builtinCount;\r\n\r\n return {\r\n name: 'Type Registry',\r\n status: 'pass',\r\n message: `${allTypes.length} types registered`,\r\n details: `${builtinCount} built-in, ${customCount} custom`\r\n };\r\n\r\n } catch (error: any) {\r\n return {\r\n name: 'Type Registry',\r\n status: 'fail',\r\n message: 'Type registry check failed',\r\n details: error.message\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function healthCommand(): Command {\r\n const cmd = new Command('health');\r\n\r\n cmd\r\n .description('Run diagnostics on codex setup')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Run all health checks\r\n const checks: HealthCheck[] = [];\r\n\r\n checks.push(await checkConfiguration());\r\n checks.push(await checkSDKClient());\r\n checks.push(await checkCache());\r\n checks.push(await checkStorage());\r\n checks.push(await checkTypes());\r\n\r\n // Count results\r\n const passed = checks.filter(c => c.status === 'pass').length;\r\n const warned = checks.filter(c => c.status === 'warn').length;\r\n const failed = checks.filter(c => c.status === 'fail').length;\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n summary: {\r\n total: checks.length,\r\n passed,\r\n warned,\r\n failed,\r\n healthy: failed === 0\r\n },\r\n checks\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display results\r\n console.log(chalk.bold('Codex Health Check\\n'));\r\n\r\n for (const check of checks) {\r\n const icon = check.status === 'pass' ? chalk.green('✓') :\r\n check.status === 'warn' ? chalk.yellow('⚠') :\r\n chalk.red('✗');\r\n\r\n const statusColor = check.status === 'pass' ? chalk.green :\r\n check.status === 'warn' ? chalk.yellow :\r\n chalk.red;\r\n\r\n console.log(`${icon} ${chalk.bold(check.name)}`);\r\n console.log(` ${statusColor(check.message)}`);\r\n if (check.details) {\r\n console.log(` ${chalk.dim(check.details)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim('─'.repeat(60)));\r\n\r\n const overallStatus = failed > 0 ? chalk.red('UNHEALTHY') :\r\n warned > 0 ? chalk.yellow('DEGRADED') :\r\n chalk.green('HEALTHY');\r\n\r\n console.log(`Status: ${overallStatus}`);\r\n console.log(chalk.dim(`${passed} passed, ${warned} warnings, ${failed} failed`));\r\n\r\n if (failed > 0 || warned > 0) {\r\n console.log('');\r\n console.log(chalk.dim('Run checks individually for more details:'));\r\n console.log(chalk.dim(' fractary codex cache stats'));\r\n console.log(chalk.dim(' fractary codex types list'));\r\n }\r\n\r\n // Exit with error if any checks failed\r\n if (failed > 0) {\r\n process.exit(1);\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Sync command (v3.0)\r\n *\r\n * Synchronizes project with the codex repository using SDK SyncManager:\r\n * - Multi-directional sync (to-codex, from-codex, bidirectional)\r\n * - Manifest tracking for sync state\r\n * - Conflict detection and resolution\r\n * - Pattern-based file filtering\r\n * - Dry-run mode\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\n// Import types only\r\nimport type {\r\n SyncDirection,\r\n SyncOptions\r\n} from '@fractary/codex';\r\nimport { readYamlConfig } from '../config/migrate-config';\r\n\r\n/**\r\n * Get environment branch mapping\r\n */\r\nfunction getEnvironmentBranch(config: any, env: string): string {\r\n const envMap = config.sync?.environments || {\r\n dev: 'develop',\r\n test: 'test',\r\n staging: 'staging',\r\n prod: 'main'\r\n };\r\n\r\n return envMap[env] || env;\r\n}\r\n\r\n/**\r\n * Format bytes to human-readable size\r\n */\r\nfunction formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\n/**\r\n * Format duration in milliseconds\r\n */\r\nfunction formatDuration(ms: number): string {\r\n if (ms < 1000) return `${ms}ms`;\r\n return `${(ms / 1000).toFixed(1)}s`;\r\n}\r\n\r\nexport function syncCommand(): Command {\r\n const cmd = new Command('sync');\r\n\r\n cmd\r\n .description('Sync single project with codex repository')\r\n .argument('[name]', 'Project name (auto-detected if not provided)')\r\n .option('--env <env>', 'Target environment (dev/test/staging/prod)', 'prod')\r\n .option('--dry-run', 'Show what would sync without executing')\r\n .option('--direction <dir>', 'Sync direction (to-codex/from-codex/bidirectional)', 'bidirectional')\r\n .option('--include <pattern>', 'Include files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--exclude <pattern>', 'Exclude files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--force', 'Force sync without checking timestamps')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string | undefined, options) => {\r\n try {\r\n // Load YAML config\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n } catch (error) {\r\n console.error(chalk.red('Error:'), 'Codex not initialized.');\r\n console.log(chalk.dim('Run \"fractary codex init\" first.'));\r\n process.exit(1);\r\n }\r\n\r\n // Dynamic import to avoid loading SDK at module time\r\n const { createSyncManager, createLocalStorage, detectCurrentProject } = await import('@fractary/codex');\r\n\r\n // Determine project name\r\n let projectName = name;\r\n if (!projectName) {\r\n const detected = detectCurrentProject();\r\n projectName = detected.project || undefined;\r\n }\r\n\r\n if (!projectName) {\r\n console.error(chalk.red('Error:'), 'Could not determine project name.');\r\n console.log(chalk.dim('Provide project name as argument or run from a git repository.'));\r\n process.exit(1);\r\n }\r\n\r\n // Validate direction\r\n const validDirections: SyncDirection[] = ['to-codex', 'from-codex', 'bidirectional'];\r\n if (!validDirections.includes(options.direction as SyncDirection)) {\r\n console.error(chalk.red('Error:'), `Invalid direction: ${options.direction}`);\r\n console.log(chalk.dim('Valid options: to-codex, from-codex, bidirectional'));\r\n process.exit(1);\r\n }\r\n\r\n const direction = options.direction as SyncDirection;\r\n const targetBranch = getEnvironmentBranch(config, options.env);\r\n\r\n // Create LocalStorage instance\r\n const localStorage = createLocalStorage({\r\n baseDir: process.cwd()\r\n });\r\n\r\n // Create SyncManager\r\n // Cast config.sync to any to avoid type incompatibility between CLI and SDK SyncConfig types\r\n const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync as any,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get default include patterns from config\r\n // The CLI config uses 'exclude' patterns, fall back to standard patterns for include\r\n const defaultPatterns = [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Combine config patterns with CLI options\r\n const includePatterns = options.include.length > 0 ? options.include : defaultPatterns;\r\n const excludePatterns = [\r\n ...(config.sync?.exclude || []),\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files\r\n const sourceDir = process.cwd();\r\n const allFiles = await syncManager.listLocalFiles(sourceDir);\r\n\r\n // Filter files by patterns (simple implementation)\r\n const targetFiles = allFiles.filter(file => {\r\n // Check exclude patterns first\r\n for (const pattern of excludePatterns) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*') + '$');\r\n if (regex.test(file.path)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check include patterns\r\n for (const pattern of includePatterns) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*') + '$');\r\n if (regex.test(file.path)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // Create sync plan\r\n const syncOptions: SyncOptions = {\r\n direction,\r\n dryRun: options.dryRun,\r\n force: options.force,\r\n include: includePatterns,\r\n exclude: excludePatterns\r\n };\r\n\r\n let plan;\r\n let routingScan;\r\n\r\n // Use routing-aware sync for from-codex direction\r\n if (direction === 'from-codex') {\r\n // Get codex repository path from config or use default location\r\n // The cacheDir from config or default to .fractary/codex-cache\r\n const codexRepoPath = config.cacheDir || path.join(process.cwd(), '.fractary', 'codex-cache');\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n info: 'Routing-aware sync: scanning entire codex repository for files targeting this project',\r\n codexPath: codexRepoPath\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.blue('ℹ Using routing-aware sync'));\r\n console.log(chalk.dim(' Scanning entire codex for files routing to this project...\\n'));\r\n }\r\n\r\n const planWithRouting = await syncManager.createRoutingAwarePlan(\r\n config.organization,\r\n projectName,\r\n codexRepoPath,\r\n syncOptions\r\n );\r\n\r\n plan = planWithRouting;\r\n routingScan = planWithRouting.routingScan;\r\n } else {\r\n plan = await syncManager.createPlan(\r\n config.organization,\r\n projectName,\r\n sourceDir,\r\n targetFiles,\r\n syncOptions\r\n );\r\n }\r\n\r\n if (plan.totalFiles === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n project: projectName,\r\n organization: config.organization,\r\n files: [],\r\n synced: 0\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.yellow('No files to sync.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n const output = {\r\n project: projectName,\r\n organization: config.organization,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n dryRun: options.dryRun || false,\r\n plan: {\r\n totalFiles: plan.totalFiles,\r\n totalBytes: plan.totalBytes,\r\n estimatedTime: plan.estimatedTime,\r\n conflicts: plan.conflicts.length,\r\n skipped: plan.skipped.length\r\n },\r\n files: plan.files.map(f => ({\r\n path: f.path,\r\n operation: f.operation,\r\n size: f.size\r\n }))\r\n };\r\n\r\n if (options.dryRun) {\r\n console.log(JSON.stringify(output, null, 2));\r\n return;\r\n }\r\n\r\n // Execute and add results\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n console.log(JSON.stringify({\r\n ...output,\r\n result: {\r\n success: result.success,\r\n synced: result.synced,\r\n failed: result.failed,\r\n skipped: result.skipped,\r\n duration: result.duration,\r\n errors: result.errors\r\n }\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display sync plan\r\n console.log(chalk.bold('Sync Plan\\n'));\r\n console.log(` Project: ${chalk.cyan(projectName)}`);\r\n console.log(` Organization: ${chalk.cyan(config.organization)}`);\r\n console.log(` Environment: ${chalk.cyan(options.env)} (${targetBranch})`);\r\n console.log(` Direction: ${chalk.cyan(direction)}`);\r\n console.log(` Files: ${chalk.cyan(plan.totalFiles.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(plan.totalBytes))}`);\r\n if (plan.estimatedTime) {\r\n console.log(` Est. time: ${chalk.dim(formatDuration(plan.estimatedTime))}`);\r\n }\r\n\r\n // Display routing statistics if using routing-aware sync\r\n if (routingScan) {\r\n console.log('');\r\n console.log(chalk.bold('Routing Statistics\\n'));\r\n console.log(` Scanned: ${chalk.cyan(routingScan.stats.totalScanned.toString())} files`);\r\n console.log(` Matched: ${chalk.cyan(routingScan.stats.totalMatched.toString())} files`);\r\n console.log(` Source projects: ${chalk.cyan(routingScan.stats.sourceProjects.length.toString())}`);\r\n if (routingScan.stats.sourceProjects.length > 0) {\r\n console.log(chalk.dim(` ${routingScan.stats.sourceProjects.slice(0, 5).join(', ')}`));\r\n if (routingScan.stats.sourceProjects.length > 5) {\r\n console.log(chalk.dim(` ... and ${routingScan.stats.sourceProjects.length - 5} more`));\r\n }\r\n }\r\n console.log(` Scan time: ${chalk.dim(formatDuration(routingScan.stats.durationMs))}`);\r\n }\r\n\r\n console.log('');\r\n\r\n if (plan.conflicts.length > 0) {\r\n console.log(chalk.yellow(`⚠ ${plan.conflicts.length} conflicts detected:`));\r\n for (const conflict of plan.conflicts.slice(0, 5)) {\r\n console.log(chalk.yellow(` • ${conflict.path}`));\r\n }\r\n if (plan.conflicts.length > 5) {\r\n console.log(chalk.dim(` ... and ${plan.conflicts.length - 5} more`));\r\n }\r\n console.log('');\r\n }\r\n\r\n if (plan.skipped.length > 0) {\r\n console.log(chalk.dim(`${plan.skipped.length} files skipped (no changes)`));\r\n console.log('');\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would sync:\\n'));\r\n\r\n const filesToShow = plan.files.slice(0, 10);\r\n for (const file of filesToShow) {\r\n const arrow = direction === 'to-codex' ? '→' : direction === 'from-codex' ? '←' : '↔';\r\n const opColor = file.operation === 'create' ? chalk.green :\r\n file.operation === 'update' ? chalk.yellow :\r\n chalk.dim;\r\n console.log(\r\n chalk.dim(` ${arrow}`),\r\n opColor(file.operation.padEnd(7)),\r\n file.path,\r\n chalk.dim(`(${formatBytes(file.size || 0)})`)\r\n );\r\n }\r\n\r\n if (plan.files.length > 10) {\r\n console.log(chalk.dim(` ... and ${plan.files.length - 10} more files`));\r\n }\r\n\r\n console.log(chalk.dim(`\\nTotal: ${plan.totalFiles} files (${formatBytes(plan.totalBytes)})`));\r\n console.log(chalk.dim('Run without --dry-run to execute sync.'));\r\n return;\r\n }\r\n\r\n // Execute sync\r\n console.log(chalk.blue('Syncing...\\n'));\r\n\r\n const startTime = Date.now();\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n const duration = Date.now() - startTime;\r\n\r\n // Summary\r\n console.log('');\r\n if (result.success) {\r\n console.log(chalk.green(`✓ Sync completed successfully`));\r\n console.log(chalk.dim(` Synced: ${result.synced} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n console.log(chalk.dim(` Duration: ${formatDuration(duration)}`));\r\n } else {\r\n console.log(chalk.yellow(`⚠ Sync completed with errors`));\r\n console.log(chalk.green(` Synced: ${result.synced} files`));\r\n console.log(chalk.red(` Failed: ${result.failed} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n console.log('');\r\n console.log(chalk.red('Errors:'));\r\n for (const error of result.errors.slice(0, 5)) {\r\n console.log(chalk.red(` • ${error.path}: ${error.error}`));\r\n }\r\n if (result.errors.length > 5) {\r\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more errors`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types command group (v3.0)\r\n *\r\n * Manages the artifact type registry:\r\n * - list: View all types (built-in and custom)\r\n * - show: View details for a specific type\r\n * - add: Register a custom type\r\n * - remove: Unregister a custom type\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport { typesListCommand } from './list';\r\nimport { typesShowCommand } from './show';\r\nimport { typesAddCommand } from './add';\r\nimport { typesRemoveCommand } from './remove';\r\n\r\nexport function typesCommand(): Command {\r\n const cmd = new Command('types');\r\n\r\n cmd\r\n .description('Manage artifact type registry');\r\n\r\n // Register subcommands\r\n cmd.addCommand(typesListCommand());\r\n cmd.addCommand(typesShowCommand());\r\n cmd.addCommand(typesAddCommand());\r\n cmd.addCommand(typesRemoveCommand());\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types list command (v3.0)\r\n *\r\n * Lists all artifact types using SDK's TypeRegistry\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesListCommand(): Command {\r\n const cmd = new Command('list');\r\n\r\n cmd\r\n .description('List all artifact types')\r\n .option('--json', 'Output as JSON')\r\n .option('--custom-only', 'Show only custom types')\r\n .option('--builtin-only', 'Show only built-in types')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Get all types from registry\r\n const allTypes = registry.list();\r\n\r\n // Filter based on options\r\n let types = allTypes;\r\n if (options.customOnly) {\r\n types = allTypes.filter(t => !registry.isBuiltIn(t.name));\r\n } else if (options.builtinOnly) {\r\n types = allTypes.filter(t => registry.isBuiltIn(t.name));\r\n }\r\n\r\n if (options.json) {\r\n const builtinCount = types.filter(t => registry.isBuiltIn(t.name)).length;\r\n const customCount = types.length - builtinCount;\r\n\r\n console.log(JSON.stringify({\r\n count: types.length,\r\n builtinCount,\r\n customCount,\r\n types: types.map(t => ({\r\n name: t.name,\r\n description: t.description,\r\n patterns: t.patterns,\r\n defaultTtl: t.defaultTtl,\r\n ttl: formatTtl(t.defaultTtl),\r\n builtin: registry.isBuiltIn(t.name),\r\n archiveAfterDays: t.archiveAfterDays,\r\n archiveStorage: t.archiveStorage\r\n }))\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n if (types.length === 0) {\r\n console.log(chalk.yellow('No types found.'));\r\n return;\r\n }\r\n\r\n console.log(chalk.bold('Artifact Types\\n'));\r\n\r\n // Group by built-in vs custom\r\n const builtinTypes = types.filter(t => registry.isBuiltIn(t.name));\r\n const customTypes = types.filter(t => !registry.isBuiltIn(t.name));\r\n\r\n if (builtinTypes.length > 0 && !options.customOnly) {\r\n console.log(chalk.bold('Built-in Types'));\r\n console.log(chalk.dim('─'.repeat(70)));\r\n\r\n for (const type of builtinTypes) {\r\n const patternStr = type.patterns[0] || '';\r\n console.log(` ${chalk.cyan(type.name.padEnd(12))} ${patternStr.padEnd(30)} ${chalk.dim(`TTL: ${formatTtl(type.defaultTtl)}`)}`);\r\n console.log(` ${chalk.dim(' '.repeat(12) + type.description)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n if (customTypes.length > 0 && !options.builtinOnly) {\r\n console.log(chalk.bold('Custom Types'));\r\n console.log(chalk.dim('─'.repeat(70)));\r\n\r\n for (const type of customTypes) {\r\n const patternStr = type.patterns[0] || '';\r\n console.log(` ${chalk.green(type.name.padEnd(12))} ${patternStr.padEnd(30)} ${chalk.dim(`TTL: ${formatTtl(type.defaultTtl)}`)}`);\r\n console.log(` ${chalk.dim(' '.repeat(12) + type.description)}`);\r\n }\r\n console.log('');\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim(`Total: ${types.length} types (${builtinTypes.length} built-in, ${customTypes.length} custom)`));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types show command (v3.0)\r\n *\r\n * Shows details for a specific artifact type using SDK's TypeRegistry\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesShowCommand(): Command {\r\n const cmd = new Command('show');\r\n\r\n cmd\r\n .description('Show details for a specific type')\r\n .argument('<name>', 'Type name')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Get type from registry\r\n const type = registry.get(name);\r\n\r\n if (!type) {\r\n console.error(chalk.red('Error:'), `Type \"${name}\" not found.`);\r\n console.log(chalk.dim('Run \"fractary codex types list\" to see available types.'));\r\n process.exit(1);\r\n }\r\n\r\n const isBuiltin = registry.isBuiltIn(name);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n name: type.name,\r\n builtin: isBuiltin,\r\n description: type.description,\r\n patterns: type.patterns,\r\n defaultTtl: type.defaultTtl,\r\n ttl: formatTtl(type.defaultTtl),\r\n archiveAfterDays: type.archiveAfterDays,\r\n archiveStorage: type.archiveStorage,\r\n syncPatterns: type.syncPatterns,\r\n excludePatterns: type.excludePatterns\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n const nameColor = isBuiltin ? chalk.cyan : chalk.green;\r\n console.log(chalk.bold(`Type: ${nameColor(name)}\\n`));\r\n\r\n console.log(` ${chalk.dim('Source:')} ${isBuiltin ? 'Built-in' : 'Custom'}`);\r\n console.log(` ${chalk.dim('Description:')} ${type.description}`);\r\n console.log(` ${chalk.dim('TTL:')} ${formatTtl(type.defaultTtl)} (${type.defaultTtl} seconds)`);\r\n console.log('');\r\n\r\n console.log(chalk.bold('Patterns'));\r\n for (const pattern of type.patterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n\r\n if (type.archiveAfterDays !== null) {\r\n console.log('');\r\n console.log(chalk.bold('Archive Settings'));\r\n console.log(` ${chalk.dim('After:')} ${type.archiveAfterDays} days`);\r\n console.log(` ${chalk.dim('Storage:')} ${type.archiveStorage || 'not set'}`);\r\n }\r\n\r\n if (type.syncPatterns && type.syncPatterns.length > 0) {\r\n console.log('');\r\n console.log(chalk.bold('Sync Patterns'));\r\n for (const pattern of type.syncPatterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n }\r\n\r\n if (type.excludePatterns && type.excludePatterns.length > 0) {\r\n console.log('');\r\n console.log(chalk.bold('Exclude Patterns'));\r\n for (const pattern of type.excludePatterns) {\r\n console.log(` ${chalk.dim('•')} ${pattern}`);\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types add command (v3.0)\r\n *\r\n * Registers a custom artifact type in YAML configuration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport { readYamlConfig, writeYamlConfig } from '../../config/migrate-config';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Validate type name\r\n */\r\nfunction isValidTypeName(name: string): boolean {\r\n return /^[a-z][a-z0-9-]*$/.test(name);\r\n}\r\n\r\n/**\r\n * Parse TTL string to seconds\r\n */\r\nfunction parseTtl(ttl: string): number {\r\n const match = ttl.match(/^(\\d+)([smhd])$/);\r\n if (!match) {\r\n throw new Error('Invalid TTL format');\r\n }\r\n\r\n const value = parseInt(match[1], 10);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n default: throw new Error('Unknown TTL unit');\r\n }\r\n}\r\n\r\n/**\r\n * Format TTL from seconds to human-readable string\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 60) return `${seconds}s`;\r\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`;\r\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`;\r\n return `${Math.floor(seconds / 86400)}d`;\r\n}\r\n\r\nexport function typesAddCommand(): Command {\r\n const cmd = new Command('add');\r\n\r\n cmd\r\n .description('Add a custom artifact type')\r\n .argument('<name>', 'Type name (lowercase, alphanumeric with hyphens)')\r\n .requiredOption('--pattern <glob>', 'File pattern (glob syntax)')\r\n .option('--ttl <duration>', 'Cache TTL (e.g., \"24h\", \"7d\")', '24h')\r\n .option('--description <text>', 'Type description')\r\n .option('--json', 'Output as JSON')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Validate type name\r\n if (!isValidTypeName(name)) {\r\n console.error(chalk.red('Error:'), 'Invalid type name.');\r\n console.log(chalk.dim('Type name must be lowercase, start with a letter, and contain only letters, numbers, and hyphens.'));\r\n process.exit(1);\r\n }\r\n\r\n // Get registry to check for conflicts\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Check for built-in type conflict\r\n if (registry.isBuiltIn(name)) {\r\n console.error(chalk.red('Error:'), `Cannot override built-in type \"${name}\".`);\r\n const builtinNames = registry.list().filter(t => registry.isBuiltIn(t.name)).map(t => t.name);\r\n console.log(chalk.dim('Built-in types: ' + builtinNames.join(', ')));\r\n process.exit(1);\r\n }\r\n\r\n // Check if type already exists\r\n if (registry.has(name)) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" already exists.`);\r\n console.log(chalk.dim('Use \"fractary codex types remove\" first to remove it.'));\r\n process.exit(1);\r\n }\r\n\r\n // Parse and validate TTL\r\n let ttlSeconds: number;\r\n try {\r\n ttlSeconds = parseTtl(options.ttl);\r\n } catch {\r\n console.error(chalk.red('Error:'), 'Invalid TTL format.');\r\n console.log(chalk.dim('Expected format: <number><unit> where unit is s (seconds), m (minutes), h (hours), or d (days)'));\r\n console.log(chalk.dim('Examples: 30m, 24h, 7d'));\r\n process.exit(1);\r\n }\r\n\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const config = await readYamlConfig(configPath);\r\n\r\n // Initialize types.custom if needed\r\n if (!config.types) {\r\n config.types = { custom: {} };\r\n }\r\n if (!config.types.custom) {\r\n config.types.custom = {};\r\n }\r\n\r\n // Add the new type to config\r\n config.types.custom[name] = {\r\n description: options.description || `Custom type: ${name}`,\r\n patterns: [options.pattern],\r\n defaultTtl: ttlSeconds\r\n };\r\n\r\n // Save config\r\n await writeYamlConfig(config, configPath);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n success: true,\r\n type: {\r\n name,\r\n description: config.types.custom[name].description,\r\n patterns: config.types.custom[name].patterns,\r\n defaultTtl: ttlSeconds,\r\n ttl: formatTtl(ttlSeconds),\r\n builtin: false\r\n },\r\n message: 'Custom type added successfully. Changes will take effect on next CLI invocation.'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n console.log(chalk.green('✓'), `Added custom type \"${chalk.cyan(name)}\"`);\r\n console.log('');\r\n console.log(` ${chalk.dim('Pattern:')} ${options.pattern}`);\r\n console.log(` ${chalk.dim('TTL:')} ${formatTtl(ttlSeconds)} (${ttlSeconds} seconds)`);\r\n if (options.description) {\r\n console.log(` ${chalk.dim('Description:')} ${options.description}`);\r\n }\r\n console.log('');\r\n console.log(chalk.dim('Note: Custom type will be available on next CLI invocation.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Types remove command (v3.0)\r\n *\r\n * Unregisters a custom artifact type from YAML configuration\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\nimport { readYamlConfig, writeYamlConfig } from '../../config/migrate-config';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function typesRemoveCommand(): Command {\r\n const cmd = new Command('remove');\r\n\r\n cmd\r\n .description('Remove a custom artifact type')\r\n .argument('<name>', 'Type name to remove')\r\n .option('--json', 'Output as JSON')\r\n .option('--force', 'Skip confirmation')\r\n .action(async (name: string, options) => {\r\n try {\r\n // Get registry to check type status\r\n const client = await getClient();\r\n const registry = client.getTypeRegistry();\r\n\r\n // Check for built-in type\r\n if (registry.isBuiltIn(name)) {\r\n console.error(chalk.red('Error:'), `Cannot remove built-in type \"${name}\".`);\r\n console.log(chalk.dim('Built-in types are permanent and cannot be removed.'));\r\n process.exit(1);\r\n }\r\n\r\n // Check if custom type exists\r\n if (!registry.has(name)) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" not found.`);\r\n console.log(chalk.dim('Run \"fractary codex types list --custom-only\" to see custom types.'));\r\n process.exit(1);\r\n }\r\n\r\n // Get type info before removal\r\n const typeInfo = registry.get(name)!;\r\n\r\n // Load YAML configuration\r\n const configPath = path.join(process.cwd(), '.fractary', 'codex.yaml');\r\n const config = await readYamlConfig(configPath);\r\n\r\n // Check if custom type exists in config\r\n if (!config.types?.custom?.[name]) {\r\n console.error(chalk.red('Error:'), `Custom type \"${name}\" not found in configuration.`);\r\n process.exit(1);\r\n }\r\n\r\n // Remove the type from config\r\n delete config.types.custom[name];\r\n\r\n // Clean up empty objects\r\n if (Object.keys(config.types.custom).length === 0) {\r\n delete config.types.custom;\r\n }\r\n if (config.types && Object.keys(config.types).length === 0) {\r\n delete config.types;\r\n }\r\n\r\n // Save config\r\n await writeYamlConfig(config, configPath);\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n success: true,\r\n removed: {\r\n name: typeInfo.name,\r\n description: typeInfo.description,\r\n patterns: typeInfo.patterns,\r\n defaultTtl: typeInfo.defaultTtl\r\n },\r\n message: 'Custom type removed successfully. Changes will take effect on next CLI invocation.'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n console.log(chalk.green('✓'), `Removed custom type \"${chalk.cyan(name)}\"`);\r\n console.log('');\r\n console.log(chalk.dim('Removed configuration:'));\r\n console.log(` ${chalk.dim('Pattern:')} ${typeInfo.patterns.join(', ')}`);\r\n console.log(` ${chalk.dim('Description:')} ${typeInfo.description}`);\r\n console.log('');\r\n console.log(chalk.dim('Note: Custom type will be removed on next CLI invocation.'));\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary codex init\" to create a configuration.'));\r\n }\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n"]}