@fractary/codex-cli 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +312 -55
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +309 -52
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
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/utils/codex-repository.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","path7","fs6","CodexClient","chalk","fs2","Command","fs3","fileExists","fs4","path5","formatSize","fs5","path6","path8","fs","ensureCodexCloned","formatTtl","path9","path10","__filename","fileURLToPath","__dirname","dirname","join"],"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 // Directional sync patterns (added for PR #29)\r\n to_codex?: string[];\r\n from_codex?: string[];\r\n default_to_codex?: string[];\r\n default_from_codex?: string[];\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/config.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', 'config.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 * Codex Repository Utilities\n *\n * Handles cloning and updating the central codex repository for routing-aware sync.\n */\n\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as fs from 'fs/promises';\nimport { spawn } from 'child_process';\nimport type { CodexYamlConfig } from '../config/config-types';\n\n/**\n * Execute a command using spawn (safer than exec)\n */\nfunction spawnAsync(command: string, args: string[], options: { cwd: string }): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n ...options,\n env: process.env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n const error: any = new Error(stderr || `Command exited with code ${code}`);\n error.code = code;\n reject(error);\n } else {\n resolve(stdout);\n }\n });\n });\n}\n\n/**\n * Extended config interface with codex_repository field\n */\ninterface CodexConfigWithRepo extends CodexYamlConfig {\n codex_repository?: string;\n}\n\n/**\n * Sanitize a path component to prevent path traversal attacks\n * Removes dangerous sequences like ../ and path separators\n */\nfunction sanitizePathComponent(component: string): string {\n if (!component || typeof component !== 'string') {\n throw new Error('Path component must be a non-empty string');\n }\n\n // Remove path traversal sequences and path separators\n const sanitized = component\n .replace(/\\.\\./g, '')\n .replace(/[/\\\\]/g, '')\n .trim();\n\n if (!sanitized) {\n throw new Error(`Invalid path component: ${component}`);\n }\n\n return sanitized;\n}\n\n/**\n * Validate a GitHub organization or repository name\n * Ensures it contains only safe characters\n */\nfunction validateGitHubName(name: string, type: 'organization' | 'repository'): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`GitHub ${type} name must be a non-empty string`);\n }\n\n // GitHub names can only contain alphanumeric characters, hyphens, underscores, and dots\n if (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n throw new Error(`Invalid GitHub ${type} name: ${name}. Must contain only alphanumeric characters, hyphens, underscores, and dots.`);\n }\n\n // Additional checks\n if (name.startsWith('.') || name.startsWith('-')) {\n throw new Error(`GitHub ${type} name cannot start with a dot or hyphen: ${name}`);\n }\n}\n\n/**\n * Get the temporary directory path for codex clone\n * Includes process ID to prevent race conditions\n */\nexport function getTempCodexPath(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repository || 'codex';\n\n // Sanitize path components to prevent path traversal\n const sanitizedOrg = sanitizePathComponent(config.organization);\n const sanitizedRepo = sanitizePathComponent(codexRepo);\n\n // Include process ID to prevent concurrent sync conflicts\n return path.join(\n os.tmpdir(),\n 'fractary-codex-clone',\n `${sanitizedOrg}-${sanitizedRepo}-${process.pid}`\n );\n}\n\n/**\n * Check if a directory is a valid git repository\n */\nexport async function isValidGitRepo(repoPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(repoPath, '.git');\n const stats = await fs.stat(gitDir);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Construct the git repository URL from config\n */\nexport function getCodexRepoUrl(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repository || 'codex';\n\n // Validate GitHub names to prevent URL injection\n validateGitHubName(config.organization, 'organization');\n validateGitHubName(codexRepo, 'repository');\n\n // Default to GitHub\n // Format: https://github.com/{org}/{repo}.git\n return `https://github.com/${config.organization}/${codexRepo}.git`;\n}\n\n/**\n * Execute a git command in a directory using spawn (safe from command injection)\n */\nasync function execGit(repoPath: string, args: string[]): Promise<string> {\n try {\n const stdout = await spawnAsync('git', args, {\n cwd: repoPath,\n });\n\n return stdout;\n } catch (error: any) {\n // Provide specific error messages based on error code\n if (error.code === 'ENOENT') {\n throw new Error(`Git command not found. Ensure git is installed and in PATH.`);\n }\n if (error.code === 'EACCES') {\n throw new Error(`Permission denied accessing repository at ${repoPath}`);\n }\n if (error.code === 128) {\n throw new Error(`Git authentication failed. Check your credentials and repository access.`);\n }\n // For other errors, include the original message\n throw error;\n }\n}\n\n/**\n * Clone a git repository using spawn (safe from command injection)\n */\nasync function gitClone(\n url: string,\n targetPath: string,\n options?: { branch?: string; depth?: number }\n): Promise<void> {\n // Ensure parent directory exists\n const parentDir = path.dirname(targetPath);\n await fs.mkdir(parentDir, { recursive: true });\n\n // Build args array (safe from command injection)\n const args = ['clone'];\n\n if (options?.depth) {\n // Validate depth is a positive integer\n if (!Number.isInteger(options.depth) || options.depth <= 0) {\n throw new Error(`Invalid depth parameter: ${options.depth}. Must be a positive integer.`);\n }\n args.push('--depth', String(options.depth));\n }\n\n if (options?.branch) {\n // Branch validation already done in gitCheckout, but validate here too\n if (!/^[\\w\\-./]+$/.test(options.branch)) {\n throw new Error(`Invalid branch name: ${options.branch}`);\n }\n args.push('--branch', options.branch);\n }\n\n // Add single-branch flag for performance\n args.push('--single-branch');\n\n args.push(url, targetPath);\n\n // Execute clone using spawn (parent directory is cwd)\n await spawnAsync('git', args, { cwd: parentDir });\n}\n\n/**\n * Fetch updates from remote\n */\nasync function gitFetch(repoPath: string, branch?: string): Promise<void> {\n // For shallow clones, fetch the specific branch if provided\n if (branch) {\n // Validate branch name\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['fetch', 'origin', `${branch}:${branch}`]);\n } else {\n await execGit(repoPath, ['fetch', 'origin']);\n }\n}\n\n/**\n * Checkout a branch\n */\nasync function gitCheckout(repoPath: string, branch: string): Promise<void> {\n // Validate branch name to prevent command injection\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['checkout', branch]);\n}\n\n/**\n * Pull latest changes\n */\nasync function gitPull(repoPath: string): Promise<void> {\n await execGit(repoPath, ['pull']);\n}\n\n/**\n * Ensure the codex repository is cloned and up-to-date\n *\n * This function will:\n * 1. Check if the repository already exists in temp directory\n * 2. If it exists and is valid, update it (fetch + checkout + pull)\n * 3. If it doesn't exist, clone it fresh (shallow clone for efficiency)\n * 4. Return the path to the cloned repository\n *\n * @param config - Codex configuration\n * @param options - Clone options\n * @returns Path to the cloned codex repository\n */\nexport async function ensureCodexCloned(\n config: CodexConfigWithRepo,\n options?: { force?: boolean; branch?: string }\n): Promise<string> {\n const tempPath = getTempCodexPath(config);\n const branch = options?.branch || 'main';\n\n // If already exists and not forcing a fresh clone, update it\n if (await isValidGitRepo(tempPath) && !options?.force) {\n try {\n await gitFetch(tempPath, branch);\n await gitCheckout(tempPath, branch);\n await gitPull(tempPath);\n return tempPath;\n } catch (error: any) {\n // If update fails, remove and clone fresh\n console.warn(`Failed to update existing clone: ${error.message}`);\n console.warn(`Removing and cloning fresh...`);\n await fs.rm(tempPath, { recursive: true, force: true });\n }\n }\n\n // Clone fresh\n const repoUrl = getCodexRepoUrl(config);\n\n // Remove existing directory if present\n try {\n await fs.rm(tempPath, { recursive: true, force: true });\n } catch (error: any) {\n // Log but don't fail - directory might not exist yet\n console.warn(`Could not remove existing directory ${tempPath}: ${error.message}`);\n }\n\n await gitClone(repoUrl, tempPath, {\n branch,\n depth: 1, // Shallow clone for efficiency\n });\n\n return tempPath;\n}\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';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\n// Read version from package.json\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst VERSION = packageJson.version;\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(VERSION);\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/config.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/config.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', 'config.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/config.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', 'config.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', 'config.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/config.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 SyncConfig\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', 'config.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 const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync as Partial<SyncConfig>,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get include patterns from config or use defaults\r\n // For to-codex: use config.sync.to_codex if available\r\n // For from-codex: config.sync.from_codex is handled by routing scanner\r\n const defaultToCodexPatterns = [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Use proper type for sync config\r\n const syncConfig = config.sync as Partial<SyncConfig> | undefined;\r\n\r\n // Resolve to_codex patterns (supports both new and legacy formats)\r\n let configIncludePatterns: string[];\r\n let configExcludePatterns: string[] = [];\r\n\r\n if (syncConfig?.to_codex) {\r\n const toCodex = syncConfig.to_codex;\r\n // Check if new format (object with include/exclude)\r\n if (typeof toCodex === 'object' && !Array.isArray(toCodex)) {\r\n // New format: DirectionalSyncConfig with include/exclude\r\n const directionalConfig = toCodex as { include?: string[]; exclude?: string[] };\r\n configIncludePatterns = directionalConfig.include || defaultToCodexPatterns;\r\n configExcludePatterns = directionalConfig.exclude || [];\r\n } else if (Array.isArray(toCodex)) {\r\n // Legacy format (array of patterns)\r\n configIncludePatterns = toCodex;\r\n configExcludePatterns = syncConfig.exclude || [];\r\n } else {\r\n configIncludePatterns = defaultToCodexPatterns;\r\n configExcludePatterns = [];\r\n }\r\n } else {\r\n // No to_codex config, use defaults\r\n configIncludePatterns = defaultToCodexPatterns;\r\n configExcludePatterns = syncConfig?.exclude || [];\r\n }\r\n\r\n // CLI options override config\r\n const includePatterns = options.include.length > 0 ? options.include : configIncludePatterns;\r\n const excludePatterns = [\r\n ...configExcludePatterns,\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files using proper glob pattern matching\r\n const sourceDir = process.cwd();\r\n const { glob: globSync } = await import('glob');\r\n\r\n // Match files using glob patterns\r\n const matchedFilePaths = new Set<string>();\r\n\r\n for (const pattern of includePatterns) {\r\n try {\r\n const matches = await globSync(pattern, {\r\n cwd: sourceDir,\r\n dot: true,\r\n nodir: true,\r\n ignore: excludePatterns\r\n });\r\n matches.forEach(match => matchedFilePaths.add(match));\r\n } catch (error: any) {\r\n console.error(chalk.yellow(`Warning: Invalid pattern \"${pattern}\": ${error.message}`));\r\n }\r\n }\r\n\r\n // Convert matched paths to file objects with stat info\r\n const targetFiles = await Promise.all(\r\n Array.from(matchedFilePaths).map(async (filePath) => {\r\n const fullPath = path.join(sourceDir, filePath);\r\n const stats = await import('fs/promises').then(fs => fs.stat(fullPath));\r\n return {\r\n path: filePath,\r\n size: stats.size,\r\n mtime: stats.mtimeMs\r\n };\r\n })\r\n );\r\n\r\n // Create sync plan with options\r\n // Note: include/exclude patterns are used for to-codex direction.\r\n // For from-codex (routing-aware), these patterns are ignored to avoid\r\n // double filtering, since routing rules already determine which files sync.\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 let codexRepoPath: string;\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n console.log(chalk.dim(' Scanning for files routing to this project...\\n'));\r\n } else {\r\n console.log(JSON.stringify({\r\n info: 'Routing-aware sync: cloned codex repository and scanning for files targeting this project',\r\n codexPath: codexRepoPath\r\n }, null, 2));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n\r\n // Provide error-specific troubleshooting\r\n console.log(chalk.yellow('\\nTroubleshooting:'));\r\n if (error.message.includes('Git command not found')) {\r\n console.log(chalk.dim(' Git is not installed or not in PATH.'));\r\n console.log(chalk.dim(' Install git: https://git-scm.com/downloads'));\r\n } else if (error.message.includes('authentication failed') || error.message.includes('Authentication failed')) {\r\n console.log(chalk.dim(' GitHub authentication is required for private repositories.'));\r\n console.log(chalk.dim(' 1. Check auth status: gh auth status'));\r\n console.log(chalk.dim(' 2. Login if needed: gh auth login'));\r\n console.log(chalk.dim(' 3. Or set GITHUB_TOKEN environment variable'));\r\n } else if (error.message.includes('Permission denied')) {\r\n console.log(chalk.dim(' Permission denied accessing repository files.'));\r\n console.log(chalk.dim(' 1. Check file/directory permissions'));\r\n console.log(chalk.dim(' 2. Ensure you have access to the repository'));\r\n } else if (error.message.includes('not found') || error.message.includes('does not exist')) {\r\n console.log(chalk.dim(` Repository not found: ${config.organization}/${(config as any).codex_repository || 'codex'}`));\r\n console.log(chalk.dim(' 1. Verify the repository exists on GitHub'));\r\n console.log(chalk.dim(' 2. Check organization and repository names in config'));\r\n } else {\r\n // Generic troubleshooting for other errors\r\n console.log(chalk.dim(' 1. Ensure git is installed: git --version'));\r\n console.log(chalk.dim(' 2. Check GitHub auth: gh auth status'));\r\n console.log(chalk.dim(` 3. Verify repo exists: ${config.organization}/${(config as any).codex_repository || 'codex'}`));\r\n }\r\n process.exit(1);\r\n }\r\n\r\n // Use temp clone path for routing scan\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', 'config.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', 'config.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"]}
|
|
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/utils/codex-repository.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/config/unified-config.ts","../src/config/gitignore-utils.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","path9","fs8","CodexClient","chalk","fs2","Command","fs3","yaml2","path4","fs4","fs5","path6","fileExists","fs6","path7","formatSize","fs7","path8","path10","fs","ensureCodexCloned","formatTtl","path11","path12","__filename","fileURLToPath","__dirname","dirname","join"],"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 // Directional sync patterns (added for PR #29)\r\n to_codex?: string[];\r\n from_codex?: string[];\r\n default_to_codex?: string[];\r\n default_from_codex?: string[];\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/config.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', 'config.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 * Codex Repository Utilities\n *\n * Handles cloning and updating the central codex repository for routing-aware sync.\n */\n\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as fs from 'fs/promises';\nimport { spawn } from 'child_process';\nimport type { CodexYamlConfig } from '../config/config-types';\n\n/**\n * Execute a command using spawn (safer than exec)\n */\nfunction spawnAsync(command: string, args: string[], options: { cwd: string }): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n ...options,\n env: process.env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n const error: any = new Error(stderr || `Command exited with code ${code}`);\n error.code = code;\n reject(error);\n } else {\n resolve(stdout);\n }\n });\n });\n}\n\n/**\n * Extended config interface with codex_repository field\n */\ninterface CodexConfigWithRepo extends CodexYamlConfig {\n codex_repository?: string;\n}\n\n/**\n * Sanitize a path component to prevent path traversal attacks\n * Removes dangerous sequences like ../ and path separators\n */\nfunction sanitizePathComponent(component: string): string {\n if (!component || typeof component !== 'string') {\n throw new Error('Path component must be a non-empty string');\n }\n\n // Remove path traversal sequences and path separators\n const sanitized = component\n .replace(/\\.\\./g, '')\n .replace(/[/\\\\]/g, '')\n .trim();\n\n if (!sanitized) {\n throw new Error(`Invalid path component: ${component}`);\n }\n\n return sanitized;\n}\n\n/**\n * Validate a GitHub organization or repository name\n * Ensures it contains only safe characters\n */\nfunction validateGitHubName(name: string, type: 'organization' | 'repository'): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`GitHub ${type} name must be a non-empty string`);\n }\n\n // GitHub names can only contain alphanumeric characters, hyphens, underscores, and dots\n if (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n throw new Error(`Invalid GitHub ${type} name: ${name}. Must contain only alphanumeric characters, hyphens, underscores, and dots.`);\n }\n\n // Additional checks\n if (name.startsWith('.') || name.startsWith('-')) {\n throw new Error(`GitHub ${type} name cannot start with a dot or hyphen: ${name}`);\n }\n}\n\n/**\n * Get the temporary directory path for codex clone\n * Includes process ID to prevent race conditions\n */\nexport function getTempCodexPath(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repository || 'codex';\n\n // Sanitize path components to prevent path traversal\n const sanitizedOrg = sanitizePathComponent(config.organization);\n const sanitizedRepo = sanitizePathComponent(codexRepo);\n\n // Include process ID to prevent concurrent sync conflicts\n return path.join(\n os.tmpdir(),\n 'fractary-codex-clone',\n `${sanitizedOrg}-${sanitizedRepo}-${process.pid}`\n );\n}\n\n/**\n * Check if a directory is a valid git repository\n */\nexport async function isValidGitRepo(repoPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(repoPath, '.git');\n const stats = await fs.stat(gitDir);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Construct the git repository URL from config\n */\nexport function getCodexRepoUrl(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repository || 'codex';\n\n // Validate GitHub names to prevent URL injection\n validateGitHubName(config.organization, 'organization');\n validateGitHubName(codexRepo, 'repository');\n\n // Default to GitHub\n // Format: https://github.com/{org}/{repo}.git\n return `https://github.com/${config.organization}/${codexRepo}.git`;\n}\n\n/**\n * Execute a git command in a directory using spawn (safe from command injection)\n */\nasync function execGit(repoPath: string, args: string[]): Promise<string> {\n try {\n const stdout = await spawnAsync('git', args, {\n cwd: repoPath,\n });\n\n return stdout;\n } catch (error: any) {\n // Provide specific error messages based on error code\n if (error.code === 'ENOENT') {\n throw new Error(`Git command not found. Ensure git is installed and in PATH.`);\n }\n if (error.code === 'EACCES') {\n throw new Error(`Permission denied accessing repository at ${repoPath}`);\n }\n if (error.code === 128) {\n throw new Error(`Git authentication failed. Check your credentials and repository access.`);\n }\n // For other errors, include the original message\n throw error;\n }\n}\n\n/**\n * Clone a git repository using spawn (safe from command injection)\n */\nasync function gitClone(\n url: string,\n targetPath: string,\n options?: { branch?: string; depth?: number }\n): Promise<void> {\n // Ensure parent directory exists\n const parentDir = path.dirname(targetPath);\n await fs.mkdir(parentDir, { recursive: true });\n\n // Build args array (safe from command injection)\n const args = ['clone'];\n\n if (options?.depth) {\n // Validate depth is a positive integer\n if (!Number.isInteger(options.depth) || options.depth <= 0) {\n throw new Error(`Invalid depth parameter: ${options.depth}. Must be a positive integer.`);\n }\n args.push('--depth', String(options.depth));\n }\n\n if (options?.branch) {\n // Branch validation already done in gitCheckout, but validate here too\n if (!/^[\\w\\-./]+$/.test(options.branch)) {\n throw new Error(`Invalid branch name: ${options.branch}`);\n }\n args.push('--branch', options.branch);\n }\n\n // Add single-branch flag for performance\n args.push('--single-branch');\n\n args.push(url, targetPath);\n\n // Execute clone using spawn (parent directory is cwd)\n await spawnAsync('git', args, { cwd: parentDir });\n}\n\n/**\n * Fetch updates from remote\n */\nasync function gitFetch(repoPath: string, branch?: string): Promise<void> {\n // For shallow clones, fetch the specific branch if provided\n if (branch) {\n // Validate branch name\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['fetch', 'origin', `${branch}:${branch}`]);\n } else {\n await execGit(repoPath, ['fetch', 'origin']);\n }\n}\n\n/**\n * Checkout a branch\n */\nasync function gitCheckout(repoPath: string, branch: string): Promise<void> {\n // Validate branch name to prevent command injection\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['checkout', branch]);\n}\n\n/**\n * Pull latest changes\n */\nasync function gitPull(repoPath: string): Promise<void> {\n await execGit(repoPath, ['pull']);\n}\n\n/**\n * Ensure the codex repository is cloned and up-to-date\n *\n * This function will:\n * 1. Check if the repository already exists in temp directory\n * 2. If it exists and is valid, update it (fetch + checkout + pull)\n * 3. If it doesn't exist, clone it fresh (shallow clone for efficiency)\n * 4. Return the path to the cloned repository\n *\n * @param config - Codex configuration\n * @param options - Clone options\n * @returns Path to the cloned codex repository\n */\nexport async function ensureCodexCloned(\n config: CodexConfigWithRepo,\n options?: { force?: boolean; branch?: string }\n): Promise<string> {\n const tempPath = getTempCodexPath(config);\n const branch = options?.branch || 'main';\n\n // If already exists and not forcing a fresh clone, update it\n if (await isValidGitRepo(tempPath) && !options?.force) {\n try {\n await gitFetch(tempPath, branch);\n await gitCheckout(tempPath, branch);\n await gitPull(tempPath);\n return tempPath;\n } catch (error: any) {\n // If update fails, remove and clone fresh\n console.warn(`Failed to update existing clone: ${error.message}`);\n console.warn(`Removing and cloning fresh...`);\n await fs.rm(tempPath, { recursive: true, force: true });\n }\n }\n\n // Clone fresh\n const repoUrl = getCodexRepoUrl(config);\n\n // Remove existing directory if present\n try {\n await fs.rm(tempPath, { recursive: true, force: true });\n } catch (error: any) {\n // Log but don't fail - directory might not exist yet\n console.warn(`Could not remove existing directory ${tempPath}: ${error.message}`);\n }\n\n await gitClone(repoUrl, tempPath, {\n branch,\n depth: 1, // Shallow clone for efficiency\n });\n\n return tempPath;\n}\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';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\n// Read version from package.json\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst VERSION = packageJson.version;\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(VERSION);\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/config.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 { initializeUnifiedConfig } from '../../config/unified-config';\r\nimport { ensureCachePathIgnored } from '../../config/gitignore-utils';\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 unified Fractary configuration (.fractary/config.yaml)')\r\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\r\n .option('--project <name>', 'Project name (default: derived from directory)')\r\n .option('--force', 'Overwrite existing configuration')\r\n .action(async (options) => {\r\n try {\r\n console.log(chalk.blue('Initializing unified Fractary configuration...\\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 // Resolve project name\r\n let project = options.project;\r\n if (!project) {\r\n // Use current directory name\r\n project = path.basename(process.cwd());\r\n console.log(chalk.dim(`Project: ${chalk.cyan(project)}\\n`));\r\n }\r\n\r\n // Unified config path\r\n const configPath = path.join(process.cwd(), '.fractary', '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/config.yaml`));\r\n console.log(chalk.dim('Merging with existing configuration...\\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 '.fractary/specs',\r\n '.fractary/logs',\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 // Ensure .fractary/.gitignore exists with cache path\r\n const gitignoreResult = await ensureCachePathIgnored(process.cwd(), '.fractary/codex/cache');\r\n\r\n if (gitignoreResult.created) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (created)'));\r\n } else if (gitignoreResult.updated) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (updated)'));\r\n } else {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (exists)'));\r\n }\r\n\r\n // Initialize or merge configuration\r\n console.log('\\nInitializing configuration...');\r\n\r\n const result = await initializeUnifiedConfig(\r\n configPath,\r\n org,\r\n project,\r\n { force: options.force }\r\n );\r\n\r\n if (result.created) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (created)'));\r\n } else if (result.merged) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (merged with existing)'));\r\n }\r\n\r\n // Success message\r\n console.log(chalk.green('\\n✓ Unified configuration 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(` Project: ${project}`));\r\n console.log(chalk.dim(` Config: .fractary/config.yaml`));\r\n\r\n console.log(chalk.bold('\\nFile plugin sources:'));\r\n console.log(chalk.dim(' - specs: .fractary/specs/ → S3'));\r\n console.log(chalk.dim(' - logs: .fractary/logs/ → S3'));\r\n\r\n console.log(chalk.bold('\\nCodex plugin:'));\r\n console.log(chalk.dim(' - Cache: .fractary/codex/cache/'));\r\n console.log(chalk.dim(' - Dependencies: (none configured)'));\r\n\r\n console.log(chalk.bold('\\nNext steps:'));\r\n console.log(chalk.dim(' 1. Configure AWS credentials for S3 access'));\r\n console.log(chalk.dim(' 2. Edit .fractary/config.yaml to add external project dependencies'));\r\n console.log(chalk.dim(' 3. Access current project files: codex://specs/SPEC-001.md'));\r\n console.log(chalk.dim(' 4. Access external projects: codex://org/project/docs/README.md'));\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","/**\n * Unified configuration utilities\n *\n * Handles creation and merging of unified .fractary/config.yaml\n * that includes both file plugin and codex plugin configuration.\n *\n * Based on SPEC-20260115: Codex-File Plugin Integration\n */\n\nimport * as fs from 'fs/promises'\nimport * as path from 'path'\nimport * as yaml from 'js-yaml'\n\n/**\n * Unified configuration structure\n */\nexport interface UnifiedConfig {\n file?: FilePluginConfig\n codex?: CodexPluginConfig\n}\n\n/**\n * File plugin configuration\n */\nexport interface FilePluginConfig {\n schema_version: string\n sources: Record<string, FileSource>\n}\n\n/**\n * File source configuration\n */\nexport interface FileSource {\n type: 's3' | 'r2' | 'gcs' | 'local'\n bucket?: string\n prefix?: string\n region?: string\n local: {\n base_path: string\n }\n push?: {\n compress?: boolean\n keep_local?: boolean\n }\n auth?: {\n profile?: string\n }\n}\n\n/**\n * Codex plugin configuration\n */\nexport interface CodexPluginConfig {\n schema_version: string\n organization: string\n project: string\n dependencies?: Record<string, any>\n}\n\n/**\n * Sanitize a name for use in S3 bucket naming\n *\n * S3 bucket naming rules:\n * - Must be 3-63 characters\n * - Lowercase letters, numbers, hyphens only\n * - Must start and end with letter or number\n *\n * @param name - Name to sanitize\n * @returns Sanitized name safe for S3 bucket naming\n */\nfunction sanitizeForS3BucketName(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-') // Replace invalid chars with hyphen\n .replace(/^-+|-+$/g, '') // Remove leading/trailing hyphens\n .replace(/-+/g, '-') // Collapse multiple hyphens\n .substring(0, 63) // Enforce max length\n}\n\n/**\n * Get default unified configuration\n *\n * @param organization - Organization name\n * @param project - Project name\n * @returns Default unified configuration\n */\nexport function getDefaultUnifiedConfig(organization: string, project: string): UnifiedConfig {\n const sanitizedProject = sanitizeForS3BucketName(project)\n\n return {\n file: {\n schema_version: '2.0',\n sources: {\n specs: {\n type: 's3',\n bucket: `${sanitizedProject}-files`,\n prefix: 'specs/',\n region: 'us-east-1',\n local: {\n base_path: '.fractary/specs',\n },\n push: {\n compress: false,\n keep_local: true,\n },\n auth: {\n profile: 'default',\n },\n },\n logs: {\n type: 's3',\n bucket: `${sanitizedProject}-files`,\n prefix: 'logs/',\n region: 'us-east-1',\n local: {\n base_path: '.fractary/logs',\n },\n push: {\n compress: true,\n keep_local: true,\n },\n auth: {\n profile: 'default',\n },\n },\n },\n },\n codex: {\n schema_version: '2.0',\n organization,\n project,\n dependencies: {},\n },\n }\n}\n\n/**\n * Read unified configuration from file\n *\n * @param configPath - Path to config file\n * @returns Unified configuration or null if not found\n */\nexport async function readUnifiedConfig(configPath: string): Promise<UnifiedConfig | null> {\n try {\n const content = await fs.readFile(configPath, 'utf-8')\n const config = yaml.load(content) as UnifiedConfig\n return config\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return null\n }\n throw error\n }\n}\n\n/**\n * Write unified configuration to file\n *\n * @param config - Unified configuration\n * @param outputPath - Path to write config\n */\nexport async function writeUnifiedConfig(config: UnifiedConfig, outputPath: string): Promise<void> {\n // Ensure directory exists\n const dir = path.dirname(outputPath)\n await fs.mkdir(dir, { recursive: true })\n\n // Convert to YAML with nice formatting\n const yamlContent = yaml.dump(config, {\n indent: 2,\n lineWidth: 120,\n noRefs: true,\n sortKeys: false,\n })\n\n // Write to file\n await fs.writeFile(outputPath, yamlContent, 'utf-8')\n}\n\n/**\n * Merge unified configurations\n *\n * Merges a new config into an existing one, preserving existing values\n * and only adding missing sections.\n *\n * @param existing - Existing configuration\n * @param updates - New configuration values\n * @returns Merged configuration\n */\nexport function mergeUnifiedConfigs(existing: UnifiedConfig, updates: UnifiedConfig): UnifiedConfig {\n const merged: UnifiedConfig = {}\n\n // Merge file configuration\n if (updates.file || existing.file) {\n merged.file = {\n schema_version: updates.file?.schema_version || existing.file?.schema_version || '2.0',\n sources: {\n ...(existing.file?.sources || {}),\n ...(updates.file?.sources || {}),\n },\n }\n }\n\n // Merge codex configuration\n if (updates.codex || existing.codex) {\n merged.codex = {\n schema_version: updates.codex?.schema_version || existing.codex?.schema_version || '2.0',\n organization: updates.codex?.organization || existing.codex?.organization || 'default',\n project: updates.codex?.project || existing.codex?.project || 'default',\n dependencies: {\n ...(existing.codex?.dependencies || {}),\n ...(updates.codex?.dependencies || {}),\n },\n }\n }\n\n return merged\n}\n\n/**\n * Initialize or update unified configuration\n *\n * Creates a new config if it doesn't exist, or merges with existing config.\n *\n * @param configPath - Path to config file\n * @param organization - Organization name\n * @param project - Project name\n * @param options - Options for initialization\n * @returns Result of initialization\n */\nexport async function initializeUnifiedConfig(\n configPath: string,\n organization: string,\n project: string,\n options?: {\n force?: boolean\n }\n): Promise<{ created: boolean; merged: boolean; config: UnifiedConfig }> {\n // Check if config exists\n const existingConfig = await readUnifiedConfig(configPath)\n\n if (existingConfig && !options?.force) {\n // Merge with existing config\n const defaultConfig = getDefaultUnifiedConfig(organization, project)\n const merged = mergeUnifiedConfigs(existingConfig, defaultConfig)\n await writeUnifiedConfig(merged, configPath)\n\n return {\n created: false,\n merged: true,\n config: merged,\n }\n }\n\n // Create new config\n const config = getDefaultUnifiedConfig(organization, project)\n await writeUnifiedConfig(config, configPath)\n\n return {\n created: true,\n merged: false,\n config,\n }\n}\n","/**\n * Gitignore utilities for .fractary directory\n *\n * Manages .fractary/.gitignore entries, particularly for cache directories.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\n/**\n * Default gitignore content for .fractary directory\n *\n * Uses standard section markers (5 equals signs, start AND end markers)\n * to allow multiple plugins to manage their own sections without conflicts.\n */\nexport const DEFAULT_FRACTARY_GITIGNORE = `# .fractary/.gitignore\n# This file is managed by multiple plugins - each plugin manages its own section\n\n# ===== fractary-codex (managed) =====\ncodex/cache/\n# ===== end fractary-codex =====\n`;\n\n/**\n * Legacy gitignore content (for migration detection)\n */\nexport const LEGACY_FRACTARY_GITIGNORE_PATTERNS = [\n '# Fractary tool-specific ignores',\n '# Codex cache (v4.0 standard)',\n 'plugins/codex/cache/',\n 'plugins/status/',\n];\n\n/**\n * Default cache directory (relative to .fractary/)\n */\nexport const DEFAULT_CACHE_DIR = 'codex/cache/';\n\n/**\n * Read existing .fractary/.gitignore content\n *\n * @param projectRoot - Project root directory\n * @returns Gitignore content or null if doesn't exist\n */\nexport async function readFractaryGitignore(projectRoot: string): Promise<string | null> {\n const gitignorePath = path.join(projectRoot, '.fractary', '.gitignore');\n\n try {\n return await fs.readFile(gitignorePath, 'utf-8');\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Write .fractary/.gitignore content\n *\n * @param projectRoot - Project root directory\n * @param content - Gitignore content\n */\nexport async function writeFractaryGitignore(projectRoot: string, content: string): Promise<void> {\n const gitignorePath = path.join(projectRoot, '.fractary', '.gitignore');\n\n // Ensure .fractary directory exists\n await fs.mkdir(path.join(projectRoot, '.fractary'), { recursive: true });\n\n await fs.writeFile(gitignorePath, content, 'utf-8');\n}\n\n/**\n * Normalize a cache path to be relative to .fractary/\n *\n * Handles both Unix and Windows path separators, converting to forward slashes\n * for gitignore compatibility.\n *\n * @param cachePath - Cache path (e.g., \".fractary/codex/cache\" or \"codex/cache\")\n * @returns Path relative to .fractary/ with trailing slash\n *\n * @example\n * normalizeCachePath('.fractary/codex/cache') // returns 'codex/cache/'\n * normalizeCachePath('codex/cache') // returns 'codex/cache/'\n * normalizeCachePath('codex\\\\cache') // returns 'codex/cache/' (Windows)\n */\nexport function normalizeCachePath(cachePath: string): string {\n // Normalize to forward slashes (gitignore always uses forward slashes)\n let normalized = cachePath.replace(/\\\\/g, '/');\n\n // Remove .fractary/ prefix if present\n normalized = normalized.replace(/^\\.fractary\\//, '');\n\n // Ensure trailing slash for directory\n if (!normalized.endsWith('/')) {\n normalized += '/';\n }\n\n return normalized;\n}\n\n/**\n * Check if a cache path is already in the gitignore\n *\n * @param gitignoreContent - Current gitignore content\n * @param cachePath - Cache path to check (relative to .fractary/)\n * @returns true if path is already ignored\n */\nexport function isCachePathIgnored(gitignoreContent: string, cachePath: string): boolean {\n const normalized = normalizeCachePath(cachePath);\n const lines = gitignoreContent.split('\\n').map(l => l.trim());\n\n // Check for exact match or pattern that would match\n return lines.some(line => {\n if (line.startsWith('#') || line === '') return false;\n\n // Normalize the line for comparison (also handle Windows paths in existing gitignore)\n let normalizedLine = line.replace(/\\\\/g, '/');\n if (!normalizedLine.endsWith('/')) {\n normalizedLine += '/';\n }\n\n return normalizedLine === normalized;\n });\n}\n\n/**\n * Add a cache path to gitignore content\n *\n * @param gitignoreContent - Current gitignore content\n * @param cachePath - Cache path to add (relative to .fractary/)\n * @param comment - Optional comment to add before the entry\n * @returns Updated gitignore content\n */\nexport function addCachePathToGitignore(\n gitignoreContent: string,\n cachePath: string,\n comment?: string\n): string {\n const normalized = normalizeCachePath(cachePath);\n\n // Don't add if already present\n if (isCachePathIgnored(gitignoreContent, cachePath)) {\n return gitignoreContent;\n }\n\n // Add entry with optional comment\n let addition = '';\n if (comment) {\n addition += `\\n# ${comment}\\n`;\n } else {\n addition += '\\n';\n }\n addition += normalized + '\\n';\n\n return gitignoreContent.trimEnd() + addition;\n}\n\n/**\n * Ensure .fractary/.gitignore exists and contains the cache path\n *\n * @param projectRoot - Project root directory\n * @param cachePath - Cache path to ensure is ignored (can be absolute or relative)\n * @returns Object with status information\n */\nexport async function ensureCachePathIgnored(\n projectRoot: string,\n cachePath: string\n): Promise<{\n created: boolean;\n updated: boolean;\n alreadyIgnored: boolean;\n gitignorePath: string;\n}> {\n const gitignorePath = path.join(projectRoot, '.fractary', '.gitignore');\n\n // Normalize the cache path relative to .fractary/\n let relativeCachePath = cachePath;\n\n // Handle absolute paths\n if (path.isAbsolute(cachePath)) {\n relativeCachePath = path.relative(path.join(projectRoot, '.fractary'), cachePath);\n }\n\n // Handle paths starting with .fractary/\n relativeCachePath = normalizeCachePath(relativeCachePath);\n\n // Read existing gitignore or use default\n let content = await readFractaryGitignore(projectRoot);\n const gitignoreExists = content !== null;\n\n if (!gitignoreExists) {\n // Create with default content\n content = DEFAULT_FRACTARY_GITIGNORE;\n\n // Check if the cache path is already in default content\n if (!isCachePathIgnored(content, relativeCachePath)) {\n content = addCachePathToGitignore(content, relativeCachePath, 'Custom cache directory');\n }\n\n await writeFractaryGitignore(projectRoot, content);\n\n return {\n created: true,\n updated: false,\n alreadyIgnored: false,\n gitignorePath,\n };\n }\n\n // Check if already ignored\n if (isCachePathIgnored(content, relativeCachePath)) {\n return {\n created: false,\n updated: false,\n alreadyIgnored: true,\n gitignorePath,\n };\n }\n\n // Add the cache path\n content = addCachePathToGitignore(content, relativeCachePath, 'Custom cache directory');\n await writeFractaryGitignore(projectRoot, content);\n\n return {\n created: false,\n updated: true,\n alreadyIgnored: false,\n gitignorePath,\n };\n}\n\n/**\n * Get a warning message for custom cache paths\n *\n * @param cachePath - The custom cache path\n * @returns Warning message string\n */\nexport function getCustomCachePathWarning(cachePath: string): string {\n const normalized = normalizeCachePath(cachePath);\n\n return `Custom cache directory detected: ${cachePath}\nPlease ensure .fractary/.gitignore includes: ${normalized}`;\n}\n\n// ===== Section Management Functions =====\n// Standard format: # ===== fractary-{plugin} (managed) ===== ... # ===== end fractary-{plugin} =====\n\nconst SECTION_START_PATTERN = /^# ===== (fractary-[\\w-]+) \\(managed\\) =====$/;\nconst SECTION_END_PATTERN = /^# ===== end (fractary-[\\w-]+) =====$/;\n\n/**\n * Check if a section marker exists in the gitignore content\n *\n * @param content - Gitignore content\n * @param pluginName - Plugin name (e.g., \"fractary-codex\")\n * @returns true if the section exists\n */\nexport function hasSectionMarker(content: string, pluginName: string): boolean {\n const startMarker = `# ===== ${pluginName} (managed) =====`;\n return content.includes(startMarker);\n}\n\n/**\n * Get the content of a specific section\n *\n * @param content - Gitignore content\n * @param pluginName - Plugin name (e.g., \"fractary-codex\")\n * @returns Section entries as an array, or null if section doesn't exist\n */\nexport function getSectionContent(content: string, pluginName: string): string[] | null {\n const startMarker = `# ===== ${pluginName} (managed) =====`;\n const endMarker = `# ===== end ${pluginName} =====`;\n\n const lines = content.split('\\n');\n const entries: string[] = [];\n let inSection = false;\n\n for (const line of lines) {\n if (line.trim() === startMarker) {\n inSection = true;\n continue;\n }\n if (line.trim() === endMarker && inSection) {\n return entries;\n }\n if (inSection && line.trim() && !line.startsWith('#')) {\n entries.push(line.trim());\n }\n }\n\n return inSection ? entries : null;\n}\n\n/**\n * Update or create a section in the gitignore content\n *\n * @param content - Existing gitignore content\n * @param pluginName - Plugin name (e.g., \"fractary-codex\")\n * @param entries - Entries to put in the section\n * @returns Updated gitignore content\n */\nexport function updateSection(content: string, pluginName: string, entries: string[]): string {\n const startMarker = `# ===== ${pluginName} (managed) =====`;\n const endMarker = `# ===== end ${pluginName} =====`;\n\n // Build new section\n const newSection = [startMarker, ...entries, endMarker].join('\\n');\n\n // Check if section already exists\n if (hasSectionMarker(content, pluginName)) {\n // Remove existing section\n const lines = content.split('\\n');\n const result: string[] = [];\n let inSection = false;\n\n for (const line of lines) {\n if (line.trim() === startMarker) {\n inSection = true;\n continue;\n }\n if (line.trim() === endMarker && inSection) {\n inSection = false;\n continue;\n }\n if (!inSection) {\n result.push(line);\n }\n }\n\n // Append new section\n return result.join('\\n').trimEnd() + '\\n\\n' + newSection + '\\n';\n }\n\n // Section doesn't exist - append it\n return content.trimEnd() + '\\n\\n' + newSection + '\\n';\n}\n\n/**\n * Migrate old-format gitignore to new section-based format\n *\n * Converts old format (no section markers) to new format with proper markers.\n *\n * @param content - Existing gitignore content\n * @returns Migrated content\n */\nexport function migrateToSectionFormat(content: string): string {\n // Check if already using section format\n if (SECTION_START_PATTERN.test(content)) {\n return content;\n }\n\n // Check for old format indicators\n const hasOldFormat = LEGACY_FRACTARY_GITIGNORE_PATTERNS.some(pattern =>\n content.includes(pattern)\n );\n\n if (!hasOldFormat) {\n return content;\n }\n\n // Extract codex-related entries from old format\n const lines = content.split('\\n');\n const codexEntries: string[] = [];\n const otherLines: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Identify codex-related entries\n if (\n trimmed === 'codex/cache/' ||\n trimmed === 'plugins/codex/cache/' ||\n trimmed.startsWith('# Codex') ||\n trimmed.startsWith('# Legacy codex')\n ) {\n if (trimmed === 'codex/cache/') {\n codexEntries.push(trimmed);\n }\n } else if (\n trimmed !== '# Fractary tool-specific ignores' &&\n trimmed !== '# This file manages all .fractary/ directory exclusions'\n ) {\n otherLines.push(line);\n }\n }\n\n // Build new content with section markers\n let newContent = '# .fractary/.gitignore\\n# This file is managed by multiple plugins - each plugin manages its own section\\n\\n';\n\n // Add codex section if we have entries\n if (codexEntries.length > 0 || !content.includes('codex/cache/')) {\n newContent += '# ===== fractary-codex (managed) =====\\n';\n newContent += (codexEntries.length > 0 ? codexEntries : ['codex/cache/']).join('\\n') + '\\n';\n newContent += '# ===== end fractary-codex =====\\n';\n }\n\n // Preserve other non-empty, non-header lines\n const preservedLines = otherLines.filter(l =>\n l.trim() && !l.trim().startsWith('# Status plugin') && l.trim() !== 'plugins/status/'\n );\n if (preservedLines.length > 0) {\n newContent += '\\n# Other entries (preserved from migration)\\n';\n newContent += preservedLines.join('\\n') + '\\n';\n }\n\n return newContent;\n}\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/config.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\nimport {\r\n ensureCachePathIgnored,\r\n DEFAULT_CACHE_DIR,\r\n normalizeCachePath\r\n} from '../../config/gitignore-utils';\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', 'config.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 (parseError: any) {\r\n console.error(chalk.red('Error:'), 'Invalid JSON in legacy config file.');\r\n console.error(chalk.dim('Details:'), parseError.message);\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 configuredCacheDir = migrationResult.yamlConfig.cacheDir || '.fractary/codex/cache';\r\n const cacheDir = path.join(process.cwd(), configuredCacheDir);\r\n await fs.mkdir(cacheDir, { recursive: true });\r\n\r\n // Ensure cache path is in .fractary/.gitignore\r\n const gitignoreResult = await ensureCachePathIgnored(process.cwd(), configuredCacheDir);\r\n const isCustomCachePath = normalizeCachePath(configuredCacheDir) !== DEFAULT_CACHE_DIR;\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 // Report gitignore status\r\n if (gitignoreResult.created) {\r\n console.log(chalk.green('✓'), '.fractary/.gitignore created');\r\n } else if (gitignoreResult.updated) {\r\n console.log(chalk.green('✓'), '.fractary/.gitignore updated with cache path');\r\n } else if (gitignoreResult.alreadyIgnored) {\r\n console.log(chalk.green('✓'), 'Cache path already in .fractary/.gitignore');\r\n }\r\n\r\n // Warn about custom cache path\r\n if (isCustomCachePath) {\r\n console.log('');\r\n console.log(chalk.yellow('⚠ Custom cache directory detected:'), chalk.dim(configuredCacheDir));\r\n console.log(chalk.dim(' Ensure .fractary/.gitignore includes this path to avoid committing cache files.'));\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: ${configuredCacheDir}`));\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/config.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', 'config.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', 'config.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/config.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 SyncConfig\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', 'config.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 const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync as Partial<SyncConfig>,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get include patterns from config or use defaults\r\n // For to-codex: use config.sync.to_codex if available\r\n // For from-codex: config.sync.from_codex is handled by routing scanner\r\n const defaultToCodexPatterns = [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Use proper type for sync config\r\n const syncConfig = config.sync as Partial<SyncConfig> | undefined;\r\n\r\n // Resolve to_codex patterns (supports both new and legacy formats)\r\n let configIncludePatterns: string[];\r\n let configExcludePatterns: string[] = [];\r\n\r\n if (syncConfig?.to_codex) {\r\n const toCodex = syncConfig.to_codex;\r\n // Check if new format (object with include/exclude)\r\n if (typeof toCodex === 'object' && !Array.isArray(toCodex)) {\r\n // New format: DirectionalSyncConfig with include/exclude\r\n const directionalConfig = toCodex as { include?: string[]; exclude?: string[] };\r\n configIncludePatterns = directionalConfig.include || defaultToCodexPatterns;\r\n configExcludePatterns = directionalConfig.exclude || [];\r\n } else if (Array.isArray(toCodex)) {\r\n // Legacy format (array of patterns)\r\n configIncludePatterns = toCodex;\r\n configExcludePatterns = syncConfig.exclude || [];\r\n } else {\r\n configIncludePatterns = defaultToCodexPatterns;\r\n configExcludePatterns = [];\r\n }\r\n } else {\r\n // No to_codex config, use defaults\r\n configIncludePatterns = defaultToCodexPatterns;\r\n configExcludePatterns = syncConfig?.exclude || [];\r\n }\r\n\r\n // CLI options override config\r\n const includePatterns = options.include.length > 0 ? options.include : configIncludePatterns;\r\n const excludePatterns = [\r\n ...configExcludePatterns,\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files using proper glob pattern matching\r\n const sourceDir = process.cwd();\r\n const { glob: globSync } = await import('glob');\r\n\r\n // Match files using glob patterns\r\n const matchedFilePaths = new Set<string>();\r\n\r\n for (const pattern of includePatterns) {\r\n try {\r\n const matches = await globSync(pattern, {\r\n cwd: sourceDir,\r\n dot: true,\r\n nodir: true,\r\n ignore: excludePatterns\r\n });\r\n matches.forEach(match => matchedFilePaths.add(match));\r\n } catch (error: any) {\r\n console.error(chalk.yellow(`Warning: Invalid pattern \"${pattern}\": ${error.message}`));\r\n }\r\n }\r\n\r\n // Convert matched paths to file objects with stat info\r\n const targetFiles = await Promise.all(\r\n Array.from(matchedFilePaths).map(async (filePath) => {\r\n const fullPath = path.join(sourceDir, filePath);\r\n const stats = await import('fs/promises').then(fs => fs.stat(fullPath));\r\n return {\r\n path: filePath,\r\n size: stats.size,\r\n mtime: stats.mtimeMs\r\n };\r\n })\r\n );\r\n\r\n // Create sync plan with options\r\n // Note: include/exclude patterns are used for to-codex direction.\r\n // For from-codex (routing-aware), these patterns are ignored to avoid\r\n // double filtering, since routing rules already determine which files sync.\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 let codexRepoPath: string;\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n console.log(chalk.dim(' Scanning for files routing to this project...\\n'));\r\n } else {\r\n console.log(JSON.stringify({\r\n info: 'Routing-aware sync: cloned codex repository and scanning for files targeting this project',\r\n codexPath: codexRepoPath\r\n }, null, 2));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n\r\n // Provide error-specific troubleshooting\r\n console.log(chalk.yellow('\\nTroubleshooting:'));\r\n if (error.message.includes('Git command not found')) {\r\n console.log(chalk.dim(' Git is not installed or not in PATH.'));\r\n console.log(chalk.dim(' Install git: https://git-scm.com/downloads'));\r\n } else if (error.message.includes('authentication failed') || error.message.includes('Authentication failed')) {\r\n console.log(chalk.dim(' GitHub authentication is required for private repositories.'));\r\n console.log(chalk.dim(' 1. Check auth status: gh auth status'));\r\n console.log(chalk.dim(' 2. Login if needed: gh auth login'));\r\n console.log(chalk.dim(' 3. Or set GITHUB_TOKEN environment variable'));\r\n } else if (error.message.includes('Permission denied')) {\r\n console.log(chalk.dim(' Permission denied accessing repository files.'));\r\n console.log(chalk.dim(' 1. Check file/directory permissions'));\r\n console.log(chalk.dim(' 2. Ensure you have access to the repository'));\r\n } else if (error.message.includes('not found') || error.message.includes('does not exist')) {\r\n console.log(chalk.dim(` Repository not found: ${config.organization}/${(config as any).codex_repository || 'codex'}`));\r\n console.log(chalk.dim(' 1. Verify the repository exists on GitHub'));\r\n console.log(chalk.dim(' 2. Check organization and repository names in config'));\r\n } else {\r\n // Generic troubleshooting for other errors\r\n console.log(chalk.dim(' 1. Ensure git is installed: git --version'));\r\n console.log(chalk.dim(' 2. Check GitHub auth: gh auth status'));\r\n console.log(chalk.dim(` 3. Verify repo exists: ${config.organization}/${(config as any).codex_repository || 'codex'}`));\r\n }\r\n process.exit(1);\r\n }\r\n\r\n // Use temp clone path for routing scan\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', 'config.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', 'config.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"]}
|