isomorphic-jj 1.4.3 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/errors.js","../src/core/storage-manager.js","../src/utils/validation.js","../src/core/change-graph.js","../src/core/working-copy.js","../src/utils/id-generation.js","../src/core/operation-log.js","../src/core/bookmark-store.js","../src/core/tag-store.js","../src/core/revset-engine.js","../src/core/conflict-model.js","../src/core/merge-driver-registry.js","../src/core/workspace-manager.js","../src/core/background-ops.js","../src/core/user-config.js","../src/core/jj-checkout.js","../src/core/jj-tree-state.js","../src/core/jj-operation-store.js","../src/core/jj-view-store.js","../src/backend/isomorphic-git-backend.js","../src/api/repository.js","../src/drivers/built-in-drivers.js"],"sourcesContent":["/**\n * JJError - Custom error class for isomorphic-jj\n * \n * Provides structured errors with error codes, context, and user-actionable suggestions.\n */\nexport class JJError extends Error {\n /**\n * @param {string} code - Error code (e.g., 'CHANGE_NOT_FOUND')\n * @param {string} message - Human-readable error message\n * @param {Object} [context={}] - Additional error context\n * @param {string} [context.suggestion] - User-actionable suggestion\n */\n constructor(code, message, context = {}) {\n super(message);\n this.name = 'JJError';\n this.code = code;\n this.context = context;\n this.details = context; // Alias for better ergonomics\n this.suggestion = context.suggestion;\n }\n}\n","/**\n * Storage Manager for isomorphic-jj\n * \n * Manages JSON storage in .jj directory with atomic writes and caching.\n */\n\nimport { JJError } from '../utils/errors.js';\n\nexport class Storage {\n /**\n * @param {Object} fs - Filesystem implementation (Node fs, LightningFS, etc.)\n * @param {string} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.jjDir = `${dir}/.jj`;\n this.repoDir = `${dir}/.jj/repo`; // Core repo data\n this.workingCopyDir = `${dir}/.jj/working_copy`; // Default workspace working copy\n this.cache = new Map();\n }\n\n /**\n * Initialize .jj directory structure (JJ workspace model)\n *\n * Structure:\n * .jj/\n * repo/ - Core repository data (shared by all workspaces)\n * store/ - Change graph, operations, bookmarks\n * working_copy/ - Default workspace working copy state\n */\n async init() {\n try {\n // Create main directories\n await this.fs.promises.mkdir(this.jjDir, { recursive: true });\n await this.fs.promises.mkdir(this.repoDir, { recursive: true });\n await this.fs.promises.mkdir(this.workingCopyDir, { recursive: true });\n\n // Create repo subdirectories\n await this.fs.promises.mkdir(`${this.repoDir}/store`, { recursive: true });\n await this.fs.promises.mkdir(`${this.repoDir}/op_log`, { recursive: true });\n await this.fs.promises.mkdir(`${this.repoDir}/conflicts`, { recursive: true });\n\n // Create default workspace directory\n await this.fs.promises.mkdir(`${this.workingCopyDir}/default`, { recursive: true });\n } catch (error) {\n throw new JJError('STORAGE_INIT_FAILED', `Failed to initialize .jj directory: ${error.message}`, {\n dir: this.jjDir,\n originalError: error,\n });\n }\n }\n\n /**\n * Read and parse JSON file\n * \n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<Object|null>} Parsed JSON or null if file doesn't exist\n */\n async read(path) {\n const fullPath = `${this.jjDir}/${path}`;\n\n // Check cache\n if (this.cache.has(path)) {\n return this.cache.get(path);\n }\n\n try {\n const content = await this.fs.promises.readFile(fullPath, 'utf8');\n const data = JSON.parse(content);\n this.cache.set(path, data);\n return data;\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null;\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Write JSON file atomically\n * \n * @param {string} path - Relative path from .jj directory\n * @param {Object|string} data - Data to write (object will be stringified)\n */\n async write(path, data) {\n const fullPath = `${this.jjDir}/${path}`;\n const tmpPath = `${fullPath}.tmp.${Date.now()}`;\n const jsonData = typeof data === 'string' ? data : JSON.stringify(data, null, 2);\n\n try {\n // Ensure parent directory exists\n const dirPath = fullPath.substring(0, fullPath.lastIndexOf('/'));\n await this.fs.promises.mkdir(dirPath, { recursive: true });\n\n // Write to temp file\n await this.fs.promises.writeFile(tmpPath, jsonData, 'utf8');\n\n // Atomic rename\n await this.fs.promises.rename(tmpPath, fullPath);\n\n // Update cache\n if (typeof data !== 'string') {\n this.cache.set(path, data);\n }\n } catch (error) {\n // Clean up temp file\n try {\n await this.fs.promises.unlink(tmpPath);\n } catch {}\n\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to write ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Read JSONL file (newline-delimited JSON)\n * \n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<Array>} Array of parsed JSON objects\n */\n async readLines(path) {\n const fullPath = `${this.jjDir}/${path}`;\n\n try {\n const content = await this.fs.promises.readFile(fullPath, 'utf8');\n return content\n .trim()\n .split('\\n')\n .filter((line) => line.length > 0)\n .map((line) => JSON.parse(line));\n } catch (error) {\n if (error.code === 'ENOENT') {\n return [];\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Append line to JSONL file\n * \n * @param {string} path - Relative path from .jj directory\n * @param {string} line - JSON string to append\n */\n async appendLine(path, line) {\n const fullPath = `${this.jjDir}/${path}`;\n\n try {\n // Read existing content\n let existing = '';\n try {\n existing = await this.fs.promises.readFile(fullPath, 'utf8');\n } catch (error) {\n if (error.code !== 'ENOENT') throw error;\n }\n\n // Write atomically\n await this.write(path, existing + line + '\\n');\n } catch (error) {\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to append to ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Check if file exists\n * \n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<boolean>}\n */\n async exists(path) {\n const fullPath = `${this.jjDir}/${path}`;\n \n try {\n await this.fs.promises.stat(fullPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Invalidate cache\n * \n * @param {string} [path] - Specific path to invalidate, or all if not provided\n */\n invalidateCache(path) {\n if (path) {\n this.cache.delete(path);\n } else {\n this.cache.clear();\n }\n }\n}\n","/**\n * Validation utilities for isomorphic-jj\n * \n * Provides validation functions for change IDs, paths, bookmark names, etc.\n */\n\nimport { JJError } from './errors.js';\n\n/**\n * Validate a change ID\n * \n * @param {string} changeId - Change ID to validate\n * @throws {JJError} If change ID is invalid\n */\nexport function validateChangeId(changeId) {\n if (typeof changeId !== 'string') {\n throw new JJError('INVALID_CHANGE_ID', 'Change ID must be a string', {\n changeId,\n suggestion: 'Provide a valid 32-character hex string',\n });\n }\n\n if (!/^[0-9a-f]{32}$/.test(changeId)) {\n throw new JJError(\n 'INVALID_CHANGE_ID',\n `Change ID must be 32 hexadecimal characters, got \"${changeId}\"`,\n {\n changeId,\n suggestion: 'Use a valid change ID from log() output or use a revset expression',\n }\n );\n }\n}\n\n/**\n * Normalize a file path by stripping leading slashes\n *\n * @param {string} path - File path to normalize\n * @returns {string} Normalized path (without leading slash)\n */\nexport function normalizePath(path) {\n if (typeof path !== 'string') {\n return path;\n }\n\n // Strip leading slashes for compatibility with REST APIs and absolute paths\n return path.replace(/^\\/+/, '');\n}\n\n/**\n * Validate a file path\n *\n * @param {string} path - File path to validate\n * @returns {string} Normalized path\n * @throws {JJError} If path is invalid or contains path traversal\n */\nexport function validatePath(path) {\n if (typeof path !== 'string') {\n throw new JJError('INVALID_PATH', 'Path must be a string', {\n path,\n });\n }\n\n // Auto-normalize: strip leading slashes (common with REST APIs)\n const normalizedPath = normalizePath(path);\n\n if (normalizedPath.includes('..')) {\n throw new JJError('INVALID_PATH', 'Path traversal (..) not allowed', {\n path: normalizedPath,\n suggestion: 'Use relative paths without .. components',\n });\n }\n\n if (normalizedPath.length > 4096) {\n throw new JJError('INVALID_PATH', 'Path exceeds maximum length', {\n path: normalizedPath,\n maxLength: 4096,\n suggestion: 'Use shorter file paths',\n });\n }\n\n return normalizedPath;\n}\n\n/**\n * Validate a bookmark name (follows Git ref name rules)\n * \n * @param {string} name - Bookmark name to validate\n * @throws {JJError} If bookmark name is invalid\n */\nexport function validateBookmarkName(name) {\n if (typeof name !== 'string' || name.length === 0) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name must be a non-empty string', {\n name,\n });\n }\n\n // Git ref name validation rules\n const invalidChars = /[\\s*~^:?[\\]\\\\]/;\n if (invalidChars.test(name)) {\n throw new JJError(\n 'INVALID_BOOKMARK_NAME',\n 'Bookmark name contains invalid characters (spaces, *, ~, ^, :, ?, [, ], \\\\)',\n {\n name,\n suggestion: 'Use alphanumeric characters, hyphens, and forward slashes',\n }\n );\n }\n\n if (name.includes('..')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot contain \"..\"', {\n name,\n });\n }\n\n if (name.startsWith('.') || name.endsWith('.')) {\n throw new JJError(\n 'INVALID_BOOKMARK_NAME',\n 'Bookmark name cannot start or end with \".\"',\n {\n name,\n }\n );\n }\n\n if (name.endsWith('.lock')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot end with \".lock\"', {\n name,\n });\n }\n\n if (name.includes('//')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot contain \"//\"', {\n name,\n });\n }\n}\n","/**\n * ChangeGraph - Manages the change graph with stable change IDs\n * \n * Tracks changes, their relationships (parents/children), and evolution (amends/rewrites).\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId } from '../utils/validation.js';\n\nexport class ChangeGraph {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.nodes = new Map(); // changeId → Change\n this.commitIndex = new Map(); // commitId → changeId\n }\n\n /**\n * Initialize empty graph\n */\n async init() {\n this.nodes.clear();\n this.commitIndex.clear();\n\n await this.storage.write('repo/store/graph.json', {\n version: 1,\n changes: {},\n });\n }\n\n /**\n * Load graph from storage\n */\n async load() {\n const data = await this.storage.read('repo/store/graph.json');\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', 'repo/store/graph.json not found', {\n suggestion: 'Initialize repository with init() or check .jj directory',\n });\n }\n\n if (data.version !== 1) {\n throw new JJError('STORAGE_VERSION_MISMATCH', `Unsupported graph version: ${data.version}`, {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n });\n }\n\n this.nodes.clear();\n this.commitIndex.clear();\n\n for (const [changeId, change] of Object.entries(data.changes)) {\n this.nodes.set(changeId, change);\n this.commitIndex.set(change.commitId, changeId);\n }\n }\n\n /**\n * Save graph to storage\n */\n async save() {\n const changes = {};\n for (const [changeId, change] of this.nodes.entries()) {\n changes[changeId] = change;\n }\n\n await this.storage.write('repo/store/graph.json', {\n version: 1,\n changes,\n });\n }\n\n /**\n * Add a change to the graph\n * \n * @param {Object} change - Change object\n */\n async addChange(change) {\n validateChangeId(change.changeId);\n\n if (this.nodes.has(change.changeId)) {\n throw new JJError('CHANGE_EXISTS', `Change ${change.changeId} already exists`, {\n changeId: change.changeId,\n suggestion: 'Use evolveChange() to update an existing change',\n });\n }\n\n this.nodes.set(change.changeId, change);\n this.commitIndex.set(change.commitId, change.changeId);\n\n await this.save();\n }\n\n /**\n * Get a change by ID\n * \n * @param {string} changeId - Change ID\n * @returns {Object|null} Change object or null if not found\n */\n async getChange(changeId) {\n validateChangeId(changeId);\n return this.nodes.get(changeId) || null;\n }\n\n /**\n * Get all changes\n * \n * @returns {Array} Array of all changes\n */\n getAll() {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Find change by commit ID\n * \n * @param {string} commitId - Git commit SHA-1\n * @returns {string|null} Change ID or null if not found\n */\n findByCommitId(commitId) {\n return this.commitIndex.get(commitId) || null;\n }\n\n /**\n * Get parent change IDs\n * \n * @param {string} changeId - Change ID\n * @returns {Array<string>} Array of parent change IDs\n */\n getParents(changeId) {\n const change = this.nodes.get(changeId);\n return change ? change.parents : [];\n }\n\n /**\n * Get child change IDs\n * \n * @param {string} changeId - Change ID\n * @returns {Array<string>} Array of child change IDs\n */\n getChildren(changeId) {\n const children = [];\n \n for (const change of this.nodes.values()) {\n if (change.parents.includes(changeId)) {\n children.push(change.changeId);\n }\n }\n \n return children;\n }\n\n /**\n * Evolve a change (update commitId, track predecessor)\n * \n * Used when amending or rewriting a change.\n * \n * @param {string} changeId - Change ID\n * @param {string} newCommitId - New commit SHA-1\n */\n async evolveChange(changeId, newCommitId) {\n validateChangeId(changeId);\n\n const change = this.nodes.get(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`, {\n changeId,\n suggestion: 'Check change ID or use log() to see available changes',\n });\n }\n\n // Track predecessor\n if (!change.predecessors) {\n change.predecessors = [];\n }\n change.predecessors.push(change.commitId);\n\n // Update commit index\n this.commitIndex.delete(change.commitId);\n change.commitId = newCommitId;\n this.commitIndex.set(newCommitId, changeId);\n\n await this.save();\n }\n\n /**\n * Update a change (modify in place)\n * \n * @param {Object} change - Updated change object\n */\n async updateChange(change) {\n validateChangeId(change.changeId);\n\n if (!this.nodes.has(change.changeId)) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${change.changeId} not found`, {\n changeId: change.changeId,\n suggestion: 'Use addChange() to create a new change',\n });\n }\n\n this.nodes.set(change.changeId, change);\n await this.save();\n }\n\n /**\n * Get all ancestors of a change (recursive parent traversal)\n *\n * @param {string} changeId - Starting change ID\n * @returns {Array<string>} Array of ancestor change IDs (breadth-first order)\n */\n getAncestors(changeId) {\n const ancestors = [];\n const visited = new Set();\n const queue = [changeId];\n\n while (queue.length > 0) {\n const current = queue.shift();\n\n if (visited.has(current)) {\n continue;\n }\n visited.add(current);\n\n const parents = this.getParents(current);\n for (const parent of parents) {\n if (!visited.has(parent)) {\n ancestors.push(parent);\n queue.push(parent);\n }\n }\n }\n\n return ancestors;\n }\n\n /**\n * Create a change with default values (helper for tests)\n *\n * @param {Object} params - Change parameters\n * @param {string[]} [params.parents] - Parent change IDs\n * @param {string} [params.description] - Change description\n * @param {Object} [params.fileSnapshot] - File snapshot\n * @param {Object} [params.conflicts] - Conflict markers\n * @returns {Promise<Object>} Created change object\n */\n async createChange(params = {}) {\n const crypto = await import('crypto');\n const changeId = params.changeId || crypto.randomBytes(16).toString('hex');\n const commitId = params.commitId || crypto.randomBytes(20).toString('hex');\n const tree = params.tree || crypto.randomBytes(20).toString('hex');\n const timestamp = params.timestamp || new Date().toISOString();\n\n const change = {\n changeId,\n parents: params.parents || [],\n description: params.description || '',\n fileSnapshot: params.fileSnapshot || {},\n commitId,\n tree,\n author: params.author || {\n name: 'Test User',\n email: 'test@example.com',\n timestamp,\n },\n committer: params.committer || {\n name: 'Test User',\n email: 'test@example.com',\n timestamp,\n },\n timestamp,\n };\n\n // Add conflicts if provided\n if (params.conflicts) {\n change.conflicts = params.conflicts;\n }\n\n await this.addChange(change);\n\n return change;\n }\n}\n","/**\n * WorkingCopy - Manages working copy state and file tracking\n * \n * Tracks file states (mtime, size, mode) for efficient modification detection.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId, validatePath } from '../utils/validation.js';\n\nexport class WorkingCopy {\n /**\n * @param {Storage} storage - Storage manager instance\n * @param {Object} fs - Filesystem implementation\n * @param {string} dir - Repository directory\n * @param {string} [workspaceId='default'] - Workspace identifier\n */\n constructor(storage, fs, dir, workspaceId = 'default') {\n this.storage = storage;\n this.fs = fs;\n this.dir = dir;\n this.workspaceId = workspaceId;\n this.state = null;\n }\n\n /**\n * Initialize working copy state\n *\n * @param {string} changeId - Initial change ID\n * @param {string} [operationId] - Operation ID that created this state\n */\n async init(changeId, operationId = '') {\n validateChangeId(changeId);\n\n this.state = {\n version: 1,\n workspaceId: this.workspaceId,\n changeId,\n operation: operationId,\n fileStates: {},\n sparsePatterns: [], // Empty array = full checkout\n };\n\n await this.save();\n }\n\n /**\n * Load working copy state from storage\n *\n * Workspace-specific path: working_copy/workspace_id/state.json\n */\n async load() {\n const workspacePath = `working_copy/${this.workspaceId}/state.json`;\n const data = await this.storage.read(workspacePath);\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', `${workspacePath} not found`, {\n suggestion: 'Initialize repository with init()',\n workspaceId: this.workspaceId,\n });\n }\n\n if (data.version !== 1) {\n throw new JJError(\n 'STORAGE_VERSION_MISMATCH',\n `Unsupported working copy version: ${data.version}`,\n {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n }\n );\n }\n\n this.state = data;\n }\n\n /**\n * Save working copy state to storage\n *\n * Workspace-specific path: working_copy/workspace_id/state.json\n */\n async save() {\n const workspacePath = `working_copy/${this.workspaceId}/state.json`;\n await this.storage.write(workspacePath, this.state);\n }\n\n /**\n * Get current working copy state\n * \n * @returns {Object} Working copy state\n */\n async getState() {\n if (!this.state) {\n await this.load();\n }\n return this.state;\n }\n\n /**\n * Get current change ID\n * \n * @returns {string} Current change ID\n */\n getCurrentChangeId() {\n if (!this.state) {\n throw new JJError('WORKING_COPY_NOT_LOADED', 'Working copy state not loaded', {\n suggestion: 'Call load() or init() first',\n });\n }\n return this.state.changeId;\n }\n\n /**\n * Set current change ID\n * \n * @param {string} changeId - New change ID\n */\n async setCurrentChange(changeId) {\n validateChangeId(changeId);\n\n if (!this.state) {\n await this.load();\n }\n\n this.state.changeId = changeId;\n await this.save();\n }\n\n /**\n * Track a file in the working copy\n * \n * @param {string} path - File path relative to repo root\n * @param {Object} fileState - File state (mtime, size, mode, hash)\n */\n async trackFile(path, fileState) {\n path = validatePath(path); // Normalize path\n\n if (!this.state) {\n await this.load();\n }\n\n this.state.fileStates[path] = fileState;\n await this.save();\n }\n\n /**\n * Untrack a file from the working copy\n *\n * @param {string} path - File path to untrack\n */\n async untrackFile(path) {\n path = validatePath(path); // Normalize path\n\n if (!this.state) {\n await this.load();\n }\n\n delete this.state.fileStates[path];\n await this.save();\n }\n\n /**\n * Get list of modified files\n * \n * Uses mtime + size comparison for fast detection.\n * \n * @returns {Promise<Array<string>>} Array of modified file paths\n */\n async getModifiedFiles() {\n if (!this.state) {\n await this.load();\n }\n\n const modified = [];\n\n for (const [path, tracked] of Object.entries(this.state.fileStates)) {\n const fullPath = `${this.dir}/${path}`;\n\n try {\n const stats = await this.fs.promises.stat(fullPath);\n\n // Fast path: check mtime and size\n if (stats.mtime !== tracked.mtime || stats.size !== tracked.size) {\n modified.push(path);\n }\n } catch (error) {\n if (error.code === 'ENOENT') {\n // File was deleted\n modified.push(path);\n } else {\n throw new JJError('STORAGE_READ_FAILED', `Failed to stat ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n }\n\n return modified;\n }\n\n /**\n * List all tracked files in working copy\n *\n * @returns {Promise<Array<string>>} Array of tracked file paths\n */\n async listFiles() {\n if (!this.state) {\n await this.load();\n }\n\n return Object.keys(this.state.fileStates);\n }\n\n /**\n * Clear all file states\n */\n async clearFileStates() {\n if (!this.state) {\n await this.load();\n }\n\n this.state.fileStates = {};\n await this.save();\n }\n\n /**\n * Get sparse patterns\n *\n * @returns {string[]} Array of sparse patterns\n */\n getSparsePatterns() {\n if (!this.state) {\n throw new JJError('WORKING_COPY_NOT_LOADED', 'Working copy state not loaded', {\n suggestion: 'Call load() or init() first',\n });\n }\n\n // Return empty array if not set (full checkout)\n return this.state.sparsePatterns || [];\n }\n\n /**\n * Set sparse patterns\n *\n * @param {string[]} patterns - Array of sparse patterns\n */\n async setSparsePatterns(patterns) {\n if (!this.state) {\n await this.load();\n }\n\n this.state.sparsePatterns = patterns;\n // Note: save() is called by the caller (repository API)\n }\n\n /**\n * Check if a file path matches sparse patterns\n *\n * @param {string} filePath - File path to check\n * @returns {boolean} True if file should be materialized\n */\n matchesSparsePatterns(filePath) {\n const patterns = this.getSparsePatterns();\n\n // Empty patterns = full checkout (all files match)\n if (patterns.length === 0) {\n return true;\n }\n\n // Check if file matches any pattern\n for (const pattern of patterns) {\n if (this._matchesPattern(filePath, pattern)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Simple glob pattern matching\n *\n * @private\n * @param {string} path - File path\n * @param {string} pattern - Glob pattern\n * @returns {boolean} True if path matches pattern\n */\n _matchesPattern(path, pattern) {\n // Exact match\n if (path === pattern) {\n return true;\n }\n\n // Directory match (pattern ending with /)\n if (pattern.endsWith('/') && path.startsWith(pattern)) {\n return true;\n }\n\n // Glob patterns\n if (pattern.includes('*')) {\n // Convert glob to regex\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '___DOUBLESTAR___')\n .replace(/\\*/g, '[^/]*')\n .replace(/___DOUBLESTAR___/g, '.*');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(path);\n }\n\n return false;\n }\n}\n","/**\n * ID Generation utilities for isomorphic-jj\n * \n * Generates stable change IDs and operation IDs using cryptographically secure random values.\n */\n\n/**\n * Generate a stable change ID\n * \n * Uses 128-bit cryptographically random value encoded as 32-character hex string.\n * Collision probability is negligible (2^128 space).\n * \n * @returns {string} 32-character lowercase hex string\n */\nexport function generateChangeId() {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate an operation ID from operation content\n *\n * Uses SHA-256 hash of operation content for integrity verification.\n *\n * @param {Object} operation - Operation data\n * @returns {Promise<string>} 64-character lowercase hex string (SHA-256)\n */\nexport async function generateOperationId(operation) {\n const content = JSON.stringify({\n timestamp: operation.timestamp,\n user: operation.user,\n description: operation.description,\n parents: operation.parents,\n view: operation.view,\n });\n\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a generic ID with optional prefix\n *\n * @param {string} prefix - Optional prefix (e.g., 'conflict', 'bookmark')\n * @returns {string} ID string\n */\nexport function generateId(prefix = '') {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n const id = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return prefix ? `${prefix}-${id}` : id;\n}\n","/**\n * OperationLog - Manages the append-only operation log\n * \n * Records all repository mutations for complete undo/redo and time-travel.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { generateOperationId } from '../utils/id-generation.js';\n\nexport class OperationLog {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.operations = [];\n this.headOperationId = null;\n }\n\n /**\n * Initialize empty operation log\n */\n async init() {\n this.operations = [];\n this.headOperationId = null;\n\n await this.storage.write('repo/op_log/oplog.jsonl', '');\n }\n\n /**\n * Load operation log from storage\n */\n async load() {\n const lines = await this.storage.readLines('repo/op_log/oplog.jsonl');\n\n this.operations = lines;\n this.headOperationId = lines.length > 0 ? lines[lines.length - 1].id : null;\n }\n\n /**\n * Record a new operation\n * \n * @param {Object} operation - Operation to record (without id)\n * @returns {Promise<Object>} Recorded operation with id\n */\n async recordOperation(operation) {\n // Ensure operations are loaded\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n // Set parent to current head\n if (this.headOperationId) {\n operation.parents = [this.headOperationId];\n } else {\n operation.parents = operation.parents || [];\n }\n\n // Generate operation ID\n const id = await generateOperationId(operation);\n const fullOperation = {\n id,\n ...operation,\n };\n\n // Append to log\n const line = JSON.stringify(fullOperation);\n await this.storage.appendLine('repo/op_log/oplog.jsonl', line);\n\n // Update in-memory state\n this.operations.push(fullOperation);\n this.headOperationId = id;\n\n return fullOperation;\n }\n\n /**\n * Get all operations\n * \n * @returns {Promise<Array>} Array of all operations (chronological order)\n */\n async list() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n \n return this.operations;\n }\n\n /**\n * Get the head (latest) operation\n * \n * @returns {Promise<Object|null>} Latest operation or null if log is empty\n */\n async getHeadOperation() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n return this.operations.length > 0 ? this.operations[this.operations.length - 1] : null;\n }\n\n /**\n * Undo the last operation\n * \n * Returns the view from the previous operation, allowing the caller\n * to restore repository state.\n * \n * @returns {Promise<Object>} View from previous operation\n */\n async undo() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n if (this.operations.length === 0) {\n throw new JJError('NO_OPERATIONS_TO_UNDO', 'No operations to undo', {\n suggestion: 'Cannot undo when operation log is empty',\n });\n }\n\n // Get the previous operation (before current head)\n if (this.operations.length === 1) {\n // Special case: undoing the first operation returns its view\n return this.operations[0].view;\n }\n\n // Return view from parent operation\n const currentHead = this.operations[this.operations.length - 1];\n const parentId = currentHead.parents[0];\n \n // Find parent operation\n const parentOp = this.operations.find(op => op.id === parentId);\n \n if (!parentOp) {\n // If parent not found, return view from operation before current\n return this.operations[this.operations.length - 2].view;\n }\n\n return parentOp.view;\n }\n\n /**\n * Get snapshot (view) at a specific operation\n * \n * @param {string} operationId - Operation ID\n * @returns {Promise<Object>} View from that operation\n */\n async getSnapshotAt(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n const operation = this.operations.find(op => op.id === operationId);\n \n if (!operation) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${operationId} not found`, {\n operationId,\n suggestion: 'Check operation ID or use list() to see available operations',\n });\n }\n\n return operation.view;\n }\n\n /**\n * Get operation by ID\n *\n * @param {string} operationId - Operation ID\n * @returns {Promise<Object|null>} Operation or null if not found\n */\n async getOperation(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n return this.operations.find(op => op.id === operationId) || null;\n }\n\n /**\n * Abandon an operation (remove from log)\n *\n * This is an advanced operation that removes an operation from the log.\n * Children of the abandoned operation are relinked to the abandoned operation's parent.\n *\n * @param {string} operationId - Operation ID to abandon\n * @returns {Promise<Object>} Result with abandoned operation and relinked children\n */\n async abandon(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n // Validate operationId\n if (!operationId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide an operation ID to abandon',\n });\n }\n\n // Find the operation\n const opIndex = this.operations.findIndex(op => op.id === operationId);\n if (opIndex === -1) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${operationId} not found`, {\n operationId,\n suggestion: 'Use operations.list() to see available operations',\n });\n }\n\n const operation = this.operations[opIndex];\n\n // Cannot abandon the only operation\n if (this.operations.length === 1) {\n throw new JJError('CANNOT_ABANDON', 'Cannot abandon the only operation in the log', {\n suggestion: 'The operation log must contain at least one operation',\n });\n }\n\n // Find children (operations that reference this as a parent)\n const children = this.operations.filter(op =>\n op.parents && op.parents.includes(operationId)\n );\n\n // Get the parent of the operation being abandoned (may be undefined for root)\n const grandparentId = operation.parents && operation.parents.length > 0\n ? operation.parents[0]\n : undefined;\n\n // Relink children to grandparent\n const relinkedChildren = [];\n for (const child of children) {\n // Replace references to abandoned operation with grandparent\n const oldParents = [...child.parents];\n child.parents = child.parents.map(p =>\n p === operationId ? grandparentId : p\n ).filter(Boolean); // Remove undefined if there was no grandparent\n\n // If there was no grandparent, the child becomes a root operation\n if (!grandparentId && child.parents.length === 0) {\n child.parents = [];\n }\n\n relinkedChildren.push({\n operationId: child.id,\n oldParents,\n newParents: child.parents,\n });\n }\n\n // Remove from array\n this.operations.splice(opIndex, 1);\n\n // Update head if we abandoned the head operation\n if (this.headOperationId === operationId) {\n this.headOperationId = this.operations.length > 0\n ? this.operations[this.operations.length - 1].id\n : null;\n }\n\n // Rewrite JSONL file\n const content = this.operations\n .map(op => JSON.stringify(op))\n .join('\\n') + (this.operations.length > 0 ? '\\n' : '');\n await this.storage.write('repo/op_log/oplog.jsonl', content);\n\n return {\n abandoned: operation,\n relinkedChildren,\n newHead: this.headOperationId,\n };\n }\n}\n","/**\n * BookmarkStore - Manages local and remote bookmarks\n * \n * Bookmarks are named pointers to changes, similar to Git branches.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId, validateBookmarkName } from '../utils/validation.js';\n\nexport class BookmarkStore {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.local = new Map();\n this.remote = new Map(); // remote → (bookmark → changeId)\n this.tracking = {}; // bookmark → { remote, ref } tracking info (v0.35.0)\n }\n\n /**\n * Initialize empty bookmark store\n */\n async init() {\n this.local.clear();\n this.remote.clear();\n\n await this.storage.write('repo/store/bookmarks.json', {\n version: 1,\n local: {},\n remote: {},\n tracked: {},\n });\n }\n\n /**\n * Load bookmarks from storage\n */\n async load() {\n const data = await this.storage.read('repo/store/bookmarks.json');\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', 'repo/store/bookmarks.json not found', {\n suggestion: 'Initialize repository with init()',\n });\n }\n\n if (data.version !== 1) {\n throw new JJError(\n 'STORAGE_VERSION_MISMATCH',\n `Unsupported bookmarks version: ${data.version}`,\n {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n }\n );\n }\n\n this.local.clear();\n this.remote.clear();\n this.tracking = data.tracked || {}; // Load tracking info (v0.35.0)\n\n // Load local bookmarks\n for (const [name, target] of Object.entries(data.local)) {\n this.local.set(name, target);\n }\n\n // Load remote bookmarks\n for (const [remoteName, bookmarks] of Object.entries(data.remote)) {\n const remoteBookmarks = new Map();\n for (const [name, target] of Object.entries(bookmarks)) {\n remoteBookmarks.set(name, target);\n }\n this.remote.set(remoteName, remoteBookmarks);\n }\n }\n\n /**\n * Save bookmarks to storage\n */\n async save() {\n const local = {};\n for (const [name, target] of this.local.entries()) {\n local[name] = target;\n }\n\n const remote = {};\n for (const [remoteName, bookmarks] of this.remote.entries()) {\n remote[remoteName] = {};\n for (const [name, target] of bookmarks.entries()) {\n remote[remoteName][name] = target;\n }\n }\n\n await this.storage.write('repo/store/bookmarks.json', {\n version: 1,\n local,\n remote,\n tracked: this.tracking || {}, // Save tracking info (v0.35.0)\n });\n }\n\n /**\n * Set a local bookmark\n * \n * @param {string} name - Bookmark name\n * @param {string} target - Change ID to point to\n */\n async set(name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (this.local.has(name)) {\n throw new JJError('BOOKMARK_EXISTS', `Bookmark ${name} already exists`, {\n name,\n suggestion: 'Use move() to update existing bookmark',\n });\n }\n\n this.local.set(name, target);\n await this.save();\n }\n\n /**\n * Move an existing local bookmark\n * \n * @param {string} name - Bookmark name\n * @param {string} target - New change ID to point to\n */\n async move(name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (!this.local.has(name)) {\n throw new JJError('BOOKMARK_NOT_FOUND', `Bookmark ${name} not found`, {\n name,\n suggestion: 'Use set() to create a new bookmark',\n });\n }\n\n this.local.set(name, target);\n await this.save();\n }\n\n /**\n * Delete a local bookmark\n * \n * @param {string} name - Bookmark name\n */\n async delete(name) {\n validateBookmarkName(name);\n\n if (!this.local.has(name)) {\n throw new JJError('BOOKMARK_NOT_FOUND', `Bookmark ${name} not found`, {\n name,\n });\n }\n\n this.local.delete(name);\n await this.save();\n }\n\n /**\n * Get bookmark target\n * \n * @param {string} name - Bookmark name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async get(name) {\n return this.local.get(name) || null;\n }\n\n /**\n * Set a remote bookmark\n * \n * @param {string} remoteName - Remote name\n * @param {string} name - Bookmark name\n * @param {string} target - Change ID to point to\n */\n async setRemote(remoteName, name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (!this.remote.has(remoteName)) {\n this.remote.set(remoteName, new Map());\n }\n\n this.remote.get(remoteName).set(name, target);\n await this.save();\n }\n\n /**\n * Get remote bookmark target\n * \n * @param {string} remoteName - Remote name\n * @param {string} name - Bookmark name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async getRemote(remoteName, name) {\n const remoteBookmarks = this.remote.get(remoteName);\n return remoteBookmarks ? remoteBookmarks.get(name) || null : null;\n }\n\n /**\n * List all bookmarks (local and remote)\n *\n * @returns {Promise<Array>} Array of bookmark objects\n */\n async list() {\n const result = [];\n\n // Add local bookmarks with tracking info (v0.35.0)\n for (const [name, target] of this.local.entries()) {\n const bookmark = {\n name,\n changeId: target,\n remote: null,\n };\n\n // Include tracking info if available\n if (this.tracking && this.tracking[name]) {\n bookmark.tracking = {\n remote: this.tracking[name].remote,\n ref: this.tracking[name].remoteName || name,\n };\n }\n\n result.push(bookmark);\n }\n\n // Add remote bookmarks\n for (const [remoteName, bookmarks] of this.remote.entries()) {\n for (const [name, target] of bookmarks.entries()) {\n result.push({\n name: `${remoteName}/${name}`,\n changeId: target,\n remote: remoteName,\n });\n }\n }\n\n return result;\n }\n}\n","/**\n * Tag Store - Manages immutable references to changes\n *\n * Tags are immutable references that cannot be moved once created.\n * They are typically used for release points and important milestones.\n */\n\nimport { JJError } from '../utils/errors.js';\n\n/**\n * Validates tag name format\n * @param {string} name - Tag name to validate\n * @throws {JJError} If name is invalid\n */\nfunction validateTagName(name) {\n if (!name || typeof name !== 'string') {\n throw new JJError('INVALID_TAG_NAME', 'Tag name must be a non-empty string');\n }\n\n if (name.trim() !== name || name.includes(' ')) {\n throw new JJError(\n 'INVALID_TAG_NAME',\n 'Tag name cannot contain spaces or leading/trailing whitespace',\n { name }\n );\n }\n\n if (name.length === 0) {\n throw new JJError('INVALID_TAG_NAME', 'Tag name cannot be empty');\n }\n}\n\n/**\n * Simple tag pattern matching (supports glob-like patterns)\n * @param {string} name - Tag name\n * @param {string} pattern - Pattern (e.g., \"v1*\", \"*-rc\")\n * @returns {boolean} True if name matches pattern\n */\nfunction matchesPattern(name, pattern) {\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape regex special chars\n .replace(/\\*/g, '.*') // Convert * to .*\n .replace(/\\?/g, '.'); // Convert ? to .\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(name);\n}\n\nexport class TagStore {\n /**\n * @param {Object} fs - Filesystem interface\n * @param {string} jjDir - Path to .jj directory\n */\n constructor(fs, jjDir) {\n this.fs = fs;\n this.jjDir = jjDir;\n this.tagsFile = `${jjDir}/store/tags.json`;\n }\n\n /**\n * Loads tags from storage\n * @returns {Promise<Object>} Map of tag name to changeId\n */\n async load() {\n try {\n const data = await this.fs.promises.readFile(this.tagsFile, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return {};\n }\n throw error;\n }\n }\n\n /**\n * Saves tags to storage\n * @param {Object} tags - Map of tag name to changeId\n * @returns {Promise<void>}\n */\n async save(tags) {\n // Ensure the store directory exists\n const storeDir = `${this.jjDir}/store`;\n try {\n await this.fs.promises.mkdir(storeDir, { recursive: true });\n } catch (err) {\n // Directory might already exist, ignore\n }\n await this.fs.promises.writeFile(this.tagsFile, JSON.stringify(tags, null, 2));\n }\n\n /**\n * Creates a new tag\n * @param {string} name - Tag name\n * @param {string} changeId - Change ID to tag\n * @returns {Promise<{name: string, changeId: string}>}\n * @throws {JJError} If tag already exists or name is invalid\n */\n async create(name, changeId) {\n validateTagName(name);\n\n const tags = await this.load();\n\n if (tags[name]) {\n throw new JJError('TAG_EXISTS', `Tag \"${name}\" already exists`, {\n name,\n existingChangeId: tags[name],\n });\n }\n\n tags[name] = changeId;\n await this.save(tags);\n\n return { name, changeId };\n }\n\n /**\n * Lists all tags, optionally filtered by pattern\n * @param {string} [pattern] - Optional glob pattern\n * @returns {Promise<Array<{name: string, changeId: string}>>}\n */\n async list(pattern) {\n const tags = await this.load();\n\n let tagNames = Object.keys(tags);\n\n if (pattern) {\n tagNames = tagNames.filter((name) => matchesPattern(name, pattern));\n }\n\n return tagNames.map((name) => ({\n name,\n changeId: tags[name],\n }));\n }\n\n /**\n * Deletes a tag\n * @param {string} name - Tag name to delete\n * @returns {Promise<void>}\n * @throws {JJError} If tag doesn't exist\n */\n async delete(name) {\n const tags = await this.load();\n\n if (!tags[name]) {\n throw new JJError('TAG_NOT_FOUND', `Tag \"${name}\" not found`, { name });\n }\n\n delete tags[name];\n await this.save(tags);\n }\n\n /**\n * Checks if a tag exists\n * @param {string} name - Tag name\n * @returns {Promise<boolean>}\n */\n async exists(name) {\n const tags = await this.load();\n return !!tags[name];\n }\n\n /**\n * Gets the changeId for a tag\n * @param {string} name - Tag name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async get(name) {\n const tags = await this.load();\n return tags[name] || null;\n }\n}\n","/**\n * RevsetEngine - Query language for finding changes\n * \n * Implements a simplified revset language for querying the change graph.\n */\n\nimport { JJError } from '../utils/errors.js';\n\nexport class RevsetEngine {\n /**\n * @param {ChangeGraph} graph - Change graph instance\n * @param {WorkingCopy} workingCopy - Working copy instance\n * @param {UserConfig} userConfig - User configuration instance (optional)\n * @param {BookmarkStore} bookmarkStore - Bookmark store instance (optional, v0.4)\n */\n constructor(graph, workingCopy, userConfig = null, bookmarkStore = null) {\n this.graph = graph;\n this.workingCopy = workingCopy;\n this.userConfig = userConfig;\n this.bookmarkStore = bookmarkStore;\n }\n\n /**\n * Evaluate a revset expression\n * \n * @param {string} expression - Revset expression\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async evaluate(expression) {\n const trimmed = expression.trim();\n\n // @ - working copy\n if (trimmed === '@') {\n return [this.workingCopy.getCurrentChangeId()];\n }\n\n // @- operator (parent of working copy) - handles chaining like @-- for grandparents\n const atParentsMatch = trimmed.match(/^@(-+)$/);\n if (atParentsMatch) {\n const depth = atParentsMatch[1].length; // Count number of '-' characters\n const workingCopyId = this.workingCopy.getCurrentChangeId();\n\n let currentSet = [workingCopyId];\n for (let i = 0; i < depth; i++) {\n currentSet = await this.getParentsOfSet(currentSet);\n if (currentSet.length === 0) break; // Stop if we reach root\n }\n return currentSet;\n }\n\n // @+ operator (children of working copy)\n const atChildrenMatch = trimmed.match(/^@(\\++)$/);\n if (atChildrenMatch) {\n const depth = atChildrenMatch[1].length; // Count number of '+' characters\n const workingCopyId = this.workingCopy.getCurrentChangeId();\n\n let currentSet = [workingCopyId];\n for (let i = 0; i < depth; i++) {\n currentSet = await this.getChildrenOfSet(currentSet);\n if (currentSet.length === 0) break; // Stop if we reach leaves\n }\n return currentSet;\n }\n\n // all() - all changes\n if (trimmed === 'all()') {\n await this.graph.load();\n return this.graph.getAll().map((c) => c.changeId);\n }\n\n // v1.0: none() - empty set\n if (trimmed === 'none()') {\n return [];\n }\n\n // v1.0: root() - the first commit (oldest commit with no parents)\n if (trimmed === 'root()') {\n await this.graph.load();\n const allChanges = this.graph.getAll();\n const rootCommits = allChanges.filter(c => !c.parents || c.parents.length === 0);\n if (rootCommits.length === 0) return [];\n // Return the oldest root by timestamp\n const oldest = rootCommits.sort((a, b) =>\n new Date(a.timestamp) - new Date(b.timestamp)\n )[0];\n return [oldest.changeId];\n }\n\n // v1.0: visible_heads() - all commits with no children\n if (trimmed === 'visible_heads()') {\n await this.graph.load();\n const allChanges = this.graph.getAll();\n const changeIdSet = new Set(allChanges.map(c => c.changeId));\n const hasChildren = new Set();\n\n // Mark all commits that have children\n for (const change of allChanges) {\n if (change.parents) {\n for (const parent of change.parents) {\n if (changeIdSet.has(parent)) {\n hasChildren.add(parent);\n }\n }\n }\n }\n\n // Return commits without children\n return allChanges\n .filter(c => !hasChildren.has(c.changeId))\n .map(c => c.changeId);\n }\n\n // v1.0: git_refs() - all commits with bookmarks\n if (trimmed === 'git_refs()') {\n if (!this.bookmarkStore) return [];\n await this.bookmarkStore.load();\n const allBookmarks = await this.bookmarkStore.list();\n return allBookmarks.map(b => b.changeId);\n }\n\n // v1.0: git_head() - current working copy (Git HEAD equivalent)\n if (trimmed === 'git_head()') {\n try {\n const currentId = this.workingCopy.getCurrentChangeId();\n return currentId ? [currentId] : [];\n } catch (error) {\n // Working copy not loaded, return empty set\n return [];\n }\n }\n\n // v0.36.0: visible() - non-abandoned changes\n if (trimmed === 'visible()') {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter(c => !c.abandoned)\n .map(c => c.changeId);\n }\n\n // v0.36.0: hidden() - abandoned changes\n if (trimmed === 'hidden()') {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter(c => c.abandoned === true)\n .map(c => c.changeId);\n }\n\n // ancestors(changeId) - all ancestors including the change itself\n const ancestorsMatch = trimmed.match(/^ancestors\\(([0-9a-f]{32})\\)$/);\n if (ancestorsMatch) {\n const changeId = ancestorsMatch[1];\n return await this.getAncestors(changeId);\n }\n\n // v0.2: author(name) - changes by author\n const authorMatch = trimmed.match(/^author\\((.+?)\\)$/);\n if (authorMatch) {\n const authorName = authorMatch[1].replace(/['\"]/g, '');\n return await this.filterByAuthor(authorName);\n }\n\n // v0.2: description(text) - changes with description containing text\n const descMatch = trimmed.match(/^description\\((.+?)\\)$/);\n if (descMatch) {\n const text = descMatch[1].replace(/['\"]/g, '');\n return await this.filterByDescription(text);\n }\n\n // v0.2: empty() - changes with no content\n if (trimmed === 'empty()') {\n return await this.filterEmpty();\n }\n\n // v0.3.1: mine() - changes by current user\n if (trimmed === 'mine()') {\n return await this.filterMine();\n }\n\n // v0.3.1: merge() - merge commits (multiple parents)\n if (trimmed === 'merge()') {\n return await this.filterMerge();\n }\n\n // v0.3.1: file(pattern) - changes touching files matching pattern\n const fileMatch = trimmed.match(/^file\\((.+?)\\)$/);\n if (fileMatch) {\n const pattern = fileMatch[1].replace(/['\"]/g, '');\n return await this.filterByFile(pattern);\n }\n\n // v0.4: roots(revset) - commits not descendants of others in set\n const rootsMatch = trimmed.match(/^roots\\((.+?)\\)$/);\n if (rootsMatch) {\n const innerRevset = rootsMatch[1];\n const innerResults = await this.evaluate(innerRevset);\n return await this.filterRoots(innerResults);\n }\n\n // v0.4: heads(revset) - commits not ancestors of others in set\n const headsMatch = trimmed.match(/^heads\\((.+?)\\)$/);\n if (headsMatch) {\n const innerRevset = headsMatch[1];\n const innerResults = await this.evaluate(innerRevset);\n return await this.filterHeads(innerResults);\n }\n\n // v1.0: parents(revset) - direct parents of commits in set\n const parentsMatch = trimmed.match(/^parents\\((.+?)\\)$/);\n if (parentsMatch) {\n const innerRevset = parentsMatch[1];\n const innerResults = await this.evaluate(innerRevset);\n return await this.getParentsOfSet(innerResults);\n }\n\n // v1.0: children(revset) - direct children of commits in set\n const childrenMatch = trimmed.match(/^children\\((.+?)\\)$/);\n if (childrenMatch) {\n const innerRevset = childrenMatch[1];\n const innerResults = await this.evaluate(innerRevset);\n return await this.getChildrenOfSet(innerResults);\n }\n\n // v0.4: latest(revset, [count]) - latest N commits by committer timestamp\n const latestMatch = trimmed.match(/^latest\\((.+?)(?:,\\s*(\\d+))?\\)$/);\n if (latestMatch) {\n const innerRevset = latestMatch[1];\n const count = latestMatch[2] ? parseInt(latestMatch[2], 10) : 1;\n const innerResults = await this.evaluate(innerRevset);\n return await this.filterLatest(innerResults, count);\n }\n\n // v0.4: tags([pattern]) - tag targets\n const tagsMatch = trimmed.match(/^tags\\((?:(.+?))?\\)$/);\n if (tagsMatch || trimmed === 'tags()') {\n const pattern = tagsMatch ? tagsMatch[1]?.replace(/['\"]/g, '') : undefined;\n return await this.filterTags(pattern);\n }\n\n // v1.0: bookmark(name) - single bookmark by exact name\n const bookmarkMatch = trimmed.match(/^bookmark\\((.+?)\\)$/);\n if (bookmarkMatch) {\n const name = bookmarkMatch[1].replace(/['\"]/g, '');\n if (!this.bookmarkStore) return [];\n await this.bookmarkStore.load();\n const target = await this.bookmarkStore.get(name);\n return target ? [target] : [];\n }\n\n // v0.4: bookmarks([pattern]) - bookmark targets\n const bookmarksMatch = trimmed.match(/^bookmarks\\((?:(.+?))?\\)$/);\n if (bookmarksMatch || trimmed === 'bookmarks()') {\n const pattern = bookmarksMatch ? bookmarksMatch[1]?.replace(/['\"]/g, '') : undefined;\n return await this.filterBookmarks(pattern);\n }\n\n // v0.5: last(N) - last N commits\n // v0.5: last(Nd) - commits in last N days\n // v0.5: last(Nh) - commits in last N hours\n const lastMatch = trimmed.match(/^last\\((\\d+)([dh])?\\)$/);\n if (lastMatch) {\n const value = parseInt(lastMatch[1], 10);\n const unit = lastMatch[2]; // 'd', 'h', or undefined\n\n if (unit) {\n // Time-based: last(Nd) or last(Nh)\n return await this.filterByTimeRange(value, unit);\n } else {\n // Count-based: last(N)\n return await this.filterLast(value);\n }\n }\n\n // v0.5: since(date) - commits since date\n const sinceMatch = trimmed.match(/^since\\(([0-9-]+)\\)$/);\n if (sinceMatch) {\n const date = sinceMatch[1];\n return await this.filterSince(date);\n }\n\n // v0.5: between(start, end) - commits between dates\n const betweenMatch = trimmed.match(/^between\\(([0-9-]+),\\s*([0-9-]+)\\)$/);\n if (betweenMatch) {\n const startDate = betweenMatch[1];\n const endDate = betweenMatch[2];\n return await this.filterBetween(startDate, endDate);\n }\n\n // v0.5: descendants(changeId[, depth]) - all descendants\n const descendantsMatch = trimmed.match(/^descendants\\(([0-9a-f]{32})(?:,\\s*(\\d+))?\\)$/);\n if (descendantsMatch) {\n const changeId = descendantsMatch[1];\n const depth = descendantsMatch[2] ? parseInt(descendantsMatch[2], 10) : undefined;\n return await this.getDescendants(changeId, depth);\n }\n\n // v0.5: common_ancestor(rev1, rev2) - common ancestor\n const commonAncestorMatch = trimmed.match(/^common_ancestor\\(([0-9a-f]{32}),\\s*([0-9a-f]{32})\\)$/);\n if (commonAncestorMatch) {\n const rev1 = commonAncestorMatch[1];\n const rev2 = commonAncestorMatch[2];\n return await this.findCommonAncestor(rev1, rev2);\n }\n\n // v0.5: range(base..tip) - commits in range\n const rangeMatch = trimmed.match(/^range\\(([0-9a-f]{32})\\.\\.([0-9a-f]{32})\\)$/);\n if (rangeMatch) {\n const base = rangeMatch[1];\n const tip = rangeMatch[2];\n return await this.getRange(base, tip);\n }\n\n // v0.5: diverge_point(rev1, rev2) - divergence point\n const divergeMatch = trimmed.match(/^diverge_point\\(([0-9a-f]{32}),\\s*([0-9a-f]{32})\\)$/);\n if (divergeMatch) {\n const rev1 = divergeMatch[1];\n const rev2 = divergeMatch[2];\n return await this.findDivergePoint(rev1, rev2);\n }\n\n // v0.5: connected(rev1, rev2) - check if path exists\n const connectedMatch = trimmed.match(/^connected\\(([0-9a-f]{32}),\\s*([0-9a-f]{32})\\)$/);\n if (connectedMatch) {\n const rev1 = connectedMatch[1];\n const rev2 = connectedMatch[2];\n return await this.checkConnected(rev1, rev2);\n }\n\n // v1.0: x- operator (parents) - handles chaining like x-- for grandparents\n const parentsOpMatch = trimmed.match(/^([0-9a-f]{32})(-+)$/);\n if (parentsOpMatch) {\n const baseChangeId = parentsOpMatch[1];\n const depth = parentsOpMatch[2].length; // Count number of '-' characters\n\n let currentSet = [baseChangeId];\n for (let i = 0; i < depth; i++) {\n currentSet = await this.getParentsOfSet(currentSet);\n if (currentSet.length === 0) break; // Stop if we reach root\n }\n return currentSet;\n }\n\n // v1.0: x+ operator (children) - handles chaining like x++ for grandchildren\n const childrenOpMatch = trimmed.match(/^([0-9a-f]{32})(\\++)$/);\n if (childrenOpMatch) {\n const baseChangeId = childrenOpMatch[1];\n const depth = childrenOpMatch[2].length; // Count number of '+' characters\n\n let currentSet = [baseChangeId];\n for (let i = 0; i < depth; i++) {\n currentSet = await this.getChildrenOfSet(currentSet);\n if (currentSet.length === 0) break; // Stop if we reach leaves\n }\n return currentSet;\n }\n\n // Range operator (..) - all changes from base to tip\n // Format: base..tip means ancestors(tip) ~ ancestors(base)\n if (trimmed.includes('..')) {\n const parts = trimmed.split('..');\n if (parts.length === 2) {\n const base = parts[0].trim();\n const tip = parts[1].trim();\n\n // Get ancestors of tip\n const baseChange = await this.graph.getChange(base);\n const tipChange = await this.graph.getChange(tip);\n\n if (!baseChange || !tipChange) {\n throw new JJError('INVALID_REVSET', `Invalid range: ${trimmed}`, {\n suggestion: 'Both base and tip must be valid change IDs',\n });\n }\n\n // ancestors(tip) ~ ancestors(base) gives us all changes from base to tip\n const tipAncestors = new Set(await this.getAncestors(tip));\n const baseAncestors = new Set(await this.getAncestors(base));\n\n // Remove base's ancestors from tip's ancestors\n const rangeChanges = [...tipAncestors].filter(id => !baseAncestors.has(id));\n\n return rangeChanges;\n }\n }\n\n // conflicted() - changes with conflicts\n if (trimmed === 'conflicted()') {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter(c => c.conflicts && Object.keys(c.conflicts).length > 0)\n .map(c => c.changeId);\n }\n\n // reachable(heads) - all changes reachable from heads\n // Use a more careful regex that handles nested expressions\n if (trimmed.startsWith('reachable(')) {\n const innerStart = 'reachable('.length;\n let parenCount = 1;\n let endIndex = innerStart;\n\n // Find the matching closing parenthesis\n while (endIndex < trimmed.length && parenCount > 0) {\n if (trimmed[endIndex] === '(') parenCount++;\n if (trimmed[endIndex] === ')') parenCount--;\n endIndex++;\n }\n\n // Check if this is a complete reachable() expression (not part of a larger expression)\n if (parenCount === 0 && endIndex === trimmed.length) {\n const headsExpr = trimmed.substring(innerStart, endIndex - 1).trim();\n const heads = await this.evaluate(headsExpr);\n\n // Get all ancestors of all heads\n const reachable = new Set();\n for (const headId of heads) {\n const ancestors = await this.getAncestors(headId);\n for (const ancestorId of ancestors) {\n reachable.add(ancestorId);\n }\n }\n\n return Array.from(reachable);\n }\n }\n\n // tracked() - changes with tracked files (all changes with files)\n if (trimmed === 'tracked()') {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter(c => c.fileSnapshot && Object.keys(c.fileSnapshot).length > 0)\n .map(c => c.changeId);\n }\n\n // untracked() - changes with no tracked files (empty changes)\n if (trimmed === 'untracked()') {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter(c => !c.fileSnapshot || Object.keys(c.fileSnapshot).length === 0)\n .map(c => c.changeId);\n }\n\n // remote_branches([pattern]) - remote branch targets\n const remoteBranchesMatch = trimmed.match(/^remote_branches\\((?:\"([^\"]+)\")?\\)$/);\n if (remoteBranchesMatch || trimmed === 'remote_branches()') {\n if (!this.bookmarkStore) return [];\n\n await this.bookmarkStore.load();\n const allBookmarks = await this.bookmarkStore.list();\n\n // Filter for remote branches (bookmarks with '/' in the name)\n let remoteBookmarks = allBookmarks.filter(bookmark => bookmark.name.includes('/'));\n\n // If pattern provided, filter by pattern\n if (remoteBranchesMatch && remoteBranchesMatch[1]) {\n const pattern = remoteBranchesMatch[1];\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'));\n remoteBookmarks = remoteBookmarks.filter(bookmark => regex.test(bookmark.name));\n }\n\n // Get target change IDs\n const targets = new Set();\n for (const bookmark of remoteBookmarks) {\n if (bookmark.changeId) {\n targets.add(bookmark.changeId);\n }\n }\n\n return Array.from(targets);\n }\n\n // v0.5: Set operations - intersection (&), union (|), difference (~)\n if (trimmed.includes(' & ') || trimmed.includes(' | ') || trimmed.includes(' ~ ')) {\n return await this.evaluateSetOperation(trimmed);\n }\n\n // Direct changeId\n if (/^[0-9a-f]{32}$/.test(trimmed)) {\n await this.graph.load();\n const change = await this.graph.getChange(trimmed);\n return change ? [trimmed] : [];\n }\n\n throw new JJError('INVALID_REVSET', `Invalid revset expression: ${expression}`, {\n expression,\n suggestion: 'Use @, @-, @+, bookmark(name), all(), none(), root(), visible_heads(), git_refs(), git_head(), ancestors(changeId), author(name), description(text), empty(), mine(), merge(), file(pattern), roots(revset), heads(revset), parents(revset), children(revset), latest(revset, [count]), tags([pattern]), bookmarks([pattern]), last(N[dh]), since(date), between(start, end), descendants(rev[, depth]), common_ancestor(rev1, rev2), range(base..tip), diverge_point(rev1, rev2), connected(rev1, rev2), operators (x-, x+), set operations (& | ~), or a direct change ID',\n });\n }\n\n /**\n * Get all ancestors of a change (including the change itself)\n * \n * @param {string} changeId - Change ID\n * @returns {Promise<Array<string>>} Array of ancestor change IDs\n */\n async getAncestors(changeId) {\n await this.graph.load();\n\n const ancestors = [];\n const visited = new Set();\n const queue = [changeId];\n\n while (queue.length > 0) {\n const current = queue.shift();\n\n if (visited.has(current)) {\n continue;\n }\n\n visited.add(current);\n ancestors.push(current);\n\n const parents = this.graph.getParents(current);\n for (const parent of parents) {\n queue.push(parent);\n }\n }\n\n return ancestors;\n }\n\n /**\n * Filter changes by author name (v0.2)\n * \n * @param {string} authorName - Author name to match\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async filterByAuthor(authorName) {\n await this.graph.load();\n const all = this.graph.getAll();\n \n return all\n .filter((c) => c.author && c.author.name.includes(authorName))\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes by description text (v0.2)\n * \n * @param {string} text - Text to search for in description\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async filterByDescription(text) {\n await this.graph.load();\n const all = this.graph.getAll();\n \n return all\n .filter((c) => c.description && c.description.includes(text))\n .map((c) => c.changeId);\n }\n\n /**\n * Filter empty changes (v0.2)\n *\n * @returns {Promise<Array<string>>} Array of empty change IDs\n */\n async filterEmpty() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // A change is empty if it has an empty tree (placeholder for now)\n return all\n .filter((c) => c.tree === '0000000000000000000000000000000000000000')\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes by current user (v0.3.1)\n *\n * @returns {Promise<Array<string>>} Array of change IDs by current user\n */\n async filterMine() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n if (!this.userConfig) {\n // If no userConfig, return all changes\n return all.map((c) => c.changeId);\n }\n\n await this.userConfig.load();\n const currentUser = this.userConfig.getUser();\n\n return all\n .filter((c) => c.author &&\n (c.author.email === currentUser.email ||\n c.author.name === currentUser.name))\n .map((c) => c.changeId);\n }\n\n /**\n * Filter merge commits (multiple parents) (v0.3.1)\n *\n * @returns {Promise<Array<string>>} Array of merge commit IDs\n */\n async filterMerge() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n return all\n .filter((c) => c.parents && c.parents.length > 1)\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes touching files matching pattern (v0.3.1)\n *\n * @param {string} pattern - File pattern (glob-style)\n * @returns {Promise<Array<string>>} Array of change IDs\n */\n async filterByFile(pattern) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // Simple pattern matching for now (exact match or contains)\n const results = [];\n for (const change of all) {\n if (change.fileSnapshot) {\n const files = Object.keys(change.fileSnapshot);\n const matches = files.some(file =>\n file === pattern ||\n file.includes(pattern) ||\n this.globMatch(file, pattern)\n );\n if (matches) {\n results.push(change.changeId);\n }\n }\n }\n\n return results;\n }\n\n /**\n * Simple glob pattern matching\n *\n * @param {string} str - String to test\n * @param {string} pattern - Glob pattern (* and ? wildcards)\n * @returns {boolean} True if matches\n */\n globMatch(str, pattern) {\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(str);\n }\n\n /**\n * Filter roots - commits not descendants of others in set (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @returns {Promise<Array<string>>} Change IDs that are roots\n */\n async filterRoots(changeIds) {\n await this.graph.load();\n\n const roots = [];\n const changeSet = new Set(changeIds);\n\n for (const changeId of changeIds) {\n // A change is a root if none of its parents are in the set\n const parents = this.graph.getParents(changeId);\n const hasParentInSet = parents.some(p => changeSet.has(p));\n\n if (!hasParentInSet) {\n roots.push(changeId);\n }\n }\n\n return roots;\n }\n\n /**\n * Filter heads - commits not ancestors of others in set (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @returns {Promise<Array<string>>} Change IDs that are heads\n */\n async filterHeads(changeIds) {\n await this.graph.load();\n\n const heads = [];\n const changeSet = new Set(changeIds);\n\n for (const changeId of changeIds) {\n // A change is a head if it has no children in the set\n const children = this.graph.getChildren(changeId);\n const hasChildInSet = children.some(c => changeSet.has(c));\n\n if (!hasChildInSet) {\n heads.push(changeId);\n }\n }\n\n return heads;\n }\n\n /**\n * Filter latest N commits by committer timestamp (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @param {number} count - Number of latest commits to return\n * @returns {Promise<Array<string>>} Latest N change IDs\n */\n async filterLatest(changeIds, count = 1) {\n await this.graph.load();\n\n const changes = [];\n for (const changeId of changeIds) {\n const change = await this.graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n\n // Sort by committer timestamp (descending)\n changes.sort((a, b) => {\n const timeA = a.committer?.timestamp || a.timestamp || 0;\n const timeB = b.committer?.timestamp || b.timestamp || 0;\n return new Date(timeB) - new Date(timeA);\n });\n\n return changes.slice(0, count).map(c => c.changeId);\n }\n\n /**\n * Filter tags matching pattern (v0.4)\n *\n * @param {string} [pattern] - Optional tag name pattern\n * @returns {Promise<Array<string>>} Change IDs pointed to by matching tags\n */\n async filterTags(pattern) {\n await this.graph.load();\n\n // For now, return empty array since we don't have tag support yet\n // TODO: Implement when tag storage is added\n return [];\n }\n\n /**\n * Filter bookmarks matching pattern (v0.4)\n *\n * @param {string} [pattern] - Optional bookmark name pattern (glob-style)\n * @returns {Promise<Array<string>>} Change IDs pointed to by matching bookmarks\n */\n async filterBookmarks(pattern) {\n if (!this.bookmarkStore) {\n // No bookmark store available, return empty\n return [];\n }\n\n await this.bookmarkStore.load();\n const allBookmarks = await this.bookmarkStore.list();\n\n const result = [];\n for (const bookmark of allBookmarks) {\n // Only include local bookmarks (not remote)\n if (bookmark.remote) {\n continue;\n }\n\n // Apply pattern if provided\n if (pattern && !this.globMatch(bookmark.name, pattern)) {\n continue;\n }\n\n result.push(bookmark.target);\n }\n\n // Return unique changeIds\n return [...new Set(result)];\n }\n\n /**\n * Filter last N commits by timestamp (v0.5)\n *\n * @param {number} count - Number of commits to return\n * @returns {Promise<Array<string>>} Most recent change IDs\n */\n async filterLast(count) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // Sort by committer timestamp (most recent first)\n const sorted = all.sort((a, b) => {\n const timeA = a.committer?.timestamp || 0;\n const timeB = b.committer?.timestamp || 0;\n return timeB - timeA;\n });\n\n return sorted.slice(0, count).map(c => c.changeId);\n }\n\n /**\n * Filter commits within time range (v0.5)\n *\n * @param {number} value - Time value\n * @param {string} unit - Time unit ('d' for days, 'h' for hours)\n * @returns {Promise<Array<string>>} Change IDs within time range\n */\n async filterByTimeRange(value, unit) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const now = Date.now();\n let milliseconds;\n\n if (unit === 'd') {\n milliseconds = value * 24 * 60 * 60 * 1000; // days to ms\n } else if (unit === 'h') {\n milliseconds = value * 60 * 60 * 1000; // hours to ms\n } else {\n throw new JJError('INVALID_TIME_UNIT', `Invalid time unit: ${unit}`, { unit });\n }\n\n const cutoffTime = now - milliseconds;\n\n return all\n .filter(c => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= cutoffTime;\n })\n .map(c => c.changeId);\n }\n\n /**\n * Filter commits since a date (v0.5)\n *\n * @param {string} dateStr - ISO date string (YYYY-MM-DD)\n * @returns {Promise<Array<string>>} Change IDs since date\n */\n async filterSince(dateStr) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const sinceTime = new Date(dateStr).getTime();\n\n return all\n .filter(c => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= sinceTime;\n })\n .map(c => c.changeId);\n }\n\n /**\n * Filter commits between two dates (v0.5)\n *\n * @param {string} startDateStr - ISO date string (YYYY-MM-DD)\n * @param {string} endDateStr - ISO date string (YYYY-MM-DD)\n * @returns {Promise<Array<string>>} Change IDs between dates\n */\n async filterBetween(startDateStr, endDateStr) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const startTime = new Date(startDateStr).getTime();\n const endTime = new Date(endDateStr).getTime();\n\n return all\n .filter(c => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= startTime && timestamp <= endTime;\n })\n .map(c => c.changeId);\n }\n\n /**\n * Get all descendants of a change (v0.5)\n *\n * @param {string} changeId - Change ID\n * @param {number} [depth] - Optional depth limit\n * @returns {Promise<Array<string>>} Array of descendant change IDs\n */\n async getDescendants(changeId, depth = undefined) {\n await this.graph.load();\n\n const descendants = [];\n const visited = new Set();\n const queue = [{ id: changeId, level: 0 }];\n\n while (queue.length > 0) {\n const { id: current, level } = queue.shift();\n\n if (visited.has(current)) {\n continue;\n }\n\n visited.add(current);\n\n // Don't include the starting change itself\n if (current !== changeId) {\n descendants.push(current);\n }\n\n // Check depth limit\n if (depth !== undefined && level >= depth) {\n continue;\n }\n\n const children = this.graph.getChildren(current);\n for (const child of children) {\n queue.push({ id: child, level: level + 1 });\n }\n }\n\n return descendants;\n }\n\n /**\n * Find common ancestor of two revisions (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<string>>} Common ancestor (single element array or empty)\n */\n async findCommonAncestor(rev1, rev2) {\n await this.graph.load();\n\n // Get all ancestors of both revisions\n const ancestors1 = new Set(await this.getAncestors(rev1));\n const ancestors2 = await this.getAncestors(rev2);\n\n // Find first common ancestor\n for (const ancestor of ancestors2) {\n if (ancestors1.has(ancestor)) {\n return [ancestor];\n }\n }\n\n return []; // No common ancestor\n }\n\n /**\n * Get commits in range (base..tip) (v0.5)\n *\n * @param {string} base - Base revision\n * @param {string} tip - Tip revision\n * @returns {Promise<Array<string>>} Commits in range (excluding base)\n */\n async getRange(base, tip) {\n await this.graph.load();\n\n const tipAncestors = new Set(await this.getAncestors(tip));\n const baseAncestors = new Set(await this.getAncestors(base));\n\n // Commits in range are ancestors of tip but not ancestors of base\n const range = [];\n for (const ancestor of tipAncestors) {\n if (!baseAncestors.has(ancestor)) {\n range.push(ancestor);\n }\n }\n\n return range;\n }\n\n /**\n * Find divergence point of two revisions (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<string>>} Divergence point (same as common ancestor)\n */\n async findDivergePoint(rev1, rev2) {\n // Divergence point is the same as common ancestor\n return await this.findCommonAncestor(rev1, rev2);\n }\n\n /**\n * Check if two revisions are connected (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<boolean>>} Single element array with boolean result\n */\n async checkConnected(rev1, rev2) {\n await this.graph.load();\n\n // Check if rev2 is reachable from rev1\n const descendants = new Set(await this.getDescendants(rev1));\n const isDescendant = descendants.has(rev2);\n\n if (isDescendant) {\n return [true];\n }\n\n // Check if rev1 is reachable from rev2\n const ancestors = new Set(await this.getAncestors(rev2));\n const isAncestor = ancestors.has(rev1);\n\n return [isAncestor];\n }\n\n /**\n * Get direct parents of all commits in a set (v1.0)\n *\n * @param {Array<string>} changeIds - Array of change IDs\n * @returns {Promise<Array<string>>} Array of parent change IDs (deduplicated)\n */\n async getParentsOfSet(changeIds) {\n await this.graph.load();\n\n const parents = new Set();\n\n for (const changeId of changeIds) {\n const change = await this.graph.getChange(changeId);\n if (change && change.parents) {\n for (const parent of change.parents) {\n parents.add(parent);\n }\n }\n }\n\n return Array.from(parents);\n }\n\n /**\n * Get direct children of all commits in a set (v1.0)\n *\n * @param {Array<string>} changeIds - Array of change IDs\n * @returns {Promise<Array<string>>} Array of child change IDs (deduplicated)\n */\n async getChildrenOfSet(changeIds) {\n await this.graph.load();\n\n const children = new Set();\n const changeIdSet = new Set(changeIds);\n\n // Get all changes and check if their parents include any from our set\n const allChanges = this.graph.getAll();\n for (const change of allChanges) {\n if (change.parents && change.parents.some((p) => changeIdSet.has(p))) {\n children.add(change.changeId);\n }\n }\n\n return Array.from(children);\n }\n\n /**\n * Evaluate set operations (v0.5)\n *\n * @param {string} expression - Expression with set operations\n * @returns {Promise<Array<string>>} Result of set operation\n */\n async evaluateSetOperation(expression) {\n // Parse set operations: & (intersection), | (union), ~ (difference)\n // Simple implementation - split by operators and evaluate left to right\n\n // Handle intersection (&)\n if (expression.includes(' & ')) {\n const parts = expression.split(' & ');\n let result = new Set(await this.evaluate(parts[0]));\n\n for (let i = 1; i < parts.length; i++) {\n const partResult = new Set(await this.evaluate(parts[i]));\n result = new Set([...result].filter(x => partResult.has(x)));\n }\n\n return Array.from(result);\n }\n\n // Handle union (|)\n if (expression.includes(' | ')) {\n const parts = expression.split(' | ');\n const result = new Set();\n\n for (const part of parts) {\n const partResult = await this.evaluate(part);\n partResult.forEach(id => result.add(id));\n }\n\n return Array.from(result);\n }\n\n // Handle difference (~)\n if (expression.includes(' ~ ')) {\n const parts = expression.split(' ~ ');\n let result = new Set(await this.evaluate(parts[0]));\n\n for (let i = 1; i < parts.length; i++) {\n const partResult = new Set(await this.evaluate(parts[i]));\n result = new Set([...result].filter(x => !partResult.has(x)));\n }\n\n return Array.from(result);\n }\n\n throw new JJError('INVALID_SET_OPERATION', `Invalid set operation: ${expression}`, {\n expression,\n });\n }\n}\n","/**\n * ConflictModel - First-class conflict handling\n *\n * In JJ, conflicts are not errors but structured data that can be:\n * - Stored in commits\n * - Rebased along with changes\n * - Resolved incrementally\n * - Committed and shared\n *\n * This matches JJ's philosophy: conflicts never block you.\n */\n\nimport path from 'path';\nimport { JJError } from '../utils/errors.js';\nimport { generateId } from '../utils/id-generation.js';\n\n/**\n * Conflict types supported by JJ\n */\nexport const ConflictType = {\n CONTENT: 'content', // File content conflicts (3-way merge)\n PATH: 'path', // Path/rename conflicts\n DELETE_MODIFY: 'delete-modify', // File deleted in one side, modified in other\n MODIFY_DELETE: 'modify-delete', // File modified in one side, deleted in other\n ADD_ADD: 'add-add', // Same path added in both sides\n};\n\n/**\n * ConflictModel manages conflict detection, storage, and resolution\n */\nexport class ConflictModel {\n constructor(storage, fs, mergeDriverRegistry = null) {\n this.storage = storage;\n this.fs = fs;\n this.mergeDriverRegistry = mergeDriverRegistry; // v0.5: merge drivers\n this.conflicts = new Map(); // conflictId -> Conflict\n this.fileConflicts = new Map(); // path -> conflictId\n }\n\n /**\n * Initialize conflict storage\n */\n async init() {\n try {\n const data = await this.storage.read('repo/conflicts/conflicts.json');\n if (data) {\n // storage.read() already parses JSON\n this.conflicts = new Map(Object.entries(data.conflicts || {}));\n this.fileConflicts = new Map(Object.entries(data.fileConflicts || {}));\n }\n } catch (error) {\n // No conflicts file yet, that's fine\n this.conflicts = new Map();\n this.fileConflicts = new Map();\n }\n }\n\n /**\n * Load conflicts from storage\n */\n async load() {\n await this.init();\n }\n\n /**\n * Save conflicts to storage\n */\n async save() {\n const data = {\n conflicts: Object.fromEntries(this.conflicts),\n fileConflicts: Object.fromEntries(this.fileConflicts),\n };\n // storage.write() will handle JSON stringification\n await this.storage.write('repo/conflicts/conflicts.json', data);\n }\n\n /**\n * Detect conflicts during merge/rebase operations\n *\n * @param {Object} opts - Merge options\n * @param {string} opts.baseChange - Common ancestor change\n * @param {string} opts.leftChange - Left side change\n * @param {string} opts.rightChange - Right side change\n * @param {Map} opts.baseFiles - Files in base\n * @param {Map} opts.leftFiles - Files in left\n * @param {Map} opts.rightFiles - Files in right\n * @param {Object} opts.drivers - Custom merge drivers (v0.5)\n * @param {string} opts.workingCopyDir - Working copy directory for file writes (v0.5)\n * @returns {Array<Conflict>} Detected conflicts\n */\n async detectConflicts(opts) {\n const { baseFiles, leftFiles, rightFiles, drivers = {}, workingCopyDir, baseChange, leftChange, rightChange } = opts;\n const conflicts = [];\n\n // Get all unique paths across all versions\n const allPaths = new Set([\n ...baseFiles.keys(),\n ...leftFiles.keys(),\n ...rightFiles.keys(),\n ]);\n\n for (const path of allPaths) {\n const baseContent = baseFiles.get(path);\n const leftContent = leftFiles.get(path);\n const rightContent = rightFiles.get(path);\n\n // v0.5: Try merge driver first if available\n if (this.mergeDriverRegistry) {\n const mergeResult = await this._tryMergeDriver(\n path,\n {base: baseContent, ours: leftContent, theirs: rightContent},\n drivers,\n { baseChange, leftChange, rightChange }\n );\n\n if (mergeResult) {\n // Driver handled it\n if (mergeResult.hasConflict) {\n // Driver produced a conflict (possibly partial merge)\n // Use conflict info from driver result if available\n if (mergeResult.conflicts && mergeResult.conflicts.length > 0) {\n // Driver provided detailed conflict info\n for (const driverConflict of mergeResult.conflicts) {\n const conflict = this._createConflict({\n type: driverConflict.type || 'driver-conflict',\n path,\n sides: { base: baseContent, left: leftContent, right: rightContent },\n message: driverConflict.message || mergeResult.message || `Merge driver detected conflicts`,\n driverResult: mergeResult,\n driverFailed: mergeResult.driverFailed,\n driverError: mergeResult.driverError,\n });\n conflicts.push(conflict);\n }\n } else {\n // Driver didn't provide detailed conflicts, create generic one\n const conflict = this._createConflict({\n type: 'driver-conflict',\n path,\n sides: { base: baseContent, left: leftContent, right: rightContent },\n message: mergeResult.message || `Merge driver detected conflicts`,\n driverResult: mergeResult,\n driverFailed: mergeResult.driverFailed,\n driverError: mergeResult.driverError,\n });\n conflicts.push(conflict);\n }\n } else {\n // Driver successfully merged - write result to working copy\n if (workingCopyDir && mergeResult.content !== null) {\n await this._writeDriverResult(workingCopyDir, path, mergeResult);\n }\n }\n continue; // Driver handled this file, skip default detection\n }\n }\n\n // Fall back to default conflict detection\n const conflict = this._detectPathConflict(path, baseContent, leftContent, rightContent);\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect conflict for a single path\n */\n _detectPathConflict(path, base, left, right) {\n const baseExists = base !== undefined;\n const leftExists = left !== undefined;\n const rightExists = right !== undefined;\n\n // No conflict if all three are the same\n if (base === left && left === right) {\n return null;\n }\n\n // No conflict if only one side changed\n if (base === left && base !== right) {\n return null; // Right side wins\n }\n if (base === right && base !== left) {\n return null; // Left side wins\n }\n if (base !== left && base !== right && left === right) {\n return null; // Both sides made the same change\n }\n\n // Now we have actual conflicts\n if (!baseExists && leftExists && rightExists) {\n // File added in both sides\n if (left === right) {\n return null; // Same content, no conflict\n }\n return this._createConflict({\n type: ConflictType.ADD_ADD,\n path,\n sides: { left, right },\n message: `File added with different content in both sides`,\n });\n }\n\n if (baseExists && !leftExists && !rightExists) {\n // File deleted in both sides\n return null; // No conflict\n }\n\n if (baseExists && !leftExists && rightExists) {\n // Deleted on left, modified on right\n return this._createConflict({\n type: ConflictType.DELETE_MODIFY,\n path,\n sides: { base, right },\n message: `File deleted on one side but modified on the other`,\n });\n }\n\n if (baseExists && leftExists && !rightExists) {\n // Modified on left, deleted on right\n return this._createConflict({\n type: ConflictType.MODIFY_DELETE,\n path,\n sides: { base, left },\n message: `File modified on one side but deleted on the other`,\n });\n }\n\n if (baseExists && leftExists && rightExists) {\n // Content conflict - all three versions exist but differ\n return this._createConflict({\n type: ConflictType.CONTENT,\n path,\n sides: { base, left, right },\n message: `Conflicting changes to file content`,\n });\n }\n\n return null;\n }\n\n /**\n * Create a conflict object\n */\n _createConflict({ type, path, sides, message, driverFailed, driverError }) {\n const conflictId = generateId('conflict');\n const conflict = {\n conflictId,\n type,\n path,\n sides,\n message,\n resolved: false,\n timestamp: new Date().toISOString(),\n };\n\n // Add driver failure metadata if present\n if (driverFailed !== undefined) {\n conflict.driverFailed = driverFailed;\n }\n if (driverError !== undefined) {\n conflict.driverError = driverError;\n }\n\n return conflict;\n }\n\n /**\n * Store a conflict\n */\n async addConflict(conflict) {\n this.conflicts.set(conflict.conflictId, conflict);\n this.fileConflicts.set(conflict.path, conflict.conflictId);\n await this.save();\n return conflict;\n }\n\n /**\n * Get conflict by ID\n */\n getConflict(conflictId) {\n return this.conflicts.get(conflictId);\n }\n\n /**\n * Get conflict for a file path\n */\n getConflictForPath(path) {\n const conflictId = this.fileConflicts.get(path);\n if (!conflictId) return null;\n return this.conflicts.get(conflictId);\n }\n\n /**\n * List all conflicts\n */\n listConflicts(opts = {}) {\n let conflicts = Array.from(this.conflicts.values());\n\n if (opts.resolved !== undefined) {\n conflicts = conflicts.filter(c => c.resolved === opts.resolved);\n }\n\n if (opts.type) {\n conflicts = conflicts.filter(c => c.type === opts.type);\n }\n\n return conflicts;\n }\n\n /**\n * Mark a conflict as resolved\n */\n async resolveConflict(conflictId, resolution) {\n const conflict = this.conflicts.get(conflictId);\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${conflictId} not found`);\n }\n\n // Support both object-based and legacy string resolutions\n let resolvedContent;\n\n if (typeof resolution === 'string') {\n // Legacy string format: 'manual', 'ours', 'theirs', etc.\n resolvedContent = { type: 'manual', value: resolution };\n } else if (resolution && typeof resolution === 'object') {\n // New object-based format\n if (resolution.side) {\n // { side: 'ours' | 'theirs' | 'base' }\n if (!['ours', 'theirs', 'base'].includes(resolution.side)) {\n throw new JJError('INVALID_RESOLUTION', `Invalid side: ${resolution.side}`, {\n suggestion: 'Use \"ours\", \"theirs\", or \"base\"'\n });\n }\n resolvedContent = { type: 'side', side: resolution.side };\n } else if (resolution.content !== undefined) {\n // { content: string | Uint8Array }\n resolvedContent = { type: 'content', content: resolution.content };\n } else if (resolution.hunks) {\n // { hunks: [...] } for partial resolution\n resolvedContent = { type: 'hunks', hunks: resolution.hunks };\n } else {\n // Store as-is for extensibility\n resolvedContent = resolution;\n }\n } else {\n throw new JJError('INVALID_RESOLUTION', 'Resolution must be a string or object');\n }\n\n conflict.resolved = true;\n conflict.resolution = resolvedContent;\n conflict.resolvedAt = new Date().toISOString();\n\n await this.save();\n return conflict;\n }\n\n /**\n * Remove a conflict (after resolution is committed)\n */\n async removeConflict(conflictId) {\n const conflict = this.conflicts.get(conflictId);\n if (!conflict) return;\n\n this.conflicts.delete(conflictId);\n this.fileConflicts.delete(conflict.path);\n await this.save();\n }\n\n /**\n * Check if a change has conflicts\n */\n hasConflicts() {\n return this.listConflicts({ resolved: false }).length > 0;\n }\n\n /**\n * Create conflict markers for a content conflict (like Git's <<<<<<<, =======, >>>>>>>)\n */\n generateConflictMarkers(conflict) {\n if (conflict.type !== ConflictType.CONTENT) {\n throw new JJError('INVALID_CONFLICT_TYPE',\n 'Can only generate markers for content conflicts');\n }\n\n const { base, left, right } = conflict.sides;\n\n return [\n '<<<<<<< Left',\n left || '',\n '||||||| Base',\n base || '',\n '=======',\n right || '',\n '>>>>>>> Right',\n ].join('\\n');\n }\n\n /**\n * Parse conflict markers from file content\n */\n parseConflictMarkers(content) {\n const markerRegex = /^<{7} Left\\n([\\s\\S]*?)\\n\\|{7} Base\\n([\\s\\S]*?)\\n={7}\\n([\\s\\S]*?)\\n>{7} Right$/gm;\n const matches = markerRegex.exec(content);\n\n if (!matches) {\n return null;\n }\n\n return {\n left: matches[1],\n base: matches[2],\n right: matches[3],\n };\n }\n\n /**\n * Clear all conflicts\n */\n async clear() {\n this.conflicts.clear();\n this.fileConflicts.clear();\n await this.save();\n }\n\n /**\n * Try to use a merge driver for a file (v0.5)\n *\n * @param {string} path - File path\n * @param {Object} content - Content versions { base, ours, theirs }\n * @param {Object} customDrivers - Per-merge custom drivers\n * @param {Object} metadata - Merge metadata\n * @returns {Promise<Object|null>} Merge result or null if no driver\n */\n async _tryMergeDriver(path, content, customDrivers, metadata) {\n if (!this.mergeDriverRegistry) {\n return null; // No registry available\n }\n\n // Check if file is binary\n const isBinary = this.mergeDriverRegistry.isBinaryFile(\n path,\n content.ours || content.theirs || content.base\n );\n\n // Find appropriate driver\n const driver = this.mergeDriverRegistry.findDriver(path, customDrivers, isBinary);\n\n if (!driver || driver === this.mergeDriverRegistry.defaultDriver) {\n return null; // No custom driver found\n }\n\n // Execute driver (errors are handled by wrapDriver)\n // In non-strict mode: returns result with driverFailed metadata\n // In strict mode: throws error\n const result = await this.mergeDriverRegistry.executeDriver(\n driver,\n { path, ...content, metadata },\n isBinary\n );\n\n return result;\n }\n\n /**\n * Write merge driver result to working copy (v0.5)\n *\n * @param {string} workingCopyDir - Working copy directory\n * @param {string} filePath - File path\n * @param {Object} result - Merge result\n */\n async _writeDriverResult(workingCopyDir, filePath, result) {\n const fullPath = path.join(workingCopyDir, filePath);\n\n // Ensure directory exists\n const dir = path.dirname(fullPath);\n await this.fs.promises.mkdir(dir, { recursive: true });\n\n // Write main file\n if (result.content !== null && result.content !== undefined) {\n if (Buffer.isBuffer(result.content)) {\n await this.fs.promises.writeFile(fullPath, result.content);\n } else {\n await this.fs.promises.writeFile(fullPath, result.content, 'utf-8');\n }\n }\n\n // Write additional files if driver provided them\n if (result.additionalFiles) {\n for (const [additionalPath, additionalContent] of Object.entries(result.additionalFiles)) {\n const additionalFullPath = path.join(workingCopyDir, additionalPath);\n const additionalDir = path.dirname(additionalFullPath);\n await this.fs.promises.mkdir(additionalDir, { recursive: true });\n\n if (Buffer.isBuffer(additionalContent)) {\n await this.fs.promises.writeFile(additionalFullPath, additionalContent);\n } else {\n await this.fs.promises.writeFile(additionalFullPath, additionalContent, 'utf-8');\n }\n }\n }\n }\n}\n","/**\n * MergeDriverRegistry - Registry for custom merge drivers\n *\n * Manages registration, lookup, and execution of merge drivers.\n * Drivers are matched against file paths using glob patterns.\n */\n\nimport { JJError } from '../utils/errors.js';\n\n/**\n * Check if a file path matches a glob pattern\n * Simple implementation - for complex patterns, consider using minimatch\n *\n * @param {string} path - File path\n * @param {string} pattern - Glob pattern\n * @returns {boolean} Whether path matches pattern\n */\nfunction matchesPattern(path, pattern) {\n // Exact match\n if (pattern === path) return true;\n\n // Convert glob pattern to regex\n // Support: *, **, ?, [abc]\n const regexPattern = pattern\n .replace(/\\*\\*/g, '__DOUBLESTAR__')\n .replace(/\\*/g, '[^/]*')\n .replace(/__DOUBLESTAR__/g, '.*')\n .replace(/\\?/g, '[^/]')\n .replace(/\\./g, '\\\\.');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(path);\n}\n\n/**\n * Check if a file is likely binary based on content\n *\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether content appears binary\n */\nfunction isBinaryContent(content) {\n if (Buffer.isBuffer(content)) return true;\n if (typeof content !== 'string') return false;\n\n // Check for null bytes (common in binary files)\n if (content.indexOf('\\0') !== -1) return true;\n\n // Check for high ratio of non-printable characters\n const nonPrintable = content.split('').filter(\n (char) => {\n const code = char.charCodeAt(0);\n return code < 32 && code !== 9 && code !== 10 && code !== 13;\n }\n ).length;\n\n const ratio = nonPrintable / content.length;\n return ratio > 0.3;\n}\n\n/**\n * Default merge driver - standard three-way text merge\n *\n * @param {MergeContext} context\n * @returns {Promise<MergeResult>}\n */\nasync function defaultMergeDriver(context) {\n const { content } = context;\n const { base, ours, theirs } = content;\n\n // Simple cases\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n // No changes on our side, take theirs\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n // No changes on their side, take ours\n return { content: ours, hasConflict: false };\n }\n\n // Both sides changed - conflict\n const conflictMarkers = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n\n return {\n content: conflictMarkers,\n hasConflict: true,\n conflicts: [{\n type: 'content',\n sides: ['ours', 'theirs'],\n }],\n };\n}\n\n/**\n * Wrap a driver with timeout and error handling\n *\n * @param {Function} driver - Driver function\n * @param {Object} options - Wrapper options\n * @param {number} [options.timeout=5000] - Timeout in ms\n * @param {boolean} [options.strict=false] - Throw on error instead of falling back\n * @param {Object} [options.jj] - JJ instance for event emission\n * @param {string} [options.pattern] - Pattern that matched this driver\n * @returns {Function} Wrapped driver\n */\nfunction wrapDriver(driver, options = {}) {\n const { timeout = 5000, strict = false, jj = null, pattern = null } = options;\n\n return async (context) => {\n let timeoutId;\n const timeoutPromise = new Promise((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error('Driver timeout')), timeout);\n // Use unref() to allow process to exit if this is the only pending timer\n if (timeoutId.unref) {\n timeoutId.unref();\n }\n });\n\n try {\n const result = await Promise.race([\n driver(context),\n timeoutPromise,\n ]);\n\n // Clear timeout if driver completed successfully\n clearTimeout(timeoutId);\n\n // Validate result\n if (!result || typeof result.hasConflict !== 'boolean') {\n throw new Error('Driver returned invalid result');\n }\n\n return result;\n } catch (error) {\n // Clear timeout on error too\n clearTimeout(timeoutId);\n\n // Emit driver:failed event if jj instance available\n if (jj && jj.dispatchEvent) {\n jj.dispatchEvent(new CustomEvent('driver:failed', {\n detail: {\n path: context.path,\n pattern: pattern,\n error: error.message,\n timestamp: new Date().toISOString(),\n },\n }));\n }\n\n // In strict mode, throw the error\n if (strict) {\n throw error;\n }\n\n // Fall back to default merge with error metadata\n const result = await defaultMergeDriver(context);\n return {\n ...result,\n driverFailed: true,\n driverError: error.message,\n };\n }\n };\n}\n\n/**\n * MergeDriverRegistry manages custom merge drivers\n */\nexport class MergeDriverRegistry {\n constructor(jj = null) {\n /** @type {Array<{pattern: string, driver: Function, accepts: Object, strict: boolean}>} */\n this.drivers = [];\n this.jj = jj; // JJ instance for event emission\n }\n\n /**\n * Register one or more merge drivers\n *\n * @param {Object<string, Function|Object>} drivers - Pattern -> driver map\n *\n * @example\n * registry.register({\n * 'package.json': packageJsonDriver,\n * '*.md': markdownDriver,\n * 'critical.txt': { driver: myDriver, strict: true },\n * });\n */\n register(drivers) {\n for (const [pattern, driverOrConfig] of Object.entries(drivers)) {\n // Driver can be function or { driver, accepts, timeout, strict }\n let driver, accepts, timeout, strict;\n\n if (typeof driverOrConfig === 'function') {\n driver = driverOrConfig;\n accepts = { text: true, binary: false }; // Default: text only\n timeout = 5000;\n strict = false;\n } else {\n driver = driverOrConfig.driver || driverOrConfig.merge;\n accepts = driverOrConfig.accepts || { text: true, binary: false };\n timeout = driverOrConfig.timeout || 5000;\n strict = driverOrConfig.strict || false;\n }\n\n if (typeof driver !== 'function') {\n throw new JJError(\n 'INVALID_DRIVER',\n `Driver for pattern \"${pattern}\" must be a function`,\n { pattern }\n );\n }\n\n // Wrap driver with error handling\n const wrappedDriver = wrapDriver(driver, {\n timeout,\n strict,\n jj: this.jj,\n pattern,\n });\n\n this.drivers.push({ pattern, driver: wrappedDriver, accepts, strict });\n }\n }\n\n /**\n * Unregister a driver by pattern\n *\n * @param {string} pattern - Pattern to unregister\n */\n unregister(pattern) {\n this.drivers = this.drivers.filter((d) => d.pattern !== pattern);\n }\n\n /**\n * Get a specific driver by pattern\n *\n * @param {string} pattern - Pattern to look up\n * @returns {Function|undefined} Driver function or undefined\n */\n get(pattern) {\n const entry = this.drivers.find((d) => d.pattern === pattern);\n return entry?.driver;\n }\n\n /**\n * List all registered drivers\n *\n * @returns {Array<{pattern: string, accepts: Object}>} Driver list\n */\n list() {\n return this.drivers.map(({ pattern, accepts }) => ({ pattern, accepts }));\n }\n\n /**\n * Find the best matching driver for a file path\n *\n * Priority:\n * 1. Per-merge custom drivers (from merge options)\n * 2. Registered drivers (by pattern specificity)\n * 3. Default driver (three-way merge)\n *\n * @param {string} filePath - File path\n * @param {Object} customDrivers - Per-merge custom drivers\n * @param {boolean} isBinary - Whether file is binary\n * @returns {Function} Driver function\n */\n findDriver(filePath, customDrivers = {}, isBinary = false) {\n // 1. Check custom drivers (highest priority)\n for (const [pattern, driverOrConfig] of Object.entries(customDrivers)) {\n if (matchesPattern(filePath, pattern)) {\n let driver, accepts, timeout, strict;\n\n if (typeof driverOrConfig === 'function') {\n driver = driverOrConfig;\n accepts = { text: true, binary: false };\n timeout = 5000;\n strict = false;\n } else {\n driver = driverOrConfig.driver || driverOrConfig.merge;\n accepts = driverOrConfig.accepts || { text: true, binary: false };\n timeout = driverOrConfig.timeout || 5000;\n strict = driverOrConfig.strict || false;\n }\n\n // Check if driver accepts this file type\n if ((isBinary && accepts.binary) || (!isBinary && accepts.text)) {\n return wrapDriver(driver, {\n timeout,\n strict,\n jj: this.jj,\n pattern,\n });\n }\n }\n }\n\n // 2. Check registered drivers (by specificity)\n const matches = this.drivers\n .filter(({ pattern, accepts }) => {\n const matchesPath = matchesPattern(filePath, pattern);\n const acceptsType = (isBinary && accepts.binary) || (!isBinary && accepts.text);\n return matchesPath && acceptsType;\n })\n .sort((a, b) => b.pattern.length - a.pattern.length); // Most specific first\n\n if (matches.length > 0) {\n return matches[0].driver;\n }\n\n // 3. Fall back to default driver\n return defaultMergeDriver;\n }\n\n /**\n * Execute a driver with proper content encoding\n *\n * @param {Function} driver - Driver function\n * @param {Object} context - Merge context\n * @param {string} context.path - File path\n * @param {string|Buffer|null} context.base - Base content\n * @param {string|Buffer|null} context.ours - Our content\n * @param {string|Buffer|null} context.theirs - Their content\n * @param {Object} context.metadata - Metadata\n * @param {boolean} isBinary - Whether content is binary\n * @returns {Promise<MergeResult>}\n */\n async executeDriver(driver, context, isBinary) {\n const { base, ours, theirs, ...rest } = context;\n\n // Prepare content based on binary/text\n const content = {\n base: this.prepareContent(base, isBinary),\n ours: this.prepareContent(ours, isBinary),\n theirs: this.prepareContent(theirs, isBinary),\n };\n\n const driverContext = {\n ...rest,\n content,\n isBinary,\n };\n\n return await driver(driverContext);\n }\n\n /**\n * Prepare content for driver based on binary/text\n *\n * @param {string|Buffer|null} content - Raw content\n * @param {boolean} isBinary - Whether to return as Buffer\n * @returns {string|Buffer|null} Prepared content\n */\n prepareContent(content, isBinary) {\n if (content === null || content === undefined) {\n return null;\n }\n\n if (isBinary) {\n // Convert to Buffer if needed\n if (Buffer.isBuffer(content)) return content;\n if (typeof content === 'string') return Buffer.from(content, 'utf-8');\n return Buffer.from(String(content));\n } else {\n // Convert to string if needed\n if (typeof content === 'string') return content;\n if (Buffer.isBuffer(content)) return content.toString('utf-8');\n return String(content);\n }\n }\n\n /**\n * Check if file is binary based on path or content\n *\n * @param {string} path - File path\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether file is binary\n */\n isBinaryFile(path, content) {\n // Check by extension first\n const binaryExtensions = [\n '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico',\n '.zip', '.tar', '.gz', '.bz2', '.7z',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx',\n '.exe', '.dll', '.so', '.dylib',\n '.mp3', '.mp4', '.avi', '.mov',\n ];\n\n const ext = path.substring(path.lastIndexOf('.')).toLowerCase();\n if (binaryExtensions.includes(ext)) {\n return true;\n }\n\n // Check content\n if (content) {\n return isBinaryContent(content);\n }\n\n return false;\n }\n}\n\n/**\n * Standalone helper to check if file is binary\n * (exported for external use)\n *\n * @param {string} path - File path\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether file is binary\n */\nexport function isBinaryFile(path, content) {\n const binaryExtensions = [\n '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico',\n '.zip', '.tar', '.gz', '.bz2', '.7z',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx',\n '.exe', '.dll', '.so', '.dylib',\n '.mp3', '.mp4', '.avi', '.mov',\n ];\n\n const ext = path.substring(path.lastIndexOf('.')).toLowerCase();\n if (binaryExtensions.includes(ext)) {\n return true;\n }\n\n if (content) {\n return isBinaryContent(content);\n }\n\n return false;\n}\n","/**\n * WorkspaceManager - Manages multiple working copies (JJ workspaces)\n *\n * Allows multiple independent working directories to coexist,\n * each pointing to different changes in the repository.\n *\n * Note: JJ calls these \"workspaces\" not \"worktrees\" (Git terminology).\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId, validatePath } from '../utils/validation.js';\nimport { generateId } from '../utils/id-generation.js';\nimport path from 'path';\n\nexport class WorkspaceManager {\n /**\n * @param {Storage} storage - Storage manager instance\n * @param {Object} fs - Filesystem implementation\n * @param {string} repoDir - Repository directory\n */\n constructor(storage, fs, repoDir) {\n this.storage = storage;\n this.fs = fs;\n this.repoDir = repoDir;\n this.workspaces = new Map(); // workspaceId -> Workspace\n }\n\n /**\n * Initialize workspace manager\n */\n async init() {\n // Create default workspace (main working copy)\n const defaultWorkspace = {\n id: 'default',\n name: 'default',\n path: this.repoDir,\n changeId: null,\n created: new Date().toISOString(),\n };\n\n this.workspaces.set('default', defaultWorkspace);\n await this.save();\n }\n\n /**\n * Load workspaces from storage\n */\n async load() {\n try {\n const data = await this.storage.read('repo/store/workspaces.json');\n if (data) {\n this.workspaces = new Map(Object.entries(data.workspaces || {}));\n }\n } catch (error) {\n // No workspaces file yet, initialize with default\n await this.init();\n }\n }\n\n /**\n * Save workspaces to storage\n */\n async save() {\n const data = {\n workspaces: Object.fromEntries(this.workspaces),\n };\n await this.storage.write('repo/store/workspaces.json', data);\n }\n\n /**\n * Add a new workspace\n *\n * @param {Object} args - Workspace options\n * @param {string} args.path - Path for the new workspace\n * @param {string} [args.name] - Optional name for the workspace\n * @param {string} [args.changeId] - Change to check out in new workspace\n * @returns {Promise<Object>} Created workspace\n */\n async add(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path for workspace', {\n suggestion: 'Provide a path for the new workspace',\n });\n }\n\n // Workspace paths can be absolute (unlike regular file paths)\n // Just validate changeId if provided\n if (args.changeId) {\n validateChangeId(args.changeId);\n }\n\n // Check if path already exists as a workspace\n for (const workspace of this.workspaces.values()) {\n if (workspace.path === args.path) {\n throw new JJError('WORKSPACE_EXISTS', `Workspace already exists at ${args.path}`, {\n path: args.path,\n });\n }\n }\n\n const workspaceId = generateId('workspace');\n const workspace = {\n id: workspaceId,\n name: args.name || `workspace-${workspaceId.slice(0, 8)}`,\n path: args.path,\n changeId: args.changeId || null,\n created: new Date().toISOString(),\n };\n\n // Create workspace directory\n await this.fs.promises.mkdir(args.path, { recursive: true });\n\n // Create workspace-specific working_copy directory in .jj\n const workspaceCopyDir = path.join(this.repoDir, '.jj', 'working_copy', workspaceId);\n await this.fs.promises.mkdir(workspaceCopyDir, { recursive: true });\n\n // Create .git file pointing to main repo's .git directory\n // This allows Git tools to work in the workspace\n // IMPORTANT: Must use absolute paths for Git compatibility\n const gitFilePath = path.join(args.path, '.git');\n const mainGitDir = path.resolve(this.repoDir, '.git');\n const gitFileContent = `gitdir: ${mainGitDir}\\n`;\n await this.fs.promises.writeFile(gitFilePath, gitFileContent, 'utf8');\n\n // Create .jj file pointing to main repo's .jj directory\n // This allows JJ tools to work in the workspace\n // IMPORTANT: Must use absolute paths for JJ CLI compatibility\n const jjFilePath = path.join(args.path, '.jj');\n const mainJJDir = path.resolve(this.repoDir, '.jj');\n const jjFileContent = `jjdir: ${mainJJDir}\\n`;\n await this.fs.promises.writeFile(jjFilePath, jjFileContent, 'utf8');\n\n this.workspaces.set(workspaceId, workspace);\n await this.save();\n\n return workspace;\n }\n\n /**\n * Remove a workspace\n *\n * @param {string} workspaceId - Workspace ID to remove\n * @param {boolean} [force=false] - Force removal even if files exist\n */\n async remove(workspaceId, force = false) {\n if (workspaceId === 'default') {\n throw new JJError('INVALID_OPERATION', 'Cannot remove default workspace', {\n suggestion: 'Use a different workspace ID',\n });\n }\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n // Check if directory is empty (unless force is true)\n if (!force) {\n try {\n const files = await this.fs.promises.readdir(workspace.path);\n if (files.length > 0) {\n throw new JJError('WORKSPACE_NOT_EMPTY', `Workspace at ${workspace.path} is not empty`, {\n path: workspace.path,\n suggestion: 'Use force=true to remove anyway',\n });\n }\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n // Remove the workspace directory and all its contents\n try {\n await this.fs.promises.rm(workspace.path, { recursive: true, force: true });\n } catch (error) {\n // Ignore errors if directory doesn't exist\n if (error.code !== 'ENOENT') {\n throw new JJError(\n 'WORKSPACE_REMOVAL_FAILED',\n `Failed to remove workspace directory: ${error.message}`,\n { path: workspace.path, originalError: error.message }\n );\n }\n }\n\n this.workspaces.delete(workspaceId);\n await this.save();\n }\n\n /**\n * Forget a workspace without deleting files\n *\n * @param {string} workspaceId - Workspace ID to forget\n */\n async forget(workspaceId) {\n if (workspaceId === 'default') {\n throw new JJError('INVALID_OPERATION', 'Cannot forget default workspace', {\n suggestion: 'Use a different workspace ID',\n });\n }\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n // Just remove from tracking, leave files alone\n this.workspaces.delete(workspaceId);\n await this.save();\n }\n\n /**\n * Get a workspace by ID\n *\n * @param {string} workspaceId - Workspace ID\n * @returns {Object|undefined} Workspace object\n */\n get(workspaceId) {\n return this.workspaces.get(workspaceId);\n }\n\n /**\n * Get workspace by path\n *\n * @param {string} path - Workspace path\n * @returns {Object|null} Workspace object or null\n */\n getByPath(path) {\n for (const workspace of this.workspaces.values()) {\n if (workspace.path === path) {\n return workspace;\n }\n }\n return null;\n }\n\n /**\n * List all workspaces\n *\n * @returns {Array<Object>} Array of workspaces\n */\n list() {\n return Array.from(this.workspaces.values());\n }\n\n /**\n * Update a workspace's change\n *\n * @param {string} workspaceId - Workspace ID\n * @param {string} changeId - New change ID\n */\n async updateChange(workspaceId, changeId) {\n validateChangeId(changeId);\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n workspace.changeId = changeId;\n await this.save();\n }\n\n /**\n * Clear all workspaces (except default)\n */\n async clear() {\n const defaultWorkspace = this.workspaces.get('default');\n this.workspaces.clear();\n if (defaultWorkspace) {\n this.workspaces.set('default', defaultWorkspace);\n }\n await this.save();\n }\n}\n","/**\n * BackgroundOps - Background operations manager\n *\n * Handles file watching, automatic snapshots, and async operations.\n */\n\nimport { JJError } from '../utils/errors.js';\n\nexport class BackgroundOps {\n /**\n * @param {Object} jj - JJ instance\n * @param {Object} fs - Filesystem implementation\n * @param {string} dir - Repository directory\n */\n constructor(jj, fs, dir) {\n this.jj = jj;\n this.fs = fs;\n this.dir = dir;\n this.watchers = new Map();\n this.operations = new Map(); // operationId -> operation\n this.timers = new Map(); // watcherId -> timer\n this.running = false;\n }\n\n /**\n * Start background operations\n */\n async start() {\n if (this.running) {\n return;\n }\n\n this.running = true;\n }\n\n /**\n * Stop background operations\n */\n async stop() {\n if (!this.running) {\n return;\n }\n\n // Clear all timers\n for (const timer of this.timers.values()) {\n clearTimeout(timer);\n }\n this.timers.clear();\n\n // Stop all watchers\n for (const watcher of this.watchers.values()) {\n if (watcher.close) {\n watcher.close();\n }\n }\n\n this.watchers.clear();\n this.running = false;\n }\n\n /**\n * Watch a path for changes\n *\n * @param {string} path - Path to watch\n * @param {Function} callback - Callback function(event, filename)\n * @returns {string} Watcher ID\n */\n async watch(path, callback) {\n if (!this.running) {\n throw new JJError('BACKGROUND_OPS_NOT_RUNNING', 'Background operations not started', {\n suggestion: 'Call start() first',\n });\n }\n\n // Check if fs.watch is available (Node.js)\n if (this.fs.watch) {\n const watcherId = `watcher-${this.watchers.size}`;\n const watcher = this.fs.watch(path, { recursive: true }, callback);\n this.watchers.set(watcherId, watcher);\n return watcherId;\n }\n\n // Browser: use FileSystem Access API observeDirectory if available\n if (typeof FileSystemObserver !== 'undefined') {\n const watcherId = `watcher-${this.watchers.size}`;\n const observer = new FileSystemObserver(async (records) => {\n for (const record of records) {\n callback(record.type, record.relativePathComponents.join('/'));\n }\n });\n\n // Note: This API is experimental and may not be available\n this.watchers.set(watcherId, observer);\n return watcherId;\n }\n\n throw new JJError('WATCH_NOT_SUPPORTED', 'File watching not supported in this environment');\n }\n\n /**\n * Unwatch a path\n *\n * @param {string} watcherId - Watcher ID\n */\n async unwatch(watcherId) {\n const watcher = this.watchers.get(watcherId);\n if (!watcher) {\n return;\n }\n\n // Clear any pending timer for this watcher\n const timer = this.timers.get(watcherId);\n if (timer) {\n clearTimeout(timer);\n this.timers.delete(watcherId);\n }\n\n if (watcher.close) {\n watcher.close();\n } else if (watcher.disconnect) {\n watcher.disconnect();\n }\n\n this.watchers.delete(watcherId);\n }\n\n /**\n * Queue a background operation\n *\n * @param {Function} operation - Async operation to run\n * @param {Object} opts - Options\n * @param {string} [opts.description] - Operation description\n * @returns {Promise<Object>} Operation result\n */\n async queue(operation, opts = {}) {\n const operationId = `op-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n\n const op = {\n id: operationId,\n description: opts.description || 'background operation',\n status: 'pending',\n created: new Date().toISOString(),\n promise: null,\n result: null,\n error: null,\n };\n\n this.operations.set(operationId, op);\n\n // Run operation asynchronously\n op.promise = (async () => {\n try {\n op.status = 'running';\n op.result = await operation();\n op.status = 'completed';\n op.completed = new Date().toISOString();\n return op.result;\n } catch (error) {\n op.status = 'failed';\n op.error = error;\n op.completed = new Date().toISOString();\n throw error;\n }\n })();\n\n return {\n id: operationId,\n promise: op.promise,\n };\n }\n\n /**\n * Get operation status\n *\n * @param {string} operationId - Operation ID\n * @returns {Object|null} Operation status\n */\n getOperation(operationId) {\n return this.operations.get(operationId) || null;\n }\n\n /**\n * List all operations\n *\n * @param {Object} opts - List options\n * @param {string} [opts.status] - Filter by status\n * @returns {Array<Object>} Operations\n */\n listOperations(opts = {}) {\n let ops = Array.from(this.operations.values());\n\n if (opts.status) {\n ops = ops.filter(op => op.status === opts.status);\n }\n\n return ops.map(op => ({\n id: op.id,\n description: op.description,\n status: op.status,\n created: op.created,\n completed: op.completed,\n error: op.error ? op.error.message : null,\n }));\n }\n\n /**\n * Enable auto-snapshot on file changes\n *\n * @param {Object} opts - Options\n * @param {number} [opts.debounceMs=1000] - Debounce delay in ms\n */\n async enableAutoSnapshot(opts = {}) {\n const debounceMs = opts.debounceMs || 1000;\n\n const watcherId = await this.watch(this.dir, (event, filename) => {\n if (filename && filename.startsWith('.jj/')) {\n return; // Ignore .jj directory changes\n }\n\n if (filename && filename.startsWith('.git/')) {\n return; // Ignore .git directory changes\n }\n\n // Debounce: wait for changes to settle\n const existingTimer = this.timers.get(watcherId);\n if (existingTimer) {\n clearTimeout(existingTimer);\n }\n\n const timer = setTimeout(async () => {\n try {\n // Create automatic snapshot\n await this.queue(async () => {\n await this.jj.describe({ message: `Auto-snapshot: ${filename || 'multiple files'} changed` });\n }, { description: 'auto-snapshot' });\n } catch (error) {\n console.error('Auto-snapshot failed:', error);\n } finally {\n // Clean up timer reference\n this.timers.delete(watcherId);\n }\n }, debounceMs);\n\n // Use unref() to allow process to exit if this is the only pending timer\n if (timer.unref) {\n timer.unref();\n }\n\n this.timers.set(watcherId, timer);\n });\n\n return watcherId;\n }\n\n /**\n * Clean up completed operations\n *\n * @param {number} [maxAge] - Max age in ms (default: 1 hour)\n */\n cleanupOperations(maxAge = 3600000) {\n const cutoff = Date.now() - maxAge;\n\n for (const [id, op] of this.operations.entries()) {\n if (op.status === 'completed' || op.status === 'failed') {\n const completedTime = new Date(op.completed).getTime();\n if (completedTime < cutoff) {\n this.operations.delete(id);\n }\n }\n }\n }\n}\n","/**\n * UserConfig - Manages user configuration (name, email, etc.)\n *\n * In real JJ, this would come from:\n * - ~/.jjconfig.toml (global config)\n * - .jj/repo/config.toml (repo config)\n * - Environment variables\n *\n * For now, we store it in the repository.\n */\n\nexport class UserConfig {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.config = null;\n }\n\n /**\n * Initialize with default config\n *\n * @param {Object} opts - Initial config\n * @param {string} [opts.userName='User'] - User name\n * @param {string} [opts.userEmail='user@example.com'] - User email\n */\n async init(opts = {}) {\n this.config = {\n user: {\n name: opts.userName || 'User',\n email: opts.userEmail || 'user@example.com',\n },\n };\n\n await this.save();\n }\n\n /**\n * Load config from storage and/or programmatic object\n * v0.35.0: Also loads workspace-specific config from workspace-config.json\n * v0.36.0: Accepts optional config object for programmatic configuration\n *\n * @param {Object} [opts] - Optional config options\n * @param {Object} [opts.workspace] - Workspace-specific config to merge (highest priority)\n * @param {Object} [opts.override] - Config object to merge over loaded config\n */\n async load(opts = {}) {\n try {\n const data = await this.storage.read('config.json');\n if (data) {\n this.config = data;\n }\n } catch (error) {\n // No config file yet, use defaults\n await this.init();\n }\n\n // Merge programmatic override config if provided\n if (opts.override) {\n this.config = this._deepMerge(this.config, opts.override);\n }\n\n // Load workspace-specific config from file (v0.35.0)\n try {\n const workspaceData = await this.storage.read('workspace-config.json');\n if (workspaceData) {\n // Merge workspace config over global config (workspace takes precedence)\n this.config = this._deepMerge(this.config, workspaceData);\n }\n } catch (error) {\n // No workspace config, that's fine\n }\n\n // Merge programmatic workspace config if provided (highest priority)\n if (opts.workspace) {\n this.config = this._deepMerge(this.config, opts.workspace);\n }\n }\n\n /**\n * Deep merge two config objects (workspace overrides global)\n * @private\n */\n _deepMerge(target, source) {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this._deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n\n return result;\n }\n\n /**\n * Save config to storage\n */\n async save() {\n await this.storage.write('config.json', this.config);\n }\n\n /**\n * Get user info\n *\n * @returns {Object} User info { name, email }\n */\n getUser() {\n if (!this.config) {\n return { name: 'User', email: 'user@example.com' };\n }\n return this.config.user;\n }\n\n /**\n * Set user info\n *\n * @param {Object} user - User info\n * @param {string} user.name - User name\n * @param {string} user.email - User email\n */\n async setUser(user) {\n if (!this.config) {\n await this.load();\n }\n\n this.config.user = {\n name: user.name,\n email: user.email,\n };\n\n await this.save();\n }\n\n /**\n * Get config value\n *\n * @param {string} key - Config key (dot notation supported)\n * @returns {*} Config value\n */\n get(key) {\n if (!this.config) {\n return undefined;\n }\n\n const parts = key.split('.');\n let value = this.config;\n\n for (const part of parts) {\n value = value?.[part];\n if (value === undefined) {\n return undefined;\n }\n }\n\n return value;\n }\n\n /**\n * Set config value\n *\n * @param {string} key - Config key (dot notation supported)\n * @param {*} value - Config value\n */\n async set(key, value) {\n if (!this.config) {\n await this.load();\n }\n\n const parts = key.split('.');\n const lastPart = parts.pop();\n let target = this.config;\n\n for (const part of parts) {\n if (!target[part]) {\n target[part] = {};\n }\n target = target[part];\n }\n\n target[lastPart] = value;\n await this.save();\n }\n}\n","/**\n * JJ Checkout File Manager\n *\n * Handles encoding/decoding of .jj/working_copy/checkout file using protobuf.\n * This file tracks which operation the working copy is at.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJCheckout {\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'local_working_copy.proto');\n }\n\n /**\n * Write checkout file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @param {string} workspaceName - Workspace name (default: 'default')\n */\n async writeCheckout(operationId, workspaceName = 'default') {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Checkout = root.lookupType('local_working_copy.Checkout');\n\n // Convert hex operation ID to bytes\n const opIdBuffer = Buffer.from(operationId, 'hex');\n\n // Create message (use camelCase for protobufjs)\n const message = Checkout.create({\n operationId: opIdBuffer,\n workspaceName: workspaceName\n });\n\n // Verify the message\n const errMsg = Checkout.verify(message);\n if (errMsg) {\n throw new Error(`Checkout message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = Checkout.encode(message).finish();\n\n // Write to .jj/working_copy/checkout\n const checkoutPath = `${this.dir}/.jj/working_copy/checkout`;\n await this.fs.promises.writeFile(checkoutPath, buffer);\n }\n\n /**\n * Read checkout file\n *\n * @returns {Object} Decoded checkout data\n */\n async readCheckout() {\n const checkoutPath = `${this.dir}/.jj/working_copy/checkout`;\n const buffer = await this.fs.promises.readFile(checkoutPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Checkout = root.lookupType('local_working_copy.Checkout');\n\n // Decode\n const message = Checkout.decode(buffer);\n\n // Return the decoded message with proper field access\n return {\n operation_id: message.operationId,\n workspace_name: message.workspaceName\n };\n }\n}\n","/**\n * JJ TreeState File Manager\n *\n * Handles encoding/decoding of .jj/working_copy/tree_state file using protobuf.\n * This file tracks the working copy tree and file states.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJTreeState {\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'local_working_copy.proto');\n }\n\n /**\n * Write tree_state file\n *\n * @param {string} treeId - Tree ID as hex string (40 characters for SHA-1)\n * @param {Array} fileStates - Array of file state objects\n */\n async writeTreeState(treeId, fileStates = []) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const TreeState = root.lookupType('local_working_copy.TreeState');\n\n // Convert hex tree ID to bytes\n const treeIdBuffer = Buffer.from(treeId, 'hex');\n\n // Convert file states to protobuf format\n const fileStateEntries = fileStates.map(fs => ({\n path: fs.path,\n state: {\n mtimeMillisSinceEpoch: fs.mtime, // Use camelCase for protobufjs\n size: fs.size,\n fileType: fs.fileType || 0 // 0 = Normal\n }\n }));\n\n // Create message (use camelCase for protobufjs)\n const message = TreeState.create({\n treeIds: [treeIdBuffer], // Single tree ID (no conflicts)\n fileStates: fileStateEntries,\n isFileStatesSorted: false, // We don't sort them\n sparsePatterns: {\n prefixes: [] // No sparse patterns\n }\n });\n\n // Verify the message\n const errMsg = TreeState.verify(message);\n if (errMsg) {\n throw new Error(`TreeState message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = TreeState.encode(message).finish();\n\n // Write to .jj/working_copy/tree_state\n const treeStatePath = `${this.dir}/.jj/working_copy/tree_state`;\n await this.fs.promises.writeFile(treeStatePath, buffer);\n }\n\n /**\n * Read tree_state file\n *\n * @returns {Object} Decoded tree state data\n */\n async readTreeState() {\n const treeStatePath = `${this.dir}/.jj/working_copy/tree_state`;\n const buffer = await this.fs.promises.readFile(treeStatePath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const TreeState = root.lookupType('local_working_copy.TreeState');\n\n // Decode\n const message = TreeState.decode(buffer);\n\n // Return the decoded message with proper field access\n return {\n tree_ids: message.treeIds,\n file_states: message.fileStates,\n is_file_states_sorted: message.isFileStatesSorted,\n sparse_patterns: message.sparsePatterns\n };\n }\n}\n","/**\n * JJ Operation Store Manager\n *\n * Handles encoding/decoding of .jj/repo/op_store/operations/* files using protobuf.\n * Operations track the history of changes to the repository.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJOperationStore {\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'simple_op_store.proto');\n }\n\n /**\n * Write operation file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @param {string} viewId - View ID as hex string (128 characters)\n * @param {Array<string>} parentIds - Parent operation IDs as hex strings\n * @param {Object} metadata - Operation metadata\n */\n async writeOperation(operationId, viewId, parentIds, metadata) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Operation = root.lookupType('simple_op_store.Operation');\n\n // Convert hex IDs to bytes\n const viewIdBuffer = Buffer.from(viewId, 'hex');\n const parentBuffers = parentIds.map(id => Buffer.from(id, 'hex'));\n\n // Create metadata message (use camelCase for protobufjs)\n const metadataMsg = {\n startTime: {\n millisSinceEpoch: metadata.start_time.millis_since_epoch,\n tzOffset: metadata.start_time.tz_offset\n },\n endTime: {\n millisSinceEpoch: metadata.end_time.millis_since_epoch,\n tzOffset: metadata.end_time.tz_offset\n },\n description: metadata.description,\n hostname: metadata.hostname,\n username: metadata.username,\n isSnapshot: metadata.is_snapshot,\n tags: metadata.tags\n };\n\n // Create operation message (use camelCase for protobufjs)\n const message = Operation.create({\n viewId: viewIdBuffer,\n parents: parentBuffers,\n metadata: metadataMsg,\n commitPredecessors: [], // Empty for now\n storesCommitPredecessors: false\n });\n\n // Verify the message\n const errMsg = Operation.verify(message);\n if (errMsg) {\n throw new Error(`Operation message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = Operation.encode(message).finish();\n\n // Write to .jj/repo/op_store/operations/OPERATIONID\n const opPath = `${this.dir}/.jj/repo/op_store/operations/${operationId}`;\n await this.fs.promises.writeFile(opPath, buffer);\n }\n\n /**\n * Read operation file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @returns {Object} Decoded operation data\n */\n async readOperation(operationId) {\n // Read from .jj/repo/op_store/operations/OPERATIONID\n const opPath = `${this.dir}/.jj/repo/op_store/operations/${operationId}`;\n const buffer = await this.fs.promises.readFile(opPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Operation = root.lookupType('simple_op_store.Operation');\n\n // Decode\n const message = Operation.decode(buffer);\n\n // Return the decoded message with proper field access\n return {\n view_id: message.viewId,\n parents: message.parents,\n metadata: {\n start_time: {\n millis_since_epoch: message.metadata.startTime.millisSinceEpoch,\n tz_offset: message.metadata.startTime.tzOffset\n },\n end_time: {\n millis_since_epoch: message.metadata.endTime.millisSinceEpoch,\n tz_offset: message.metadata.endTime.tzOffset\n },\n description: message.metadata.description,\n hostname: message.metadata.hostname,\n username: message.metadata.username,\n is_snapshot: message.metadata.isSnapshot,\n tags: message.metadata.tags\n },\n commit_predecessors: message.commitPredecessors,\n stores_commit_predecessors: message.storesCommitPredecessors\n };\n }\n}\n","/**\n * JJ View Store Manager\n *\n * Handles encoding/decoding of .jj/repo/op_store/views/* files using protobuf.\n * Views represent the state of the repository at a given operation.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJViewStore {\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'simple_op_store.proto');\n }\n\n /**\n * Write view file\n *\n * @param {string} viewId - View ID as hex string (128 characters)\n * @param {Array<string>} headIds - Head commit IDs as hex strings\n * @param {Object} wcCommitIds - Working copy commit IDs by workspace name\n */\n async writeView(viewId, headIds, wcCommitIds = {}) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const View = root.lookupType('simple_op_store.View');\n\n // Convert hex IDs to bytes\n const headBuffers = headIds.map(id => Buffer.from(id, 'hex'));\n\n // Convert wcCommitIds object to map\n const wcCommitIdsMap = {};\n for (const [workspace, commitId] of Object.entries(wcCommitIds)) {\n wcCommitIdsMap[workspace] = Buffer.from(commitId, 'hex');\n }\n\n // Create view message (use camelCase for protobufjs)\n const message = View.create({\n headIds: headBuffers,\n wcCommitIds: wcCommitIdsMap,\n bookmarks: [],\n localTags: [],\n remoteViews: [],\n gitRefs: [],\n gitHead: null,\n hasGitRefsMigratedToRemoteTags: false\n });\n\n // Verify the message\n const errMsg = View.verify(message);\n if (errMsg) {\n throw new Error(`View message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = View.encode(message).finish();\n\n // Write to .jj/repo/op_store/views/VIEWID\n const viewPath = `${this.dir}/.jj/repo/op_store/views/${viewId}`;\n await this.fs.promises.writeFile(viewPath, buffer);\n }\n\n /**\n * Read view file\n *\n * @param {string} viewId - View ID as hex string (128 characters)\n * @returns {Object} Decoded view data\n */\n async readView(viewId) {\n // Read from .jj/repo/op_store/views/VIEWID\n const viewPath = `${this.dir}/.jj/repo/op_store/views/${viewId}`;\n const buffer = await this.fs.promises.readFile(viewPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const View = root.lookupType('simple_op_store.View');\n\n // Decode\n const message = View.decode(buffer);\n\n // Convert wcCommitIds map back to object\n const wcCommitIds = {};\n for (const [workspace, commitIdBuffer] of Object.entries(message.wcCommitIds || {})) {\n wcCommitIds[workspace] = commitIdBuffer;\n }\n\n // Return the decoded message with proper field access\n return {\n head_ids: message.headIds,\n wc_commit_ids: wcCommitIds,\n bookmarks: message.bookmarks,\n local_tags: message.localTags,\n remote_views: message.remoteViews,\n git_refs: message.gitRefs,\n git_head: message.gitHead,\n has_git_refs_migrated_to_remote_tags: message.hasGitRefsMigratedToRemoteTags\n };\n }\n}\n","/**\n * isomorphic-git Backend Adapter\n *\n * Provides real Git object storage using isomorphic-git library.\n * Implements the JJBackend interface for Git interoperability.\n */\n\nimport git from 'isomorphic-git';\nimport { JJError } from '../utils/errors.js';\nimport { JJCheckout } from '../core/jj-checkout.js';\nimport { JJTreeState } from '../core/jj-tree-state.js';\nimport { JJOperationStore } from '../core/jj-operation-store.js';\nimport { JJViewStore } from '../core/jj-view-store.js';\nimport crypto from 'crypto';\n\n/**\n * Backend adapter for isomorphic-git\n * \n * @class IsomorphicGitBackend\n */\nexport class IsomorphicGitBackend {\n /**\n * Create isomorphic-git backend\n * \n * @param {Object} options - Backend options\n * @param {Object} options.fs - Filesystem implementation (Node fs or LightningFS)\n * @param {Object} [options.http] - HTTP client for network operations\n * @param {string} options.dir - Repository directory path\n */\n constructor({ fs, http, dir }) {\n if (!fs) {\n throw new JJError(\n 'INVALID_BACKEND_CONFIG',\n 'Filesystem (fs) is required for isomorphic-git backend',\n { suggestion: 'Provide fs option (Node fs or LightningFS)' }\n );\n }\n if (!dir) {\n throw new JJError(\n 'INVALID_BACKEND_CONFIG',\n 'Repository directory (dir) is required',\n { suggestion: 'Provide dir option with repository path' }\n );\n }\n\n this.fs = fs;\n this.http = http;\n this.dir = dir;\n }\n\n /**\n * Initialize Git repository\n *\n * @param {Object} opts - Init options\n * @param {string} [opts.defaultBranch='main'] - Default branch name\n * @returns {Promise<void>}\n */\n async init(opts = {}) {\n try {\n await git.init({\n fs: this.fs,\n dir: this.dir,\n defaultBranch: opts.defaultBranch || 'main',\n });\n\n // Create .jj/repo structure for jj CLI compatibility\n await this._createJJRepoStructure();\n\n } catch (error) {\n throw new JJError(\n 'INIT_FAILED',\n `Failed to initialize Git repository: ${error.message}`,\n { dir: this.dir, originalError: error }\n );\n }\n }\n\n /**\n * Read Git object from storage\n * \n * @param {string} oid - Git object SHA-1 hash (40-char hex)\n * @returns {Promise<{type: string, data: Uint8Array}>} Git object\n */\n async getObject(oid) {\n try {\n const { type, object } = await git.readObject({\n fs: this.fs,\n dir: this.dir,\n oid,\n });\n return { type, data: object };\n } catch (error) {\n if (error.code === 'NotFoundError' || error.code === 'ReadObjectFail') {\n throw new JJError(\n 'NOT_FOUND',\n `Git object ${oid} not found`,\n { oid, suggestion: 'Ensure object exists in repository' }\n );\n }\n throw new JJError(\n 'STORAGE_READ_FAILED',\n `Failed to read Git object: ${error.message}`,\n { oid, originalError: error }\n );\n }\n }\n\n /**\n * Write Git object to storage\n * \n * @param {string} type - Object type ('blob', 'tree', 'commit', 'tag')\n * @param {Uint8Array} data - Object data\n * @returns {Promise<string>} Object SHA-1 hash\n */\n async putObject(type, data) {\n try {\n const oid = await git.writeObject({\n fs: this.fs,\n dir: this.dir,\n type,\n object: data,\n });\n return oid;\n } catch (error) {\n throw new JJError(\n 'STORAGE_WRITE_FAILED',\n `Failed to write Git object: ${error.message}`,\n { type, dataSize: data.length, originalError: error }\n );\n }\n }\n\n /**\n * Read Git reference\n * \n * @param {string} name - Full ref name (e.g., 'refs/heads/main')\n * @returns {Promise<string|null>} Commit SHA-1 or null if not found\n */\n async readRef(name) {\n try {\n const oid = await git.resolveRef({\n fs: this.fs,\n dir: this.dir,\n ref: name,\n });\n return oid;\n } catch (error) {\n if (error.code === 'NotFoundError' || error.code === 'ResolveRefError') {\n return null;\n }\n throw new JJError(\n 'STORAGE_READ_FAILED',\n `Failed to read Git ref: ${error.message}`,\n { ref: name, originalError: error }\n );\n }\n }\n\n /**\n * Create, update, or delete Git reference\n * \n * @param {string} name - Full ref name\n * @param {string|null} oid - Commit SHA-1 or null to delete\n * @returns {Promise<void>}\n */\n async updateRef(name, oid) {\n try {\n if (oid === null) {\n // Delete ref\n const refPath = `${this.dir}/.git/${name}`;\n try {\n await this.fs.promises.unlink(refPath);\n } catch (error) {\n // Ignore if ref doesn't exist\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n } else {\n // Create or update ref\n await git.writeRef({\n fs: this.fs,\n dir: this.dir,\n ref: name,\n value: oid,\n force: true,\n });\n }\n } catch (error) {\n throw new JJError(\n 'STORAGE_WRITE_FAILED',\n `Failed to update Git ref: ${error.message}`,\n { ref: name, oid, originalError: error }\n );\n }\n }\n\n /**\n * List Git references\n * \n * @param {string} [prefix=''] - Ref prefix filter\n * @returns {Promise<Array<{name: string, oid: string}>>} List of refs\n */\n async listRefs(prefix = '') {\n try {\n // Use expandRef to get all possible refs\n const result = [];\n const refDirs = ['refs/heads', 'refs/tags', 'refs/remotes'];\n \n for (const refDir of refDirs) {\n if (prefix && !refDir.startsWith(prefix) && !prefix.startsWith(refDir)) {\n continue;\n }\n \n try {\n const dirPath = `${this.dir}/.git/${refDir}`;\n const entries = await this.fs.promises.readdir(dirPath, { recursive: true });\n \n for (const entry of entries) {\n const refName = `${refDir}/${entry}`;\n if (prefix && !refName.startsWith(prefix)) {\n continue;\n }\n \n try {\n const oid = await this.readRef(refName);\n if (oid) {\n result.push({ name: refName, oid });\n }\n } catch (e) {\n // Skip refs that can't be read\n }\n }\n } catch (e) {\n // Directory doesn't exist, skip\n }\n }\n \n return result.sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n throw new JJError(\n 'STORAGE_READ_FAILED',\n `Failed to list Git refs: ${error.message}`,\n { prefix, originalError: error }\n );\n }\n }\n\n /**\n * Create a Git commit from working directory state\n *\n * @param {Object} opts - Commit options\n * @param {string} opts.message - Commit message\n * @param {Object} opts.author - Author info\n * @param {string} opts.author.name - Author name\n * @param {string} opts.author.email - Author email\n * @param {number} [opts.author.timestamp] - Author timestamp (milliseconds since epoch)\n * @param {Object} [opts.committer] - Committer info (defaults to author)\n * @param {string[]} [opts.parents=[]] - Parent commit SHAs\n * @returns {Promise<string>} Commit SHA\n */\n async createCommit(opts) {\n try {\n const author = {\n name: opts.author.name,\n email: opts.author.email,\n timestamp: opts.author.timestamp ? Math.floor(opts.author.timestamp / 1000) : Math.floor(Date.now() / 1000),\n timezoneOffset: 0,\n };\n\n const committer = opts.committer ? {\n name: opts.committer.name,\n email: opts.committer.email,\n timestamp: opts.committer.timestamp ? Math.floor(opts.committer.timestamp / 1000) : author.timestamp,\n timezoneOffset: 0,\n } : author;\n\n const commitSha = await git.commit({\n fs: this.fs,\n dir: this.dir,\n message: opts.message,\n author,\n committer,\n parent: opts.parents || [],\n });\n\n return commitSha;\n } catch (error) {\n throw new JJError(\n 'COMMIT_FAILED',\n `Failed to create Git commit: ${error.message}`,\n { message: opts.message, originalError: error }\n );\n }\n }\n\n /**\n * Get the current tree SHA for the working directory\n *\n * @returns {Promise<string>} Tree SHA\n */\n async getCurrentTree() {\n try {\n // Get the current staging area tree\n // This will create tree objects from the current working directory\n const tree = await git.writeTree({\n fs: this.fs,\n dir: this.dir,\n });\n return tree;\n } catch (error) {\n throw new JJError(\n 'TREE_READ_FAILED',\n `Failed to get current tree: ${error.message}`,\n { originalError: error }\n );\n }\n }\n\n /**\n * Stage all files in the working directory\n *\n * @returns {Promise<void>}\n */\n async stageAll() {\n try {\n // Get all files in the directory\n const files = await this._getAllFiles(this.dir);\n\n // Add each file to the index\n for (const filepath of files) {\n try {\n await git.add({\n fs: this.fs,\n dir: this.dir,\n filepath,\n });\n } catch (error) {\n // Skip files that can't be staged (like .git directory)\n if (error.code !== 'ENOENT') {\n throw new JJError(\n 'STAGE_FILE_FAILED',\n `Could not stage ${filepath}: ${error.message}`,\n { filepath, originalError: error.message }\n );\n }\n }\n }\n } catch (error) {\n throw new JJError(\n 'STAGE_FAILED',\n `Failed to stage files: ${error.message}`,\n { originalError: error }\n );\n }\n }\n\n /**\n * Get all files in a directory recursively (helper method)\n *\n * @private\n * @param {string} dir - Directory path\n * @param {string} [baseDir=''] - Base directory for relative paths\n * @returns {Promise<string[]>} Array of relative file paths\n */\n async _getAllFiles(dir, baseDir = '') {\n const files = [];\n const entries = await this.fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const name = entry.name || entry;\n const fullPath = `${dir}/${name}`;\n const relativePath = baseDir ? `${baseDir}/${name}` : name;\n\n // Skip .git and .jj directories\n if (name === '.git' || name === '.jj') {\n continue;\n }\n\n try {\n const stats = await this.fs.promises.stat(fullPath);\n if (stats.isDirectory && stats.isDirectory()) {\n // Recurse into subdirectories\n const subFiles = await this._getAllFiles(fullPath, relativePath);\n files.push(...subFiles);\n } else if (stats.isFile && stats.isFile()) {\n files.push(relativePath);\n } else {\n // For simple objects without methods\n const isDir = (await this.fs.promises.readdir(fullPath).catch(() => null)) !== null;\n if (isDir) {\n const subFiles = await this._getAllFiles(fullPath, relativePath);\n files.push(...subFiles);\n } else {\n files.push(relativePath);\n }\n }\n } catch (error) {\n // Skip files we can't read\n continue;\n }\n }\n\n return files;\n }\n\n /**\n * Fetch objects and refs from remote repository\n *\n * @param {Object} opts - Fetch options\n * @param {string} opts.remote - Remote name or URL\n * @param {string[]} [opts.refs] - Ref specs to fetch\n * @param {number} [opts.depth] - Create a shallow clone with history truncated to depth (v0.4)\n * @param {boolean} [opts.relative] - Depth measured from current shallow depth (v0.4)\n * @param {boolean} [opts.singleBranch] - Only fetch single branch (v0.4)\n * @param {boolean} [opts.noTags] - Don't fetch tags (v0.4)\n * @param {Function} [opts.onProgress] - Progress callback\n * @param {Function} [opts.onAuth] - Authentication callback\n * @returns {Promise<{fetchedRefs: Array, updatedRefs: Array}>} Fetch result\n */\n async fetch(opts) {\n if (!this.http) {\n throw new JJError(\n 'NETWORK_NOT_AVAILABLE',\n 'HTTP client not provided - network operations unavailable',\n { suggestion: 'Provide http option when creating backend' }\n );\n }\n\n try {\n const fetchedRefs = [];\n const updatedRefs = [];\n\n // Fetch each ref spec (isomorphic-git fetches one at a time)\n const refsToFetch = opts.refs || ['HEAD'];\n for (const ref of refsToFetch) {\n await git.fetch({\n fs: this.fs,\n http: this.http,\n dir: this.dir,\n remote: opts.remote,\n ref,\n depth: opts.depth, // v0.4: Shallow clone support\n relative: opts.relative, // v0.4: Relative depth\n singleBranch: opts.singleBranch, // v0.4: Single branch only\n tags: opts.noTags === true ? false : undefined, // v0.4: Skip tags\n onProgress: opts.onProgress,\n onAuth: opts.onAuth,\n });\n\n // Track fetched ref\n const remoteRef = `refs/remotes/${opts.remote}/${ref.replace('refs/heads/', '')}`;\n const oid = await this.readRef(remoteRef);\n if (oid) {\n fetchedRefs.push({ name: remoteRef, oid });\n updatedRefs.push(remoteRef);\n }\n }\n\n return { fetchedRefs, updatedRefs };\n } catch (error) {\n if (error.code === 'HttpError' || error.code === 'NetworkError') {\n throw new JJError(\n 'NETWORK_ERROR',\n `Network error during fetch: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n if (error.code === 'AuthError') {\n throw new JJError(\n 'AUTH_FAILED',\n `Authentication failed: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n throw new JJError(\n 'FETCH_FAILED',\n `Fetch failed: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n }\n\n /**\n * Push objects and refs to remote repository\n * \n * @param {Object} opts - Push options\n * @param {string} opts.remote - Remote name or URL\n * @param {string[]} [opts.refs] - Ref specs to push\n * @param {boolean} [opts.force] - Allow non-fast-forward\n * @param {Function} [opts.onProgress] - Progress callback\n * @param {Function} [opts.onAuth] - Authentication callback\n * @returns {Promise<{pushedRefs: Array, rejectedRefs: Array}>} Push result\n */\n async push(opts) {\n if (!this.http) {\n throw new JJError(\n 'NETWORK_NOT_AVAILABLE',\n 'HTTP client not provided - network operations unavailable',\n { suggestion: 'Provide http option when creating backend' }\n );\n }\n\n try {\n const pushedRefs = [];\n const rejectedRefs = [];\n\n // Push each ref spec (isomorphic-git pushes one at a time)\n const refsToPush = opts.refs || [];\n for (const ref of refsToPush) {\n try {\n await git.push({\n fs: this.fs,\n http: this.http,\n dir: this.dir,\n remote: opts.remote,\n ref,\n force: opts.force || false,\n onProgress: opts.onProgress,\n onAuth: opts.onAuth,\n });\n\n // Track pushed ref\n const oid = await this.readRef(ref);\n if (oid) {\n pushedRefs.push({ name: ref, oid });\n }\n } catch (pushError) {\n // Track rejected refs\n rejectedRefs.push(ref);\n }\n }\n\n return { pushedRefs, rejectedRefs };\n } catch (error) {\n if (error.code === 'HttpError' || error.code === 'NetworkError') {\n throw new JJError(\n 'NETWORK_ERROR',\n `Network error during push: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n if (error.code === 'AuthError') {\n throw new JJError(\n 'AUTH_FAILED',\n `Authentication failed: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n if (error.code === 'PushRejectedError') {\n throw new JJError(\n 'PUSH_REJECTED',\n `Push rejected (non-fast-forward): ${error.message}`,\n { remote: opts.remote, suggestion: 'Use force option or pull first', originalError: error }\n );\n }\n throw new JJError(\n 'PUSH_FAILED',\n `Push failed: ${error.message}`,\n { remote: opts.remote, originalError: error }\n );\n }\n }\n\n /**\n * Create minimal .jj/repo structure for jj CLI compatibility\n * @private\n */\n async _createJJRepoStructure() {\n const jjDir = `${this.dir}/.jj`;\n const jjRepo = `${jjDir}/repo`;\n\n // Create directory structure\n await this.fs.promises.mkdir(`${jjRepo}/store`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/store/extra/heads`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_store/operations`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_store/views`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_heads/heads`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/index`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/submodule_store`, { recursive: true });\n await this.fs.promises.mkdir(`${jjDir}/working_copy`, { recursive: true });\n\n // Write type files\n await this.fs.promises.writeFile(`${jjRepo}/store/type`, 'git');\n await this.fs.promises.writeFile(`${jjRepo}/store/git_target`, '../../../.git');\n await this.fs.promises.writeFile(`${jjRepo}/op_store/type`, 'simple_op_store');\n await this.fs.promises.writeFile(`${jjRepo}/op_heads/type`, 'simple_op_heads_store');\n await this.fs.promises.writeFile(`${jjRepo}/index/type`, 'default');\n await this.fs.promises.writeFile(`${jjRepo}/submodule_store/type`, 'default');\n await this.fs.promises.writeFile(`${jjDir}/working_copy/type`, 'local');\n\n // Create .jj/.gitignore to prevent git from tracking jj metadata\n await this.fs.promises.writeFile(`${jjDir}/.gitignore`, '/*\\n');\n\n // Add .jj to root .gitignore if it doesn't exist\n await this._ensureGitignore();\n\n // Create initial protobuf files for jj CLI compatibility\n await this._createInitialJJState();\n }\n\n /**\n * Create initial JJ state (protobuf files)\n * @private\n */\n async _createInitialJJState() {\n // Generate unique IDs for initial state\n const operationId = crypto.randomBytes(64).toString('hex'); // 512-bit = 128 hex chars\n const viewId = crypto.randomBytes(64).toString('hex');\n const emptyTreeId = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; // Git's empty tree hash\n\n // Get the initial commit from Git\n let initialCommitId = '0000000000000000000000000000000000000000';\n try {\n const headOid = await git.resolveRef({\n fs: this.fs,\n dir: this.dir,\n ref: 'HEAD',\n });\n if (headOid) {\n initialCommitId = crypto.randomBytes(64).toString('hex');\n }\n } catch (error) {\n // No initial commit yet\n }\n\n // Create checkout file\n const checkout = new JJCheckout(this.fs, this.dir);\n await checkout.writeCheckout(operationId, 'default');\n\n // Create tree_state file\n const treeState = new JJTreeState(this.fs, this.dir);\n await treeState.writeTreeState(emptyTreeId, []);\n\n // Create initial operation\n const opStore = new JJOperationStore(this.fs, this.dir);\n const metadata = {\n start_time: {\n millis_since_epoch: Date.now(),\n tz_offset: new Date().getTimezoneOffset()\n },\n end_time: {\n millis_since_epoch: Date.now(),\n tz_offset: new Date().getTimezoneOffset()\n },\n description: 'initialize repo',\n hostname: 'localhost',\n username: 'user',\n is_snapshot: false,\n tags: {}\n };\n await opStore.writeOperation(operationId, viewId, [], metadata);\n\n // Create initial view\n const viewStore = new JJViewStore(this.fs, this.dir);\n await viewStore.writeView(viewId, [initialCommitId], { default: initialCommitId });\n\n // Write operation head - the filename IS the operation ID\n const opHeadPath = `${this.dir}/.jj/repo/op_heads/heads/${operationId}`;\n await this.fs.promises.writeFile(opHeadPath, '');\n }\n\n /**\n * Ensure .gitignore has .jj/ entry\n * @private\n */\n async _ensureGitignore() {\n const gitignorePath = `${this.dir}/.gitignore`;\n let content = '';\n\n try {\n content = await this.fs.promises.readFile(gitignorePath, 'utf8');\n } catch (error) {\n if (error.code !== 'ENOENT') throw error;\n }\n\n // Check if .jj is already in .gitignore\n const lines = content.split('\\n');\n const hasJJ = lines.some(line => line.trim() === '.jj' || line.trim() === '.jj/');\n\n if (!hasJJ) {\n // Add .jj to .gitignore\n const newContent = content + (content && !content.endsWith('\\n') ? '\\n' : '') + '.jj/\\n';\n await this.fs.promises.writeFile(gitignorePath, newContent);\n }\n }\n}\n","/**\n * Repository API - Main factory function and repository operations\n */\n\nimport { Storage } from '../core/storage-manager.js';\nimport { ChangeGraph } from '../core/change-graph.js';\nimport { WorkingCopy } from '../core/working-copy.js';\nimport { OperationLog } from '../core/operation-log.js';\nimport { BookmarkStore } from '../core/bookmark-store.js';\nimport { TagStore } from '../core/tag-store.js';\nimport { RevsetEngine } from '../core/revset-engine.js';\nimport { ConflictModel } from '../core/conflict-model.js';\nimport { MergeDriverRegistry } from '../core/merge-driver-registry.js';\nimport { WorkspaceManager } from '../core/workspace-manager.js';\nimport { BackgroundOps } from '../core/background-ops.js';\nimport { UserConfig } from '../core/user-config.js';\nimport { IsomorphicGitBackend } from '../backend/isomorphic-git-backend.js';\nimport { JJError } from '../utils/errors.js';\nimport { generateChangeId } from '../utils/id-generation.js';\nimport path from 'path';\n\n/**\n * Create and initialize a JJ repository instance\n *\n * @param {Object} options - Configuration options\n * @param {Object} options.fs - Filesystem implementation (Node fs or LightningFS)\n * @param {string} options.dir - Repository directory path\n * @param {Object} [options.git] - isomorphic-git instance (enables Git backend)\n * @param {Object} [options.http] - HTTP client for network operations\n * @param {string|Object} [options.backend] - Backend name ('isomorphic-git', 'memory') or backend instance\n *\n * @returns {Promise<Object>} Initialized JJ instance\n */\nexport async function createJJ(options) {\n if (!options) {\n throw new JJError('INVALID_CONFIG', 'Missing configuration options', {\n suggestion: 'Provide { fs, dir, git?, http? }',\n });\n }\n\n const fs = options.fs;\n const dir = options.dir;\n const git = options.git;\n const http = options.http;\n const backend = options.backend;\n\n if (!fs) {\n throw new JJError('INVALID_CONFIG', 'Missing fs', {\n suggestion: 'Provide a filesystem implementation (Node fs, LightningFS, etc.)',\n });\n }\n\n if (!dir) {\n throw new JJError('INVALID_CONFIG', 'Missing dir', {\n suggestion: 'Provide a repository directory path',\n });\n }\n\n // Create core components\n const storage = new Storage(fs, dir);\n const baseGraph = new ChangeGraph(storage);\n const workingCopy = new WorkingCopy(storage, fs, dir);\n const oplog = new OperationLog(storage);\n const bookmarks = new BookmarkStore(storage);\n const tags = new TagStore(fs, `${dir}/.jj`);\n const mergeDrivers = new MergeDriverRegistry(); // v0.5: merge drivers\n const conflicts = new ConflictModel(storage, fs, mergeDrivers); // v0.5: pass registry\n const workspaces = new WorkspaceManager(storage, fs, dir);\n const userConfig = new UserConfig(storage);\n\n /**\n * Helper to get user info for oplog operations\n * @returns {Promise<import('../types').OperationUser>}\n */\n const getUserOplogInfo = async () => {\n await userConfig.load();\n const user = userConfig.getUser();\n return { name: user.name, email: user.email, hostname: 'localhost' };\n };\n\n /**\n * Helper to snapshot current filesystem state\n * This is called BEFORE every operation to enable undo\n * @returns {Promise<Record<string, string>>}\n */\n const snapshotFilesystem = async () => {\n /** @type {Record<string, string>} */\n const fileSnapshot = {};\n\n try {\n const trackedFiles = await workingCopy.listFiles();\n\n // Safeguards to prevent excessive memory usage\n const MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB per file\n const MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB total snapshot size\n let totalSnapshotSize = 0;\n\n for (const filePath of trackedFiles) {\n try {\n const fullPath = path.join(dir, filePath);\n const stats = await fs.promises.stat(fullPath);\n\n // Skip files that are too large\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Stop if total snapshot size would exceed limit\n if (totalSnapshotSize + stats.size > MAX_TOTAL_SIZE) {\n break;\n }\n\n const content = await fs.promises.readFile(fullPath, 'utf-8');\n fileSnapshot[filePath] = content;\n totalSnapshotSize += stats.size;\n } catch (error) {\n // Skip files that can't be read (binary, deleted, etc.)\n }\n }\n } catch (error) {\n // If we can't list files, return empty snapshot\n }\n\n return fileSnapshot;\n };\n\n /**\n * Helper to dispatch events with async listener support and error handling\n * Store listener errors in detail so we can check them after dispatch\n * @param {EventTarget} eventTarget\n * @param {string} eventName\n * @param {any} detail\n * @param {{ cancelable?: boolean }} [options]\n * @returns {Promise<void>}\n */\n const dispatchEventAsync = async (eventTarget, eventName, detail, options = {}) => {\n // Extend detail to track errors from listeners\n const enhancedDetail = {\n ...detail,\n __listenerError: null,\n };\n\n const event = new CustomEvent(eventName, {\n detail: enhancedDetail,\n cancelable: options.cancelable !== false, // Default to cancelable\n });\n\n // EventTarget swallows errors from listeners, so we need to wrap the original listeners\n // to catch errors. We'll use a temporary error-catching wrapper.\n const originalDispatch = eventTarget.dispatchEvent.bind(eventTarget);\n\n // Dispatch event - EventTarget will call all listeners synchronously\n const notCancelled = originalDispatch(event);\n\n // Check if a listener stored an error\n if (enhancedDetail.__listenerError) {\n throw enhancedDetail.__listenerError;\n }\n\n // Check if event was prevented (only relevant for cancelable events)\n if (!notCancelled && options.cancelable !== false) {\n throw new JJError(\n 'EVENT_CANCELLED',\n `Operation cancelled by ${eventName} event listener`,\n { eventName, detail }\n );\n }\n\n return event;\n };\n\n // Helper to sync a JJ change to a Git commit\n // In JJ, every change has a corresponding Git commit\n const syncChangeToGit = async (change) => {\n if (!gitBackend || !gitBackend.createCommit) {\n return; // No Git backend, skip\n }\n\n try {\n // Stage all files first\n if (gitBackend.stageAll) {\n await gitBackend.stageAll();\n }\n\n // Get parent commit IDs\n const parentCommitIds = [];\n await baseGraph.load();\n for (const parentChangeId of change.parents) {\n const parentChange = await baseGraph.getChange(parentChangeId);\n if (parentChange && parentChange.commitId && parentChange.commitId !== '0000000000000000000000000000000000000000') {\n parentCommitIds.push(parentChange.commitId);\n }\n }\n\n // Create the Git commit\n const commitSha = await gitBackend.createCommit({\n message: change.description,\n author: {\n name: change.author.name,\n email: change.author.email,\n timestamp: new Date(change.author.timestamp).getTime(),\n },\n committer: {\n name: change.committer.name,\n email: change.committer.email,\n timestamp: new Date(change.committer.timestamp).getTime(),\n },\n parents: parentCommitIds,\n });\n\n // Update the change with the Git commit ID (bypass middleware to avoid infinite loop)\n change.commitId = commitSha;\n await baseGraph.updateChange(change);\n } catch (error) {\n // Throw error - Git sync failures should not be silent\n throw new JJError(\n 'GIT_SYNC_FAILED',\n `Failed to sync change ${change.changeId.slice(0, 8)} to Git: ${error.message}`,\n {\n changeId: change.changeId,\n originalError: error.message,\n suggestion: 'Check Git backend configuration and repository state',\n }\n );\n }\n };\n\n /**\n * Create a middleware-wrapped graph that intercepts add/update operations\n * This allows pluggable backends without modifying core ChangeGraph logic\n */\n const createGraphWithMiddleware = (baseGraph, hooks) => {\n return {\n // Delegate all read operations directly to base graph\n load: () => baseGraph.load(),\n getChange: (changeId) => baseGraph.getChange(changeId),\n getAllChanges: () => baseGraph.getAll(), // Alias for compatibility\n getAll: () => baseGraph.getAll(), // Used by revset engine\n getAncestors: (changeId) => baseGraph.getAncestors(changeId),\n getDescendants: (changeId) => baseGraph.getDescendants(changeId),\n getParents: (changeId) => baseGraph.getParents(changeId),\n getChildren: (changeId) => baseGraph.getChildren(changeId),\n findChangeByCommitId: async (commitId) => {\n const changeId = baseGraph.findByCommitId(commitId);\n return changeId ? await baseGraph.getChange(changeId) : null;\n },\n\n // Wrap write operations with middleware hooks\n async addChange(change) {\n await baseGraph.addChange(change);\n if (hooks.onAddChange) {\n await hooks.onAddChange(change);\n }\n },\n\n async updateChange(change) {\n await baseGraph.updateChange(change);\n if (hooks.onUpdateChange) {\n await hooks.onUpdateChange(change);\n }\n },\n\n // Delegate other operations\n init: () => baseGraph.init(),\n };\n };\n\n // Create Git backend if specified\n // Auto-detect: if git instance provided, use isomorphic-git backend\n let gitBackend = null;\n if (git || backend === 'isomorphic-git' || backend === 'git') {\n gitBackend = new IsomorphicGitBackend({\n fs,\n dir,\n http,\n });\n } else if (backend && typeof backend === 'object') {\n // Custom backend instance provided\n gitBackend = backend;\n }\n\n // Wrap the base graph with middleware that syncs to Git\n // This allows us to support different backends in the future\n const graph = createGraphWithMiddleware(baseGraph, {\n onAddChange: async (change) => {\n // Sync new change to Git backend\n await syncChangeToGit(change);\n },\n onUpdateChange: async (change) => {\n // Sync updated change to Git backend\n await syncChangeToGit(change);\n },\n });\n\n // Create revset engine with the middleware-wrapped graph (v0.4: added bookmarkStore)\n const revset = new RevsetEngine(graph, workingCopy, userConfig, bookmarks);\n\n /**\n * Helper to resolve conflicts with different strategies (v0.5)\n *\n * @param {Object} conflict - Conflict object\n * @param {string} strategy - Resolution strategy ('ours', 'theirs', 'union')\n * @returns {string} Resolved content\n */\n function _resolveWithStrategy(conflict, strategy) {\n const ours = conflict.sides.left || '';\n const theirs = conflict.sides.right || '';\n\n switch (strategy) {\n case 'ours':\n return ours;\n case 'theirs':\n return theirs;\n case 'union':\n // Simple union - combine both sides\n return ours + theirs;\n default:\n throw new JJError('INVALID_STRATEGY', `Unknown resolution strategy: ${strategy}`, {\n strategy,\n suggestion: 'Use \"ours\", \"theirs\", or \"union\"',\n });\n }\n }\n\n // Create JJ instance (backgroundOps will be initialized after jj object is created)\n const jj = {\n storage,\n graph,\n workingCopy,\n oplog,\n bookmarks,\n revset,\n conflicts,\n workspaces,\n userConfig,\n mergeDrivers, // v0.5: expose merge driver registry\n backgroundOps: null, // Will be initialized below\n backend: gitBackend, // Expose backend for advanced users\n \n /**\n * Initialize a new JJ repository\n *\n * NOTE: This is a convenience alias. For Git-backed repos, prefer jj.git.init()\n * to match the JJ CLI semantics.\n */\n async init(opts = {}) {\n // If Git backend is available, delegate to jj.git.init()\n if (gitBackend) {\n return await jj.git.init(opts);\n }\n\n // Otherwise, initialize without Git backend (mock backend, etc.)\n await storage.init();\n\n // Initialize user config first\n await userConfig.init({\n userName: opts.userName,\n userEmail: opts.userEmail,\n });\n\n // Initialize components\n await graph.init();\n await oplog.init();\n await bookmarks.init();\n await conflicts.init();\n await workspaces.init();\n\n // Create root change\n const rootChangeId = generateChangeId();\n const user = userConfig.getUser();\n const rootChange = {\n changeId: rootChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(root)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(rootChange);\n await workingCopy.init(rootChangeId);\n\n // Record init operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: 'initialize repository',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [rootChangeId],\n workingCopy: rootChangeId,\n },\n });\n },\n\n /**\n * Write a file to the working copy\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path relative to repo root\n * @param {string|Uint8Array} args.data - File contents\n * @returns {Promise<Object>} File information including path, size, and mode\n */\n async write(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to write',\n });\n }\n\n if (args.data === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing data argument', {\n suggestion: 'Provide data to write to the file',\n });\n }\n\n const fullPath = `${dir}/${args.path}`;\n\n // Ensure directory exists\n const pathParts = args.path.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = `${dir}/${dirPath}`;\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write the file\n const data = typeof args.data === 'string'\n ? args.data\n : args.data;\n await fs.promises.writeFile(fullPath, data, 'utf8');\n\n // Track the file in working copy\n await workingCopy.load();\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(args.path, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n\n // Return useful information about the written file\n return {\n path: args.path,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n type: typeof args.data === 'string' ? 'text' : 'binary',\n };\n },\n\n /**\n * Read a file from the working copy or from a specific change\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path relative to repo root\n * @param {string} [args.changeId] - Change ID to read from (defaults to working copy)\n * @param {string} [args.encoding='utf-8'] - File encoding ('utf-8' or 'binary')\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async read(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to read',\n });\n }\n\n const encoding = args.encoding || 'utf-8';\n\n // Read from working copy if no changeId specified\n if (!args.changeId) {\n // Check sparse patterns\n await workingCopy.load();\n if (!workingCopy.matchesSparsePatterns(args.path)) {\n throw new JJError('FILE_NOT_IN_SPARSE', `File ${args.path} not in sparse checkout`, {\n path: args.path,\n suggestion: 'Add pattern to sparse checkout: jj.sparse.add({ patterns: [\"' + args.path + '\"] })',\n });\n }\n\n const fullPath = path.join(dir, args.path);\n try {\n if (encoding === 'utf-8' || encoding === 'utf8') {\n return await fs.promises.readFile(fullPath, 'utf-8');\n } else {\n return await fs.promises.readFile(fullPath);\n }\n } catch (error) {\n if (error.code === 'ENOENT') {\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in working copy`, {\n path: args.path,\n });\n }\n throw error;\n }\n }\n\n // Read from a specific change\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n // Try to read from fileSnapshot cache first\n if (change.fileSnapshot && change.fileSnapshot[args.path]) {\n const content = change.fileSnapshot[args.path];\n if (encoding === 'binary') {\n return new TextEncoder().encode(content);\n }\n return content;\n }\n\n // Fallback: read from Git if we have a commitId\n if (gitBackend && change.commitId && change.commitId !== '0000000000000000000000000000000000000000') {\n try {\n const git = (await import('isomorphic-git')).default;\n const { blob } = await git.readBlob({\n fs,\n dir,\n oid: change.commitId,\n filepath: args.path,\n });\n\n if (encoding === 'utf-8' || encoding === 'utf8') {\n return new TextDecoder().decode(blob);\n }\n return blob;\n } catch (error) {\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in change ${args.changeId}`, {\n path: args.path,\n changeId: args.changeId,\n originalError: error,\n });\n }\n }\n\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in change ${args.changeId}`, {\n path: args.path,\n changeId: args.changeId,\n suggestion: 'File not in snapshot cache and no Git commit available',\n });\n },\n\n /**\n * Alias for read() - matches jj CLI 'cat' command\n *\n * @param {Object} args - Arguments (same as read())\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async cat(args) {\n return await this.read(args);\n },\n\n /**\n * List files in the working copy or in a specific change\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.changeId] - Change ID to list files from (defaults to working copy)\n * @param {boolean} [args.recursive=false] - Include files in subdirectories (for future use)\n * @returns {Promise<Array<string>>} Array of file paths\n */\n async listFiles(args = {}) {\n // List working copy files if no changeId specified\n if (!args.changeId) {\n await workingCopy.load();\n return await workingCopy.listFiles();\n }\n\n // List files in a specific change\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n // Try fileSnapshot first\n if (change.fileSnapshot) {\n return Object.keys(change.fileSnapshot);\n }\n\n // Fallback: read from Git tree\n if (gitBackend && change.commitId && change.commitId !== '0000000000000000000000000000000000000000') {\n try {\n const git = (await import('isomorphic-git')).default;\n const { tree } = await git.readTree({\n fs,\n dir,\n oid: change.commitId,\n });\n\n return tree\n .filter(entry => entry.type === 'blob')\n .map(entry => entry.path);\n } catch (error) {\n throw new JJError('TREE_READ_FAILED', `Failed to read tree for change ${args.changeId}`, {\n changeId: args.changeId,\n originalError: error,\n });\n }\n }\n\n return [];\n },\n\n /**\n * Create a readable stream for a file (Node.js only)\n *\n * For large files, use streaming to avoid loading entire file into memory.\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path relative to repo root\n * @param {string} [args.changeId] - Change ID to read from (defaults to working copy)\n * @param {string} [args.encoding] - Optional encoding ('utf-8', etc.)\n * @returns {Promise<ReadableStream>} Readable stream\n * @throws {JJError} If not in Node.js environment or file not found\n */\n async readStream(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to read',\n });\n }\n\n // Check if we're in Node.js\n if (typeof process === 'undefined' || !fs.createReadStream) {\n throw new JJError('UNSUPPORTED_OPERATION', 'readStream() is only supported in Node.js', {\n suggestion: 'Use read() instead for browser environments',\n });\n }\n\n // Reading from working copy\n if (!args.changeId) {\n const fullPath = path.join(dir, args.path);\n try {\n const stream = fs.createReadStream(fullPath, args.encoding ? { encoding: args.encoding } : {});\n return stream;\n } catch (error) {\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in working copy`, {\n path: args.path,\n originalError: error.message,\n });\n }\n }\n\n // Reading from a specific change - for historical data, fall back to read()\n // Streaming from Git objects requires more complex implementation\n throw new JJError('UNSUPPORTED_OPERATION', 'Streaming from historical changes not yet supported', {\n suggestion: 'Use read({ path, changeId }) for historical file access, or readStream({ path }) for working copy',\n });\n },\n\n /**\n * Create a writable stream for a file (Node.js only)\n *\n * For large files, use streaming to avoid loading entire file into memory.\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path relative to repo root\n * @param {string} [args.encoding] - Optional encoding ('utf-8', etc.)\n * @returns {Promise<WritableStream>} Writable stream\n * @throws {JJError} If not in Node.js environment\n */\n async writeStream(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to write',\n });\n }\n\n // Check if we're in Node.js\n if (typeof process === 'undefined' || !fs.createWriteStream) {\n throw new JJError('UNSUPPORTED_OPERATION', 'writeStream() is only supported in Node.js', {\n suggestion: 'Use write() instead for browser environments',\n });\n }\n\n const fullPath = path.join(dir, args.path);\n\n // Ensure directory exists\n const pathParts = args.path.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Create writable stream\n const stream = fs.createWriteStream(fullPath, args.encoding ? { encoding: args.encoding } : {});\n\n // Track file when stream finishes\n stream.on('finish', async () => {\n try {\n await workingCopy.load();\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(args.path, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n } catch (error) {\n // Silently ignore - stream already finished, file tracking is best-effort\n // (Common in tests where temp directories are cleaned up quickly)\n }\n });\n\n return stream;\n },\n\n /**\n * Move/rename a file in the working copy OR move/rebase a change to a new parent\n *\n * This method is polymorphic and handles two distinct operations:\n *\n * 1. File operations (moving/renaming files):\n * - Signature: { from: string, to: string }\n * - Example: move({ from: 'old.js', to: 'new.js' })\n * - Moves a file in the working directory and updates tracking\n *\n * 2. History operations (rebasing changes):\n * - Signature: { changeId: ChangeID, newParent: ChangeID }\n * - OR: { from: ChangeID, to: ChangeID, paths: string[] }\n * - Example: move({ changeId: 'abc...', newParent: 'def...' })\n * - Rebases a change to have a different parent\n *\n * The method automatically detects which operation based on:\n * - Presence of `changeId`, `newParent`, or `paths` → history operation\n * - Presence of only `from` and `to` → file operation\n * - Change IDs are 32-character hex strings; file paths are not\n *\n * @param {Object} args - Arguments\n * @param {string} [args.from] - Source path or change ID\n * @param {string} [args.to] - Destination path or change ID\n * @param {string} [args.changeId] - Change ID to move (for history operations)\n * @param {string} [args.newParent] - New parent change ID (for history operations)\n * @param {string[]} [args.paths] - Paths to move between changes (for history operations)\n * @returns {Promise<Object>} Returns change object for history operations, file info for file operations\n */\n /**\n * Move a file in the working copy\n *\n * @param {Object} args - Move file arguments\n * @param {string} args.from - Source file path\n * @param {string} args.to - Destination file path\n * @returns {Promise<Object>} Operation result including from, to paths and file stats\n */\n async moveFile(args) {\n if (!args.from || typeof args.from !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid from path', {\n suggestion: 'Provide a valid source file path',\n provided: { from: args.from, type: typeof args.from },\n });\n }\n\n if (!args.to || typeof args.to !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid to path', {\n suggestion: 'Provide a valid destination file path',\n provided: { to: args.to, type: typeof args.to },\n });\n }\n\n // Prevent moving to the same location\n if (args.from === args.to) {\n throw new JJError('INVALID_OPERATION', 'Source and destination paths are the same', {\n path: args.from,\n suggestion: 'Specify a different destination path',\n });\n }\n\n // Prevent absolute paths\n if (args.from.startsWith('/') || args.to.startsWith('/')) {\n throw new JJError('INVALID_PATH', 'Absolute paths are not allowed', {\n suggestion: 'Use paths relative to the repository root',\n provided: { from: args.from, to: args.to },\n });\n }\n\n // Prevent parent directory traversal\n if (args.from.includes('..') || args.to.includes('..')) {\n throw new JJError('INVALID_PATH', 'Parent directory traversal (..) is not allowed', {\n suggestion: 'Use paths within the repository',\n provided: { from: args.from, to: args.to },\n });\n }\n\n const fromPath = `${dir}/${args.from}`;\n const toPath = `${dir}/${args.to}`;\n\n // Check if source file exists\n try {\n await fs.promises.stat(fromPath);\n } catch (error) {\n throw new JJError('FILE_NOT_FOUND', `Source file not found: ${args.from}`, {\n path: args.from,\n suggestion: 'Check that the source file exists',\n });\n }\n\n // Ensure destination directory exists\n const toDir = toPath.substring(0, toPath.lastIndexOf('/'));\n try {\n await fs.promises.mkdir(toDir, { recursive: true });\n } catch (error) {\n throw new JJError('FILE_SYSTEM_ERROR', `Failed to create destination directory: ${error.message}`, {\n path: toDir,\n error: error.message,\n });\n }\n\n // Move the file\n try {\n await fs.promises.rename(fromPath, toPath);\n } catch (error) {\n throw new JJError('FILE_SYSTEM_ERROR', `Failed to move file: ${error.message}`, {\n from: args.from,\n to: args.to,\n error: error.message,\n });\n }\n\n // Update working copy tracking\n await workingCopy.load();\n await workingCopy.untrackFile(args.from);\n const stats = await fs.promises.stat(toPath);\n await workingCopy.trackFile(args.to, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n\n return {\n from: args.from,\n to: args.to,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n };\n },\n\n /**\n * Move (rebase) a change to a new parent\n *\n * @param {Object} args - Move change arguments\n * @param {string} args.changeId - Change ID to move (also accepts 'from' or 'source')\n * @param {string} args.newParent - New parent change ID (also accepts 'to' or 'destination')\n * @returns {Promise<Object>} Updated change object\n */\n async moveChange(args) {\n await graph.load();\n\n // Support multiple parameter names for flexibility\n const changeId = args.changeId || args.from || args.source;\n const newParent = args.newParent || args.to || args.destination;\n\n if (!changeId || typeof changeId !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid changeId', {\n suggestion: 'Provide a valid changeId (32-character hex string) for history operations',\n provided: { changeId, type: typeof changeId },\n });\n }\n\n if (!newParent || typeof newParent !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid newParent', {\n suggestion: 'Provide a valid newParent change ID for history operations',\n provided: { newParent, type: typeof newParent },\n });\n }\n\n // Validate change ID format\n const changeIdPattern = /^[0-9a-f]{32}$/;\n if (!changeIdPattern.test(changeId)) {\n throw new JJError('INVALID_CHANGE_ID', `Invalid change ID format: ${changeId}`, {\n suggestion: 'Change IDs must be 32-character hex strings',\n provided: changeId,\n });\n }\n\n if (!changeIdPattern.test(newParent)) {\n throw new JJError('INVALID_CHANGE_ID', `Invalid new parent change ID format: ${newParent}`, {\n suggestion: 'Change IDs must be 32-character hex strings',\n provided: newParent,\n });\n }\n\n const change = await graph.getChange(changeId);\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`, {\n changeId,\n suggestion: 'Use log() to view available changes',\n });\n }\n\n // Validate new parent exists\n const newParentChange = await graph.getChange(newParent);\n if (!newParentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `New parent change ${newParent} not found`, {\n newParent,\n suggestion: 'Use log() to view available changes',\n });\n }\n\n // Prevent moving a change to itself\n if (changeId === newParent) {\n throw new JJError('INVALID_OPERATION', 'Cannot move a change to itself as parent', {\n changeId,\n suggestion: 'Specify a different change as the new parent',\n });\n }\n\n // TODO: Prevent creating cycles in the change graph\n // For now, we'll allow it but it should be validated\n\n // Update parent\n change.parents = [newParent];\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `move change ${changeId.slice(0, 8)} to ${newParent.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return change;\n },\n\n /**\n * @deprecated Use moveFile() for files or moveChange() for history operations\n * Move operation - delegates to moveFile or moveChange based on arguments\n */\n async move(args) {\n if (!args || typeof args !== 'object') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid arguments', {\n suggestion: 'Use moveFile({ from, to }) for files or moveChange({ changeId, newParent }) for history',\n });\n }\n\n // Detect operation type based on arguments\n const isHistoryOp = this._detectHistoryOperation(args);\n\n if (isHistoryOp) {\n return await this.moveChange(args);\n } else {\n return await this.moveFile(args);\n }\n },\n\n /**\n * Detect if move operation is for history (rebase) or files\n *\n * @private\n * @param {Object} args - Move arguments\n * @returns {boolean} True if history operation, false if file operation\n */\n _detectHistoryOperation(args) {\n // Explicit history operation indicators\n if (args.paths || args.changeId || args.newParent) {\n return true;\n }\n\n // If only from/to are present, check if they look like change IDs\n if (args.from && args.to && !args.changeId && !args.newParent && !args.paths) {\n // Change IDs are 32-character hex strings\n const changeIdPattern = /^[0-9a-f]{32}$/;\n const fromLooksLikeChangeId = changeIdPattern.test(args.from);\n const toLooksLikeChangeId = changeIdPattern.test(args.to);\n\n // If both look like change IDs, it's likely a history operation\n // However, we err on the side of file operations to be safe\n // Users should use explicit { changeId, newParent } for clarity\n if (fromLooksLikeChangeId && toLooksLikeChangeId) {\n // This is ambiguous - throw a helpful error\n throw new JJError('AMBIGUOUS_OPERATION',\n 'Ambiguous move operation: arguments look like change IDs', {\n suggestion: 'Use { changeId, newParent } for history operations or ensure file paths don\\'t match change ID pattern',\n args,\n });\n }\n\n return false; // Treat as file operation\n }\n\n return false;\n },\n\n /**\n * Remove a file from the working copy\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to remove\n * @returns {Promise<Object>} Information about the removed file\n */\n async remove(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to remove',\n });\n }\n\n const fullPath = `${dir}/${args.path}`;\n\n // Get file stats before removing\n const stats = await fs.promises.stat(fullPath);\n\n // Remove the file\n await fs.promises.unlink(fullPath);\n\n // Untrack from working copy\n await workingCopy.load();\n await workingCopy.untrackFile(args.path);\n\n // Return information about the removed file\n return {\n path: args.path,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n };\n },\n\n /**\n * Describe the working copy change\n */\n async describe(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Support describing specific revision (not just working copy)\n const targetChangeId = args.revision || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(targetChangeId);\n const user = userConfig.getUser();\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${targetChangeId} not found`, {\n changeId: targetChangeId,\n });\n }\n\n // Only snapshot filesystem if describing working copy\n const isWorkingCopy = targetChangeId === workingCopy.getCurrentChangeId();\n const fileSnapshotBefore = isWorkingCopy ? await snapshotFilesystem() : null;\n\n // Dispatch change:updating event (preventable)\n await dispatchEventAsync(jj, 'change:updating', {\n operation: 'describe',\n changeId: targetChangeId,\n change,\n message: args.message,\n timestamp: new Date().toISOString(),\n });\n\n // Update description\n if (args.message !== undefined) {\n change.description = args.message;\n change.timestamp = new Date().toISOString();\n }\n\n // Update metadata\n if (args.metadata !== undefined) {\n change.metadata = args.metadata;\n }\n\n // Only snapshot files if describing working copy AND preserveSnapshot is not true\n if (isWorkingCopy && !args.preserveSnapshot) {\n // Snapshot current file contents for conflict detection\n // This allows us to load file contents during merge/rebase\n const fileSnapshot = {};\n const trackedFiles = await workingCopy.listFiles();\n\n // Safeguards to prevent excessive memory usage\n const MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB per file\n const MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB total snapshot size\n let totalSnapshotSize = 0;\n\n for (const filePath of trackedFiles) {\n try {\n const fullPath = path.join(dir, filePath);\n const stats = await fs.promises.stat(fullPath);\n\n // Skip files that are too large (silently - this is an optimization)\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Stop if total snapshot size would exceed limit (silently - optimization)\n if (totalSnapshotSize + stats.size > MAX_TOTAL_SIZE) {\n break;\n }\n\n const content = await fs.promises.readFile(fullPath, 'utf-8');\n fileSnapshot[filePath] = content;\n totalSnapshotSize += stats.size;\n } catch (error) {\n // Throw on file read errors - don't silently skip\n throw new JJError(\n 'SNAPSHOT_FILE_FAILED',\n `Could not snapshot file ${filePath}: ${error.message}`,\n { filePath, originalError: error.message, suggestion: 'File may be binary, deleted, or inaccessible' }\n );\n }\n }\n change.fileSnapshot = fileSnapshot;\n }\n\n // Save the updated change (middleware will sync to Git)\n await graph.updateChange(change);\n\n // Record operation with filesystem snapshot from BEFORE operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `describe change ${targetChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [targetChangeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n fileSnapshot: fileSnapshotBefore, // Store filesystem state from before operation\n },\n });\n\n // Dispatch change:updated event (informational)\n await dispatchEventAsync(jj, 'change:updated', {\n operation: 'describe',\n changeId: targetChangeId,\n change,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n return change;\n },\n\n /**\n * Edit change metadata without modifying content\n *\n * Allows updating author, committer, description, and optionally regenerating the change ID.\n * The file content and snapshot remain unchanged.\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.revision] - Change ID to edit (defaults to working copy @)\n * @param {string} [args.change] - Alias for revision\n * @param {string} [args.description] - Update the change description\n * @param {string} [args.message] - Alias for description\n * @param {Object} [args.author] - Author information to update\n * @param {string} [args.author.name] - Author name\n * @param {string} [args.author.email] - Author email\n * @param {Object} [args.committer] - Committer information to update\n * @param {string} [args.committer.name] - Committer name\n * @param {string} [args.committer.email] - Committer email\n * @param {boolean} [args.resetChangeId=false] - Generate new change ID\n * @returns {Promise<Object>} Updated change object\n */\n async metaedit(args = {}) {\n // Normalize: accept 'change' as alias for 'revision'\n if (args.change && !args.revision) {\n args = { ...args, revision: args.change };\n }\n\n // Normalize: accept 'message' as alias for 'description'\n if (args.message && !args.description) {\n args = { ...args, description: args.message };\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Determine which change to edit\n const changeId = args.revision || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(changeId);\n const user = userConfig.getUser();\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Validate that at least one metadata field is being updated\n const hasAuthor = args.author && (args.author.name || args.author.email);\n const hasCommitter = args.committer && (args.committer.name || args.committer.email);\n const hasResetChangeId = args.resetChangeId === true;\n const hasDescription = args.description !== undefined;\n\n if (!hasAuthor && !hasCommitter && !hasResetChangeId && !hasDescription) {\n throw new JJError(\n 'INVALID_ARGUMENT',\n 'No metadata provided to update',\n {\n suggestion: 'Provide author, committer, description, or resetChangeId: true',\n }\n );\n }\n\n // Store old change ID for potential regeneration\n const oldChangeId = change.changeId;\n\n // Update author if provided\n if (args.author) {\n if (!change.author) {\n change.author = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n }\n if (args.author.name !== undefined) {\n change.author.name = args.author.name;\n }\n if (args.author.email !== undefined) {\n change.author.email = args.author.email;\n }\n // Update timestamp to reflect the metadata change\n change.author.timestamp = new Date().toISOString();\n }\n\n // Update committer if provided\n if (args.committer) {\n if (!change.committer) {\n change.committer = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n }\n if (args.committer.name !== undefined) {\n change.committer.name = args.committer.name;\n }\n if (args.committer.email !== undefined) {\n change.committer.email = args.committer.email;\n }\n change.committer.timestamp = new Date().toISOString();\n }\n\n // Update description if provided\n if (args.description !== undefined) {\n change.description = args.description;\n }\n\n // Regenerate change ID if requested\n if (args.resetChangeId) {\n // For now, resetChangeId is not fully implemented as it requires complex graph operations\n // Future implementation would need to handle:\n // - Updating all children to point to new change ID\n // - Updating all bookmarks pointing to old change ID\n // - Updating operation log references\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'resetChangeId is not yet implemented',\n {\n feature: 'metaedit resetChangeId',\n reason: 'Requires complex graph manipulation to update all references',\n suggestion: 'Create a new change with desired metadata instead',\n }\n );\n }\n\n // Update the existing change\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `metaedit change ${changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [changeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return change;\n },\n\n /**\n * Create a new change\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.message] - Initial description for the new change\n * @param {string|string[]} [args.parents] - Parent change ID(s), supports merge commits\n * @param {string} [args.from] - Single parent (backward compat)\n * @param {string} [args.insertAfter] - Insert after this change\n * @param {string} [args.insertBefore] - Insert before this change\n * @returns {Promise<Object>} The new change object including changeId, description, parents, author, and timestamp\n */\n async new(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Snapshot filesystem BEFORE operation (for undo) unless preserveSnapshot is true\n let fileSnapshot;\n if (!args.preserveSnapshot) {\n fileSnapshot = await snapshotFilesystem();\n\n // Update current working copy change with the file snapshot\n // This ensures files written before jj.new() are captured\n const currentChangeId = workingCopy.getCurrentChangeId();\n const currentChange = await graph.getChange(currentChangeId);\n if (currentChange && fileSnapshot) {\n currentChange.fileSnapshot = fileSnapshot;\n await graph.updateChange(currentChange);\n }\n }\n\n // Determine parents\n let parents;\n if (args.insertAfter) {\n parents = [args.insertAfter];\n } else if (args.insertBefore) {\n const targetChange = await graph.getChange(args.insertBefore);\n if (!targetChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.insertBefore} not found`);\n }\n parents = targetChange.parents;\n } else if (args.parents) {\n parents = Array.isArray(args.parents) ? args.parents : [args.parents];\n } else if (args.from) {\n parents = [args.from];\n } else {\n parents = [workingCopy.getCurrentChangeId()];\n }\n\n const newChangeId = generateChangeId();\n const user = userConfig.getUser();\n\n // Initialize with parent's file snapshot\n let initialSnapshot = {};\n if (parents && parents.length > 0) {\n const parent = await graph.getChange(parents[0]);\n if (parent && parent.fileSnapshot) {\n initialSnapshot = { ...parent.fileSnapshot };\n }\n }\n\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000', // Placeholder\n parents: parents,\n tree: '0000000000000000000000000000000000000000', // Empty tree\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: args.message || '(no description)',\n timestamp: new Date().toISOString(),\n fileSnapshot: initialSnapshot, // Initialize with parent's snapshot\n };\n\n // Dispatch change:creating event (preventable)\n await dispatchEventAsync(jj, 'change:creating', {\n operation: 'new',\n changeId: newChangeId,\n parents: parents,\n change: newChange,\n message: args.message,\n timestamp: new Date().toISOString(),\n });\n\n await graph.addChange(newChange); // Middleware will sync to Git\n\n // Handle insertBefore: rebase target to have new change as parent\n if (args.insertBefore) {\n const targetChange = await graph.getChange(args.insertBefore);\n targetChange.parents = [newChangeId];\n await graph.updateChange(targetChange);\n }\n\n await workingCopy.setCurrentChange(newChangeId);\n\n // Record operation with filesystem snapshot\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `new change ${newChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [newChangeId],\n workingCopy: newChangeId,\n fileSnapshot, // Store filesystem state before operation\n },\n });\n\n // Dispatch change:created event (informational)\n await dispatchEventAsync(jj, 'change:created', {\n operation: 'new',\n changeId: newChangeId,\n parents: parents,\n change: newChange,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n return newChange;\n },\n \n /**\n * Get working copy status\n */\n async status() {\n await graph.load();\n await workingCopy.load();\n await conflicts.load();\n\n const currentChangeId = workingCopy.getCurrentChangeId();\n const change = await graph.getChange(currentChangeId);\n const modified = await workingCopy.getModifiedFiles();\n // Only show unresolved conflicts in status\n const activeConflicts = conflicts.listConflicts({ resolved: false });\n\n return {\n workingCopy: change,\n modified,\n added: [],\n removed: [],\n conflicts: activeConflicts,\n };\n },\n\n /**\n * Get repository statistics and analytics\n *\n * @returns {Promise<Object>} Repository statistics\n */\n async stats() {\n await graph.load();\n await workingCopy.load();\n await oplog.load();\n await userConfig.load();\n await bookmarks.load();\n\n const all = graph.getAll();\n const ops = await oplog.list();\n const currentUser = userConfig.getUser();\n\n // Count by author\n const authorCounts = {};\n for (const change of all) {\n if (!change.abandoned && change.author) {\n const author = change.author.email || change.author.name;\n authorCounts[author] = (authorCounts[author] || 0) + 1;\n }\n }\n\n // Count files\n const allFiles = new Set();\n for (const change of all) {\n if (change.fileSnapshot) {\n for (const file of Object.keys(change.fileSnapshot)) {\n allFiles.add(file);\n }\n }\n }\n\n // Count merge commits\n const mergeCommits = all.filter(c => c.parents && c.parents.length > 1).length;\n\n // Count empty commits\n const emptyCommits = all.filter(c =>\n c.tree === '0000000000000000000000000000000000000000'\n ).length;\n\n // Count abandoned\n const abandonedCount = all.filter(c => c.abandoned).length;\n\n // My commits\n const myCommits = all.filter(c =>\n c.author && !c.abandoned &&\n (c.author.email === currentUser.email || c.author.name === currentUser.name)\n ).length;\n\n // Get bookmark statistics\n const allBookmarks = await bookmarks.list();\n const localBookmarks = allBookmarks.filter(b => !b.remote);\n const remoteBookmarks = allBookmarks.filter(b => b.remote);\n\n return {\n changes: {\n total: all.length,\n active: all.length - abandonedCount,\n abandoned: abandonedCount,\n merges: mergeCommits,\n empty: emptyCommits,\n mine: myCommits,\n byAuthor: authorCounts,\n },\n authors: {\n total: Object.keys(authorCounts).length,\n breakdown: authorCounts,\n },\n files: {\n total: allFiles.size,\n list: Array.from(allFiles).sort(),\n byExtension: {}, // Add file extension breakdown\n },\n bookmarks: {\n total: allBookmarks.length,\n local: localBookmarks.length,\n remote: remoteBookmarks.length,\n },\n operations: {\n total: ops.length,\n latest: ops[ops.length - 1]?.description || 'none',\n },\n currentUser: {\n name: currentUser.name,\n email: currentUser.email,\n },\n };\n },\n\n /**\n * View change history\n *\n * @param {Object} args - Arguments\n * @param {string} [args.revset='all()'] - Revset expression to filter changes\n * @param {number} [args.limit] - Maximum number of changes to return\n * @param {boolean} [args.count=false] - If true, return count instead of changes (v0.36.0)\n * @returns {Promise<Array|number>} Array of changes or count if args.count is true\n */\n async log(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const revsetExpr = args.revset || 'all()';\n const changeIds = await revset.evaluate(revsetExpr);\n\n // If count mode, return count early (v0.36.0 feature)\n if (args.count) {\n return changeIds.length;\n }\n\n let changes = [];\n for (const changeId of changeIds) {\n const change = await graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n\n // Sort by topological order (children before parents), then by timestamp\n // This matches jj's default log behavior\n changes.sort((a, b) => {\n // Primary: Topological order - children (descendants) before parents\n const aIsParentOfB = b.parents && b.parents.includes(a.changeId);\n const bIsParentOfA = a.parents && a.parents.includes(b.changeId);\n\n if (aIsParentOfB) return 1; // a is parent of b, so b comes first\n if (bIsParentOfA) return -1; // b is parent of a, so a comes first\n\n // Secondary: Sort by timestamp descending (newest first)\n const aTime = new Date(a.timestamp).getTime();\n const bTime = new Date(b.timestamp).getTime();\n return bTime - aTime;\n });\n\n // Apply limit if specified\n if (args.limit) {\n changes = changes.slice(0, args.limit);\n }\n\n return changes;\n },\n\n /**\n * Show detailed information about a specific change\n *\n * @param {Object} args - Arguments\n * @param {string} args.change - Change ID or revset to show\n * @returns {Promise<Object>} Detailed change information\n */\n async show(args) {\n if (!args || !args.change) {\n throw new JJError('INVALID_ARGUMENT', 'Missing change argument', {\n suggestion: 'Provide { change: changeId }'\n });\n }\n\n await graph.load();\n\n // Resolve revset if needed\n let changeId = args.change;\n if (args.change === '@') {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n } else {\n // Try to resolve as revset\n try {\n const changes = await revset.evaluate(args.change);\n if (changes.length > 0) {\n changeId = changes[0];\n }\n } catch {\n // Use as-is\n }\n }\n\n const change = await graph.getChange(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Get additional context\n const children = await graph.getChildren(change.changeId);\n await oplog.load();\n await bookmarks.load();\n\n // Find bookmarks pointing to this change\n const allBookmarks = await bookmarks.list();\n const changeBookmarks = allBookmarks\n .filter(b => b.target === change.changeId)\n .map(b => b.name);\n\n // Find operations that modified this change\n const ops = await oplog.list();\n const relatedOps = ops.filter(op =>\n op.view && (\n op.view.workingCopy === change.changeId ||\n (op.view.heads && op.view.heads.includes(change.changeId))\n )\n );\n\n return {\n ...change,\n children,\n bookmarks: changeBookmarks,\n operations: relatedOps.map(op => ({\n id: op.id,\n timestamp: op.timestamp,\n description: op.description,\n })),\n };\n },\n\n /**\n * Amend the working copy change\n *\n * @param {Object} args - Arguments\n * @param {string} [args.message] - New description message\n * @returns {Promise<Object>} Updated change\n */\n async amend(args = {}) {\n // Amend is essentially the same as describe in JJ\n return await this.describe(args);\n },\n\n /**\n * Convenience: describe current change and create new one (jj commit)\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.message] - Description for current change\n * @param {Object} [args.author] - Author for current change\n * @param {Object} [args.metadata] - Metadata to attach to the change\n * @returns {Promise<Object>} The newly created change\n */\n async commit(args = {}) {\n await this.describe({\n message: args.message,\n author: args.author,\n metadata: args.metadata,\n preserveSnapshot: args.preserveSnapshot\n });\n return await this.new({\n message: args.nextMessage,\n preserveSnapshot: args.preserveSnapshot\n });\n },\n\n /**\n * Edit a specific change (make it the working copy)\n *\n * @param {Object} args - Arguments\n * @param {string} args.changeId - Change ID to edit\n * @returns {Promise<Object>} Information about the edited change including changeId, description, and file count\n */\n async edit(args) {\n // Normalize: accept both 'change' and 'changeId' parameters\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n }\n\n if (!args || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing changeId argument', {\n suggestion: 'Provide a changeId (or change) to edit',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.changeId);\n const user = userConfig.getUser();\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n const previousChangeId = workingCopy.getCurrentChangeId();\n\n // CRITICAL FIX: Clean working directory BEFORE snapshotting to prevent cross-branch pollution\n // Remove files that don't belong to the current changeId before we snapshot it\n if (previousChangeId !== args.changeId) {\n const previousChange = await graph.getChange(previousChangeId);\n if (previousChange) {\n const previousSnapshot = previousChange.fileSnapshot || {};\n const workingDirFiles = await workingCopy.listFiles();\n\n // Delete files that exist in working dir but NOT in previous changeId's snapshot\n // This removes pollution from other branches that were previously checked out\n for (const filePath of workingDirFiles) {\n if (!previousSnapshot[filePath]) {\n try {\n const fullPath = path.join(dir, filePath);\n await fs.promises.unlink(fullPath);\n await workingCopy.untrackFile(filePath);\n } catch (error) {\n // Ignore errors - file might already be deleted or inaccessible\n }\n }\n }\n }\n\n // Now snapshot the CLEAN working directory (no pollution!)\n const currentSnapshot = await snapshotFilesystem();\n if (currentSnapshot && Object.keys(currentSnapshot).length > 0) {\n previousChange.fileSnapshot = currentSnapshot;\n await graph.updateChange(previousChange);\n }\n }\n\n // Dispatch workingcopy:switching event (preventable)\n await dispatchEventAsync(jj, 'workingcopy:switching', {\n operation: 'edit',\n fromChangeId: previousChangeId,\n toChangeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n // Restore files from the change's snapshot to working directory\n if (change.fileSnapshot) {\n for (const [filePath, content] of Object.entries(change.fileSnapshot)) {\n try {\n const fullPath = path.join(dir, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n\n // Update working copy tracking\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(filePath, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n } catch (error) {\n throw new JJError(\n 'FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath}: ${error.message}`,\n { filePath, originalError: error.message }\n );\n }\n }\n }\n\n // Set this change as the working copy\n await workingCopy.setCurrentChange(args.changeId);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `edit change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [args.changeId],\n workingCopy: args.changeId,\n },\n });\n\n // Dispatch workingcopy:switched event (informational)\n await dispatchEventAsync(jj, 'workingcopy:switched', {\n operation: 'edit',\n fromChangeId: previousChangeId,\n toChangeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n // Return information about the edited change\n return {\n changeId: change.changeId,\n description: change.description,\n parents: change.parents,\n fileCount: change.fileSnapshot ? Object.keys(change.fileSnapshot).length : 0,\n timestamp: change.timestamp,\n };\n },\n \n /**\n * Undo last operation\n *\n * @returns {Promise<Object>} Information about the undo including the undone operation and restored state\n */\n async undo() {\n // Get the operation we're about to undo to access its pre-state\n await oplog.load();\n const ops = await oplog.list();\n if (ops.length === 0) {\n throw new JJError('NOTHING_TO_UNDO', 'No operations to undo');\n }\n\n // Get the current operation (the one being undone) to restore its pre-state\n const currentOp = ops[ops.length - 1];\n\n const previousView = await oplog.undo();\n\n // Restore state from previous view\n await workingCopy.setCurrentChange(previousView.workingCopy);\n\n // Restore filesystem from previous operation's snapshot (taken BEFORE that operation)\n // This is how JJ snapshots the working copy before every command\n if (previousView.fileSnapshot) {\n for (const [filePath, content] of Object.entries(previousView.fileSnapshot)) {\n try {\n const fullPath = path.join(dir, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n } catch (error) {\n throw new JJError(\n 'UNDO_FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath} during undo: ${error.message}`,\n { filePath, originalError: error.message }\n );\n }\n }\n }\n\n // Restore conflicts state from before the undone operation\n // The conflictsSnapshot in an operation represents the state BEFORE that operation ran\n await conflicts.load();\n if (currentOp && currentOp.conflictsSnapshot) {\n // Restore conflicts from the operation we're undoing (its pre-state)\n conflicts.conflicts = new Map(Object.entries(currentOp.conflictsSnapshot.conflicts || {}));\n conflicts.fileConflicts = new Map(Object.entries(currentOp.conflictsSnapshot.fileConflicts || {}));\n await conflicts.save();\n } else {\n // No conflicts snapshot - clear conflicts\n await conflicts.clear();\n }\n\n // Record undo operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: 'undo operation',\n parents: [],\n view: previousView,\n });\n\n // Return information about what was undone\n return {\n undoneOperation: {\n description: currentOp.description,\n timestamp: currentOp.timestamp,\n user: currentOp.user,\n },\n restoredState: {\n workingCopy: previousView.workingCopy,\n heads: previousView.heads,\n fileCount: previousView.fileSnapshot ? Object.keys(previousView.fileSnapshot).length : 0,\n },\n };\n },\n\n /**\n * View operation log (operation history)\n *\n * @param {Object} [opts] - Options\n * @param {number} [opts.limit] - Maximum number of operations to return\n * @param {string} [opts.change] - Show operations for specific change\n * @returns {Promise<Array>} Array of operations\n */\n async obslog(opts = {}) {\n await oplog.load();\n let operations = await oplog.list();\n\n // Support both changeId and change parameters\n const changeId = opts.changeId || opts.change;\n\n // Filter by change if specified\n if (changeId) {\n operations = operations.filter(op =>\n op.view && (\n op.view.workingCopy === changeId ||\n (op.view.heads && op.view.heads.includes(changeId))\n )\n );\n }\n\n // Apply limit\n if (opts.limit && opts.limit > 0) {\n operations = operations.slice(-opts.limit);\n }\n\n // Transform to evolution events with operation field\n const events = operations.map(op => ({\n eventType: op.eventType || 'modify',\n description: op.description,\n operation: op.id, // Add operation ID\n timestamp: op.timestamp,\n user: op.user,\n }));\n\n // Reverse to show newest first\n return events.reverse();\n },\n\n /**\n * Operations namespace for advanced operation log queries\n */\n operations: {\n /**\n * List all operations\n *\n * @param {Object} [opts] - Options\n * @param {number} [opts.limit] - Maximum number to return\n * @returns {Promise<Array>} Array of operations\n */\n async list(opts = {}) {\n await oplog.load();\n let ops = await oplog.list();\n\n if (opts.limit && opts.limit > 0) {\n ops = ops.slice(-opts.limit);\n }\n\n return ops.reverse();\n },\n\n /**\n * View repository at a specific operation (time travel)\n *\n * @param {Object} args - Arguments\n * @param {string} args.operation - Operation ID to view at\n * @returns {Promise<Object>} Read-only repository view at that operation\n */\n async at(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }'\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find(op => op.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Create a read-only view at this operation\n return {\n async log(logArgs = {}) {\n // Get changes that existed at this operation\n await graph.load();\n const allChanges = await graph.getAllChanges();\n\n // Filter to changes that existed before or at this operation\n const opIndex = ops.indexOf(targetOp);\n const validChanges = allChanges.filter(change => {\n // Check if this change was created before this operation\n const changeOps = ops.filter(op =>\n op.view && op.view.heads && op.view.heads.includes(change.changeId)\n );\n return changeOps.length > 0 && ops.indexOf(changeOps[0]) <= opIndex;\n });\n\n return validChanges;\n },\n\n async status() {\n return {\n workingCopy: targetOp.view.workingCopy,\n operation: targetOp.id,\n timestamp: targetOp.timestamp,\n description: targetOp.description,\n };\n },\n\n // Other methods can be added as needed\n };\n },\n\n /**\n * Show changes in a specific operation (matches `jj operation show`)\n *\n * @param {Object} args - Arguments\n * @param {string} args.operation - Operation ID\n * @returns {Promise<Object>} Operation details with changes made\n */\n async show(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const op = ops.find(o => o.id === args.operation);\n\n if (!op) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Get changes introduced by this operation\n await graph.load();\n const changes = [];\n if (op.view && op.view.heads) {\n for (const changeId of op.view.heads) {\n const change = await graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n }\n\n return {\n id: op.id,\n timestamp: op.timestamp,\n user: op.user,\n description: op.description,\n parents: op.parents || [],\n view: op.view,\n changes,\n };\n },\n\n /**\n * Compare repository state between two operations (matches `jj operation diff`)\n *\n * @param {Object} args - Arguments\n * @param {string} args.from - Source operation ID\n * @param {string} args.to - Target operation ID\n * @returns {Promise<Object>} Differences between operations\n */\n async diff(args) {\n if (!args || !args.from || !args.to) {\n throw new JJError('INVALID_ARGUMENT', 'Missing from or to operation ID', {\n suggestion: 'Provide both { from: opId1, to: opId2 }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const fromOp = ops.find(o => o.id === args.from);\n const toOp = ops.find(o => o.id === args.to);\n\n if (!fromOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.from} not found`);\n }\n if (!toOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.to} not found`);\n }\n\n // Compare views\n const fromHeads = new Set(fromOp.view?.heads || []);\n const toHeads = new Set(toOp.view?.heads || []);\n\n const addedHeads = [...toHeads].filter(h => !fromHeads.has(h));\n const removedHeads = [...fromHeads].filter(h => !toHeads.has(h));\n\n // Compare bookmarks\n const fromBookmarks = fromOp.view?.bookmarks || {};\n const toBookmarks = toOp.view?.bookmarks || {};\n\n const bookmarkChanges = {};\n for (const name of new Set([...Object.keys(fromBookmarks), ...Object.keys(toBookmarks)])) {\n if (fromBookmarks[name] !== toBookmarks[name]) {\n bookmarkChanges[name] = {\n from: fromBookmarks[name],\n to: toBookmarks[name],\n };\n }\n }\n\n return {\n from: args.from,\n to: args.to,\n addedHeads,\n removedHeads,\n changes: [...addedHeads, ...removedHeads], // Combined for convenience\n bookmarkChanges,\n bookmarks: Object.keys(bookmarkChanges), // Array of changed bookmark names\n workingCopyChanged: fromOp.view?.workingCopy !== toOp.view?.workingCopy,\n };\n },\n\n /**\n * Restore repository to a specific operation (matches `jj operation restore`)\n *\n * @param {Object} args - Arguments\n * @param {string} args.operation - Operation ID to restore to\n * @returns {Promise<Object>} Restore result\n */\n async restore(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find(o => o.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Restore bookmarks from the target operation\n if (targetOp.view && targetOp.view.bookmarks) {\n await bookmarks.load();\n // Clear current bookmarks\n const currentBookmarks = await jj.bookmark.list();\n for (const bookmark of currentBookmarks) {\n await bookmarks.delete(bookmark.name);\n }\n // Restore bookmarks from target operation\n for (const [name, changeId] of Object.entries(targetOp.view.bookmarks)) {\n await bookmarks.set(name, changeId);\n }\n await bookmarks.save();\n }\n\n // Restore working copy if specified\n if (targetOp.view && targetOp.view.workingCopy) {\n await workingCopy.load();\n await workingCopy.setCurrentChange(targetOp.view.workingCopy);\n }\n\n // Record this restoration as a new operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `restore to operation ${args.operation}`,\n parents: [],\n view: targetOp.view,\n });\n\n return {\n restoredTo: args.operation,\n timestamp: targetOp.timestamp,\n description: targetOp.description,\n };\n },\n\n /**\n * Revert a specific operation (create inverse operation)\n *\n * This creates a new operation that undoes the effects of the specified operation,\n * without affecting any operations that came after it.\n *\n * @param {Object} args - Arguments\n * @param {string} args.operation - Operation ID to revert\n * @returns {Promise<Object>} Revert result\n */\n async revert(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find(o => o.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Get the operation before this one to compare state\n const targetIndex = ops.indexOf(targetOp);\n if (targetIndex === 0) {\n throw new JJError('CANNOT_REVERT', 'Cannot revert the first operation', {\n suggestion: 'Use operations.restore() to go back to the initial state',\n });\n }\n\n const previousOp = ops[targetIndex - 1];\n\n // Compute the inverse changes\n const inversChanges = {\n bookmarks: {},\n heads: [],\n };\n\n // Revert bookmark changes\n const prevBookmarks = previousOp.view?.bookmarks || {};\n const targetBookmarks = targetOp.view?.bookmarks || {};\n await bookmarks.load();\n\n for (const name of Object.keys(targetBookmarks)) {\n if (!prevBookmarks[name]) {\n // Bookmark was added - delete it\n await bookmarks.delete(name);\n inversChanges.bookmarks[name] = { action: 'deleted' };\n } else if (prevBookmarks[name] !== targetBookmarks[name]) {\n // Bookmark was moved - move it back\n await bookmarks.set(name, prevBookmarks[name]);\n inversChanges.bookmarks[name] = {\n action: 'moved',\n from: targetBookmarks[name],\n to: prevBookmarks[name],\n };\n }\n }\n\n // Check for deleted bookmarks (existed before, don't exist after)\n for (const name of Object.keys(prevBookmarks)) {\n if (!targetBookmarks[name]) {\n // Bookmark was deleted - restore it\n await bookmarks.set(name, prevBookmarks[name]);\n inversChanges.bookmarks[name] = {\n action: 'restored',\n to: prevBookmarks[name],\n };\n }\n }\n\n await bookmarks.save();\n\n // Revert working copy change if it changed\n if (previousOp.view?.workingCopy !== targetOp.view?.workingCopy) {\n await workingCopy.load();\n await workingCopy.setCurrentChange(previousOp.view.workingCopy);\n }\n\n // Record the revert as a new operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `revert operation ${args.operation}`,\n parents: [],\n view: {\n bookmarks: prevBookmarks,\n remoteBookmarks: previousOp.view?.remoteBookmarks || {},\n heads: previousOp.view?.heads || [],\n workingCopy: previousOp.view?.workingCopy,\n },\n });\n\n return {\n reverted: args.operation,\n inverseChanges: inversChanges,\n description: targetOp.description,\n };\n },\n\n /**\n * Abandon an operation (remove from operation log)\n *\n * This is an advanced operation that permanently removes an operation from the log.\n * Children of the abandoned operation are automatically relinked to the abandoned\n * operation's parent to maintain chain integrity.\n *\n * WARNING: This is a destructive operation that cannot be undone. Use with caution.\n * In most cases, you should use undo(), restore(), or revert() instead.\n *\n * @param {Object} args - Arguments\n * @param {string} args.operation - Operation ID to abandon\n * @returns {Promise<Object>} Abandon result with relinked children\n */\n async abandon(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n\n // Call the OperationLog abandon method\n const result = await oplog.abandon(args.operation);\n\n // Record a new operation about the abandonment\n // Note: This creates a meta-record that an operation was abandoned\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `abandon operation ${args.operation}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n metadata: {\n abandonedOperation: args.operation,\n relinkedChildren: result.relinkedChildren.map(c => c.operationId),\n },\n });\n\n return {\n abandoned: args.operation,\n description: result.abandoned.description,\n relinkedChildren: result.relinkedChildren,\n newHead: result.newHead,\n };\n },\n },\n\n // ========================================\n // v0.2 FEATURES: History Editing\n // ========================================\n \n /**\n * Squash source change into destination change\n *\n * @param {Object} args - Arguments\n * @param {string} [args.source] - Source change ID to squash (defaults to @ - working copy)\n * @param {string} [args.dest] - Destination change ID (if source is @, defaults to parent)\n * @param {string} [args.into] - Alias for dest (matches JJ CLI)\n */\n async squash(args = {}) {\n // Check for interactive mode (not supported)\n if (args.interactive) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive mode not supported in library API',\n {\n feature: 'squash --interactive',\n reason: 'Interactive file/hunk selection requires terminal UI',\n alternative: 'Specify paths explicitly: squash({ paths: [...] })',\n suggestion: 'For interactive squashing, use JJ CLI',\n }\n );\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Support 'into' as alias for 'dest' (matches JJ CLI)\n const dest = args.into || args.dest;\n\n // Default source to @ (working copy) if not provided\n const source = args.source || workingCopy.getCurrentChangeId();\n\n // If no dest specified and source is @, default dest to parent of @\n let destChangeId = dest;\n if (!destChangeId && source === workingCopy.getCurrentChangeId()) {\n const workingCopyChange = await graph.getChange(source);\n if (workingCopyChange && workingCopyChange.parents && workingCopyChange.parents.length > 0) {\n destChangeId = workingCopyChange.parents[0];\n } else {\n throw new JJError('INVALID_ARGUMENTS', 'Cannot squash working copy: no parent found');\n }\n }\n\n if (!destChangeId) {\n throw new JJError('INVALID_ARGUMENTS', 'Destination (dest or into) is required');\n }\n\n const sourceChange = await graph.getChange(source);\n const destChange = await graph.getChange(destChangeId);\n\n if (!sourceChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Source change ${source} not found`);\n }\n\n if (!destChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Destination change ${destChangeId} not found`);\n }\n\n const currentWorkingCopyId = workingCopy.getCurrentChangeId();\n const isSquashingWorkingCopy = source === currentWorkingCopyId;\n\n // Dispatch change:squashing event (preventable)\n await dispatchEventAsync(jj, 'change:squashing', {\n operation: 'squash',\n sourceChangeId: source,\n destChangeId: destChangeId,\n sourceChange,\n destChange,\n timestamp: new Date().toISOString(),\n });\n\n // Mark source as abandoned\n sourceChange.abandoned = true;\n await graph.updateChange(sourceChange);\n\n // Update description of dest to indicate squash (middleware will sync to Git)\n destChange.description += `\\n\\n(squashed from ${source.slice(0, 8)})`;\n await graph.updateChange(destChange);\n\n let newWorkingCopyId = currentWorkingCopyId;\n\n // If squashing the working copy, create a new empty working copy on top of dest\n if (isSquashingWorkingCopy) {\n const user = userConfig.getUser();\n const newChangeId = generateChangeId();\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [destChangeId],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(no description set)',\n timestamp: new Date().toISOString(),\n fileSnapshot: {},\n };\n\n await graph.addChange(newChange); // Middleware will sync to Git\n await workingCopy.setCurrentChange(newChangeId);\n newWorkingCopyId = newChangeId;\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `squash ${source.slice(0, 8)} into ${destChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [destChangeId],\n workingCopy: newWorkingCopyId,\n },\n });\n\n // Dispatch change:squashed event (informational)\n await dispatchEventAsync(jj, 'change:squashed', {\n operation: 'squash',\n sourceChangeId: source,\n destChangeId: destChangeId,\n sourceChange,\n destChange,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n return destChange;\n },\n \n /**\n * Rebase a change to a new parent (matches `jj rebase`)\n *\n * This is the proper JJ CLI semantic for moving changes in history.\n *\n * @param {Object} args - Arguments\n * @param {string} args.changeId - Change ID to rebase (or use `from` for compatibility)\n * @param {string} args.newParent - New parent change ID (or use `to` for compatibility)\n * @param {Array<string>} [args.paths] - Optional: only rebase changes to specific paths\n * @returns {Promise<Object>} Updated change object\n *\n * @example\n * // Rebase a feature change onto updated main\n * await jj.rebase({ changeId: 'abc123', newParent: 'def456' });\n *\n * // Rebase only specific file changes\n * await jj.rebase({\n * changeId: 'abc123',\n * newParent: 'def456',\n * paths: ['src/feature.js']\n * });\n */\n async rebase(args) {\n return await this.moveChange(args);\n },\n\n /**\n * Abandon a change\n *\n * @param {Object} [args] - Arguments\n * @param {string} [args.changeId] - Change ID to abandon (defaults to @ - working copy)\n * @returns {Promise<Object>} The abandoned change object including changeId, description, and abandoned flag\n */\n async abandon(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Default to @ (working copy) if changeId not provided\n const changeId = args.changeId || workingCopy.getCurrentChangeId();\n\n const change = await graph.getChange(changeId);\n const user = userConfig.getUser();\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Dispatch change:abandoning event (preventable)\n await dispatchEventAsync(jj, 'change:abandoning', {\n operation: 'abandon',\n changeId: changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n change.abandoned = true;\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `abandon change ${changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Dispatch change:abandoned event (informational)\n await dispatchEventAsync(jj, 'change:abandoned', {\n operation: 'abandon',\n changeId: changeId,\n change,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n return change;\n },\n\n /**\n * Backout a change - create a new change that reverses the effect of the specified change\n *\n * Similar to `git revert`, this creates a new change that undoes the changes made\n * by the specified revision without modifying the original change.\n *\n * @param {Object} args - Arguments\n * @param {string} args.revision - Change ID to back out\n * @param {string} [args.message] - Custom description for the backout change\n * @returns {Promise<Object>} The new backout change including changeId, description, and backedOut field\n */\n async backout(args) {\n // Normalize: accept common parameter aliases\n if (args && args.change && !args.revision) {\n args = { ...args, revision: args.change };\n } else if (args && args.changeId && !args.revision) {\n args = { ...args, revision: args.changeId };\n } else if (args && args.target && !args.revision) {\n args = { ...args, revision: args.target };\n }\n\n if (!args || !args.revision) {\n throw new JJError('INVALID_ARGUMENT', 'Missing revision argument', {\n suggestion: 'Provide the change ID to back out: { revision: \"abc123...\" } (or use change/changeId/target)',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const originalChange = await graph.getChange(args.revision);\n const user = userConfig.getUser();\n\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.revision} not found`);\n }\n\n // Get the parent's file snapshot (or empty if no parent)\n let parentSnapshot = {};\n if (originalChange.parents && originalChange.parents.length > 0) {\n const parent = await graph.getChange(originalChange.parents[0]);\n if (parent && parent.fileSnapshot) {\n parentSnapshot = { ...parent.fileSnapshot };\n }\n }\n\n // The backout change should have the parent's snapshot\n // (effectively removing all changes made in the original change)\n const backoutSnapshot = { ...parentSnapshot };\n\n // Create description\n const description =\n args.message ||\n `Backout change ${originalChange.changeId.slice(0, 8)}: ${originalChange.description || 'Untitled'}`;\n\n // Create new change with the reversed snapshot\n const backoutChangeId = generateChangeId();\n const backoutChange = {\n changeId: backoutChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [workingCopy.getCurrentChangeId()],\n tree: '0000000000000000000000000000000000000000',\n description,\n fileSnapshot: backoutSnapshot,\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(backoutChange);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `backout ${args.revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [backoutChangeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n changeId: backoutChangeId,\n description: backoutChange.description,\n backedOut: args.revision,\n fileSnapshot: backoutChange.fileSnapshot,\n };\n },\n\n /**\n * Absorb working copy changes into ancestor changes\n *\n * Automatically identifies which ancestor change each file modification\n * belongs to and merges the changes back into those ancestors.\n * This is similar to `git absorb` or `git commit --fixup`.\n *\n * Algorithm (simplified, file-level):\n * 1. For each modified file in working copy\n * 2. Find most recent ancestor that modified that file\n * 3. Group modifications by ancestor changeId\n * 4. Update each ancestor with its modifications\n * 5. Remove absorbed changes from working copy\n *\n * @param {Object} [args] - Optional arguments\n * @param {boolean} [args.dryRun] - Preview without making changes\n * @returns {Promise<Object>} Result with affected changes\n */\n async absorb(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const workingChangeId = workingCopy.getCurrentChangeId();\n const workingChange = await graph.getChange(workingChangeId);\n const user = userConfig.getUser();\n\n if (!workingChange) {\n // No working copy\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Snapshot current filesystem state to get the actual current changes\n const currentSnapshot = await snapshotFilesystem();\n\n if (!currentSnapshot || Object.keys(currentSnapshot).length === 0) {\n // Empty working copy, nothing to absorb\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Update working copy's fileSnapshot with current state so show() returns accurate data\n // This is safe even in dry-run mode since we're just syncing the graph with reality\n workingChange.fileSnapshot = currentSnapshot;\n await graph.updateChange(workingChange);\n\n // Get parent snapshot to determine what's modified\n let parentSnapshot = {};\n if (workingChange.parents && workingChange.parents.length > 0) {\n const parent = await graph.getChange(workingChange.parents[0]);\n if (parent && parent.fileSnapshot) {\n parentSnapshot = parent.fileSnapshot;\n }\n }\n\n // Find modified files (existed in parent AND content is different)\n const modifiedFiles = {};\n for (const [filePath, content] of Object.entries(currentSnapshot)) {\n // Only count as modified if file existed in parent (not a new file)\n if (parentSnapshot[filePath] !== undefined && parentSnapshot[filePath] !== content) {\n modifiedFiles[filePath] = content;\n }\n }\n\n // Also check for deletions (files in parent but not in working copy)\n for (const filePath of Object.keys(parentSnapshot)) {\n if (!currentSnapshot[filePath]) {\n modifiedFiles[filePath] = undefined; // Deletion\n }\n }\n\n // Check if there are new files (not in parent)\n const newFiles = {};\n for (const [filePath, content] of Object.entries(currentSnapshot)) {\n if (parentSnapshot[filePath] === undefined) {\n newFiles[filePath] = content;\n }\n }\n\n // If only new files, nothing to absorb but still update working copy\n if (Object.keys(modifiedFiles).length === 0) {\n // Update working copy to have proper fileSnapshot with new files\n if (!args.dryRun && Object.keys(newFiles).length > 0) {\n workingChange.fileSnapshot = { ...parentSnapshot, ...newFiles };\n await graph.updateChange(workingChange);\n }\n\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // For each modified file, use line-level tracking to find which ancestor\n // modified each line, then group modifications by ancestor\n const ancestorModifications = {}; // ancestorId -> { filePath: content }\n\n for (const filePath of Object.keys(modifiedFiles)) {\n const currentContent = modifiedFiles[filePath];\n\n // Handle file deletion\n if (currentContent === undefined) {\n const ancestor = await this._findFileAncestor(filePath, workingChange.parents);\n if (ancestor) {\n if (!ancestorModifications[ancestor.changeId]) {\n ancestorModifications[ancestor.changeId] = {};\n }\n ancestorModifications[ancestor.changeId][filePath] = undefined;\n }\n continue;\n }\n\n // For text files, use line-level tracking\n const parentContent = parentSnapshot[filePath] || '';\n const lineAncestors = await this._findLineAncestors(\n filePath,\n parentContent,\n currentContent,\n workingChange.parents\n );\n\n // Group line modifications by ancestor\n // lineAncestors is a Map: ancestorId -> { lines: Map(lineNum -> lineContent), originalContent }\n for (const [ancestorId, { lines, originalContent }] of lineAncestors.entries()) {\n if (!ancestorModifications[ancestorId]) {\n ancestorModifications[ancestorId] = {};\n }\n\n // Reconstruct file with modified lines\n const originalLines = originalContent.split('\\n');\n for (const [lineNum, newContent] of lines.entries()) {\n originalLines[lineNum] = newContent;\n }\n\n ancestorModifications[ancestorId][filePath] = originalLines.join('\\n');\n }\n }\n\n const affectedChanges = Object.keys(ancestorModifications);\n\n if (affectedChanges.length === 0) {\n // No ancestors found for modifications\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Dry run mode - just return what would happen\n if (args.dryRun) {\n return {\n wouldAbsorb: true,\n affectedChanges,\n preview: ancestorModifications,\n };\n }\n\n // Capture original states of all changes BEFORE updating any ancestors\n // This is needed to properly track descendant modifications when rebuilding\n const allChanges = graph.getAll();\n const originalStates = new Map();\n for (const change of allChanges) {\n originalStates.set(change.changeId, {\n fileSnapshot: JSON.parse(JSON.stringify(change.fileSnapshot || {})),\n parents: change.parents ? [...change.parents] : [],\n });\n }\n\n // Apply modifications to ancestors\n for (const [ancestorId, modifications] of Object.entries(ancestorModifications)) {\n const ancestor = await graph.getChange(ancestorId);\n\n if (ancestor) {\n // Update fileSnapshot with modifications\n ancestor.fileSnapshot = { ...ancestor.fileSnapshot };\n\n for (const [filePath, content] of Object.entries(modifications)) {\n if (content === undefined) {\n // Deletion\n delete ancestor.fileSnapshot[filePath];\n } else {\n ancestor.fileSnapshot[filePath] = content;\n }\n }\n\n // Update timestamp but preserve original metadata\n ancestor.committer = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n\n await graph.updateChange(ancestor);\n }\n }\n\n // Rebuild all descendants ONCE after all ancestors are updated\n // This includes changes that were directly updated by absorb\n const allAffectedDescendants = new Set();\n for (const ancestorId of affectedChanges) {\n const descendants = await this._findDescendants(ancestorId, workingChangeId);\n for (const desc of descendants) {\n allAffectedDescendants.add(desc);\n }\n }\n\n // Rebuild each affected descendant\n // For changes that were directly modified by absorb, we use their CURRENT state (post-absorb)\n // For changes that weren't directly modified, we use their original state\n if (allAffectedDescendants.size > 0) {\n await this._rebuildDescendantsWithStates(\n Array.from(allAffectedDescendants),\n originalStates,\n workingChangeId,\n new Set(affectedChanges) // Pass set of changes that were directly modified\n );\n }\n\n // Update working copy to reflect absorbed changes\n // Working copy should now match parent's new state (after absorption) plus any new files\n const updatedParent = await graph.getChange(workingChange.parents[0]);\n const newWorkingSnapshot = updatedParent && updatedParent.fileSnapshot\n ? { ...updatedParent.fileSnapshot }\n : {};\n\n // Add new files that weren't absorbed\n for (const [filePath, content] of Object.entries(newFiles)) {\n newWorkingSnapshot[filePath] = content;\n }\n\n workingChange.fileSnapshot = newWorkingSnapshot;\n await graph.updateChange(workingChange);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `absorb into ${affectedChanges.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: affectedChanges,\n workingCopy: workingChangeId,\n },\n });\n\n return {\n absorbed: true,\n affectedChanges,\n };\n },\n\n /**\n * Find the most recent ancestor that modified a file\n *\n * @private\n * @param {string} filePath - File path to search for\n * @param {string[]} startingPoints - Change IDs to start search from\n * @returns {Promise<Object|null>} The ancestor change that last modified the file\n */\n async _findFileAncestor(filePath, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return null;\n }\n\n // BFS to find most recent ancestor that MODIFIED this file\n // (i.e., file content is different from its parent)\n const queue = [...startingPoints];\n const visited = new Set();\n\n while (queue.length > 0) {\n const changeId = queue.shift();\n\n if (visited.has(changeId)) {\n continue;\n }\n visited.add(changeId);\n\n const change = await graph.getChange(changeId);\n if (!change) {\n continue;\n }\n\n // Check if this change has the file\n if (change.fileSnapshot && change.fileSnapshot[filePath] !== undefined) {\n // Check if this change MODIFIED the file (different from parent)\n let isModified = false;\n\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n const parentContent = parent?.fileSnapshot?.[filePath];\n const changeContent = change.fileSnapshot[filePath];\n\n // This change modified the file if:\n // 1. Parent doesn't have the file (file was added)\n // 2. Content is different from parent\n if (parentContent === undefined || parentContent !== changeContent) {\n isModified = true;\n }\n } else {\n // No parent = root change, so this is where the file was added\n isModified = true;\n }\n\n if (isModified) {\n return change;\n }\n }\n\n // Continue to parents\n if (change.parents) {\n queue.push(...change.parents);\n }\n }\n\n return null;\n },\n\n /**\n * Find which ancestors last modified each line in a file\n *\n * @private\n * @param {string} filePath - File path\n * @param {string} parentContent - Content from parent change\n * @param {string} currentContent - Current working copy content\n * @param {string[]} startingPoints - Change IDs to start search from (parent changeIds)\n * @returns {Promise<Map>} Map of ancestorId -> { lines: Map(lineNum -> content), originalContent }\n */\n async _findLineAncestors(filePath, parentContent, currentContent, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return new Map();\n }\n\n // Split into lines and find which lines changed\n const parentLines = parentContent.split('\\n');\n const currentLines = currentContent.split('\\n');\n\n // Find modified line numbers\n const modifiedLineNums = [];\n const maxLen = Math.max(parentLines.length, currentLines.length);\n\n for (let i = 0; i < maxLen; i++) {\n const parentLine = i < parentLines.length ? parentLines[i] : undefined;\n const currentLine = i < currentLines.length ? currentLines[i] : undefined;\n\n if (parentLine !== currentLine) {\n modifiedLineNums.push(i);\n }\n }\n\n // For each modified line, find which ancestor last modified it\n const ancestorMap = new Map(); // ancestorId -> { lines: Map(lineNum -> content), originalContent }\n\n for (const lineNum of modifiedLineNums) {\n const newContent = lineNum < currentLines.length ? currentLines[lineNum] : undefined;\n\n // Find which ancestor last modified this line\n const ancestor = await this._findLineAncestor(\n filePath,\n lineNum,\n parentLines[lineNum],\n startingPoints\n );\n\n if (ancestor) {\n if (!ancestorMap.has(ancestor.changeId)) {\n ancestorMap.set(ancestor.changeId, {\n lines: new Map(),\n originalContent: ancestor.fileSnapshot[filePath] || '',\n });\n }\n\n ancestorMap.get(ancestor.changeId).lines.set(lineNum, newContent);\n }\n }\n\n return ancestorMap;\n },\n\n /**\n * Find which ancestor last modified a specific line in a file\n *\n * @private\n * @param {string} filePath - File path\n * @param {number} lineNum - Line number (0-indexed)\n * @param {string} parentLine - Line content from parent\n * @param {string[]} startingPoints - Change IDs to start search from\n * @returns {Promise<Object|null>} Ancestor change that last modified this line\n */\n async _findLineAncestor(filePath, lineNum, parentLine, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return null;\n }\n\n // BFS to find most recent ancestor that MODIFIED this specific line\n const queue = [...startingPoints];\n const visited = new Set();\n\n while (queue.length > 0) {\n const changeId = queue.shift();\n\n if (visited.has(changeId)) {\n continue;\n }\n visited.add(changeId);\n\n const change = await graph.getChange(changeId);\n if (!change) {\n continue;\n }\n\n // Check if this change has the file\n if (change.fileSnapshot && change.fileSnapshot[filePath] !== undefined) {\n const changeContent = change.fileSnapshot[filePath];\n const changeLines = changeContent.split('\\n');\n const changeLine = lineNum < changeLines.length ? changeLines[lineNum] : undefined;\n\n // Check if this change MODIFIED this specific line\n let isModified = false;\n\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n if (parent && parent.fileSnapshot && parent.fileSnapshot[filePath] !== undefined) {\n const parentContent = parent.fileSnapshot[filePath];\n const parentLines = parentContent.split('\\n');\n const parentLine = lineNum < parentLines.length ? parentLines[lineNum] : undefined;\n\n // This change modified this line if the content is different\n if (changeLine !== parentLine) {\n isModified = true;\n }\n } else {\n // Parent doesn't have file, so this change added it (and this line)\n isModified = true;\n }\n } else {\n // No parent = root change, so this is where the line was added\n isModified = true;\n }\n\n if (isModified) {\n return change;\n }\n }\n\n // Continue to parents\n if (change.parents) {\n queue.push(...change.parents);\n }\n }\n\n return null;\n },\n\n /**\n * Find all descendants of a change\n *\n * @private\n * @param {string} changeId - The change to find descendants for\n * @param {string} stopAtChangeId - Don't include this change\n * @returns {Promise<string[]>} List of descendant change IDs\n */\n async _findDescendants(changeId, stopAtChangeId) {\n const allChanges = graph.getAll();\n const descendants = [];\n\n // BFS to find all descendants\n const queue = [changeId];\n const visited = new Set([changeId]);\n\n while (queue.length > 0) {\n const currentId = queue.shift();\n\n // Find children of current change\n for (const change of allChanges) {\n if (change.changeId === stopAtChangeId) {\n // Don't include this change\n continue;\n }\n\n if (change.parents && change.parents.includes(currentId) && !visited.has(change.changeId)) {\n visited.add(change.changeId);\n queue.push(change.changeId);\n descendants.push(change.changeId);\n }\n }\n }\n\n return descendants;\n },\n\n /**\n * Rebuild descendants with captured original states\n *\n * @private\n * @param {string[]} descendantIds - List of descendant IDs to rebuild\n * @param {Map} originalStates - Map of changeId -> original state before absorb\n * @param {string} stopAtChangeId - Don't rebuild this change\n * @param {Set} directlyModified - Set of changeIds that were directly modified by absorb\n */\n async _rebuildDescendantsWithStates(descendantIds, originalStates, stopAtChangeId, directlyModified = new Set()) {\n // Sort descendants by depth (parents before children)\n const sorted = await this._topologicalSort(descendantIds);\n\n // Rebuild each descendant by reapplying its modifications on top of updated parent\n for (const descendantId of sorted) {\n if (descendantId === stopAtChangeId) {\n continue;\n }\n\n const descendant = await graph.getChange(descendantId);\n if (!descendant || !descendant.parents || descendant.parents.length === 0) {\n continue;\n }\n\n // For changes that were directly modified by absorb, use their CURRENT state\n // For other changes, use their original state\n const useCurrentState = directlyModified.has(descendantId);\n const originalDescendantState = useCurrentState\n ? {\n fileSnapshot: descendant.fileSnapshot,\n parents: descendant.parents,\n }\n : originalStates.get(descendantId);\n\n if (!originalDescendantState) {\n continue;\n }\n\n // Get parent's CURRENT (updated) state\n const parent = await graph.getChange(descendant.parents[0]);\n if (!parent) {\n continue;\n }\n\n // Get parent's ORIGINAL (before absorb) state\n const originalParentState = originalStates.get(descendant.parents[0]);\n if (!originalParentState) {\n // No original state for parent, just use current parent\n descendant.fileSnapshot = { ...parent.fileSnapshot };\n await graph.updateChange(descendant);\n continue;\n }\n\n // For each file, track which lines the descendant modified from original parent\n // then reapply those modifications to the updated parent\n const newSnapshot = {};\n\n const allFiles = new Set([\n ...Object.keys(originalDescendantState.fileSnapshot),\n ...Object.keys(parent.fileSnapshot || {}),\n ]);\n\n for (const filePath of allFiles) {\n const originalDescendantContent = originalDescendantState.fileSnapshot[filePath] || '';\n const originalParentContent = originalParentState.fileSnapshot[filePath] || '';\n const updatedParentContent = parent.fileSnapshot[filePath] || '';\n\n // Find which lines descendant modified from original parent\n const originalDescendantLines = originalDescendantContent.split('\\n');\n const originalParentLines = originalParentContent.split('\\n');\n const updatedParentLines = updatedParentContent.split('\\n');\n\n // Rebuild file: start with updated parent, apply descendant's modifications\n const resultLines = [...updatedParentLines];\n\n // Find lines that descendant modified\n for (let i = 0; i < Math.max(originalDescendantLines.length, originalParentLines.length); i++) {\n const originalDescendantLine = i < originalDescendantLines.length ? originalDescendantLines[i] : undefined;\n const originalParentLine = i < originalParentLines.length ? originalParentLines[i] : undefined;\n\n // If descendant modified this line from original parent, apply that modification\n if (originalDescendantLine !== originalParentLine) {\n // Extend resultLines if needed\n while (resultLines.length <= i) {\n resultLines.push('');\n }\n resultLines[i] = originalDescendantLine !== undefined ? originalDescendantLine : '';\n }\n }\n\n newSnapshot[filePath] = resultLines.join('\\n');\n }\n\n descendant.fileSnapshot = newSnapshot;\n await graph.updateChange(descendant);\n }\n },\n\n /**\n * Rebuild descendants of a change to inherit updates\n *\n * Track descendant modifications and reapply them on top of updated parent.\n *\n * @private\n * @param {string} ancestorId - The ancestor change that was updated\n * @param {string} stopAtChangeId - Don't rebuild this change (usually working copy)\n * @deprecated Use _rebuildDescendantsWithStates instead\n */\n async _rebuildDescendants(ancestorId, stopAtChangeId) {\n // Find all descendants of ancestorId\n const allChanges = graph.getAll();\n\n // Store original parent states before any modifications\n const originalParentStates = new Map();\n for (const change of allChanges) {\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n if (parent) {\n originalParentStates.set(change.changeId, {\n parentId: change.parents[0],\n parentSnapshot: JSON.parse(JSON.stringify(parent.fileSnapshot || {})),\n });\n }\n }\n }\n\n const descendants = [];\n\n // BFS to find all descendants\n const queue = [ancestorId];\n const visited = new Set([ancestorId]);\n\n while (queue.length > 0) {\n const currentId = queue.shift();\n\n // Find children of current change\n for (const change of allChanges) {\n if (change.changeId === stopAtChangeId) {\n // Don't rebuild the working copy itself\n continue;\n }\n\n if (change.parents && change.parents.includes(currentId) && !visited.has(change.changeId)) {\n visited.add(change.changeId);\n queue.push(change.changeId);\n descendants.push(change.changeId);\n }\n }\n }\n\n // Sort descendants by depth (parents before children)\n // This ensures we update parents before their children\n const sorted = await this._topologicalSort(descendants);\n\n // Rebuild each descendant by reapplying its modifications on top of updated parent\n for (const descendantId of sorted) {\n const descendant = await graph.getChange(descendantId);\n if (!descendant || !descendant.parents || descendant.parents.length === 0) {\n continue;\n }\n\n // Get parent's CURRENT (updated) state\n const parent = await graph.getChange(descendant.parents[0]);\n if (!parent || !parent.fileSnapshot) {\n continue;\n }\n\n // Get parent's ORIGINAL (before absorb) state\n const originalState = originalParentStates.get(descendantId);\n if (!originalState || originalState.parentId !== descendant.parents[0]) {\n // Parent relationship changed or no original state, just use current parent\n descendant.fileSnapshot = { ...parent.fileSnapshot };\n await graph.updateChange(descendant);\n continue;\n }\n\n const originalParentSnapshot = originalState.parentSnapshot;\n\n // For each file, track which lines the descendant modified from original parent\n // then reapply those modifications to the updated parent\n const newSnapshot = {};\n\n const allFiles = new Set([\n ...Object.keys(descendant.fileSnapshot || {}),\n ...Object.keys(parent.fileSnapshot || {}),\n ]);\n\n for (const filePath of allFiles) {\n const descendantContent = descendant.fileSnapshot[filePath] || '';\n const originalParentContent = originalParentSnapshot[filePath] || '';\n const updatedParentContent = parent.fileSnapshot[filePath] || '';\n\n // Find which lines descendant modified from original parent\n const descendantLines = descendantContent.split('\\n');\n const originalParentLines = originalParentContent.split('\\n');\n const updatedParentLines = updatedParentContent.split('\\n');\n\n // Rebuild file: start with updated parent, apply descendant's modifications\n const resultLines = [...updatedParentLines];\n\n // Find lines that descendant modified\n for (let i = 0; i < Math.max(descendantLines.length, originalParentLines.length); i++) {\n const descendantLine = i < descendantLines.length ? descendantLines[i] : undefined;\n const originalParentLine = i < originalParentLines.length ? originalParentLines[i] : undefined;\n\n // If descendant modified this line from original parent, apply that modification\n if (descendantLine !== originalParentLine) {\n // Extend resultLines if needed\n while (resultLines.length <= i) {\n resultLines.push('');\n }\n resultLines[i] = descendantLine !== undefined ? descendantLine : '';\n }\n }\n\n newSnapshot[filePath] = resultLines.join('\\n');\n }\n\n descendant.fileSnapshot = newSnapshot;\n await graph.updateChange(descendant);\n\n // Update the original parent state for this descendant's children\n originalParentStates.set(descendantId, {\n parentId: descendantId,\n parentSnapshot: JSON.parse(JSON.stringify(descendant.fileSnapshot)),\n });\n }\n },\n\n /**\n * Topologically sort changes (parents before children)\n *\n * @private\n * @param {string[]} changeIds - List of change IDs to sort\n * @returns {Promise<string[]>} Sorted change IDs\n */\n async _topologicalSort(changeIds) {\n const changes = await Promise.all(\n changeIds.map(id => graph.getChange(id))\n );\n\n const sorted = [];\n const visited = new Set();\n const inProgress = new Set();\n\n const visit = async (change) => {\n if (!change || visited.has(change.changeId)) {\n return;\n }\n\n if (inProgress.has(change.changeId)) {\n // Cycle detected - shouldn't happen in a DAG\n return;\n }\n\n inProgress.add(change.changeId);\n\n // Visit parents first\n if (change.parents) {\n for (const parentId of change.parents) {\n if (changeIds.includes(parentId)) {\n const parent = await graph.getChange(parentId);\n await visit(parent);\n }\n }\n }\n\n inProgress.delete(change.changeId);\n visited.add(change.changeId);\n sorted.push(change.changeId);\n };\n\n for (const change of changes) {\n await visit(change);\n }\n\n return sorted;\n },\n\n /**\n * Simplify parent edges by removing redundant parents\n *\n * A parent is redundant if it's already an ancestor through another parent.\n * This operation optimizes the graph structure without changing the content.\n *\n * @param {Object} args - Arguments\n * @param {string} args.revision - Change ID to simplify\n * @returns {Promise<{changeId: string, simplified: boolean, removedParents?: string[]}>}\n */\n async simplifyParents(args) {\n if (!args || !args.revision) {\n throw new JJError('INVALID_ARGUMENT', 'Missing revision argument', {\n suggestion: 'Provide: { revision: \"abc123...\" }',\n });\n }\n\n await graph.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.revision);\n const user = userConfig.getUser();\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.revision} not found`);\n }\n\n // If change has 0 or 1 parents, nothing to simplify\n if (!change.parents || change.parents.length <= 1) {\n return {\n changeId: args.revision,\n simplified: false,\n };\n }\n\n // Find redundant parents\n // A parent P is redundant if there exists another parent Q such that P is an ancestor of Q\n const redundantParents = [];\n\n for (let i = 0; i < change.parents.length; i++) {\n const parentP = change.parents[i];\n\n // Check if parentP is an ancestor of any other parent\n for (let j = 0; j < change.parents.length; j++) {\n if (i === j) continue;\n\n const parentQ = change.parents[j];\n\n // Get all ancestors of parentQ\n const ancestorsQ = await this.log({ revisions: [parentQ] });\n const ancestorIds = ancestorsQ.map(c => c.changeId);\n\n // If parentP is in the ancestors of parentQ, then parentP is redundant\n if (ancestorIds.includes(parentP)) {\n if (!redundantParents.includes(parentP)) {\n redundantParents.push(parentP);\n }\n break;\n }\n }\n }\n\n // If no redundant parents found, nothing changed\n if (redundantParents.length === 0) {\n return {\n changeId: args.revision,\n simplified: false,\n };\n }\n\n // Remove redundant parents\n change.parents = change.parents.filter(p => !redundantParents.includes(p));\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `simplify parents of ${args.revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [args.revision],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n changeId: args.revision,\n simplified: true,\n removedParents: redundantParents,\n };\n },\n\n /**\n * Un-abandon a change (restore from abandoned state)\n *\n * @param {Object} args - Arguments\n * @param {string} args.changeId - Change ID to un-abandon\n * @returns {Promise<Object>} The un-abandoned change object including changeId, description, and abandoned flag (now false)\n */\n async unabandon(args) {\n // Normalize: accept both 'change' and 'changeId' parameters\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n }\n\n if (!args || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing changeId argument', {\n suggestion: 'Provide a changeId (or change) to unabandon',\n });\n }\n\n if (typeof args.changeId !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Change ID must be a string', {\n changeId: args.changeId,\n });\n }\n\n await graph.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.changeId);\n const user = userConfig.getUser();\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n // Dispatch change:unabandoning event (preventable)\n await dispatchEventAsync(jj, 'change:unabandoning', {\n operation: 'unabandon',\n changeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n change.abandoned = false;\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `unabandon change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Dispatch change:unabandoned event (informational)\n await dispatchEventAsync(jj, 'change:unabandoned', {\n operation: 'unabandon',\n changeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n }, { cancelable: false });\n\n return change;\n },\n \n /**\n * Split a change into multiple changes (simplified v0.2 implementation)\n *\n * @param {Object} args - Arguments\n * @param {string} args.changeId - Change ID to split\n * @param {string} args.description1 - Description for first part\n * @param {string} args.description2 - Description for second part\n * @param {string[]} [args.paths] - Specific paths to include in first split (full implementation planned for future)\n */\n async split(args) {\n // Normalize: accept common parameter aliases\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args && args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n } else if (args && args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n }\n\n // Check for interactive mode (not supported)\n if (args.interactive) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive mode not supported in library API',\n {\n feature: 'split --interactive',\n reason: 'Interactive file/hunk selection requires terminal UI',\n alternative: 'Specify paths explicitly: split({ changeId, paths: [...] })',\n suggestion: 'For interactive splitting, use JJ CLI',\n }\n );\n }\n\n await graph.load();\n await workingCopy.load();\n\n const originalChange = await graph.getChange(args.changeId);\n\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n const currentWorkingCopyId = workingCopy.getCurrentChangeId();\n const isSplittingWorkingCopy = args.changeId === currentWorkingCopyId;\n\n // Create first split change (keep original ID) - middleware will sync to Git\n originalChange.description = args.description1 || originalChange.description + ' (part 1)';\n await graph.updateChange(originalChange);\n\n // Create second split change as new change on top - middleware will sync to Git\n const newChangeId = generateChangeId();\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [args.changeId],\n tree: originalChange.tree,\n author: originalChange.author,\n committer: originalChange.committer,\n description: args.description2 || originalChange.description + ' (part 2)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(newChange);\n\n // If splitting the working copy, move to the second (child) commit\n let newWorkingCopyId = currentWorkingCopyId;\n if (isSplittingWorkingCopy) {\n await workingCopy.setCurrentChange(newChangeId);\n newWorkingCopyId = newChangeId;\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `split change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [newChangeId],\n workingCopy: newWorkingCopyId,\n },\n });\n\n return { original: originalChange, new: newChange };\n },\n \n // ========================================\n // v0.3 FEATURES: Git Integration\n // ========================================\n\n /**\n * Git-specific operations (network, direct Git access)\n */\n git: {\n /**\n * Initialize a new Git-backed JJ repository\n * Matches `jj git init` CLI command\n *\n * @param {Object} opts - Initialization options\n * @param {string} [opts.userName] - User name for commits\n * @param {string} [opts.userEmail] - User email for commits\n * @param {string} [opts.defaultBranch] - Default branch name (default: 'main')\n */\n async init(opts = {}) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n // Initialize Git backend\n await gitBackend.init({\n defaultBranch: opts.defaultBranch || 'main',\n });\n\n await storage.init();\n\n // Initialize user config first\n await userConfig.init({\n userName: opts.userName,\n userEmail: opts.userEmail,\n });\n\n // Initialize components\n await graph.init();\n await oplog.init();\n await bookmarks.init();\n await conflicts.init();\n await workspaces.init();\n\n // Create root change\n const rootChangeId = generateChangeId();\n const user = userConfig.getUser();\n const rootChange = {\n changeId: rootChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(root)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(rootChange);\n await workingCopy.init(rootChangeId);\n\n // Record init operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: 'initialize git-backed repository',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [rootChangeId],\n workingCopy: rootChangeId,\n },\n });\n },\n\n /**\n * Fetch changes from remote Git repository\n *\n * @param {Object} args - Fetch arguments\n * @param {string} args.remote - Remote name or URL\n * @param {string[]} [args.refs] - Refs to fetch (default: all)\n * @param {number} [args.depth] - Create shallow clone with history truncated to depth (v0.4)\n * @param {boolean} [args.relative] - Depth measured from current shallow depth (v0.4)\n * @param {boolean} [args.singleBranch] - Only fetch single branch (v0.4)\n * @param {boolean} [args.noTags] - Don't fetch tags (v0.4)\n * @param {Function} [args.onProgress] - Progress callback\n * @param {Function} [args.onAuth] - Authentication callback\n */\n async fetch(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n const result = await gitBackend.fetch({\n remote: args.remote,\n refs: args.refs,\n depth: args.depth, // v0.4: Shallow clone support\n relative: args.relative, // v0.4: Relative depth\n singleBranch: args.singleBranch, // v0.4: Single branch only\n noTags: args.noTags, // v0.4: Skip tags\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git fetch from ${args.remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * Push changes to remote Git repository\n *\n * @param {Object} args - Push arguments\n * @param {string} args.remote - Remote name or URL\n * @param {string[]} [args.refs] - Refs to push (default: current bookmarks)\n * @param {boolean} [args.force] - Allow non-fast-forward\n * @param {Function} [args.onProgress] - Progress callback\n * @param {Function} [args.onAuth] - Authentication callback\n */\n async push(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n const result = await gitBackend.push({\n remote: args.remote,\n refs: args.refs,\n force: args.force,\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git push to ${args.remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * Clone a Git repository (matches `jj git clone`)\n *\n * @param {Object} args - Clone arguments\n * @param {string} args.url - Repository URL to clone from\n * @param {string} [args.dir] - Directory to clone into (defaults to repo name from URL)\n * @param {number} [args.depth] - Create shallow clone with history truncated to depth\n * @param {boolean} [args.singleBranch] - Only clone single branch\n * @param {boolean} [args.noTags] - Don't clone tags\n * @param {string} [args.ref] - Specific ref/branch to clone\n * @param {Function} [args.onProgress] - Progress callback\n * @param {Function} [args.onAuth] - Authentication callback\n * @returns {Promise<Object>} Clone result with directory path\n */\n async clone(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n if (!args || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing url argument', {\n suggestion: 'Provide a Git repository URL to clone from',\n });\n }\n\n if (!http) {\n throw new JJError('HTTP_NOT_AVAILABLE', 'HTTP client not provided', {\n suggestion: 'Provide http option when creating JJ: createJJ({ fs, dir, git, http })',\n });\n }\n\n // Determine clone directory\n const git = (await import('isomorphic-git')).default;\n const cloneDir = args.dir || args.url.split('/').pop().replace(/\\.git$/, '');\n const fullCloneDir = path.join(dir, cloneDir);\n\n // Clone using isomorphic-git\n await git.clone({\n fs,\n http,\n dir: fullCloneDir,\n url: args.url,\n ref: args.ref,\n depth: args.depth,\n singleBranch: args.singleBranch,\n noTags: args.noTags,\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Initialize JJ repository structure in cloned directory\n const clonedBackend = new IsomorphicGitBackend({ fs, http, dir: fullCloneDir });\n await clonedBackend._createJJRepoStructure();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git clone from ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n url: args.url,\n directory: fullCloneDir,\n ref: args.ref || 'HEAD',\n };\n },\n\n /**\n * Import Git refs into JJ bookmarks\n *\n * @returns {Promise<Object>} Import result\n */\n async import() {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n await graph.load();\n await bookmarks.load();\n\n // Get all Git refs\n const refs = await gitBackend.listRefs('refs/heads');\n const importedBookmarks = [];\n\n for (const ref of refs) {\n const bookmarkName = ref.name.replace('refs/heads/', '');\n\n // Find or create change for this commit\n let change = await graph.findChangeByCommitId(ref.oid);\n if (!change) {\n // Create a new change for this commit\n const changeId = generateChangeId();\n const user = userConfig.getUser();\n change = {\n changeId,\n commitId: ref.oid,\n parents: [],\n tree: ref.oid,\n author: { name: user.name, email: user.email, timestamp: new Date().toISOString() },\n committer: { name: user.name, email: user.email, timestamp: new Date().toISOString() },\n description: `Imported from Git ref ${ref.name}`,\n timestamp: new Date().toISOString(),\n };\n await graph.addChange(change);\n }\n\n // Create or update bookmark pointing to this change\n const existing = await bookmarks.get(bookmarkName);\n if (existing) {\n await bookmarks.move(bookmarkName, change.changeId);\n } else {\n await bookmarks.set(bookmarkName, change.changeId);\n }\n importedBookmarks.push(bookmarkName);\n }\n\n await bookmarks.save();\n // Note: graph.save() not needed - addChange() saves automatically\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git import (${importedBookmarks.length} refs)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { imported: importedBookmarks };\n },\n\n /**\n * Export JJ bookmarks to Git refs\n *\n * @returns {Promise<Object>} Export result\n */\n async export() {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n await graph.load();\n await bookmarks.load();\n\n const allBookmarks = await bookmarks.list();\n const exportedRefs = [];\n\n for (const bookmark of allBookmarks) {\n const change = await graph.getChange(bookmark.changeId);\n if (!change || !change.commitId) {\n continue;\n }\n\n // Update Git ref\n const refName = `refs/heads/${bookmark.name}`;\n await gitBackend.updateRef(refName, change.commitId);\n exportedRefs.push(refName);\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git export (${exportedRefs.length} refs)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { exported: exportedRefs };\n },\n\n /**\n * Git remote operations\n */\n remote: {\n /**\n * List Git remotes (matches `jj git remote list`)\n *\n * @returns {Promise<Array>} List of remotes with names and URLs\n */\n async list() {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n const git = (await import('isomorphic-git')).default;\n const remotes = await git.listRemotes({ fs, dir });\n return remotes.map(r => ({ name: r.remote, url: r.url }));\n },\n\n /**\n * Add a Git remote (matches `jj git remote add`)\n *\n * @param {Object} args - Remote arguments\n * @param {string} args.name - Remote name\n * @param {string} args.url - Remote URL\n * @returns {Promise<Object>} Added remote info\n */\n async add(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n if (!args || !args.name || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or url', {\n suggestion: 'Provide both name and url: { name: \"origin\", url: \"https://...\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n await git.addRemote({\n fs,\n dir,\n remote: args.name,\n url: args.url,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote add ${args.name} ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, url: args.url };\n },\n\n /**\n * Remove a Git remote (matches `jj git remote remove`)\n *\n * @param {Object} args - Remote arguments\n * @param {string} args.name - Remote name to remove\n * @returns {Promise<Object>} Removal result\n */\n async remove(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing remote name', {\n suggestion: 'Provide remote name: { name: \"origin\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n await git.deleteRemote({\n fs,\n dir,\n remote: args.name,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote remove ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { removed: args.name };\n },\n\n /**\n * Rename a Git remote (matches `jj git remote rename`)\n *\n * @param {Object} args - Remote arguments\n * @param {string} args.oldName - Current remote name\n * @param {string} args.newName - New remote name\n * @returns {Promise<Object>} Rename result\n */\n async rename(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n if (!args || !args.oldName || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing oldName or newName', {\n suggestion: 'Provide both names: { oldName: \"origin\", newName: \"upstream\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n\n // Get current URL\n const remotes = await git.listRemotes({ fs, dir });\n const remote = remotes.find(r => r.remote === args.oldName);\n if (!remote) {\n throw new JJError('NOT_FOUND', `Remote ${args.oldName} not found`);\n }\n\n // Remove old and add new\n await git.deleteRemote({ fs, dir, remote: args.oldName });\n await git.addRemote({ fs, dir, remote: args.newName, url: remote.url });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote rename ${args.oldName} ${args.newName}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { oldName: args.oldName, newName: args.newName, url: remote.url };\n },\n\n /**\n * Set URL for a Git remote (matches `jj git remote set-url`)\n *\n * @param {Object} args - Remote arguments\n * @param {string} args.name - Remote name\n * @param {string} args.url - New URL\n * @returns {Promise<Object>} Updated remote info\n */\n async setUrl(args) {\n if (!gitBackend) {\n throw new JJError(\n 'BACKEND_NOT_AVAILABLE',\n 'Git backend not configured',\n { suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })' }\n );\n }\n\n if (!args || !args.name || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or url', {\n suggestion: 'Provide both: { name: \"origin\", url: \"https://...\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n\n // Check if remote exists\n const remotes = await git.listRemotes({ fs, dir });\n const remote = remotes.find(r => r.remote === args.name);\n if (!remote) {\n throw new JJError('NOT_FOUND', `Remote ${args.name} not found`);\n }\n\n // Remove and re-add with new URL\n await git.deleteRemote({ fs, dir, remote: args.name });\n await git.addRemote({ fs, dir, remote: args.name, url: args.url });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote set-url ${args.name} ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, url: args.url };\n },\n },\n\n /**\n * Get Git repository root directory (matches `jj git root`)\n *\n * @returns {Promise<Object>} Repository root information\n */\n async root() {\n // Return the directory containing .git\n const gitDir = path.join(dir, '.git');\n\n try {\n await fs.promises.access(gitDir);\n return { root: dir, gitDir };\n } catch (error) {\n throw new JJError('NOT_GIT_REPO', `Not a Git repository: ${dir}`, {\n suggestion: 'Initialize with jj.git.init() first',\n });\n }\n },\n },\n\n // ========================================\n // v0.3 FEATURES: First-Class Conflicts\n // ========================================\n\n /**\n * Merge changes from another change, detecting conflicts\n *\n * @param {Object} args - Merge arguments\n * @param {string} args.source - Source change ID to merge\n * @returns {Promise<Object>} Merge result with conflicts\n */\n async merge(args) {\n if (!args || !args.source) {\n throw new JJError('INVALID_ARGUMENT', 'Missing source change argument', {\n suggestion: 'Provide a source change ID to merge',\n });\n }\n\n // Snapshot conflicts state before merge (for undo)\n await conflicts.load();\n const conflictsSnapshot = {\n conflicts: Object.fromEntries(conflicts.conflicts),\n fileConflicts: Object.fromEntries(conflicts.fileConflicts),\n };\n\n const currentChangeId = workingCopy.getCurrentChangeId();\n const currentChange = await graph.getChange(currentChangeId);\n const sourceChange = await graph.getChange(args.source);\n\n if (!sourceChange) {\n throw new JJError('NOT_FOUND', `Source change ${args.source} not found`);\n }\n\n // Find common ancestor\n const ancestors = graph.getAncestors(currentChangeId);\n const sourceAncestors = graph.getAncestors(args.source);\n\n // Simple merge base detection (first common ancestor)\n let baseChangeId = null;\n for (const ancestor of ancestors) {\n if (sourceAncestors.includes(ancestor)) {\n baseChangeId = ancestor;\n break;\n }\n }\n\n if (!baseChangeId) {\n throw new JJError('MERGE_ERROR', 'No common ancestor found for merge');\n }\n\n // Get file contents for three-way merge\n const baseFiles = new Map();\n const leftFiles = new Map();\n const rightFiles = new Map();\n\n // Load base files from snapshot\n const baseChange = await graph.getChange(baseChangeId);\n if (baseChange && baseChange.fileSnapshot) {\n for (const [filePath, content] of Object.entries(baseChange.fileSnapshot)) {\n baseFiles.set(filePath, content);\n }\n }\n\n // Load current (left) files from working copy\n const wcFiles = await workingCopy.listFiles();\n for (const file of wcFiles) {\n try {\n const content = await fs.promises.readFile(path.join(dir, file), 'utf-8');\n leftFiles.set(file, content);\n } catch (error) {\n // File might be deleted or binary - throw error for explicit handling\n throw new JJError(\n 'MERGE_FILE_READ_FAILED',\n `Could not read file ${file} for merge: ${error.message}`,\n { file, originalError: error.message, suggestion: 'File may be binary or deleted' }\n );\n }\n }\n\n // Load source (right) files from snapshot\n if (sourceChange && sourceChange.fileSnapshot) {\n for (const [filePath, content] of Object.entries(sourceChange.fileSnapshot)) {\n rightFiles.set(filePath, content);\n }\n }\n\n // Detect conflicts (v0.5: pass custom drivers and working copy dir)\n const detectedConflicts = await conflicts.detectConflicts({\n baseFiles,\n leftFiles,\n rightFiles,\n drivers: args.drivers || {}, // v0.5: custom merge drivers\n workingCopyDir: args.dryRun ? null : dir, // v0.5: skip file writes in dry-run\n baseChange: baseChangeId, // v0.5: metadata for drivers\n leftChange: currentChangeId,\n rightChange: args.source,\n });\n\n // v0.5: Dry-run mode - return preview without applying changes\n if (args.dryRun) {\n return {\n merged: false,\n dryRun: true,\n conflicts: detectedConflicts,\n base: baseChangeId,\n left: currentChangeId,\n right: args.source,\n };\n }\n\n // Store detected conflicts\n for (const conflict of detectedConflicts) {\n await conflicts.addConflict(conflict);\n }\n\n // Record operation with conflicts snapshot\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `merge ${args.source}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [currentChangeId, args.source],\n workingCopy: currentChangeId,\n },\n conflictsSnapshot, // Store conflicts state before merge for undo\n });\n\n return {\n merged: true,\n conflicts: detectedConflicts,\n base: baseChangeId,\n left: currentChangeId,\n right: args.source,\n };\n },\n\n /**\n * Conflicts API\n */\n conflicts: {\n /**\n * List active (unresolved) conflicts\n *\n * @param {Object} opts - List options\n * @param {boolean} [opts.includeResolved=false] - Include resolved conflicts\n */\n async list(opts = {}) {\n await conflicts.load();\n // By default, only show unresolved conflicts\n const resolved = opts.includeResolved ? undefined : false;\n return conflicts.listConflicts({ resolved });\n },\n\n /**\n * Resolve a conflict (v0.5 enhanced)\n *\n * @param {Object} args - Resolution arguments\n * @param {string} args.conflictId - Conflict ID\n * @param {string} [args.resolution] - Manual resolution content\n * @param {string} [args.driver] - Merge driver to use\n * @param {string} [args.strategy] - Resolution strategy ('ours', 'theirs', 'union')\n */\n async resolve(args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n\n // Get the conflict\n const conflict = conflicts.getConflict(args.conflictId);\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${args.conflictId} not found`);\n }\n\n let resolvedContent;\n\n // v0.5: Support different resolution methods\n if (args.resolution) {\n // Manual resolution provided\n resolvedContent = args.resolution;\n } else if (args.driver) {\n // Use merge driver\n const driver = mergeDrivers.get(args.driver);\n if (!driver) {\n throw new JJError('DRIVER_NOT_FOUND', `Driver ${args.driver} not found`);\n }\n\n const driverResult = await mergeDrivers.executeDriver(\n driver,\n {\n path: conflict.path,\n base: conflict.sides.base,\n ours: conflict.sides.left,\n theirs: conflict.sides.right,\n },\n mergeDrivers.isBinaryFile(conflict.path, conflict.sides.left)\n );\n\n if (driverResult.hasConflict) {\n throw new JJError('DRIVER_FAILED', `Driver could not resolve conflict`);\n }\n\n resolvedContent = driverResult.content;\n } else if (args.strategy) {\n // Use resolution strategy\n resolvedContent = _resolveWithStrategy(conflict, args.strategy);\n } else {\n throw new JJError('INVALID_ARGUMENT', 'Must provide resolution, driver, or strategy');\n }\n\n // Write resolved content to file\n await fs.promises.writeFile(path.join(dir, conflict.path), resolvedContent, 'utf-8');\n\n // Mark conflict as resolved\n await conflicts.resolveConflict(args.conflictId, 'manual');\n await conflicts.save();\n\n return { resolved: true };\n },\n\n /**\n * Resolve all conflicts (v0.5)\n *\n * @param {Object} args - Resolution arguments\n * @param {string} args.strategy - Resolution strategy ('ours', 'theirs', 'union')\n * @param {Object} [args.filter] - Optional filter\n * @param {string} [args.filter.path] - Path pattern to filter\n */\n async resolveAll(args) {\n if (!args || !args.strategy) {\n throw new JJError('INVALID_ARGUMENT', 'Missing strategy');\n }\n\n await conflicts.load();\n const allConflicts = conflicts.listConflicts({ resolved: false });\n\n // Filter conflicts if requested\n let toResolve = allConflicts;\n if (args.filter && args.filter.path) {\n const pattern = args.filter.path;\n toResolve = allConflicts.filter(c => {\n // Simple pattern matching - exact match or glob\n if (pattern.includes('*')) {\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n return regex.test(c.path);\n }\n return c.path === pattern;\n });\n }\n\n // Resolve each conflict\n let resolvedCount = 0;\n for (const conflict of toResolve) {\n try {\n const resolvedContent = _resolveWithStrategy(conflict, args.strategy);\n\n // Write resolved content\n await fs.promises.writeFile(path.join(dir, conflict.path), resolvedContent, 'utf-8');\n\n // Mark as resolved\n await conflicts.resolveConflict(conflict.conflictId, args.strategy);\n resolvedCount++;\n } catch (error) {\n console.warn(`Failed to resolve ${conflict.path}: ${error.message}`);\n }\n }\n\n await conflicts.save();\n\n return { resolved: resolvedCount, total: toResolve.length };\n },\n\n /**\n * Get conflict markers for a conflict (v0.5)\n *\n * @param {Object} args - Arguments\n * @param {string} args.conflictId - Conflict ID\n * @returns {Promise<string>} Conflict markers in standard format\n */\n async markers(args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n const conflict = conflicts.getConflict(args.conflictId);\n\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${args.conflictId} not found`);\n }\n\n // Generate standard conflict markers\n const ours = conflict.sides.left || '';\n const theirs = conflict.sides.right || '';\n\n return `<<<<<<< ours\\n${ours}=======\\n${theirs}>>>>>>> theirs`;\n },\n\n /**\n * Mark conflict as resolved\n */\n async markResolved(args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n await conflicts.resolveConflict(args.conflictId, 'manual');\n await conflicts.save();\n\n return { resolved: true };\n },\n },\n\n /**\n * Interactive conflict resolution (stub - not supported)\n *\n * This is a stub method that throws an error explaining why interactive\n * conflict resolution is not available in JavaScript/browser environments.\n *\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async resolve(args = {}) {\n // Check for external merge tool usage\n if (args.tool) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'External merge tools not supported',\n {\n feature: 'resolve --tool',\n reason: 'External merge tools require system integration not available in library API',\n alternative: 'Use jj.conflicts.resolve() with programmatic resolution',\n suggestion: 'For conflict resolution, use the programmatic API or resolve files manually',\n }\n );\n }\n\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive conflict resolution (jj resolve) is not supported in JavaScript environments',\n {\n suggestion: [\n 'Use the programmatic conflict API instead:',\n ' - jj.conflicts.list() to see conflicts',\n ' - jj.conflicts.get({ conflictId }) to inspect a conflict',\n ' - jj.conflicts.markers({ conflictId }) to get conflict markers',\n ' - jj.conflicts.resolve({ conflictId, resolution }) to resolve',\n ' - jj.conflicts.resolveMany({ strategy, paths }) for bulk resolution',\n '',\n 'Interactive conflict resolution requires a terminal and editor,',\n 'which are not available in JavaScript/browser contexts.',\n ].join('\\n'),\n }\n );\n },\n\n /**\n * File operations namespace - Matches JJ CLI file commands\n */\n file: {\n /**\n * Show file content (matches `jj file show`)\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to read\n * @param {string} [args.changeId] - Change ID (defaults to working copy)\n * @param {string} [args.encoding='utf-8'] - Encoding ('utf-8' or 'binary')\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async show(args) {\n return await jj.read(args);\n },\n\n /**\n * List files (matches `jj file list`)\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.changeId] - Change ID (defaults to working copy)\n * @returns {Promise<Array<string>>} Array of file paths\n */\n async list(args = {}) {\n return await jj.listFiles(args);\n },\n\n /**\n * Write file content (organized file operation)\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to write\n * @param {string|Uint8Array} args.data - File content\n * @returns {Promise<Object>} Write result with file info\n */\n async write(args) {\n return await jj.write(args);\n },\n\n /**\n * Move/rename file (organized file operation)\n *\n * @param {Object} args - Arguments\n * @param {string} args.from - Source path\n * @param {string} args.to - Destination path\n * @returns {Promise<Object>} Move result\n */\n async move(args) {\n return await jj.move(args);\n },\n\n /**\n * Remove file (organized file operation)\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to remove\n * @returns {Promise<Object>} Remove result with file info\n */\n async remove(args) {\n return await jj.remove(args);\n },\n\n /**\n * Show which revision modified each line (matches `jj file annotate` / git blame)\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to annotate\n * @param {string} [args.changeId] - Change ID (defaults to working copy)\n * @returns {Promise<Array>} Array of line annotations with changeId, author, timestamp, and content\n */\n async annotate(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a file path to annotate',\n });\n }\n\n await graph.load();\n\n // Get the starting change (default to working copy)\n const startChangeId = args.changeId || workingCopy.getCurrentChangeId();\n const startChange = await graph.getChange(startChangeId);\n if (!startChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${startChangeId} not found`);\n }\n\n // Read current file content\n const content = await jj.read({ path: args.path, changeId: startChangeId });\n const lines = typeof content === 'string' ? content.split('\\n') : [];\n\n // For each line, find which change last modified it\n const annotations = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Traverse history to find the change that introduced this line\n let currentChangeId = startChangeId;\n let foundChange = startChange;\n\n while (currentChangeId) {\n const change = await graph.getChange(currentChangeId);\n if (!change) break;\n\n // Check if this change modified the file\n if (change.fileSnapshot && change.fileSnapshot[args.path]) {\n foundChange = change;\n break;\n }\n\n // Move to parent (simplified - takes first parent)\n currentChangeId = change.parents && change.parents.length > 0 ? change.parents[0] : null;\n }\n\n annotations.push({\n lineNumber: i + 1,\n changeId: foundChange.changeId,\n author: foundChange.author,\n timestamp: foundChange.timestamp,\n content: line,\n });\n }\n\n return annotations;\n },\n\n /**\n * Change file permissions (matches `jj file chmod`)\n * Note: Only works in Node.js, not in browsers\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path\n * @param {number|string} args.mode - File mode (e.g., 0o755 or '755')\n * @returns {Promise<Object>} chmod result\n */\n async chmod(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a file path to chmod',\n });\n }\n\n if (args.mode === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing mode argument', {\n suggestion: 'Provide a mode: { path: \"file.sh\", mode: 0o755 }',\n });\n }\n\n // Check if we're in a browser environment\n if (typeof process === 'undefined' || !fs.promises.chmod) {\n throw new JJError('UNSUPPORTED_OPERATION', 'chmod is not supported in browser environments', {\n suggestion: 'chmod only works in Node.js',\n });\n }\n\n const fullPath = path.join(dir, args.path);\n\n // Convert string mode to number if needed\n const mode = typeof args.mode === 'string' ? parseInt(args.mode, 8) : args.mode;\n\n await fs.promises.chmod(fullPath, mode);\n\n // Get updated file stats\n const stats = await fs.promises.stat(fullPath);\n\n return {\n path: args.path,\n mode: stats.mode,\n modeOctal: (stats.mode & parseInt('777', 8)).toString(8),\n };\n },\n\n /**\n * Track files (stub - not supported)\n *\n * This is a stub method that throws an error explaining why explicit\n * file tracking is not needed in JavaScript environments.\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to track\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async track(args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Explicit file tracking (jj file track) is not needed in JavaScript environments',\n {\n suggestion: [\n 'Files are automatically tracked when you write them:',\n ' - jj.file.write({ path, data }) - Automatically tracks the file',\n ' - jj.write({ path, data }) - Same as above (convenience method)',\n '',\n 'The file tracking system in JJ CLI is designed for manual filesystem',\n 'edits (using editors, command-line tools, etc.). In isomorphic-jj,',\n 'all file modifications go through the API, so tracking is automatic.',\n '',\n 'To add a file to the repository, simply write it:',\n ' await jj.write({ path: \"myfile.txt\", data: \"content\" });',\n ].join('\\n'),\n }\n );\n },\n\n /**\n * Untrack files (stub - not supported)\n *\n * This is a stub method that throws an error explaining why explicit\n * file untracking is not needed in JavaScript environments.\n *\n * @param {Object} args - Arguments\n * @param {string} args.path - File path to untrack\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async untrack(args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Explicit file untracking (jj file untrack) is not needed in JavaScript environments',\n {\n suggestion: [\n 'To remove a file from the repository, use:',\n ' - jj.file.remove({ path }) - Removes and untracks the file',\n ' - jj.remove({ path }) - Same as above (convenience method)',\n '',\n 'The file tracking system in JJ CLI is designed for manual filesystem',\n 'edits (using editors, command-line tools, etc.). In isomorphic-jj,',\n 'all file modifications go through the API, so untracking is automatic',\n 'when you remove a file.',\n '',\n 'To remove a file:',\n ' await jj.remove({ path: \"myfile.txt\" });',\n ].join('\\n'),\n }\n );\n },\n },\n\n /**\n * Workspace API - Multiple working copies\n */\n workspace: {\n /**\n * Add a new workspace\n *\n * @param {Object} args - Workspace arguments\n * @param {string} args.path - Path for the new workspace\n * @param {string} [args.name] - Optional name\n * @param {string} [args.changeId] - Change to check out\n */\n async add(args) {\n await workspaces.load();\n\n // If no changeId specified, default to current working copy change\n if (!args.changeId) {\n const currentChangeId = workingCopy.getCurrentChangeId();\n args = { ...args, changeId: currentChangeId };\n }\n\n const workspace = await workspaces.add(args);\n\n // If a change was specified, check it out in the new workspace\n if (args.changeId) {\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n // Restore files from change snapshot to the new workspace\n if (change.fileSnapshot) {\n for (const [filePath, content] of Object.entries(change.fileSnapshot)) {\n try {\n const fullPath = path.join(args.path, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(args.path, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n } catch (error) {\n throw new JJError(\n 'WORKSPACE_FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath} to workspace: ${error.message}`,\n { filePath, workspacePath: args.path, originalError: error.message }\n );\n }\n }\n }\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `add workspace at ${args.path}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return workspace;\n },\n\n /**\n * Remove a workspace\n *\n * @param {Object} args - Remove arguments\n * @param {string} args.id - Workspace ID\n * @param {boolean} [args.force=false] - Force removal\n */\n async remove(args) {\n if (!args || !args.id) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace ID');\n }\n\n await workspaces.load();\n await workspaces.remove(args.id, args.force);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `remove workspace ${args.id}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { removed: true };\n },\n\n /**\n * Forget a workspace without removing files (matches `jj workspace forget`)\n *\n * @param {Object} args - Forget arguments\n * @param {string} args.id - Workspace ID\n */\n async forget(args) {\n if (!args || !args.id) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace ID');\n }\n\n await workspaces.load();\n await workspaces.forget(args.id);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `forget workspace ${args.id}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { forgotten: true };\n },\n\n /**\n * List all workspaces\n */\n async list() {\n await workspaces.load();\n return workspaces.list();\n },\n\n /**\n * Get a specific workspace\n *\n * @param {string} id - Workspace ID\n */\n async get(id) {\n await workspaces.load();\n const workspace = workspaces.get(id);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${id} not found`);\n }\n return workspace;\n },\n\n /**\n * Rename a workspace (matches `jj workspace rename`)\n *\n * @param {Object} args - Rename arguments\n * @param {string} args.workspace - Current workspace name/id\n * @param {string} args.newName - New name for the workspace\n * @returns {Promise<Object>} Updated workspace\n */\n async rename(args) {\n if (!args || !args.workspace || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace or newName');\n }\n\n await workspaces.load();\n const workspace = workspaces.get(args.workspace);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${args.workspace} not found`);\n }\n\n workspace.name = args.newName;\n await workspaces.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `rename workspace ${args.workspace} to ${args.newName}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return workspace;\n },\n\n /**\n * Get workspace root directory (matches `jj workspace root`)\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.workspace] - Workspace name/id (defaults to current)\n * @returns {Promise<string>} Root directory path\n */\n async root(args = {}) {\n // If no workspace specified, return current repository root\n if (!args.workspace) {\n return dir;\n }\n\n await workspaces.load();\n\n // Try to get by ID first, then by name\n let workspace = workspaces.get(args.workspace);\n if (!workspace) {\n // Search by name\n const allWorkspaces = workspaces.list();\n workspace = allWorkspaces.find((ws) => ws.name === args.workspace);\n }\n\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${args.workspace} not found`);\n }\n\n return workspace.path;\n },\n\n /**\n * Update stale workspaces (matches `jj workspace update-stale`)\n *\n * @param {Object} [args={}] - Arguments\n * @param {string} [args.workspace] - Specific workspace to update (defaults to all stale)\n * @returns {Promise<Object>} Update result\n */\n async updateStale(args = {}) {\n await workspaces.load();\n await graph.load();\n\n const allWorkspaces = workspaces.list();\n const staleWorkspaces = [];\n\n for (const ws of allWorkspaces) {\n // Skip workspaces without a changeId - they're fresh/uninitialized, not stale\n if (!ws.changeId) {\n continue;\n }\n\n // Check if workspace's change still exists and is not abandoned\n const change = await graph.getChange(ws.changeId);\n if (!change || change.abandoned) {\n staleWorkspaces.push(ws);\n }\n }\n\n // If specific workspace requested, only update that one\n const toUpdate = args.workspace\n ? staleWorkspaces.filter((ws) => ws.id === args.workspace || ws.name === args.workspace)\n : staleWorkspaces;\n\n if (args.workspace && toUpdate.length === 0) {\n // Look up the workspace to get its name for a better error message\n let workspace = workspaces.get(args.workspace);\n if (!workspace) {\n const allWorkspaces = workspaces.list();\n workspace = allWorkspaces.find((ws) => ws.name === args.workspace);\n }\n const workspaceName = workspace ? workspace.name : args.workspace;\n throw new JJError('WORKSPACE_NOT_STALE', `Workspace ${workspaceName} is not stale`);\n }\n\n // Update each stale workspace to a valid change (use current working copy)\n const currentChangeId = workingCopy.getCurrentChangeId();\n for (const ws of toUpdate) {\n ws.changeId = currentChangeId;\n }\n\n if (toUpdate.length > 0) {\n await workspaces.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `update ${toUpdate.length} stale workspace(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: currentChangeId,\n },\n });\n }\n\n return {\n updated: toUpdate.length,\n workspaces: toUpdate.map((ws) => ({ id: ws.id, name: ws.name })),\n };\n },\n },\n\n /**\n * Background operations API\n */\n background: {\n /**\n * Start background operations\n */\n async start() {\n if (!jj.backgroundOps) {\n jj.backgroundOps = new BackgroundOps(jj, fs, dir);\n }\n await jj.backgroundOps.start();\n return { started: true };\n },\n\n /**\n * Stop background operations\n */\n async stop() {\n if (!jj.backgroundOps) {\n return { stopped: false };\n }\n await jj.backgroundOps.stop();\n return { stopped: true };\n },\n\n /**\n * Queue a background operation\n *\n * @param {Function} operation - Async operation\n * @param {Object} [opts] - Options\n */\n async queue(operation, opts) {\n if (!jj.backgroundOps) {\n throw new JJError('BACKGROUND_OPS_NOT_STARTED', 'Background operations not started', {\n suggestion: 'Call jj.background.start() first',\n });\n }\n return await jj.backgroundOps.queue(operation, opts);\n },\n\n /**\n * List background operations\n *\n * @param {Object} [opts] - Filter options\n */\n listOperations(opts) {\n if (!jj.backgroundOps) {\n return [];\n }\n return jj.backgroundOps.listOperations(opts);\n },\n\n /**\n * Enable auto-snapshot on file changes\n *\n * @param {Object} [opts] - Options\n */\n async enableAutoSnapshot(opts) {\n if (!jj.backgroundOps) {\n await this.start();\n }\n return await jj.backgroundOps.enableAutoSnapshot(opts);\n },\n\n /**\n * Watch a path for changes\n *\n * @param {string} path - Path to watch\n * @param {Function} callback - Callback(event, filename)\n */\n async watch(path, callback) {\n if (!jj.backgroundOps) {\n await this.start();\n }\n return await jj.backgroundOps.watch(path, callback);\n },\n\n /**\n * Unwatch a path\n *\n * @param {string} watcherId - Watcher ID\n */\n async unwatch(watcherId) {\n if (!jj.backgroundOps) {\n return;\n }\n await jj.backgroundOps.unwatch(watcherId);\n },\n },\n\n /**\n * Bookmark operations (branch management)\n */\n bookmark: {\n /**\n * List all bookmarks\n *\n * @returns {Promise<Array>} Array of bookmarks with name and changeId\n */\n async list() {\n await bookmarks.load();\n return bookmarks.list();\n },\n\n /**\n * Set/create a bookmark (matches `jj bookmark set`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name\n * @param {string} args.changeId - Change ID to point to\n * @returns {Promise<Object>} Bookmark info\n */\n async set(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n } else if (args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n }\n }\n\n if (!args || !args.name || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or changeId', {\n args,\n suggestion: 'Provide both: { name: \"main\", changeId: \"abc123...\" } (or use target/change/revision instead of changeId)',\n });\n }\n\n await bookmarks.load();\n await bookmarks.set(args.name, args.changeId);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark set ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: args.changeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, changeId: args.changeId };\n },\n\n /**\n * Create a new bookmark (matches `jj bookmark create`)\n *\n * Unlike `set()`, this will fail if the bookmark already exists.\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name\n * @param {string} [args.changeId] - Change ID to point to (default: working copy)\n * @returns {Promise<Object>} Bookmark info\n */\n async create(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n } else if (args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n }\n }\n\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name argument', {\n suggestion: 'Provide: { name: \"main\", changeId: \"abc123...\" } or { name: \"main\" } for working copy',\n });\n }\n\n // Default to working copy if no changeId provided\n let changeId = args.changeId;\n if (!changeId) {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n }\n\n await bookmarks.load();\n\n // Check if bookmark already exists\n const existingBookmark = await bookmarks.get(args.name);\n if (existingBookmark) {\n throw new JJError('BOOKMARK_EXISTS', `Bookmark ${args.name} already exists`, {\n suggestion: 'Use bookmark.set() to update an existing bookmark, or bookmark.move() to move it',\n });\n }\n\n await bookmarks.set(args.name, changeId);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark create ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: changeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, changeId };\n },\n\n /**\n * Move a bookmark to a different change (matches `jj bookmark move`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name\n * @param {string} args.to - Target change ID\n * @returns {Promise<Object>} Move result\n */\n async move(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.to) {\n args = { ...args, to: args.target };\n } else if (args.changeId && !args.to) {\n args = { ...args, to: args.changeId };\n } else if (args.change && !args.to) {\n args = { ...args, to: args.change };\n } else if (args.revision && !args.to) {\n args = { ...args, to: args.revision };\n }\n }\n\n if (!args || !args.name || !args.to) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or to', {\n args,\n suggestion: 'Provide both: { name: \"main\", to: \"abc123...\" } (or use target/changeId/change/revision instead of to)',\n });\n }\n\n await bookmarks.load();\n const bookmarkChangeId = await bookmarks.get(args.name);\n if (!bookmarkChangeId) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.name} not found`);\n }\n\n await bookmarks.move(args.name, args.to);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark move ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: args.to },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, from: bookmarkChangeId, to: args.to };\n },\n\n /**\n * Delete a bookmark (matches `jj bookmark delete`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name to delete\n * @returns {Promise<Object>} Deletion result\n */\n async delete(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name', {\n suggestion: 'Provide bookmark name: { name: \"feature\" }',\n });\n }\n\n await bookmarks.load();\n const bookmark = bookmarks.get(args.name);\n if (!bookmark) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.name} not found`);\n }\n\n await bookmarks.delete(args.name);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark delete ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { deleted: args.name };\n },\n\n /**\n * Rename a bookmark (matches `jj bookmark rename`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.oldName - Current bookmark name\n * @param {string} args.newName - New bookmark name\n * @returns {Promise<Object>} Rename result\n */\n async rename(args) {\n if (!args || !args.oldName || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing oldName or newName', {\n suggestion: 'Provide both: { oldName: \"feature\", newName: \"feature-v2\" }',\n });\n }\n\n await bookmarks.load();\n const bookmarkChangeId = await bookmarks.get(args.oldName);\n if (!bookmarkChangeId) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.oldName} not found`);\n }\n\n // Create new bookmark with same changeId, delete old\n await bookmarks.set(args.newName, bookmarkChangeId);\n await bookmarks.delete(args.oldName);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark rename ${args.oldName} to ${args.newName}`,\n parents: [],\n view: {\n bookmarks: { [args.newName]: bookmarkChangeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { oldName: args.oldName, newName: args.newName, changeId: bookmarkChangeId };\n },\n\n /**\n * Track a remote bookmark (matches `jj bookmark track`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name to track\n * @param {string} [args.remote='origin'] - Remote name\n * @returns {Promise<Object>} Track result\n */\n async track(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"main\", remote: \"origin\" }',\n });\n }\n\n const remote = args.remote || 'origin';\n const remoteBookmarkName = `${remote}/${args.name}`;\n\n // Store tracking info in bookmarks metadata\n await bookmarks.load();\n const tracking = bookmarks.tracking || {};\n tracking[args.name] = { remote, remoteName: args.name };\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark track ${args.name} from ${remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: { [remoteBookmarkName]: true },\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, remote, tracking: true };\n },\n\n /**\n * Untrack a remote bookmark (matches `jj bookmark untrack`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name to untrack\n * @returns {Promise<Object>} Untrack result\n */\n async untrack(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"main\" }',\n });\n }\n\n // Remove tracking info\n await bookmarks.load();\n const tracking = bookmarks.tracking || {};\n const wasTracking = tracking[args.name];\n delete tracking[args.name];\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark untrack ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, tracking: false, wasTracking: !!wasTracking };\n },\n\n /**\n * Forget a remote bookmark (matches `jj bookmark forget`)\n *\n * @param {Object} args - Bookmark arguments\n * @param {string} args.name - Bookmark name to forget\n * @param {string} [args.remote='origin'] - Remote name\n * @returns {Promise<Object>} Forget result\n */\n async forget(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"feature\", remote: \"origin\" }',\n });\n }\n\n const remote = args.remote || 'origin';\n\n // Untrack and remove local reference\n await bookmarks.load();\n const tracking = bookmarks.tracking || {};\n delete tracking[args.name];\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark forget ${args.name} from ${remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, remote, forgotten: true };\n },\n },\n\n /**\n * Branch operations (alias for bookmark.*)\n *\n * JJ CLI historically used \"branch\" terminology before standardizing on \"bookmark\".\n * This namespace provides full compatibility with both naming conventions.\n *\n * All branch.* methods are aliases that call the corresponding bookmark.* methods.\n */\n get branch() {\n // Return bookmark namespace as branch alias\n return jj.bookmark;\n },\n\n /**\n * Tag operations (immutable references)\n */\n tag: {\n /**\n * Create a new tag\n *\n * Tags are immutable references that cannot be moved once created.\n * Unlike bookmarks, tags are permanent markers typically used for releases.\n *\n * @param {Object} args - Tag arguments\n * @param {string} args.name - Tag name\n * @param {string} [args.changeId] - Change ID to tag (default: working copy)\n * @returns {Promise<{name: string, changeId: string}>} Created tag\n * @throws {JJError} If tag already exists or name is invalid\n */\n async create(args) {\n if (!args || args.name === undefined || args.name === null) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name argument', {\n suggestion: 'Provide: { name: \"v1.0.0\", changeId: \"abc123...\" } or { name: \"v1.0.0\" } for working copy',\n });\n }\n\n // Default to working copy if no changeId provided\n let changeId = args.changeId;\n if (!changeId) {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n }\n\n // TagStore.create() will validate the name format\n const result = await tags.create(args.name, changeId);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `tag create ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * List all tags\n *\n * @param {Object} [args] - Optional filter arguments\n * @param {string} [args.pattern] - Optional glob pattern (e.g., \"v1*\")\n * @returns {Promise<Array<{name: string, changeId: string}>>} List of tags\n */\n async list(args) {\n const pattern = args?.pattern;\n return await tags.list(pattern);\n },\n\n /**\n * Delete a tag\n *\n * @param {Object} args - Tag arguments\n * @param {string} args.name - Tag name to delete\n * @returns {Promise<{deleted: string}>} Deletion result\n * @throws {JJError} If tag doesn't exist\n */\n async delete(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name', {\n suggestion: 'Provide tag name: { name: \"v1.0.0\" }',\n });\n }\n\n await tags.delete(args.name);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `tag delete ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { deleted: args.name };\n },\n },\n\n /**\n * Remote operations (high-level, namespaced alternatives to git.fetch/push)\n */\n remote: {\n /**\n * Fetch from remote (alias to jj.git.fetch for convenience)\n *\n * @param {Object} args - Fetch arguments\n * @returns {Promise<Object>} Fetch result\n */\n async fetch(args) {\n return await jj.git.fetch(args);\n },\n\n /**\n * Push to remote (alias to jj.git.push for convenience)\n *\n * @param {Object} args - Push arguments\n * @returns {Promise<Object>} Push result\n */\n async push(args) {\n return await jj.git.push(args);\n },\n\n /**\n * Add a remote (alias to jj.git.remote.add for convenience)\n *\n * @param {Object} args - Remote arguments\n * @returns {Promise<Object>} Added remote info\n */\n async add(args) {\n return await jj.git.remote.add(args);\n },\n },\n\n /**\n * Configuration management\n */\n config: {\n /**\n * Get a configuration value (matches `jj config get`)\n *\n * @param {Object} args - Config arguments\n * @param {string} args.name - Config key (e.g., 'user.name')\n * @returns {Promise<any>} Config value\n */\n async get(args) {\n // Support both 'key' and 'name' parameters\n const key = args?.key || args?.name;\n\n if (!args || !key) {\n throw new JJError('INVALID_ARGUMENT', 'Missing config key/name', {\n suggestion: 'Provide config key: { key: \"user.name\" }',\n });\n }\n\n // Ensure config is loaded at least once\n if (!userConfig.config) {\n await userConfig.load();\n }\n\n // Use userConfig.get() to preserve programmatic config\n return userConfig.get(key);\n },\n\n /**\n * Set a configuration value (matches `jj config set`)\n *\n * @param {Object} args - Config arguments\n * @param {string} args.name - Config key (e.g., 'user.name')\n * @param {any} args.value - Config value\n * @returns {Promise<Object>} Set result\n */\n async set(args) {\n // Support both 'key' and 'name' parameters\n const key = args?.key || args?.name;\n\n if (!args || !key || args.value === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing key/name or value', {\n suggestion: 'Provide both: { key: \"user.name\", value: \"John Doe\" }',\n });\n }\n\n await userConfig.load();\n\n // Handle nested keys (e.g., 'user.name')\n const parts = key.split('.');\n let obj = userConfig.config;\n\n for (let i = 0; i < parts.length - 1; i++) {\n if (!obj[parts[i]] || typeof obj[parts[i]] !== 'object') {\n obj[parts[i]] = {};\n }\n obj = obj[parts[i]];\n }\n\n obj[parts[parts.length - 1]] = args.value;\n await userConfig.save();\n\n return { key, name: key, value: args.value };\n },\n\n /**\n * List all configuration values (matches `jj config list`)\n *\n * @returns {Promise<Object>} All configuration values\n */\n async list() {\n await userConfig.load();\n return userConfig.config;\n },\n\n /**\n * Reload configuration (including workspace-specific config)\n * v0.35.0: Loads workspace-config.json if present\n * v0.36.0: Accepts optional config object for programmatic configuration\n *\n * @param {Object} [opts] - Optional config options\n * @param {Object} [opts.workspace] - Workspace-specific config to merge (highest priority)\n * @param {Object} [opts.override] - Config object to merge over loaded config\n * @returns {Promise<void>}\n *\n * @example\n * // Load from files only\n * await repo.config.load();\n *\n * @example\n * // Programmatic workspace config (no file I/O needed)\n * await repo.config.load({\n * workspace: { user: { email: 'test@example.com' } }\n * });\n *\n * @example\n * // Override global config programmatically\n * await repo.config.load({\n * override: { test: { value: 'override' } }\n * });\n */\n async load(opts) {\n await userConfig.load(opts);\n },\n },\n\n /**\n * Template helper functions (v0.36.0)\n *\n * Utilities for displaying and formatting JJ data\n */\n template: {\n /**\n * Get files modified in a change\n *\n * @param {string} changeId - Change ID\n * @returns {Promise<string[]>} Array of file paths\n */\n async files(changeId) {\n await graph.load();\n const change = await graph.getChange(changeId);\n if (!change || !change.fileSnapshot) {\n return [];\n }\n return Object.keys(change.fileSnapshot);\n },\n\n /**\n * Join array elements with a separator\n *\n * @param {string[]} array - Array of strings\n * @param {string} separator - Separator string\n * @returns {string} Joined string\n */\n join(array, separator) {\n if (!Array.isArray(array)) {\n return '';\n }\n return array.join(separator);\n },\n\n /**\n * Format path for display\n *\n * @param {string} path - File path\n * @returns {string} Formatted path\n */\n format_path(path) {\n if (!path) {\n return '';\n }\n // Simple formatting: just return the path as-is for now\n // In real JJ, this might apply colors, truncation, etc.\n return path;\n },\n },\n\n /**\n * Sparse checkout management\n *\n * Controls which paths are materialized in the working copy.\n * Useful for large repositories where you only need specific files.\n */\n sparse: {\n /**\n * List current sparse patterns\n *\n * @returns {Promise<string[]>} Array of sparse patterns\n */\n async list() {\n await workingCopy.load();\n return workingCopy.getSparsePatterns();\n },\n\n /**\n * Set sparse patterns (replaces all existing patterns)\n *\n * @param {Object} args - Arguments\n * @param {string[]} args.patterns - Array of glob patterns\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async set(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"src/**\", \"README.md\"] }',\n });\n }\n\n await workingCopy.load();\n await workingCopy.setSparsePatterns(args.patterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse set ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: args.patterns };\n },\n\n /**\n * Add patterns to sparse checkout\n *\n * @param {Object} args - Arguments\n * @param {string[]} args.patterns - Array of glob patterns to add\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async add(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"tests/**\"] }',\n });\n }\n\n await workingCopy.load();\n const currentPatterns = workingCopy.getSparsePatterns();\n\n // Add new patterns, avoiding duplicates\n const updatedPatterns = [...currentPatterns];\n for (const pattern of args.patterns) {\n if (!updatedPatterns.includes(pattern)) {\n updatedPatterns.push(pattern);\n }\n }\n\n await workingCopy.setSparsePatterns(updatedPatterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse add ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: updatedPatterns };\n },\n\n /**\n * Remove patterns from sparse checkout\n *\n * @param {Object} args - Arguments\n * @param {string[]} args.patterns - Array of glob patterns to remove\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async remove(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"tests/**\"] }',\n });\n }\n\n await workingCopy.load();\n const currentPatterns = workingCopy.getSparsePatterns();\n\n // Remove specified patterns\n const updatedPatterns = currentPatterns.filter(p => !args.patterns.includes(p));\n\n await workingCopy.setSparsePatterns(updatedPatterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse remove ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: updatedPatterns };\n },\n\n /**\n * Reset to full checkout (remove all sparse patterns)\n *\n * @returns {Promise<{patterns: string[]}>} Result with empty patterns\n */\n async reset() {\n await workingCopy.load();\n await workingCopy.setSparsePatterns([]);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: 'sparse reset (full checkout)',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: [] };\n },\n\n /**\n * Clear all patterns (empty working copy)\n * Alias for reset()\n *\n * @returns {Promise<{patterns: string[]}>} Result with empty patterns\n */\n async clear() {\n return await this.reset();\n },\n },\n\n /**\n * Binary search to find first bad change (bisect)\n *\n * @status PARTIAL - Basic structure implemented, full bisect logic pending\n */\n bisect: {\n /**\n * Start bisect session\n *\n * @param {Object} args - Bisect arguments\n * @param {string} args.good - Known good change ID\n * @param {string} args.bad - Known bad change ID\n * @returns {Promise<Object>} Bisect state\n */\n async start(args) {\n if (!args || !args.good || !args.bad) {\n throw new JJError('INVALID_ARGUMENT', 'Both good and bad change IDs required', {\n suggestion: 'Provide: { good: \"changeId1\", bad: \"changeId2\" }',\n });\n }\n\n await graph.load();\n\n // Check if bisect is already active\n const existingState = await storage.read('bisect/state.json');\n if (existingState && existingState.active) {\n throw new JJError('BISECT_ALREADY_ACTIVE', 'Bisect session already in progress', {\n suggestion: 'Use bisect.reset() to end current session first',\n });\n }\n\n // Verify changes exist\n const goodChange = await graph.getChange(args.good);\n const badChange = await graph.getChange(args.bad);\n\n if (!goodChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Good change ${args.good} not found`);\n }\n if (!badChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Bad change ${args.bad} not found`);\n }\n\n // Find all changes between good and bad\n const candidates = await this._findBisectCandidates(args.good, args.bad);\n\n // Pick the middle change\n // If no candidates between good and bad, test bad itself\n const current = candidates.length > 0\n ? candidates[Math.floor(candidates.length / 2)]\n : args.bad;\n\n const bisectState = {\n active: true,\n good: [args.good],\n bad: [args.bad],\n candidates,\n current,\n remaining: candidates.length > 0 ? Math.ceil(Math.log2(candidates.length + 1)) : 0,\n found: false,\n };\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Mark current change as good\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async good() {\n const bisectState = await storage.read('bisect/state.json');\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Add current to good set\n if (bisectState.current && !bisectState.good.includes(bisectState.current)) {\n bisectState.good.push(bisectState.current);\n }\n\n // Update candidates and pick next\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Mark current change as bad\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async bad() {\n const bisectState = await storage.read('bisect/state.json');\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Add current to bad set\n if (bisectState.current && !bisectState.bad.includes(bisectState.current)) {\n bisectState.bad.push(bisectState.current);\n }\n\n // Update candidates and pick next\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Skip current change\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async skip() {\n const bisectState = await storage.read('bisect/state.json');\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Remove current from candidates\n if (bisectState.current) {\n bisectState.candidates = bisectState.candidates.filter(c => c !== bisectState.current);\n }\n\n // Pick next candidate\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Reset/end bisect session\n *\n * @returns {Promise<Object>} Final state\n */\n async reset() {\n await storage.write('bisect/state.json', { active: false });\n return { active: false };\n },\n\n /**\n * Get bisect status\n *\n * @returns {Promise<Object>} Bisect state\n */\n async status() {\n const bisectState = await storage.read('bisect/state.json');\n return bisectState || { active: false };\n },\n\n /**\n * Find candidate changes between good and bad\n *\n * @private\n * @param {string} goodId - Good change ID\n * @param {string} badId - Bad change ID\n * @returns {Promise<string[]>} List of candidate change IDs\n */\n async _findBisectCandidates(goodId, badId) {\n await graph.load();\n\n // Find all ancestors of bad that are descendants of good\n const badAncestors = graph.getAncestors(badId);\n const goodAncestors = graph.getAncestors(goodId);\n\n // Candidates are changes that are:\n // - Ancestors of bad (or bad itself)\n // - Descendants of good (or good itself)\n // - Not good or bad themselves\n const candidates = [];\n\n for (const changeId of badAncestors) {\n if (changeId === goodId) {\n continue; // Don't include good itself\n }\n if (changeId === badId) {\n continue; // Don't include bad itself\n }\n\n // Check if this change is a descendant of good\n const ancestors = graph.getAncestors(changeId);\n if (ancestors.includes(goodId)) {\n candidates.push(changeId);\n }\n }\n\n return candidates;\n },\n\n /**\n * Update bisect state after marking good/bad/skip\n *\n * @private\n * @param {Object} bisectState - Current bisect state\n */\n async _updateBisectState(bisectState) {\n await graph.load();\n\n // Filter candidates: remove any that are now known to be good or bad\n const newCandidates = [];\n\n for (const candidateId of bisectState.candidates) {\n // Skip if already marked as good or bad\n if (bisectState.good.includes(candidateId) || bisectState.bad.includes(candidateId)) {\n continue;\n }\n\n // Check if candidate is an ancestor of any good change (then it's good)\n let isGood = false;\n for (const goodId of bisectState.good) {\n const goodAncestors = graph.getAncestors(goodId);\n if (goodAncestors.includes(candidateId)) {\n isGood = true;\n break;\n }\n }\n\n if (isGood) {\n continue;\n }\n\n // Check if any bad change is an ancestor of candidate (then candidate is bad)\n let isBad = false;\n for (const badId of bisectState.bad) {\n const candidateAncestors = graph.getAncestors(candidateId);\n if (candidateAncestors.includes(badId)) {\n isBad = true;\n break;\n }\n }\n\n if (isBad) {\n continue;\n }\n\n newCandidates.push(candidateId);\n }\n\n bisectState.candidates = newCandidates;\n bisectState.remaining = newCandidates.length > 0 ? Math.ceil(Math.log2(newCandidates.length + 1)) : 0;\n\n // Pick the middle candidate\n if (newCandidates.length > 0) {\n bisectState.current = newCandidates[Math.floor(newCandidates.length / 2)];\n } else {\n // No more candidates - we found the first bad change\n bisectState.found = true;\n bisectState.current = null;\n\n // The first bad change is the one in the bad set that has no bad ancestors\n for (const badId of bisectState.bad) {\n const badAncestors = graph.getAncestors(badId);\n const hasChildBad = bisectState.bad.some(otherId => {\n if (otherId === badId) return false;\n return badAncestors.includes(otherId);\n });\n\n if (!hasChildBad) {\n bisectState.firstBad = badId;\n break;\n }\n }\n }\n },\n },\n\n /**\n * Show file differences between revisions (matches `jj diff`)\n *\n * @param {Object} [args={}] - Diff arguments\n * @param {string} [args.from] - Source revision (defaults to parent of working copy)\n * @param {string} [args.to] - Target revision (defaults to working copy)\n * @param {string[]} [args.paths] - Specific paths to diff\n * @returns {Promise<Object>} Diff result with changed files\n */\n async diff(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const toChangeId = args.to || workingCopy.getCurrentChangeId();\n const toChange = await graph.getChange(toChangeId);\n if (!toChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Target change ${toChangeId} not found`);\n }\n\n // Default 'from' to parent of 'to'\n let fromChangeId = args.from;\n if (!fromChangeId) {\n fromChangeId = toChange.parents && toChange.parents.length > 0 ? toChange.parents[0] : null;\n }\n\n const fromChange = fromChangeId ? await graph.getChange(fromChangeId) : null;\n\n const fromFiles = fromChange?.fileSnapshot || {};\n const toFiles = toChange.fileSnapshot || {};\n\n // Find all paths that changed\n const allPaths = new Set([...Object.keys(fromFiles), ...Object.keys(toFiles)]);\n const diffs = [];\n\n for (const filePath of allPaths) {\n // Filter by paths if specified\n if (args.paths && args.paths.length > 0) {\n if (!args.paths.includes(filePath)) {\n continue;\n }\n }\n\n const fromContent = fromFiles[filePath] || '';\n const toContent = toFiles[filePath] || '';\n\n if (fromContent !== toContent) {\n diffs.push({\n path: filePath,\n status: !fromContent ? 'added' : !toContent ? 'deleted' : 'modified',\n fromContent,\n toContent,\n });\n }\n }\n\n return {\n from: fromChangeId,\n to: toChangeId,\n files: diffs,\n };\n },\n\n /**\n * Move working copy to next child revision (matches `jj next`)\n *\n * @param {Object} [args={}] - Next arguments\n * @param {number} [args.offset=1] - Number of generations to move forward\n * @returns {Promise<Object>} Updated working copy info\n */\n async next(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const offset = args.offset || 1;\n const currentChangeId = workingCopy.getCurrentChangeId();\n const currentChange = await graph.getChange(currentChangeId);\n\n if (!currentChange) {\n throw new JJError('CHANGE_NOT_FOUND', 'Current working copy change not found');\n }\n\n // Find children\n await graph.load();\n const allChanges = await graph.getAllChanges();\n const children = allChanges.filter(c => c.parents && c.parents.includes(currentChangeId));\n\n if (children.length === 0) {\n throw new JJError('NO_CHILDREN', 'No child revisions found');\n }\n\n // Take first child for simplicity (could be enhanced to handle multiple children)\n let targetChange = children[0];\n\n // Move forward 'offset' times\n for (let i = 1; i < offset; i++) {\n const nextChildren = allChanges.filter(c => c.parents && c.parents.includes(targetChange.changeId));\n if (nextChildren.length === 0) {\n throw new JJError('INSUFFICIENT_CHILDREN', `Cannot move forward ${offset} generations`);\n }\n targetChange = nextChildren[0];\n }\n\n // Update working copy\n await jj.edit({ changeId: targetChange.changeId });\n\n return {\n from: currentChangeId,\n to: targetChange.changeId,\n changeId: targetChange.changeId, // Add for convenience\n offset,\n };\n },\n\n /**\n * Move working copy to previous parent revision (matches `jj prev`)\n *\n * @param {Object} [args={}] - Prev arguments\n * @param {number} [args.offset=1] - Number of generations to move backward\n * @returns {Promise<Object>} Updated working copy info\n */\n async prev(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const offset = args.offset || 1;\n let currentChangeId = workingCopy.getCurrentChangeId();\n\n // Move backward 'offset' times\n for (let i = 0; i < offset; i++) {\n const currentChange = await graph.getChange(currentChangeId);\n if (!currentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${currentChangeId} not found`);\n }\n\n if (!currentChange.parents || currentChange.parents.length === 0) {\n throw new JJError('NO_PARENTS', 'No parent revisions found');\n }\n\n // Take first parent for simplicity\n currentChangeId = currentChange.parents[0];\n }\n\n // Update working copy\n await jj.edit({ changeId: currentChangeId });\n\n return {\n from: workingCopy.getCurrentChangeId(),\n to: currentChangeId,\n changeId: currentChangeId, // Add for convenience\n offset,\n };\n },\n\n /**\n * Create copies of changes (matches `jj duplicate`)\n *\n * @param {Object} [args={}] - Duplicate arguments\n * @param {string[]} [args.changes] - Change IDs to duplicate (defaults to working copy)\n * @param {string} [args.destination] - Where to place duplicates\n * @returns {Promise<Object>} Duplication result with new change IDs\n */\n async duplicate(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Support both changeId (singular) and changes (plural)\n const changesToDup = args.changes ||\n (args.changeId ? [args.changeId] : [workingCopy.getCurrentChangeId()]);\n const duplicatedChanges = [];\n\n for (const changeId of changesToDup) {\n const originalChange = await graph.getChange(changeId);\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Create new change as a copy\n const newChangeId = generateChangeId();\n const user = userConfig.getUser();\n const newChange = {\n ...originalChange,\n changeId: newChangeId,\n commitId: null, // New change doesn't have a commit yet\n description: originalChange.description + ' (duplicate)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(newChange);\n duplicatedChanges.push({\n original: changeId,\n duplicate: newChangeId,\n });\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `duplicate ${changesToDup.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: duplicatedChanges.map(d => d.duplicate),\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Return both formats for compatibility\n return {\n duplicated: duplicatedChanges,\n changeIds: duplicatedChanges.map(d => d.duplicate)\n };\n },\n\n /**\n * Restore paths from another revision (matches `jj restore`)\n *\n * @param {Object} args - Restore arguments\n * @param {string} [args.from] - Source revision to restore from\n * @param {string} [args.to] - Target revision to restore to (defaults to working copy)\n * @param {string[]} [args.paths] - Specific paths to restore (defaults to all)\n * @returns {Promise<Object>} Restore result\n */\n async restore(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const toChangeId = args.to || workingCopy.getCurrentChangeId();\n const toChange = await graph.getChange(toChangeId);\n if (!toChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Target change ${toChangeId} not found`);\n }\n\n // Default 'from' to parent\n let fromChangeId = args.from;\n if (!fromChangeId) {\n fromChangeId = toChange.parents && toChange.parents.length > 0 ? toChange.parents[0] : null;\n }\n\n const fromChange = fromChangeId ? await graph.getChange(fromChangeId) : null;\n if (!fromChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Source change ${fromChangeId} not found`);\n }\n\n const restoredPaths = [];\n const filesToRestore = args.paths || Object.keys(fromChange.fileSnapshot || {});\n\n for (const filePath of filesToRestore) {\n const content = fromChange.fileSnapshot[filePath];\n if (content !== undefined) {\n await jj.write({ path: filePath, data: content });\n restoredPaths.push(filePath);\n }\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `restore ${restoredPaths.length} path(s) from ${fromChangeId}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: toChangeId,\n },\n });\n\n return {\n from: fromChangeId,\n to: toChangeId,\n restoredPaths,\n };\n },\n\n /**\n * Make multiple changes siblings (parallelize them)\n *\n * This operation takes multiple changes and gives them the same parent,\n * making them siblings in the change graph instead of ancestors/descendants.\n *\n * @param {Object} args - Arguments\n * @param {Array<string>} args.changes - Change IDs to parallelize\n * @param {string} [args.parent] - Optional parent to use (defaults to common ancestor)\n * @returns {Promise<Object>} Operation result with parallelized changes\n *\n * @example\n * // Make three changes siblings\n * await jj.parallelize({\n * changes: ['abc123', 'def456', 'ghi789']\n * });\n *\n * // Make changes siblings with specific parent\n * await jj.parallelize({\n * changes: ['abc123', 'def456'],\n * parent: 'main-change-id'\n * });\n */\n async parallelize(args) {\n if (!args || !args.changes || !Array.isArray(args.changes)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid changes array', {\n suggestion: 'Provide an array of change IDs: { changes: [changeId1, changeId2, ...] }',\n });\n }\n\n if (args.changes.length < 2) {\n throw new JJError('INVALID_ARGUMENT', 'At least 2 changes are required to parallelize', {\n suggestion: 'Provide at least 2 change IDs in the changes array',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n\n // Validate all changes exist\n const changes = [];\n for (const changeId of args.changes) {\n const change = await graph.getChange(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n changes.push(change);\n }\n\n // Determine the parent to use\n let parentId;\n if (args.parent) {\n // Use specified parent\n const parentChange = await graph.getChange(args.parent);\n if (!parentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Parent change ${args.parent} not found`);\n }\n parentId = args.parent;\n } else {\n // Find common ancestor of all changes\n if (args.changes.length === 2) {\n const commonAncestors = await revset.findCommonAncestor(args.changes[0], args.changes[1]);\n if (commonAncestors.length === 0) {\n throw new JJError('NO_COMMON_ANCESTOR', 'Changes have no common ancestor', {\n suggestion: 'Specify a parent explicitly using the parent parameter',\n });\n }\n parentId = commonAncestors[0];\n } else {\n // For more than 2 changes, find common ancestor iteratively\n let commonAncestor = args.changes[0];\n for (let i = 1; i < args.changes.length; i++) {\n const ancestors = await revset.findCommonAncestor(commonAncestor, args.changes[i]);\n if (ancestors.length === 0) {\n throw new JJError('NO_COMMON_ANCESTOR', 'Changes have no common ancestor', {\n suggestion: 'Specify a parent explicitly using the parent parameter',\n });\n }\n commonAncestor = ancestors[0];\n }\n parentId = commonAncestor;\n }\n }\n\n // Update all changes to have the same parent\n const parallelizedChanges = [];\n for (const change of changes) {\n // Don't modify if already a direct child of the target parent\n if (change.parents.length === 1 && change.parents[0] === parentId) {\n parallelizedChanges.push({\n changeId: change.changeId,\n alreadyParallel: true,\n });\n continue;\n }\n\n const oldParents = [...change.parents]; // Store old parents before modifying\n change.parents = [parentId];\n await graph.updateChange(change);\n parallelizedChanges.push({\n changeId: change.changeId,\n oldParents,\n newParent: parentId,\n });\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `parallelize ${args.changes.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: args.changes,\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n parallelized: parallelizedChanges,\n parent: parentId,\n };\n },\n };\n\n // ============================================================================\n // UNSUPPORTED FEATURE STUBS\n // These features cannot/should not be implemented in a library API\n // ============================================================================\n\n /**\n * diffedit - Touch up changes with diff editor (STUB)\n *\n * @status UNSUPPORTED - Requires interactive diff editor\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.diffedit = async function (args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'diffedit requires interactive diff editor',\n {\n feature: 'diffedit',\n reason: 'Interactive tools not supported in library API',\n alternative: 'Use jj.diff() to view changes, then jj.edit() to modify the change',\n suggestion: 'For programmatic editing, use jj.write() to update files and jj.describe() to update the description',\n }\n );\n };\n\n /**\n * fix - Update files with formatting fixes (STUB)\n *\n * @status UNSUPPORTED - Requires external formatters\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.fix = async function (args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Automatic formatting requires external tools',\n {\n feature: 'fix',\n reason: 'External formatters (prettier, eslint, etc.) must be integrated separately',\n alternative: 'Run formatters separately, then use jj.write() to update files',\n suggestion: 'Consider using pre-commit hooks to run formatters automatically',\n }\n );\n };\n\n /**\n * sign - Cryptographically sign a revision (STUB)\n *\n * @status UNSUPPORTED - Cryptographic signing not implemented\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.sign = async function (args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Cryptographic signing not implemented',\n {\n feature: 'sign',\n reason: 'GPG/SSH signing requires complex key management and security considerations',\n alternative: 'Use Git\\'s signing features with jj.git.push() for signed commits',\n suggestion: 'Sign commits at the Git layer using git commit --gpg-sign',\n }\n );\n };\n\n /**\n * unsign - Remove cryptographic signature (STUB)\n *\n * @status UNSUPPORTED - Cryptographic signing not implemented\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.unsign = async function (args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Cryptographic signing not implemented',\n {\n feature: 'unsign',\n reason: 'Signing features not implemented in isomorphic-jj',\n alternative: 'Modify commits using jj.metaedit() if you need to change metadata',\n }\n );\n };\n\n /**\n * util - CLI utility commands (STUB namespace)\n *\n * @status UNSUPPORTED - CLI-specific utilities\n */\n jj.util = {\n /**\n * completion - Generate shell completions (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async completion() {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Shell completion generation is CLI-specific',\n {\n feature: 'util.completion',\n reason: 'Completions are for command-line shells, not library APIs',\n alternative: 'Not applicable - use JJ CLI for shell completions',\n }\n );\n },\n\n /**\n * gc - Garbage collection (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async gc() {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Garbage collection is a CLI utility',\n {\n feature: 'util.gc',\n reason: 'Storage management handled automatically by isomorphic-jj',\n alternative: 'Repository cleanup happens automatically',\n }\n );\n },\n\n /**\n * exec - Execute command with JJ environment (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async exec(args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Command execution is a CLI utility',\n {\n feature: 'util.exec',\n reason: 'Shell command execution not appropriate for library API',\n alternative: 'Use Node.js child_process module directly if needed',\n }\n );\n },\n\n /**\n * configSchema - Print config schema (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async configSchema() {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Config schema output is a CLI utility',\n {\n feature: 'util.configSchema',\n reason: 'Schema introspection not needed for programmatic usage',\n alternative: 'See TypeScript types or API documentation for config structure',\n }\n );\n },\n };\n\n /**\n * gerrit - Gerrit Code Review integration (STUB namespace)\n *\n * @status UNSUPPORTED - Platform-specific integration\n */\n jj.gerrit = {\n /**\n * upload - Upload changes to Gerrit (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async upload(args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Gerrit integration not supported',\n {\n feature: 'gerrit.upload',\n reason: 'Gerrit-specific features not implemented',\n alternative: 'Use jj.git.push() with appropriate Gerrit remote configuration',\n suggestion: 'Configure Gerrit remote and use standard Git push with refs/for/ syntax',\n }\n );\n },\n };\n\n // Add EventTarget capabilities to jj instance\n const eventTarget = new EventTarget();\n jj.addEventListener = eventTarget.addEventListener.bind(eventTarget);\n jj.removeEventListener = eventTarget.removeEventListener.bind(eventTarget);\n jj.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget);\n\n // Set jj instance on merge drivers for event emission\n mergeDrivers.jj = jj;\n\n return jj;\n}\n","/**\n * Built-in merge drivers for common file types\n *\n * These drivers extend JJ's merge algorithm with domain-specific logic.\n */\n\n/**\n * Deep merge for JSON objects\n * Recursively merges objects, with theirs taking precedence on conflicts\n *\n * @param {Object} base - Base object\n * @param {Object} ours - Our changes\n * @param {Object} theirs - Their changes\n * @returns {Object} Merged object\n */\nfunction deepMergeJSON(base, ours, theirs) {\n // If all are identical, return any\n if (JSON.stringify(ours) === JSON.stringify(theirs)) {\n return ours;\n }\n\n // If ours is same as base, take theirs\n if (JSON.stringify(ours) === JSON.stringify(base)) {\n return theirs;\n }\n\n // If theirs is same as base, take ours\n if (JSON.stringify(theirs) === JSON.stringify(base)) {\n return ours;\n }\n\n // Both sides changed - need smart merge\n if (typeof ours !== 'object' || typeof theirs !== 'object' || Array.isArray(ours) || Array.isArray(theirs)) {\n // Primitives or arrays - conflict\n return null;\n }\n\n // Merge objects\n const result = { ...base };\n\n // Get all keys\n const allKeys = new Set([\n ...Object.keys(base || {}),\n ...Object.keys(ours || {}),\n ...Object.keys(theirs || {}),\n ]);\n\n for (const key of allKeys) {\n const baseVal = base?.[key];\n const oursVal = ours?.[key];\n const theirsVal = theirs?.[key];\n\n if (JSON.stringify(oursVal) === JSON.stringify(theirsVal)) {\n // Both sides agree\n result[key] = oursVal;\n } else if (JSON.stringify(oursVal) === JSON.stringify(baseVal)) {\n // We didn't change it, take theirs\n result[key] = theirsVal;\n } else if (JSON.stringify(theirsVal) === JSON.stringify(baseVal)) {\n // They didn't change it, take ours\n result[key] = oursVal;\n } else {\n // Both changed differently\n if (typeof oursVal === 'object' && typeof theirsVal === 'object' && !Array.isArray(oursVal) && !Array.isArray(theirsVal)) {\n // Recurse for nested objects\n const merged = deepMergeJSON(baseVal || {}, oursVal, theirsVal);\n if (merged === null) {\n return null; // Conflict in nested object\n }\n result[key] = merged;\n } else {\n // Can't merge - conflict\n return null;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Generic JSON merge driver\n *\n * Attempts to merge JSON files intelligently by merging objects.\n * Falls back to conflict markers if merge isn't possible.\n */\nexport async function jsonDriver({ path, content }) {\n const { base, ours, theirs } = content;\n\n try {\n const baseObj = base ? JSON.parse(base) : {};\n const oursObj = ours ? JSON.parse(ours) : {};\n const theirsObj = theirs ? JSON.parse(theirs) : {};\n\n const merged = deepMergeJSON(baseObj, oursObj, theirsObj);\n\n if (merged !== null) {\n // Successful merge\n return {\n content: JSON.stringify(merged, null, 2) + '\\n',\n hasConflict: false,\n };\n } else {\n // Conflict - return with markers\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [{\n type: 'json-merge-conflict',\n message: 'Both sides modified the same field with different values',\n }],\n };\n }\n } catch (error) {\n // JSON parsing failed - fall back to text conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [{\n type: 'json-parse-error',\n message: `JSON parsing failed: ${error.message}`,\n }],\n };\n }\n}\n\n/**\n * package.json merge driver\n *\n * Smart merging for Node.js package.json files:\n * - Union merge for dependencies/devDependencies\n * - Take theirs for version (semver conflicts are hard)\n * - Merge other fields intelligently\n */\nexport async function packageJsonDriver({ path, content }) {\n const { base, ours, theirs } = content;\n\n try {\n const baseObj = base ? JSON.parse(base) : {};\n const oursObj = ours ? JSON.parse(ours) : {};\n const theirsObj = theirs ? JSON.parse(theirs) : {};\n\n // Start with base\n const merged = { ...baseObj };\n\n // Merge top-level fields\n for (const key of Object.keys({ ...oursObj, ...theirsObj })) {\n if (key === 'dependencies' || key === 'devDependencies' || key === 'peerDependencies' || key === 'optionalDependencies') {\n // Union merge dependencies\n merged[key] = {\n ...baseObj[key],\n ...oursObj[key],\n ...theirsObj[key], // theirs wins on conflicts\n };\n } else if (key === 'version') {\n // Version conflicts are tricky - take theirs\n merged[key] = theirsObj[key] || oursObj[key] || baseObj[key];\n } else if (key === 'scripts') {\n // Merge scripts\n merged[key] = {\n ...baseObj[key],\n ...oursObj[key],\n ...theirsObj[key], // theirs wins\n };\n } else {\n // Other fields - use standard logic\n const oursVal = oursObj[key];\n const theirsVal = theirsObj[key];\n const baseVal = baseObj[key];\n\n if (JSON.stringify(oursVal) === JSON.stringify(theirsVal)) {\n merged[key] = oursVal;\n } else if (JSON.stringify(oursVal) === JSON.stringify(baseVal)) {\n merged[key] = theirsVal;\n } else if (JSON.stringify(theirsVal) === JSON.stringify(baseVal)) {\n merged[key] = oursVal;\n } else {\n // Conflict - take theirs\n merged[key] = theirsVal;\n }\n }\n }\n\n return {\n content: JSON.stringify(merged, null, 2) + '\\n',\n hasConflict: false,\n metadata: {\n driver: 'package.json',\n mergedDependencies: Object.keys(merged.dependencies || {}).length,\n mergedDevDependencies: Object.keys(merged.devDependencies || {}).length,\n },\n };\n } catch (error) {\n // Parsing failed - fall back to conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [{\n type: 'parse-error',\n message: `package.json parsing failed: ${error.message}`,\n }],\n };\n }\n}\n\n/**\n * YAML merge driver (basic)\n *\n * Note: This is a simple implementation. For production use, consider\n * using a proper YAML library like 'js-yaml'.\n */\nexport async function yamlDriver({ path, content }) {\n const { base, ours, theirs } = content;\n\n // Simple YAML merge - just do text-based for now\n // A full implementation would parse YAML and do object merging\n\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n return { content: ours, hasConflict: false };\n }\n\n // Conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [{\n type: 'yaml-conflict',\n message: 'YAML files modified on both sides',\n }],\n };\n}\n\n/**\n * Markdown merge driver (section-based)\n *\n * Attempts to merge markdown files by sections (headers).\n * Falls back to conflict markers for complex cases.\n */\nexport async function markdownDriver({ path, content }) {\n const { base, ours, theirs } = content;\n\n // Simple markdown merge - just text-based for now\n // A full implementation would parse sections and merge by header\n\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n return { content: ours, hasConflict: false };\n }\n\n // For now, fall back to conflict markers\n // TODO: Implement section-based merging\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [{\n type: 'markdown-conflict',\n message: 'Markdown files modified on both sides',\n }],\n };\n}\n\n/**\n * Get all built-in drivers as a map\n *\n * @returns {Object} Map of pattern -> driver function\n */\nexport function getBuiltInDrivers() {\n return {\n 'package.json': packageJsonDriver,\n '*.json': jsonDriver,\n '*.yaml': yamlDriver,\n '*.yml': yamlDriver,\n '*.md': markdownDriver,\n '*.markdown': markdownDriver,\n };\n}\n"],"names":["matchesPattern","__filename","fileURLToPath","__dirname","inDist","protoDir","crypto"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/errors.js","../src/core/storage-manager.js","../src/utils/validation.js","../src/core/change-graph.js","../src/core/working-copy.js","../src/utils/id-generation.js","../src/core/operation-log.js","../src/core/bookmark-store.js","../src/core/tag-store.js","../src/core/revset-engine.js","../src/core/conflict-model.js","../src/core/merge-driver-registry.js","../src/core/workspace-manager.js","../src/core/background-ops.js","../src/core/user-config.js","../src/core/jj-checkout.js","../src/core/jj-tree-state.js","../src/core/jj-operation-store.js","../src/core/jj-view-store.js","../src/backend/isomorphic-git-backend.js","../src/api/repository.js","../src/drivers/built-in-drivers.js"],"sourcesContent":["/**\n * JJError - Custom error class for isomorphic-jj\n *\n * Provides structured errors with error codes, context, and user-actionable suggestions.\n */\nexport class JJError extends Error {\n /**\n * @param {string} code - Error code (e.g., 'CHANGE_NOT_FOUND')\n * @param {string} message - Human-readable error message\n * @param {Object.<string, any>} [context] - Additional error context. May\n * include a `suggestion` string plus any other diagnostic fields.\n */\n constructor(code, message, context = {}) {\n super(message);\n this.name = 'JJError';\n this.code = code;\n this.context = context;\n this.details = context; // Alias for better ergonomics\n this.suggestion = context.suggestion;\n }\n}\n","/**\n * Storage Manager for isomorphic-jj\n *\n * Manages JSON storage in .jj directory with atomic writes and caching.\n */\n\nimport { JJError } from '../utils/errors.js';\n\nexport class Storage {\n /**\n * @param {any} fs - Filesystem implementation (Node fs, LightningFS, etc.)\n * @param {string} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.jjDir = `${dir}/.jj`;\n this.repoDir = `${dir}/.jj/repo`; // Core repo data\n this.workingCopyDir = `${dir}/.jj/working_copy`; // Default workspace working copy\n this.cache = new Map();\n }\n\n /**\n * Initialize .jj directory structure (JJ workspace model)\n *\n * Structure:\n * .jj/\n * repo/ - Core repository data (shared by all workspaces)\n * store/ - Change graph, operations, bookmarks\n * working_copy/ - Default workspace working copy state\n */\n async init() {\n try {\n // Create main directories\n await this.fs.promises.mkdir(this.jjDir, { recursive: true });\n await this.fs.promises.mkdir(this.repoDir, { recursive: true });\n await this.fs.promises.mkdir(this.workingCopyDir, { recursive: true });\n\n // Create repo subdirectories\n await this.fs.promises.mkdir(`${this.repoDir}/store`, { recursive: true });\n await this.fs.promises.mkdir(`${this.repoDir}/op_log`, { recursive: true });\n await this.fs.promises.mkdir(`${this.repoDir}/conflicts`, { recursive: true });\n\n // Create default workspace directory\n await this.fs.promises.mkdir(`${this.workingCopyDir}/default`, { recursive: true });\n } catch (error) {\n throw new JJError(\n 'STORAGE_INIT_FAILED',\n `Failed to initialize .jj directory: ${error.message}`,\n {\n dir: this.jjDir,\n originalError: error,\n }\n );\n }\n }\n\n /**\n * Read and parse JSON file\n *\n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<Object|null>} Parsed JSON or null if file doesn't exist\n */\n async read(path) {\n const fullPath = `${this.jjDir}/${path}`;\n\n // Check cache\n if (this.cache.has(path)) {\n return this.cache.get(path);\n }\n\n try {\n const content = await this.fs.promises.readFile(fullPath, 'utf8');\n const data = JSON.parse(content);\n this.cache.set(path, data);\n return data;\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null;\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Write JSON file atomically\n *\n * @param {string} path - Relative path from .jj directory\n * @param {Object|string} data - Data to write (object will be stringified)\n */\n async write(path, data) {\n const fullPath = `${this.jjDir}/${path}`;\n const tmpPath = `${fullPath}.tmp.${Date.now()}`;\n const jsonData = typeof data === 'string' ? data : JSON.stringify(data, null, 2);\n\n try {\n // Ensure parent directory exists\n const dirPath = fullPath.substring(0, fullPath.lastIndexOf('/'));\n await this.fs.promises.mkdir(dirPath, { recursive: true });\n\n // Write to temp file\n await this.fs.promises.writeFile(tmpPath, jsonData, 'utf8');\n\n // Atomic rename\n await this.fs.promises.rename(tmpPath, fullPath);\n\n // Update cache\n if (typeof data !== 'string') {\n this.cache.set(path, data);\n }\n } catch (error) {\n // Clean up temp file\n try {\n await this.fs.promises.unlink(tmpPath);\n } catch {\n // Best-effort cleanup; ignore if the temp file is already gone.\n }\n\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to write ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Read JSONL file (newline-delimited JSON)\n *\n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<Array<any>>} Array of parsed JSON objects\n */\n async readLines(path) {\n const fullPath = `${this.jjDir}/${path}`;\n\n try {\n const content = await this.fs.promises.readFile(fullPath, 'utf8');\n return content\n .trim()\n .split('\\n')\n .filter((/** @type {any} */ line) => line.length > 0)\n .map((/** @type {any} */ line) => JSON.parse(line));\n } catch (error) {\n if (error.code === 'ENOENT') {\n return [];\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Append line to JSONL file\n *\n * @param {string} path - Relative path from .jj directory\n * @param {string} line - JSON string to append\n */\n async appendLine(path, line) {\n const fullPath = `${this.jjDir}/${path}`;\n\n try {\n // Read existing content\n let existing = '';\n try {\n existing = await this.fs.promises.readFile(fullPath, 'utf8');\n } catch (error) {\n if (error.code !== 'ENOENT') throw error;\n }\n\n // Write atomically\n await this.write(path, existing + line + '\\n');\n } catch (error) {\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to append to ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n\n /**\n * Check if file exists\n *\n * @param {string} path - Relative path from .jj directory\n * @returns {Promise<boolean>}\n */\n async exists(path) {\n const fullPath = `${this.jjDir}/${path}`;\n\n try {\n await this.fs.promises.stat(fullPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Invalidate cache\n *\n * @param {string} [path] - Specific path to invalidate, or all if not provided\n */\n invalidateCache(path) {\n if (path) {\n this.cache.delete(path);\n } else {\n this.cache.clear();\n }\n }\n}\n","/**\n * Validation utilities for isomorphic-jj\n *\n * Provides validation functions for change IDs, paths, bookmark names, etc.\n */\n\nimport { JJError } from './errors.js';\n\n/**\n * Validate a change ID\n *\n * @param {string} changeId - Change ID to validate\n * @throws {JJError} If change ID is invalid\n */\nexport function validateChangeId(changeId) {\n if (typeof changeId !== 'string') {\n throw new JJError('INVALID_CHANGE_ID', 'Change ID must be a string', {\n changeId,\n suggestion: 'Provide a valid 32-character hex string',\n });\n }\n\n if (!/^[0-9a-f]{32}$/.test(changeId)) {\n throw new JJError(\n 'INVALID_CHANGE_ID',\n `Change ID must be 32 hexadecimal characters, got \"${changeId}\"`,\n {\n changeId,\n suggestion: 'Use a valid change ID from log() output or use a revset expression',\n }\n );\n }\n}\n\n/**\n * Normalize a file path by stripping leading slashes\n *\n * @param {string} path - File path to normalize\n * @returns {string} Normalized path (without leading slash)\n */\nexport function normalizePath(path) {\n if (typeof path !== 'string') {\n return path;\n }\n\n // Strip leading slashes for compatibility with REST APIs and absolute paths\n return path.replace(/^\\/+/, '');\n}\n\n/**\n * Validate a file path\n *\n * @param {string} path - File path to validate\n * @returns {string} Normalized path\n * @throws {JJError} If path is invalid or contains path traversal\n */\nexport function validatePath(path) {\n if (typeof path !== 'string') {\n throw new JJError('INVALID_PATH', 'Path must be a string', {\n path,\n });\n }\n\n // Auto-normalize: strip leading slashes (common with REST APIs)\n const normalizedPath = normalizePath(path);\n\n if (normalizedPath.includes('..')) {\n throw new JJError('INVALID_PATH', 'Path traversal (..) not allowed', {\n path: normalizedPath,\n suggestion: 'Use relative paths without .. components',\n });\n }\n\n if (normalizedPath.length > 4096) {\n throw new JJError('INVALID_PATH', 'Path exceeds maximum length', {\n path: normalizedPath,\n maxLength: 4096,\n suggestion: 'Use shorter file paths',\n });\n }\n\n return normalizedPath;\n}\n\n/**\n * Validate a bookmark name (follows Git ref name rules)\n *\n * @param {string} name - Bookmark name to validate\n * @throws {JJError} If bookmark name is invalid\n */\nexport function validateBookmarkName(name) {\n if (typeof name !== 'string' || name.length === 0) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name must be a non-empty string', {\n name,\n });\n }\n\n // Git ref name validation rules\n const invalidChars = /[\\s*~^:?[\\]\\\\]/;\n if (invalidChars.test(name)) {\n throw new JJError(\n 'INVALID_BOOKMARK_NAME',\n 'Bookmark name contains invalid characters (spaces, *, ~, ^, :, ?, [, ], \\\\)',\n {\n name,\n suggestion: 'Use alphanumeric characters, hyphens, and forward slashes',\n }\n );\n }\n\n if (name.includes('..')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot contain \"..\"', {\n name,\n });\n }\n\n if (name.startsWith('.') || name.endsWith('.')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot start or end with \".\"', {\n name,\n });\n }\n\n if (name.endsWith('.lock')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot end with \".lock\"', {\n name,\n });\n }\n\n if (name.includes('//')) {\n throw new JJError('INVALID_BOOKMARK_NAME', 'Bookmark name cannot contain \"//\"', {\n name,\n });\n }\n}\n","/**\n * ChangeGraph - Manages the change graph with stable change IDs\n *\n * Tracks changes, their relationships (parents/children), and evolution (amends/rewrites).\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId } from '../utils/validation.js';\n\nexport class ChangeGraph {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.nodes = new Map(); // changeId → Change\n this.commitIndex = new Map(); // commitId → changeId\n }\n\n /**\n * Initialize empty graph\n */\n async init() {\n this.nodes.clear();\n this.commitIndex.clear();\n\n await this.storage.write('repo/store/graph.json', {\n version: 1,\n changes: {},\n });\n }\n\n /**\n * Load graph from storage\n */\n async load() {\n const data = await this.storage.read('repo/store/graph.json');\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', 'repo/store/graph.json not found', {\n suggestion: 'Initialize repository with init() or check .jj directory',\n });\n }\n\n if (data.version !== 1) {\n throw new JJError('STORAGE_VERSION_MISMATCH', `Unsupported graph version: ${data.version}`, {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n });\n }\n\n this.nodes.clear();\n this.commitIndex.clear();\n\n for (const [changeId, change] of Object.entries(data.changes)) {\n this.nodes.set(changeId, change);\n this.commitIndex.set(change.commitId, changeId);\n }\n }\n\n /**\n * Save graph to storage\n */\n async save() {\n /** @type {Record<string, any>} */\n const changes = {};\n for (const [changeId, change] of this.nodes.entries()) {\n changes[changeId] = change;\n }\n\n await this.storage.write('repo/store/graph.json', {\n version: 1,\n changes,\n });\n }\n\n /**\n * Add a change to the graph\n *\n * @param {Record<string, any>} change - Change object\n */\n async addChange(change) {\n validateChangeId(change.changeId);\n\n if (this.nodes.has(change.changeId)) {\n throw new JJError('CHANGE_EXISTS', `Change ${change.changeId} already exists`, {\n changeId: change.changeId,\n suggestion: 'Use evolveChange() to update an existing change',\n });\n }\n\n this.nodes.set(change.changeId, change);\n this.commitIndex.set(change.commitId, change.changeId);\n\n await this.save();\n }\n\n /**\n * Get a change by ID\n *\n * @param {string} changeId - Change ID\n * @returns {Promise<Record<string, any>|null>} Change object or null if not found\n */\n async getChange(changeId) {\n validateChangeId(changeId);\n return this.nodes.get(changeId) || null;\n }\n\n /**\n * Get all changes\n *\n * @returns {Array<any>} Array of all changes\n */\n getAll() {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Find change by commit ID\n *\n * @param {string} commitId - Git commit SHA-1\n * @returns {string|null} Change ID or null if not found\n */\n findByCommitId(commitId) {\n return this.commitIndex.get(commitId) || null;\n }\n\n /**\n * Get parent change IDs\n *\n * @param {any} changeId - Change ID\n * @returns {Array<string>} Array of parent change IDs\n */\n getParents(changeId) {\n const change = this.nodes.get(changeId);\n return change ? change.parents : [];\n }\n\n /**\n * Get child change IDs\n *\n * @param {string} changeId - Change ID\n * @returns {Array<string>} Array of child change IDs\n */\n getChildren(changeId) {\n const children = [];\n\n for (const change of this.nodes.values()) {\n if (change.parents.includes(changeId)) {\n children.push(change.changeId);\n }\n }\n\n return children;\n }\n\n /**\n * Evolve a change (update commitId, track predecessor)\n *\n * Used when amending or rewriting a change.\n *\n * @param {string} changeId - Change ID\n * @param {string} newCommitId - New commit SHA-1\n */\n async evolveChange(changeId, newCommitId) {\n validateChangeId(changeId);\n\n const change = this.nodes.get(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`, {\n changeId,\n suggestion: 'Check change ID or use log() to see available changes',\n });\n }\n\n // Track predecessor\n if (!change.predecessors) {\n change.predecessors = [];\n }\n change.predecessors.push(change.commitId);\n\n // Update commit index\n this.commitIndex.delete(change.commitId);\n change.commitId = newCommitId;\n this.commitIndex.set(newCommitId, changeId);\n\n await this.save();\n }\n\n /**\n * Update a change (modify in place)\n *\n * @param {Record<string, any>} change - Updated change object\n */\n async updateChange(change) {\n validateChangeId(change.changeId);\n\n if (!this.nodes.has(change.changeId)) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${change.changeId} not found`, {\n changeId: change.changeId,\n suggestion: 'Use addChange() to create a new change',\n });\n }\n\n this.nodes.set(change.changeId, change);\n await this.save();\n }\n\n /**\n * Get all ancestors of a change (recursive parent traversal)\n *\n * @param {string} changeId - Starting change ID\n * @returns {Array<string>} Array of ancestor change IDs (breadth-first order)\n */\n getAncestors(changeId) {\n const ancestors = [];\n // `visited` also doubles as \"already enqueued\" — mark a node the moment\n // it's scheduled (not when dequeued), so a change reachable via two paths\n // in a diamond-shaped history (a<-b, a<-c, b&c<-d) is only added once.\n const visited = new Set([changeId]);\n const queue = [changeId];\n\n while (queue.length > 0) {\n const current = queue.shift();\n\n const parents = this.getParents(current);\n for (const parent of parents) {\n if (!visited.has(parent)) {\n visited.add(parent);\n ancestors.push(parent);\n queue.push(parent);\n }\n }\n }\n\n return ancestors;\n }\n\n /**\n * Create a change with default values (helper for tests)\n *\n * @param {Record<string, any>} [params] - Change parameters\n * @returns {Promise<Record<string, any>>} Created change object\n */\n async createChange(params = {}) {\n const crypto = await import('crypto');\n const changeId = params.changeId || crypto.randomBytes(16).toString('hex');\n const commitId = params.commitId || crypto.randomBytes(20).toString('hex');\n const tree = params.tree || crypto.randomBytes(20).toString('hex');\n const timestamp = params.timestamp || new Date().toISOString();\n\n /** @type {Record<string, any>} */\n const change = {\n changeId,\n parents: params.parents || [],\n description: params.description || '',\n fileSnapshot: params.fileSnapshot || {},\n commitId,\n tree,\n author: params.author || {\n name: 'Test User',\n email: 'test@example.com',\n timestamp,\n },\n committer: params.committer || {\n name: 'Test User',\n email: 'test@example.com',\n timestamp,\n },\n timestamp,\n };\n\n // Add conflicts if provided\n if (params.conflicts) {\n change.conflicts = params.conflicts;\n }\n\n await this.addChange(change);\n\n return change;\n }\n}\n","/**\n * WorkingCopy - Manages working copy state and file tracking\n *\n * Tracks file states (mtime, size, mode) for efficient modification detection.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId, validatePath } from '../utils/validation.js';\n\nexport class WorkingCopy {\n /**\n * @param {Storage} storage - Storage manager instance\n * @param {any} fs - Filesystem implementation\n * @param {string} dir - Repository directory\n * @param {string} [workspaceId='default'] - Workspace identifier\n */\n constructor(storage, fs, dir, workspaceId = 'default') {\n this.storage = storage;\n this.fs = fs;\n this.dir = dir;\n this.workspaceId = workspaceId;\n this.state = null;\n }\n\n /**\n * Initialize working copy state\n *\n * @param {string} changeId - Initial change ID\n * @param {string} [operationId] - Operation ID that created this state\n */\n async init(changeId, operationId = '') {\n validateChangeId(changeId);\n\n this.state = {\n version: 1,\n workspaceId: this.workspaceId,\n changeId,\n operation: operationId,\n fileStates: {},\n sparsePatterns: [], // Empty array = full checkout\n };\n\n await this.save();\n }\n\n /**\n * Load working copy state from storage\n *\n * Workspace-specific path: working_copy/workspace_id/state.json\n */\n async load() {\n const workspacePath = `working_copy/${this.workspaceId}/state.json`;\n const data = await this.storage.read(workspacePath);\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', `${workspacePath} not found`, {\n suggestion: 'Initialize repository with init()',\n workspaceId: this.workspaceId,\n });\n }\n\n if (data.version !== 1) {\n throw new JJError(\n 'STORAGE_VERSION_MISMATCH',\n `Unsupported working copy version: ${data.version}`,\n {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n }\n );\n }\n\n this.state = data;\n }\n\n /**\n * Save working copy state to storage\n *\n * Workspace-specific path: working_copy/workspace_id/state.json\n */\n async save() {\n const workspacePath = `working_copy/${this.workspaceId}/state.json`;\n await this.storage.write(workspacePath, this.state);\n }\n\n /**\n * Get current working copy state\n *\n * @returns {Promise<Record<string, any>>} Working copy state\n */\n async getState() {\n if (!this.state) {\n await this.load();\n }\n return this.state;\n }\n\n /**\n * Get current change ID\n *\n * @returns {string} Current change ID\n */\n getCurrentChangeId() {\n if (!this.state) {\n throw new JJError('WORKING_COPY_NOT_LOADED', 'Working copy state not loaded', {\n suggestion: 'Call load() or init() first',\n });\n }\n return this.state.changeId;\n }\n\n /**\n * Set current change ID\n *\n * @param {string} changeId - New change ID\n */\n async setCurrentChange(changeId) {\n validateChangeId(changeId);\n\n if (!this.state) {\n await this.load();\n }\n\n this.state.changeId = changeId;\n await this.save();\n }\n\n /**\n * Track a file in the working copy\n *\n * @param {string} path - File path relative to repo root\n * @param {Object} fileState - File state (mtime, size, mode, hash)\n */\n async trackFile(path, fileState) {\n path = validatePath(path); // Normalize path\n\n if (!this.state) {\n await this.load();\n }\n\n this.state.fileStates[path] = fileState;\n await this.save();\n }\n\n /**\n * Untrack a file from the working copy\n *\n * @param {string} path - File path to untrack\n */\n async untrackFile(path) {\n path = validatePath(path); // Normalize path\n\n if (!this.state) {\n await this.load();\n }\n\n delete this.state.fileStates[path];\n await this.save();\n }\n\n /**\n * Get list of modified files\n *\n * Uses mtime + size comparison for fast detection.\n *\n * @returns {Promise<Array<string>>} Array of modified file paths\n */\n async getModifiedFiles() {\n if (!this.state) {\n await this.load();\n }\n\n const modified = [];\n\n for (const [path, tracked] of Object.entries(this.state.fileStates)) {\n const fullPath = `${this.dir}/${path}`;\n\n try {\n const stats = await this.fs.promises.stat(fullPath);\n\n // Fast path: check mtime and size\n if (stats.mtime !== tracked.mtime || stats.size !== tracked.size) {\n modified.push(path);\n }\n } catch (error) {\n if (error.code === 'ENOENT') {\n // File was deleted\n modified.push(path);\n } else {\n throw new JJError('STORAGE_READ_FAILED', `Failed to stat ${path}: ${error.message}`, {\n path: fullPath,\n originalError: error,\n });\n }\n }\n }\n\n return modified;\n }\n\n /**\n * Recursively walk the working directory on disk and return every file path\n * relative to the repo root (v1.6).\n *\n * This is the foundation of automatic snapshotting: unlike listFiles() (which\n * only returns files already tracked in state), this discovers files created\n * out-of-band (editors, shell, git checkout). The .git and .jj metadata dirs\n * and node_modules are always excluded.\n *\n * @param {object} [opts]\n * @param {string[]} [opts.exclude] - Additional top-level directory/file names to skip\n * @returns {Promise<Array<string>>} Repo-relative file paths (forward-slash separated)\n */\n async walk(opts = {}) {\n const exclude = new Set(['.git', '.jj', 'node_modules', ...(opts.exclude || [])]);\n /** @type {string[]} */\n const results = [];\n\n /**\n * @param {string} current - Absolute directory path\n * @param {string} prefix - Repo-relative prefix\n */\n const recurse = async (current, prefix) => {\n /** @type {string[]} */\n let entries;\n try {\n entries = await this.fs.promises.readdir(current);\n } catch {\n return; // not a readable directory\n }\n for (const name of entries) {\n if (exclude.has(name)) continue;\n const full = `${current}/${name}`;\n const rel = prefix ? `${prefix}/${name}` : name;\n let stats;\n try {\n stats = await this.fs.promises.stat(full);\n } catch {\n // Some in-memory filesystems don't materialize directory entries;\n // treat an unstattable name as a possible directory and recurse.\n await recurse(full, rel);\n continue;\n }\n if (stats.isDirectory()) {\n await recurse(full, rel);\n } else if (stats.isFile()) {\n results.push(rel);\n }\n }\n };\n\n await recurse(this.dir, '');\n return results;\n }\n\n /**\n * Snapshot the working directory: scan the disk, then reconcile tracked file\n * state with what actually exists (v1.6, mirrors jj's snapshot-before-command).\n *\n * Newly-seen files are tracked, changed files (by mtime/size) are updated, and\n * tracked-but-missing files are untracked. Sparse patterns are honored.\n *\n * @param {object} [opts]\n * @param {string[]} [opts.exclude] - Additional names to skip while walking\n * @returns {Promise<{added: string[], modified: string[], deleted: string[]}>}\n */\n async snapshot(opts = {}) {\n if (!this.state) {\n await this.load();\n }\n\n const onDisk = await this.walk(opts);\n const trackedBefore = new Set(Object.keys(this.state.fileStates));\n const seen = new Set();\n /** @type {string[]} */\n const added = [];\n /** @type {string[]} */\n const modified = [];\n\n for (const rel of onDisk) {\n // Respect sparse checkout: don't snapshot files outside the sparse set.\n if (!this.matchesSparsePatterns(rel)) continue;\n seen.add(rel);\n\n let stats;\n try {\n stats = await this.fs.promises.stat(`${this.dir}/${rel}`);\n } catch {\n continue;\n }\n\n const prev = this.state.fileStates[rel];\n const next = { mtime: stats.mtime, size: stats.size, mode: stats.mode };\n\n if (!prev) {\n this.state.fileStates[rel] = next;\n added.push(rel);\n } else if (prev.mtime !== stats.mtime || prev.size !== stats.size) {\n this.state.fileStates[rel] = next;\n modified.push(rel);\n }\n }\n\n /** @type {string[]} */\n const deleted = [];\n for (const rel of trackedBefore) {\n if (!seen.has(rel)) {\n delete this.state.fileStates[rel];\n deleted.push(rel);\n }\n }\n\n await this.save();\n return { added, modified, deleted };\n }\n\n /**\n * List all tracked files in working copy\n *\n * @returns {Promise<Array<string>>} Array of tracked file paths\n */\n async listFiles() {\n if (!this.state) {\n await this.load();\n }\n\n return Object.keys(this.state.fileStates);\n }\n\n /**\n * Clear all file states\n */\n async clearFileStates() {\n if (!this.state) {\n await this.load();\n }\n\n this.state.fileStates = {};\n await this.save();\n }\n\n /**\n * Get sparse patterns\n *\n * @returns {string[]} Array of sparse patterns\n */\n getSparsePatterns() {\n if (!this.state) {\n throw new JJError('WORKING_COPY_NOT_LOADED', 'Working copy state not loaded', {\n suggestion: 'Call load() or init() first',\n });\n }\n\n // Return empty array if not set (full checkout)\n return this.state.sparsePatterns || [];\n }\n\n /**\n * Set sparse patterns\n *\n * @param {string[]} patterns - Array of sparse patterns\n */\n async setSparsePatterns(patterns) {\n if (!this.state) {\n await this.load();\n }\n\n this.state.sparsePatterns = patterns;\n // Note: save() is called by the caller (repository API)\n }\n\n /**\n * Check if a file path matches sparse patterns\n *\n * @param {string} filePath - File path to check\n * @returns {boolean} True if file should be materialized\n */\n matchesSparsePatterns(filePath) {\n const patterns = this.getSparsePatterns();\n\n // Empty patterns = full checkout (all files match)\n if (patterns.length === 0) {\n return true;\n }\n\n // Check if file matches any pattern\n for (const pattern of patterns) {\n if (this._matchesPattern(filePath, pattern)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Simple glob pattern matching\n *\n * @private\n * @param {string} path - File path\n * @param {string} pattern - Glob pattern\n * @returns {boolean} True if path matches pattern\n */\n _matchesPattern(path, pattern) {\n // Exact match\n if (path === pattern) {\n return true;\n }\n\n // Directory match (pattern ending with /)\n if (pattern.endsWith('/') && path.startsWith(pattern)) {\n return true;\n }\n\n // Glob patterns\n if (pattern.includes('*')) {\n // Convert glob to regex\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '___DOUBLESTAR___')\n .replace(/\\*/g, '[^/]*')\n .replace(/___DOUBLESTAR___/g, '.*');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(path);\n }\n\n return false;\n }\n}\n","/**\n * ID Generation utilities for isomorphic-jj\n *\n * Generates stable change IDs and operation IDs using cryptographically secure random values.\n */\n\n/**\n * Generate a stable change ID\n *\n * Uses 128-bit cryptographically random value encoded as 32-character hex string.\n * Collision probability is negligible (2^128 space).\n *\n * @returns {string} 32-character lowercase hex string\n */\nexport function generateChangeId() {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate an operation ID from operation content\n *\n * Uses SHA-256 hash of operation content for integrity verification.\n *\n * @param {Object.<string, any>} operation - Operation data\n * @returns {Promise<string>} 64-character lowercase hex string (SHA-256)\n */\nexport async function generateOperationId(operation) {\n const content = JSON.stringify({\n timestamp: operation.timestamp,\n user: operation.user,\n description: operation.description,\n parents: operation.parents,\n view: operation.view,\n });\n\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate a generic ID with optional prefix\n *\n * @param {string} prefix - Optional prefix (e.g., 'conflict', 'bookmark')\n * @returns {string} ID string\n */\nexport function generateId(prefix = '') {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n const id = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return prefix ? `${prefix}-${id}` : id;\n}\n","/**\n * OperationLog - Manages the append-only operation log\n *\n * Records all repository mutations for complete undo/redo and time-travel.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { generateOperationId } from '../utils/id-generation.js';\n\nexport class OperationLog {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n /** @type {any[]} */\n this.operations = [];\n this.headOperationId = null;\n }\n\n /**\n * Initialize empty operation log\n */\n async init() {\n this.operations = [];\n this.headOperationId = null;\n\n await this.storage.write('repo/op_log/oplog.jsonl', '');\n }\n\n /**\n * Load operation log from storage\n */\n async load() {\n const lines = await this.storage.readLines('repo/op_log/oplog.jsonl');\n\n this.operations = lines;\n this.headOperationId = lines.length > 0 ? lines[lines.length - 1].id : null;\n }\n\n /**\n * Record a new operation\n *\n * @param {Record<string, any>} operation - Operation to record (without id)\n * @returns {Promise<Record<string, any>>} Recorded operation with id\n */\n async recordOperation(operation) {\n // Ensure operations are loaded\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n // Set parent to current head\n if (this.headOperationId) {\n operation.parents = [this.headOperationId];\n } else {\n operation.parents = operation.parents || [];\n }\n\n // Generate operation ID\n const id = await generateOperationId(operation);\n const fullOperation = {\n id,\n ...operation,\n };\n\n // Append to log\n const line = JSON.stringify(fullOperation);\n await this.storage.appendLine('repo/op_log/oplog.jsonl', line);\n\n // Update in-memory state\n this.operations.push(fullOperation);\n this.headOperationId = id;\n\n return fullOperation;\n }\n\n /**\n * Get all operations\n *\n * @returns {Promise<Array<any>>} Array of all operations (chronological order)\n */\n async list() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n return this.operations;\n }\n\n /**\n * Get the head (latest) operation\n *\n * @returns {Promise<Object|null>} Latest operation or null if log is empty\n */\n async getHeadOperation() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n return this.operations.length > 0 ? this.operations[this.operations.length - 1] : null;\n }\n\n /**\n * Undo the last operation\n *\n * Returns the view from the previous operation, allowing the caller\n * to restore repository state.\n *\n * @returns {Promise<Object>} View from previous operation\n */\n async undo() {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n if (this.operations.length === 0) {\n throw new JJError('NO_OPERATIONS_TO_UNDO', 'No operations to undo', {\n suggestion: 'Cannot undo when operation log is empty',\n });\n }\n\n // Get the previous operation (before current head)\n if (this.operations.length === 1) {\n // Special case: undoing the first operation returns its view\n return this.operations[0].view;\n }\n\n // Return view from parent operation\n const currentHead = this.operations[this.operations.length - 1];\n const parentId = currentHead.parents[0];\n\n // Find parent operation\n const parentOp = this.operations.find((op) => op.id === parentId);\n\n if (!parentOp) {\n // If parent not found, return view from operation before current\n return this.operations[this.operations.length - 2].view;\n }\n\n return parentOp.view;\n }\n\n /**\n * Get snapshot (view) at a specific operation\n *\n * @param {string} operationId - Operation ID\n * @returns {Promise<Object>} View from that operation\n */\n async getSnapshotAt(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n const operation = this.operations.find((op) => op.id === operationId);\n\n if (!operation) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${operationId} not found`, {\n operationId,\n suggestion: 'Check operation ID or use list() to see available operations',\n });\n }\n\n return operation.view;\n }\n\n /**\n * Get operation by ID\n *\n * @param {string} operationId - Operation ID\n * @returns {Promise<Object|null>} Operation or null if not found\n */\n async getOperation(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n return this.operations.find((op) => op.id === operationId) || null;\n }\n\n /**\n * Abandon an operation (remove from log)\n *\n * This is an advanced operation that removes an operation from the log.\n * Children of the abandoned operation are relinked to the abandoned operation's parent.\n *\n * @param {string} operationId - Operation ID to abandon\n * @returns {Promise<Object>} Result with abandoned operation and relinked children\n */\n async abandon(operationId) {\n if (this.operations.length === 0 && this.headOperationId === null) {\n await this.load();\n }\n\n // Validate operationId\n if (!operationId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide an operation ID to abandon',\n });\n }\n\n // Find the operation\n const opIndex = this.operations.findIndex((op) => op.id === operationId);\n if (opIndex === -1) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${operationId} not found`, {\n operationId,\n suggestion: 'Use operations.list() to see available operations',\n });\n }\n\n const operation = this.operations[opIndex];\n\n // Cannot abandon the only operation\n if (this.operations.length === 1) {\n throw new JJError('CANNOT_ABANDON', 'Cannot abandon the only operation in the log', {\n suggestion: 'The operation log must contain at least one operation',\n });\n }\n\n // Find children (operations that reference this as a parent)\n const children = this.operations.filter((op) => op.parents && op.parents.includes(operationId));\n\n // Get the parent of the operation being abandoned (may be undefined for root)\n const grandparentId =\n operation.parents && operation.parents.length > 0 ? operation.parents[0] : undefined;\n\n // Relink children to grandparent\n const relinkedChildren = [];\n for (const child of children) {\n // Replace references to abandoned operation with grandparent\n const oldParents = [...child.parents];\n child.parents = child.parents\n .map((/** @type {any} */ p) => (p === operationId ? grandparentId : p))\n .filter(Boolean); // Remove undefined if there was no grandparent\n\n // If there was no grandparent, the child becomes a root operation\n if (!grandparentId && child.parents.length === 0) {\n child.parents = [];\n }\n\n relinkedChildren.push({\n operationId: child.id,\n oldParents,\n newParents: child.parents,\n });\n }\n\n // Remove from array\n this.operations.splice(opIndex, 1);\n\n // Update head if we abandoned the head operation\n if (this.headOperationId === operationId) {\n this.headOperationId =\n this.operations.length > 0 ? this.operations[this.operations.length - 1].id : null;\n }\n\n // Rewrite JSONL file\n const content =\n this.operations.map((op) => JSON.stringify(op)).join('\\n') +\n (this.operations.length > 0 ? '\\n' : '');\n await this.storage.write('repo/op_log/oplog.jsonl', content);\n\n return {\n abandoned: operation,\n relinkedChildren,\n newHead: this.headOperationId,\n };\n }\n}\n","/**\n * BookmarkStore - Manages local and remote bookmarks\n *\n * Bookmarks are named pointers to changes, similar to Git branches.\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId, validateBookmarkName } from '../utils/validation.js';\n\nexport class BookmarkStore {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.local = new Map();\n this.remote = new Map(); // remote → (bookmark → changeId)\n /** @type {Record<string, any>} */\n this.tracking = {}; // bookmark → { remote, ref } tracking info (v0.35.0)\n }\n\n /**\n * Initialize empty bookmark store\n */\n async init() {\n this.local.clear();\n this.remote.clear();\n\n await this.storage.write('repo/store/bookmarks.json', {\n version: 1,\n local: {},\n remote: {},\n tracked: {},\n });\n }\n\n /**\n * Load bookmarks from storage\n */\n async load() {\n const data = await this.storage.read('repo/store/bookmarks.json');\n\n if (!data) {\n throw new JJError('STORAGE_CORRUPT', 'repo/store/bookmarks.json not found', {\n suggestion: 'Initialize repository with init()',\n });\n }\n\n if (data.version !== 1) {\n throw new JJError(\n 'STORAGE_VERSION_MISMATCH',\n `Unsupported bookmarks version: ${data.version}`,\n {\n version: data.version,\n suggestion: 'Upgrade isomorphic-jj or run migration tool',\n }\n );\n }\n\n this.local.clear();\n this.remote.clear();\n this.tracking = data.tracked || {}; // Load tracking info (v0.35.0)\n\n // Load local bookmarks\n for (const [name, target] of Object.entries(data.local)) {\n this.local.set(name, target);\n }\n\n // Load remote bookmarks\n for (const [remoteName, bookmarks] of Object.entries(data.remote)) {\n const remoteBookmarks = new Map();\n for (const [name, target] of Object.entries(bookmarks)) {\n remoteBookmarks.set(name, target);\n }\n this.remote.set(remoteName, remoteBookmarks);\n }\n }\n\n /**\n * Save bookmarks to storage\n */\n async save() {\n /** @type {Record<string, any>} */\n const local = {};\n for (const [name, target] of this.local.entries()) {\n local[name] = target;\n }\n\n /** @type {Record<string, any>} */\n const remote = {};\n for (const [remoteName, bookmarks] of this.remote.entries()) {\n remote[remoteName] = {};\n for (const [name, target] of bookmarks.entries()) {\n remote[remoteName][name] = target;\n }\n }\n\n await this.storage.write('repo/store/bookmarks.json', {\n version: 1,\n local,\n remote,\n tracked: this.tracking || {}, // Save tracking info (v0.35.0)\n });\n }\n\n /**\n * Set a local bookmark\n *\n * @param {string} name - Bookmark name\n * @param {string} target - Change ID to point to\n */\n async set(name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (this.local.has(name)) {\n throw new JJError('BOOKMARK_EXISTS', `Bookmark ${name} already exists`, {\n name,\n suggestion: 'Use move() to update existing bookmark',\n });\n }\n\n this.local.set(name, target);\n await this.save();\n }\n\n /**\n * Move an existing local bookmark\n *\n * @param {string} name - Bookmark name\n * @param {string} target - New change ID to point to\n */\n async move(name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (!this.local.has(name)) {\n throw new JJError('BOOKMARK_NOT_FOUND', `Bookmark ${name} not found`, {\n name,\n suggestion: 'Use set() to create a new bookmark',\n });\n }\n\n this.local.set(name, target);\n await this.save();\n }\n\n /**\n * Delete a local bookmark\n *\n * @param {string} name - Bookmark name\n */\n async delete(name) {\n validateBookmarkName(name);\n\n if (!this.local.has(name)) {\n throw new JJError('BOOKMARK_NOT_FOUND', `Bookmark ${name} not found`, {\n name,\n });\n }\n\n this.local.delete(name);\n await this.save();\n }\n\n /**\n * Get bookmark target\n *\n * @param {string} name - Bookmark name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async get(name) {\n return this.local.get(name) || null;\n }\n\n /**\n * Set a remote bookmark\n *\n * @param {string} remoteName - Remote name\n * @param {string} name - Bookmark name\n * @param {string} target - Change ID to point to\n */\n async setRemote(remoteName, name, target) {\n validateBookmarkName(name);\n validateChangeId(target);\n\n if (!this.remote.has(remoteName)) {\n this.remote.set(remoteName, new Map());\n }\n\n this.remote.get(remoteName).set(name, target);\n await this.save();\n }\n\n /**\n * Get remote bookmark target\n *\n * @param {string} remoteName - Remote name\n * @param {string} name - Bookmark name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async getRemote(remoteName, name) {\n const remoteBookmarks = this.remote.get(remoteName);\n return remoteBookmarks ? remoteBookmarks.get(name) || null : null;\n }\n\n /**\n * List all bookmarks (local and remote)\n *\n * @returns {Promise<Array<any>>} Array of bookmark objects\n */\n async list() {\n const result = [];\n\n // Add local bookmarks with tracking info (v0.35.0)\n for (const [name, target] of this.local.entries()) {\n /** @type {Record<string, any>} */\n const bookmark = {\n name,\n changeId: target,\n remote: null,\n };\n\n // Include tracking info if available\n if (this.tracking && this.tracking[name]) {\n bookmark.tracking = {\n remote: this.tracking[name].remote,\n ref: this.tracking[name].remoteName || name,\n };\n }\n\n result.push(bookmark);\n }\n\n // Add remote bookmarks\n for (const [remoteName, bookmarks] of this.remote.entries()) {\n for (const [name, target] of bookmarks.entries()) {\n result.push({\n name: `${remoteName}/${name}`,\n changeId: target,\n remote: remoteName,\n });\n }\n }\n\n return result;\n }\n}\n","/**\n * Tag Store - Manages immutable references to changes\n *\n * Tags are immutable references that cannot be moved once created.\n * They are typically used for release points and important milestones.\n */\n\nimport { JJError } from '../utils/errors.js';\n\n/**\n * Validates tag name format\n * @param {string} name - Tag name to validate\n * @throws {JJError} If name is invalid\n */\nfunction validateTagName(name) {\n if (!name || typeof name !== 'string') {\n throw new JJError('INVALID_TAG_NAME', 'Tag name must be a non-empty string');\n }\n\n if (name.trim() !== name || name.includes(' ')) {\n throw new JJError(\n 'INVALID_TAG_NAME',\n 'Tag name cannot contain spaces or leading/trailing whitespace',\n { name }\n );\n }\n\n if (name.length === 0) {\n throw new JJError('INVALID_TAG_NAME', 'Tag name cannot be empty');\n }\n}\n\n/**\n * Simple tag pattern matching (supports glob-like patterns)\n * @param {string} name - Tag name\n * @param {string} pattern - Pattern (e.g., \"v1*\", \"*-rc\")\n * @returns {boolean} True if name matches pattern\n */\nfunction matchesPattern(name, pattern) {\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape regex special chars\n .replace(/\\*/g, '.*') // Convert * to .*\n .replace(/\\?/g, '.'); // Convert ? to .\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(name);\n}\n\nexport class TagStore {\n /**\n * @param {any} fs - Filesystem interface\n * @param {string} jjDir - Path to .jj directory\n */\n constructor(fs, jjDir) {\n this.fs = fs;\n this.jjDir = jjDir;\n this.tagsFile = `${jjDir}/store/tags.json`;\n }\n\n /**\n * Loads tags from storage\n * @returns {Promise<Record<string, any>>} Map of tag name to changeId\n */\n async load() {\n try {\n const data = await this.fs.promises.readFile(this.tagsFile, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return {};\n }\n throw error;\n }\n }\n\n /**\n * Saves tags to storage\n * @param {Object} tags - Map of tag name to changeId\n * @returns {Promise<void>}\n */\n async save(tags) {\n // Ensure the store directory exists\n const storeDir = `${this.jjDir}/store`;\n try {\n await this.fs.promises.mkdir(storeDir, { recursive: true });\n } catch (err) {\n // Directory might already exist, ignore\n }\n await this.fs.promises.writeFile(this.tagsFile, JSON.stringify(tags, null, 2));\n }\n\n /**\n * Creates a new tag\n * @param {string} name - Tag name\n * @param {string} changeId - Change ID to tag\n * @returns {Promise<{name: string, changeId: string}>}\n * @throws {JJError} If tag already exists or name is invalid\n */\n async create(name, changeId) {\n validateTagName(name);\n\n const tags = await this.load();\n\n if (tags[name]) {\n throw new JJError('TAG_EXISTS', `Tag \"${name}\" already exists`, {\n name,\n existingChangeId: tags[name],\n });\n }\n\n tags[name] = changeId;\n await this.save(tags);\n\n return { name, changeId };\n }\n\n /**\n * Lists all tags, optionally filtered by pattern\n * @param {string} [pattern] - Optional glob pattern\n * @returns {Promise<Array<{name: string, changeId: string}>>}\n */\n async list(pattern) {\n const tags = await this.load();\n\n let tagNames = Object.keys(tags);\n\n if (pattern) {\n tagNames = tagNames.filter((name) => matchesPattern(name, pattern));\n }\n\n return tagNames.map((name) => ({\n name,\n changeId: tags[name],\n }));\n }\n\n /**\n * Deletes a tag\n * @param {string} name - Tag name to delete\n * @returns {Promise<void>}\n * @throws {JJError} If tag doesn't exist\n */\n async delete(name) {\n const tags = await this.load();\n\n if (!tags[name]) {\n throw new JJError('TAG_NOT_FOUND', `Tag \"${name}\" not found`, { name });\n }\n\n delete tags[name];\n await this.save(tags);\n }\n\n /**\n * Checks if a tag exists\n * @param {string} name - Tag name\n * @returns {Promise<boolean>}\n */\n async exists(name) {\n const tags = await this.load();\n return !!tags[name];\n }\n\n /**\n * Gets the changeId for a tag\n * @param {string} name - Tag name\n * @returns {Promise<string|null>} Change ID or null if not found\n */\n async get(name) {\n const tags = await this.load();\n return tags[name] || null;\n }\n}\n","/**\n * RevsetEngine - Query language for finding changes\n *\n * Implements a simplified revset language for querying the change graph.\n *\n * Parsing pipeline (v1.7): expressions are tokenized and parsed into a small\n * AST via a real recursive-descent / precedence-climbing parser, then\n * evaluated by walking the AST. This replaces an earlier implementation that\n * matched the whole trimmed expression against one big chain of regexes per\n * construct — which could not correctly handle a revset-taking function\n * whose argument was itself a nested function call (e.g. `roots(ancestors(x))`\n * would silently mis-parse), and had no real operator precedence for mixed\n * `&`/`|`/`~` expressions. The AST only covers *structural* parsing (`@`,\n * change-id atoms, the `-`/`+` suffix operators, `..` ranges, function-call\n * boundaries, parenthesized grouping, and `&`/`|`/`~` precedence); the actual\n * per-function semantics (author matching, ancestry walks, date filters,\n * etc.) are unchanged from before and live in the filter/getX helper methods\n * below the parser.\n */\n\nimport { JJError } from '../utils/errors.js';\n\n/**\n * @typedef {object} ChangeGraph\n * @property {() => Promise<any>} load\n * @property {() => any[]} getAll\n * @property {(id: string) => Promise<any>} getChange\n * @property {(id: string) => string[]} getParents\n * @property {(id: string) => string[]} getChildren\n */\n\n/**\n * @typedef {object} WorkingCopy\n * @property {() => string} getCurrentChangeId\n */\n\n// ============================================================================\n// Tokenizer\n// ============================================================================\n\n/**\n * Find the index of the `)` matching the `(` at `openIndex`, respecting\n * nested parentheses and single/double-quoted strings — so a quoted argument\n * containing a literal `(`, `)`, or `,` (e.g. `description(\"a (b), c\")`)\n * doesn't confuse the boundary search.\n *\n * @param {string} source - Full source string\n * @param {number} openIndex - Index of the '(' to match\n * @returns {number} Index of the matching ')'\n */\nfunction findMatchingParen(source, openIndex) {\n let depth = 0;\n /** @type {string|null} */\n let quote = null;\n for (let i = openIndex; i < source.length; i++) {\n const ch = source[i];\n if (quote) {\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === '(') depth++;\n else if (ch === ')') {\n depth--;\n if (depth === 0) return i;\n }\n }\n throw new JJError('INVALID_REVSET', `Unmatched '(' in revset expression: ${source}`, {\n expression: source,\n });\n}\n\n// Characters that terminate a bare (unquoted, unparenthesized) symbol token\n// at the top-level expression grammar. Everything else (letters, digits,\n// dots, slashes, glob '*'/'?', hyphens WITHIN a symbol like a date, etc.) is\n// swallowed into the symbol — hyphens are only split off as MINUS tokens\n// when the tokenizer's main loop reaches them directly (i.e. not already\n// consumed as part of a preceding symbol scan), matching how change-id/`@`\n// suffix operators are recognized without breaking apart tokens that merely\n// *contain* a hyphen in the middle (dates are never routed through this\n// tokenizer at all — see the note on function argument kinds below).\nconst SYMBOL_STOP_CHARS = new Set([\n ' ',\n '\\t',\n '\\n',\n '\\r',\n '(',\n ')',\n ',',\n '&',\n '|',\n '~',\n '@',\n '-',\n '+',\n]);\n\n/**\n * Tokenize a top-level revset expression (or a nested revset-typed function\n * argument). String-typed function arguments (author patterns, dates,\n * glob patterns, etc.) are never routed through this tokenizer — they are\n * extracted as raw substrings by `findMatchingParen` + `splitTopLevelArgs`,\n * exactly as before, and are only interpreted once evaluateFunctionCall()\n * dispatches on the now-unambiguous function name.\n *\n * @param {string} source\n * @returns {Array<{type: string, value?: string}>}\n */\nfunction tokenize(source) {\n const tokens = [];\n let i = 0;\n const n = source.length;\n\n while (i < n) {\n const ch = source[i];\n\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n i++;\n continue;\n }\n if (ch === '(') {\n tokens.push({ type: 'LPAREN' });\n i++;\n continue;\n }\n if (ch === ')') {\n tokens.push({ type: 'RPAREN' });\n i++;\n continue;\n }\n if (ch === '&') {\n tokens.push({ type: 'AMP' });\n i++;\n continue;\n }\n if (ch === '|') {\n tokens.push({ type: 'PIPE' });\n i++;\n continue;\n }\n if (ch === '~') {\n tokens.push({ type: 'TILDE' });\n i++;\n continue;\n }\n if (ch === '@') {\n tokens.push({ type: 'AT' });\n i++;\n continue;\n }\n if (ch === '+') {\n tokens.push({ type: 'PLUS' });\n i++;\n continue;\n }\n if (ch === '-') {\n tokens.push({ type: 'MINUS' });\n i++;\n continue;\n }\n\n // Bare symbol (identifier, hex change id, glob pattern, `base..tip`\n // range, etc.) — consume until a structural character.\n let j = i;\n while (j < n && !SYMBOL_STOP_CHARS.has(source[j])) {\n j++;\n }\n if (j === i) {\n throw new JJError('INVALID_REVSET', `Unexpected character '${ch}' in revset expression`, {\n expression: source,\n });\n }\n const name = source.slice(i, j);\n\n if (j < n && source[j] === '(') {\n // Function call: consume the whole balanced (...) group as one token,\n // so nested calls (`roots(ancestors(x))`) are handled correctly no\n // matter how deep, instead of a non-greedy regex truncating at the\n // first ')' it sees.\n const closeIndex = findMatchingParen(source, j);\n tokens.push({ type: 'CALL', name, argsRaw: source.slice(j + 1, closeIndex) });\n i = closeIndex + 1;\n } else {\n tokens.push({ type: 'SYMBOL', value: name });\n i = j;\n }\n }\n\n tokens.push({ type: 'EOF' });\n return tokens;\n}\n\n// ============================================================================\n// Parser (precedence climbing) — produces a small AST\n// ============================================================================\n//\n// Grammar (highest to lowest precedence):\n// primary := '@' suffix? | SYMBOL suffix? | CALL | '(' union ')'\n// suffix := ('-' | '+')+ -- must be homogeneous\n// intersect := primary (('&' | '~') primary)* -- left-assoc, same tier\n// union := intersect ('|' intersect)* -- left-assoc, lowest\n//\n// A bare SYMBOL containing '..' (e.g. \"abcd1234..ef567890\") is recognized as\n// a range atom at the primary level, matching the previous implementation's\n// top-level `trimmed.includes('..')` special case.\n\nclass RevsetParser {\n /**\n * @param {Array<{type: string, value?: string, name?: string, argsRaw?: string}>} tokens\n * @param {string} source - Original source (for error messages)\n */\n constructor(tokens, source) {\n this.tokens = tokens;\n this.pos = 0;\n this.source = source;\n }\n\n peek() {\n return this.tokens[this.pos];\n }\n\n next() {\n return this.tokens[this.pos++];\n }\n\n /** @param {string} message */\n fail(message) {\n throw new JJError('INVALID_REVSET', message, { expression: this.source });\n }\n\n /** @returns {any} */\n parse() {\n const node = this.parseUnion();\n if (this.peek().type !== 'EOF') {\n this.fail(`Invalid revset expression: ${this.source}`);\n }\n return node;\n }\n\n /** @returns {any} */\n parseUnion() {\n /** @type {any} */\n let node = this.parseIntersect();\n while (this.peek().type === 'PIPE') {\n this.next();\n const right = this.parseIntersect();\n node = { type: 'union', left: node, right };\n }\n return node;\n }\n\n /** @returns {any} */\n parseIntersect() {\n /** @type {any} */\n let node = this.parsePrimary();\n while (this.peek().type === 'AMP' || this.peek().type === 'TILDE') {\n const op = this.next().type === 'AMP' ? 'intersect' : 'difference';\n const right = this.parsePrimary();\n node = { type: op, left: node, right };\n }\n return node;\n }\n\n /** Consume a homogeneous run of '-' or '+' tokens, returning its depth (0 if none). */\n parseSuffixDepth() {\n const first = this.peek().type;\n if (first !== 'PLUS' && first !== 'MINUS') return { dir: null, depth: 0 };\n let depth = 0;\n while (this.peek().type === first) {\n this.next();\n depth++;\n }\n // A mixed run (e.g. '-+') is not a valid suffix; only a homogeneous run\n // is consumed above, so if the OPPOSITE token immediately follows, that's\n // invalid syntax (matches the old regex's \"all same character\" requirement).\n if (this.peek().type === 'PLUS' || this.peek().type === 'MINUS') {\n this.fail(`Invalid revset expression: ${this.source}`);\n }\n return { dir: first === 'PLUS' ? '+' : '-', depth };\n }\n\n /** @returns {any} */\n parsePrimary() {\n const tok = this.peek();\n\n if (tok.type === 'LPAREN') {\n this.next();\n /** @type {any} */\n const inner = this.parseUnion();\n if (this.peek().type !== 'RPAREN') {\n this.fail(`Unmatched '(' in revset expression: ${this.source}`);\n }\n this.next();\n return inner;\n }\n\n if (tok.type === 'AT') {\n this.next();\n const { dir, depth } = this.parseSuffixDepth();\n return { type: 'workingCopy', dir, depth };\n }\n\n if (tok.type === 'CALL') {\n this.next();\n return { type: 'call', name: tok.name, argsRaw: tok.argsRaw };\n }\n\n if (tok.type === 'SYMBOL') {\n this.next();\n const value = /** @type {string} */ (tok.value);\n\n // A bare \"base..tip\" range, e.g. `abcd1234..ef567890`.\n if (value.includes('..')) {\n const parts = value.split('..');\n if (parts.length === 2) {\n return { type: 'range', base: parts[0].trim(), tip: parts[1].trim() };\n }\n }\n\n const { dir, depth } = this.parseSuffixDepth();\n return { type: 'symbol', value, dir, depth };\n }\n\n this.fail(`Invalid revset expression: ${this.source}`);\n // unreachable; keeps TS/control-flow happy\n return /** @type {any} */ (null);\n }\n}\n\nexport class RevsetEngine {\n /**\n * @param {ChangeGraph} graph - Change graph instance\n * @param {WorkingCopy} workingCopy - Working copy instance\n * @param {any} [userConfig] - User configuration instance (optional)\n * @param {any} [bookmarkStore] - Bookmark store instance (optional, v0.4)\n * @param {any} [tagStore] - Tag store instance (optional, v1.5)\n */\n constructor(graph, workingCopy, userConfig = null, bookmarkStore = null, tagStore = null) {\n this.graph = graph;\n this.workingCopy = workingCopy;\n this.userConfig = userConfig;\n this.bookmarkStore = bookmarkStore;\n this.tagStore = tagStore;\n }\n\n /**\n * Evaluate a revset expression\n *\n * @param {string} expression - Revset expression\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async evaluate(expression) {\n const trimmed = expression.trim();\n if (trimmed === '') {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: ${expression}`, {\n expression,\n suggestion: this._suggestion(),\n });\n }\n\n let ast;\n try {\n ast = new RevsetParser(tokenize(trimmed), trimmed).parse();\n } catch (error) {\n if (error instanceof JJError) {\n // Attach the full suggestion text to the top-level parse failure,\n // matching the previous single-throw-site behavior.\n error.context = error.context || {};\n if (error.code === 'INVALID_REVSET' && !error.context.suggestion) {\n error.context.suggestion = this._suggestion();\n error.suggestion = error.context.suggestion;\n }\n }\n throw error;\n }\n\n return await this.evaluateAst(ast);\n }\n\n /**\n * @private\n * @returns {string}\n */\n _suggestion() {\n return 'Use @, @-, @+, bookmark(name), all(), none(), root(), visible_heads(), git_refs(), git_head(), ancestors(revset[, depth]), author(name), author_name(x), author_email(x), committer(x), committer_name(x), committer_email(x), subject(pattern), description(text), change_id(prefix), commit_id(prefix), empty(), mine(), merge(), merges(), forks(), signed(), divergent(), file(pattern), roots(revset), heads(revset), parents(revset), children(revset), first_parent(revset), first_ancestors(revset), fork_point(revset), merge_point(revset), exactly(revset, n), present(revset), coalesce(a, b, ...), latest(revset, [count]), tags([pattern]), remote_tags([pattern]), bookmarks([pattern]), last(N[dh]), since(date), between(start, end), descendants(rev[, depth]), common_ancestor(rev1, rev2), range(base..tip), diverge_point(rev1, rev2), connected(rev1, rev2), operators (x-, x+), set operations (& | ~), or a direct change ID';\n }\n\n /**\n * Evaluate a parsed AST node into an array of change IDs.\n *\n * @param {any} node\n * @returns {Promise<Array<string>>}\n */\n async evaluateAst(node) {\n switch (node.type) {\n case 'union': {\n const [left, right] = await Promise.all([\n this.evaluateAst(node.left),\n this.evaluateAst(node.right),\n ]);\n return Array.from(new Set([...left, ...right]));\n }\n case 'intersect': {\n const [left, right] = await Promise.all([\n this.evaluateAst(node.left),\n this.evaluateAst(node.right),\n ]);\n const rightSet = new Set(right);\n return left.filter((id) => rightSet.has(id));\n }\n case 'difference': {\n const [left, right] = await Promise.all([\n this.evaluateAst(node.left),\n this.evaluateAst(node.right),\n ]);\n const rightSet = new Set(right);\n return left.filter((id) => !rightSet.has(id));\n }\n case 'workingCopy': {\n const workingCopyId = this.workingCopy.getCurrentChangeId();\n return await this.applySuffix([workingCopyId], node.dir, node.depth);\n }\n case 'symbol': {\n if (!/^[0-9a-f]{32}$/.test(node.value)) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: ${node.value}`, {\n expression: node.value,\n suggestion: this._suggestion(),\n });\n }\n if (node.depth > 0) {\n // Suffixed change-id form never validated existence of the base id\n // up-front (getParentsOfSet/getChildrenOfSet already no-op on an\n // unknown id), matching the previous implementation.\n return await this.applySuffix([node.value], node.dir, node.depth);\n }\n await this.graph.load();\n const change = await this.graph.getChange(node.value);\n return change ? [node.value] : [];\n }\n case 'range':\n return await this.evalRange(node.base, node.tip);\n case 'call':\n return await this.evaluateFunctionCall(node.name, node.argsRaw);\n default:\n throw new JJError('INVALID_REVSET', `Invalid revset expression`, {\n suggestion: this._suggestion(),\n });\n }\n }\n\n /**\n * Apply a run of '-' (parents) or '+' (children) suffix operators to a seed\n * set, stepping generation-by-generation exactly like the previous\n * `@(-+)$` / `x(-+)$` handling.\n *\n * @param {string[]} seedSet\n * @param {'-'|'+'|null} dir\n * @param {number} depth\n * @returns {Promise<string[]>}\n */\n async applySuffix(seedSet, dir, depth) {\n let currentSet = seedSet;\n for (let i = 0; i < depth; i++) {\n currentSet =\n dir === '-'\n ? await this.getParentsOfSet(currentSet)\n : await this.getChildrenOfSet(currentSet);\n if (currentSet.length === 0) break;\n }\n return currentSet;\n }\n\n /**\n * Evaluate a bare `base..tip` range (ancestors(tip) ~ ancestors(base)).\n *\n * @param {string} base\n * @param {string} tip\n * @returns {Promise<string[]>}\n */\n async evalRange(base, tip) {\n const baseChange = await this.graph.getChange(base);\n const tipChange = await this.graph.getChange(tip);\n\n if (!baseChange || !tipChange) {\n throw new JJError('INVALID_REVSET', `Invalid range: ${base}..${tip}`, {\n suggestion: 'Both base and tip must be valid change IDs',\n });\n }\n\n const tipAncestors = new Set(await this.getAncestors(tip));\n const baseAncestors = new Set(await this.getAncestors(base));\n return [...tipAncestors].filter((id) => !baseAncestors.has(id));\n }\n\n /**\n * Dispatch a parsed function call (name + raw, unsplit argument string) to\n * its semantic handler. This mirrors the previous per-function branches in\n * `evaluate()` almost verbatim — only how `name`/`argsRaw` were obtained\n * has changed (via the tokenizer/parser above, instead of one regex per\n * function tried against the whole expression).\n *\n * @param {string} name\n * @param {string} argsRaw - Raw text between the call's parentheses\n * @returns {Promise<string[]>}\n */\n async evaluateFunctionCall(name, argsRaw) {\n const raw = argsRaw.trim();\n const unquote = (/** @type {string} */ s) => s.trim().replace(/^['\"]|['\"]$/g, '');\n\n switch (name) {\n case 'all':\n await this.graph.load();\n return this.graph.getAll().map((c) => c.changeId);\n\n case 'none':\n return [];\n\n case 'root': {\n await this.graph.load();\n const allChanges = this.graph.getAll();\n const rootCommits = allChanges.filter((c) => !c.parents || c.parents.length === 0);\n if (rootCommits.length === 0) return [];\n const oldest = rootCommits.sort(\n (a, b) =>\n /** @type {any} */ (new Date(a.timestamp)) - /** @type {any} */ (new Date(b.timestamp))\n )[0];\n return [oldest.changeId];\n }\n\n case 'visible_heads': {\n await this.graph.load();\n const allChanges = this.graph.getAll();\n const changeIdSet = new Set(allChanges.map((c) => c.changeId));\n const hasChildren = new Set();\n for (const change of allChanges) {\n if (change.parents) {\n for (const parent of change.parents) {\n if (changeIdSet.has(parent)) hasChildren.add(parent);\n }\n }\n }\n return allChanges.filter((c) => !hasChildren.has(c.changeId)).map((c) => c.changeId);\n }\n\n case 'git_refs': {\n if (!this.bookmarkStore) return [];\n await this.bookmarkStore.load();\n const allBookmarks = /** @type {any[]} */ (await this.bookmarkStore.list());\n return allBookmarks.map((b) => b.changeId);\n }\n\n case 'git_head': {\n try {\n const currentId = this.workingCopy.getCurrentChangeId();\n return currentId ? [currentId] : [];\n } catch (error) {\n return [];\n }\n }\n\n case 'visible': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => !c.abandoned)\n .map((c) => c.changeId);\n }\n\n case 'hidden': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => c.abandoned === true)\n .map((c) => c.changeId);\n }\n\n case 'ancestors': {\n const parts = this.splitTopLevelArgs(raw);\n const seeds = await this.resolveArg(parts[0]);\n const depth = parts[1] !== undefined ? parseInt(parts[1].trim(), 10) : undefined;\n const result = new Set();\n for (const seed of seeds) {\n for (const id of await this.getAncestors(seed, depth)) {\n result.add(id);\n }\n }\n return Array.from(result);\n }\n\n case 'change_id':\n return await this.filterByIdPrefix(unquote(raw), 'changeId');\n case 'commit_id':\n return await this.filterByIdPrefix(unquote(raw), 'commitId');\n case 'subject':\n return await this.filterBySubject(unquote(raw));\n\n case 'author_name':\n return await this.filterBySignatureField('author', 'name', unquote(raw));\n case 'author_email':\n return await this.filterBySignatureField('author', 'email', unquote(raw));\n case 'committer_name':\n return await this.filterBySignatureField('committer', 'name', unquote(raw));\n case 'committer_email':\n return await this.filterBySignatureField('committer', 'email', unquote(raw));\n case 'committer': {\n const pattern = unquote(raw);\n const byName = await this.filterBySignatureField('committer', 'name', pattern);\n const byEmail = await this.filterBySignatureField('committer', 'email', pattern);\n return Array.from(new Set([...byName, ...byEmail]));\n }\n\n case 'signed': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => c.signed === true || (c.signature && c.signature.status))\n .map((c) => c.changeId);\n }\n\n case 'divergent': {\n await this.graph.load();\n const all = this.graph.getAll();\n const counts = new Map();\n for (const c of all) {\n counts.set(c.changeId, (counts.get(c.changeId) || 0) + 1);\n }\n return all\n .filter((c) => c.divergent === true || counts.get(c.changeId) > 1)\n .map((c) => c.changeId);\n }\n\n case 'merges':\n case 'merge':\n return await this.filterMerge();\n\n case 'forks': {\n await this.graph.load();\n const all = this.graph.getAll();\n return all\n .filter((c) => this.graph.getChildren(c.changeId).length > 1)\n .map((c) => c.changeId);\n }\n\n case 'remote_tags':\n return await this.filterRemoteTags(raw === '' ? undefined : unquote(raw));\n\n case 'first_parent': {\n const seeds = await this.resolveArg(raw);\n const parents = new Set();\n for (const seed of seeds) {\n const change = await this.graph.getChange(seed);\n if (change && change.parents && change.parents.length > 0) {\n parents.add(change.parents[0]);\n }\n }\n return Array.from(parents);\n }\n\n case 'first_ancestors': {\n const seeds = await this.resolveArg(raw);\n const result = new Set();\n for (const seed of seeds) {\n let current = seed;\n while (current) {\n if (result.has(current)) break;\n result.add(current);\n const change = await this.graph.getChange(current);\n current =\n change && change.parents && change.parents.length > 0 ? change.parents[0] : null;\n }\n }\n return Array.from(result);\n }\n\n case 'fork_point':\n return await this.findForkPoint(await this.resolveArg(raw));\n case 'merge_point':\n return await this.findMergePoint(await this.resolveArg(raw));\n\n case 'exactly': {\n const parts = this.splitTopLevelArgs(raw);\n if (parts.length !== 2) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: exactly(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n const result = await this.evaluate(parts[0].trim());\n const expected = parseInt(parts[1].trim(), 10);\n if (result.length !== expected) {\n throw new JJError(\n 'REVSET_EXACTLY_MISMATCH',\n `exactly() expected ${expected} revision(s) but found ${result.length}`,\n { expected, actual: result.length }\n );\n }\n return result;\n }\n\n case 'present': {\n try {\n return await this.evaluate(raw);\n } catch {\n return [];\n }\n }\n\n case 'coalesce': {\n for (const part of this.splitTopLevelArgs(raw)) {\n /** @type {string[]} */\n let result = [];\n try {\n result = await this.evaluate(part.trim());\n } catch {\n result = [];\n }\n if (result.length > 0) return result;\n }\n return [];\n }\n\n case 'author':\n return await this.filterByAuthor(unquote(raw));\n case 'description':\n return await this.filterByDescription(unquote(raw));\n case 'empty':\n return await this.filterEmpty();\n case 'mine':\n return await this.filterMine();\n case 'file':\n return await this.filterByFile(unquote(raw));\n\n case 'roots':\n return await this.filterRoots(await this.evaluate(raw));\n case 'heads':\n return await this.filterHeads(await this.evaluate(raw));\n case 'parents':\n return await this.getParentsOfSet(await this.evaluate(raw));\n case 'children':\n return await this.getChildrenOfSet(await this.evaluate(raw));\n\n case 'latest': {\n const parts = this.splitTopLevelArgs(raw);\n const innerResults = await this.evaluate(parts[0]);\n const count = parts[1] !== undefined ? parseInt(parts[1].trim(), 10) : 1;\n return await this.filterLatest(innerResults, count);\n }\n\n case 'tags':\n return await this.filterTags(raw === '' ? undefined : unquote(raw));\n case 'bookmark': {\n const name = unquote(raw);\n if (!this.bookmarkStore) return [];\n await this.bookmarkStore.load();\n const target = await this.bookmarkStore.get(name);\n return target ? [target] : [];\n }\n case 'bookmarks':\n return await this.filterBookmarks(raw === '' ? undefined : unquote(raw));\n\n case 'last': {\n const lastMatch = raw.match(/^(\\d+)([dh])?$/);\n if (!lastMatch) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: last(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n const value = parseInt(lastMatch[1], 10);\n const unit = lastMatch[2];\n return unit ? await this.filterByTimeRange(value, unit) : await this.filterLast(value);\n }\n\n case 'since': {\n const dateMatch = raw.match(/^[0-9-]+$/);\n if (!dateMatch) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: since(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n return await this.filterSince(raw);\n }\n\n case 'between': {\n const parts = this.splitTopLevelArgs(raw).map((p) => p.trim());\n if (parts.length !== 2 || !/^[0-9-]+$/.test(parts[0]) || !/^[0-9-]+$/.test(parts[1])) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: between(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n return await this.filterBetween(parts[0], parts[1]);\n }\n\n case 'descendants': {\n const parts = this.splitTopLevelArgs(raw).map((p) => p.trim());\n if (!/^[0-9a-f]{32}$/.test(parts[0])) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: descendants(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n const depth = parts[1] !== undefined ? parseInt(parts[1], 10) : undefined;\n return await this.getDescendants(parts[0], depth);\n }\n\n case 'common_ancestor': {\n const [rev1, rev2] = this._twoHexArgs(name, raw);\n return await this.findCommonAncestor(rev1, rev2);\n }\n\n case 'range': {\n const rangeParts = raw.split('..');\n if (\n rangeParts.length !== 2 ||\n !/^[0-9a-f]{32}$/.test(rangeParts[0]) ||\n !/^[0-9a-f]{32}$/.test(rangeParts[1])\n ) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: range(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n return await this.getRange(rangeParts[0], rangeParts[1]);\n }\n\n case 'diverge_point': {\n const [rev1, rev2] = this._twoHexArgs(name, raw);\n return await this.findDivergePoint(rev1, rev2);\n }\n\n case 'connected': {\n const [rev1, rev2] = this._twoHexArgs(name, raw);\n return /** @type {any} */ (await this.checkConnected(rev1, rev2));\n }\n\n case 'conflicted': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => c.conflicts && Object.keys(c.conflicts).length > 0)\n .map((c) => c.changeId);\n }\n\n case 'reachable': {\n const heads = await this.evaluate(raw);\n const reachable = new Set();\n for (const headId of heads) {\n for (const ancestorId of await this.getAncestors(headId)) {\n reachable.add(ancestorId);\n }\n }\n return Array.from(reachable);\n }\n\n case 'tracked': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => c.fileSnapshot && Object.keys(c.fileSnapshot).length > 0)\n .map((c) => c.changeId);\n }\n\n case 'untracked': {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => !c.fileSnapshot || Object.keys(c.fileSnapshot).length === 0)\n .map((c) => c.changeId);\n }\n\n case 'remote_branches': {\n if (!this.bookmarkStore) return [];\n await this.bookmarkStore.load();\n const allBookmarks = /** @type {any[]} */ (await this.bookmarkStore.list());\n let remoteBookmarks = allBookmarks.filter((bookmark) => bookmark.name.includes('/'));\n if (raw !== '') {\n const pattern = unquote(raw);\n remoteBookmarks = remoteBookmarks.filter((bookmark) =>\n this.globMatch(bookmark.name, pattern)\n );\n }\n const targets = new Set();\n for (const bookmark of remoteBookmarks) {\n if (bookmark.changeId) targets.add(bookmark.changeId);\n }\n return Array.from(targets);\n }\n\n default:\n throw new JJError('INVALID_REVSET', `Invalid revset expression: ${name}(${raw})`, {\n expression: `${name}(${raw})`,\n suggestion: this._suggestion(),\n });\n }\n }\n\n /**\n * Parse and validate exactly two comma-separated 32-hex-char arguments for\n * functions like common_ancestor/diverge_point/connected.\n *\n * @private\n * @param {string} name - Function name (for the error message)\n * @param {string} raw - Raw argument text\n * @returns {[string, string]}\n */\n _twoHexArgs(name, raw) {\n const parts = this.splitTopLevelArgs(raw).map((p) => p.trim());\n if (\n parts.length !== 2 ||\n !/^[0-9a-f]{32}$/.test(parts[0]) ||\n !/^[0-9a-f]{32}$/.test(parts[1])\n ) {\n throw new JJError('INVALID_REVSET', `Invalid revset expression: ${name}(${raw})`, {\n suggestion: this._suggestion(),\n });\n }\n return [parts[0], parts[1]];\n }\n\n /**\n * Get all ancestors of a change (including the change itself)\n *\n * @param {string} changeId - Change ID\n * @param {number} [depth] - Optional depth limit\n * @returns {Promise<Array<string>>} Array of ancestor change IDs\n */\n async getAncestors(changeId, depth = undefined) {\n await this.graph.load();\n\n const ancestors = [];\n const visited = new Set();\n const queue = [{ id: changeId, level: 0 }];\n\n while (queue.length > 0) {\n const { id: current, level } = /** @type {{ id: string, level: number }} */ (queue.shift());\n\n if (visited.has(current)) {\n continue;\n }\n\n visited.add(current);\n ancestors.push(current);\n\n // Depth is measured from the seed change. A depth of N includes the seed\n // plus N generations of parents (matching jj's `ancestors(x, depth)`).\n if (depth !== undefined && level >= depth) {\n continue;\n }\n\n const parents = this.graph.getParents(current);\n for (const parent of parents) {\n queue.push({ id: parent, level: level + 1 });\n }\n }\n\n return ancestors;\n }\n\n /**\n * Resolve a revset argument to a set of change IDs (v1.5).\n *\n * Accepts a bare 32-hex change ID, a hex prefix, or any nested revset\n * expression. Used by graph functions that take another revset as input.\n *\n * @param {string} arg - Argument expression\n * @returns {Promise<Array<string>>} Change IDs\n */\n async resolveArg(arg) {\n const trimmed = arg.trim();\n if (/^[0-9a-f]{32}$/.test(trimmed)) {\n return [trimmed];\n }\n return await this.evaluate(trimmed);\n }\n\n /**\n * Split a comma-separated argument list, respecting nested parentheses and\n * quoted strings — so a quoted argument containing a literal comma (e.g.\n * `description(\"a, b\")`) isn't mis-split (v1.7: now quote-aware).\n *\n * @param {string} argString - Raw argument string (without the outer parens)\n * @returns {Array<string>} Individual argument expressions\n */\n splitTopLevelArgs(argString) {\n const args = [];\n let depth = 0;\n /** @type {string|null} */\n let quote = null;\n let current = '';\n for (const ch of argString) {\n if (quote) {\n current += ch;\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n current += ch;\n continue;\n }\n if (ch === '(') depth++;\n if (ch === ')') depth--;\n if (ch === ',' && depth === 0) {\n args.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.trim() !== '') args.push(current);\n return args;\n }\n\n /**\n * Filter changes whose changeId/commitId starts with a hex prefix (v1.5).\n *\n * @param {string} prefix - Hex prefix\n * @param {string} field - 'changeId' or 'commitId'\n * @returns {Promise<Array<string>>} Matching change IDs\n */\n async filterByIdPrefix(prefix, field) {\n await this.graph.load();\n const lower = prefix.toLowerCase();\n return this.graph\n .getAll()\n .filter((c) => (c[field] || '').toLowerCase().startsWith(lower))\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes whose subject (first line of the description) matches (v1.5).\n *\n * @param {string} text - Text to match within the subject line\n * @returns {Promise<Array<string>>} Matching change IDs\n */\n async filterBySubject(text) {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => {\n const subject = (c.description || '').split('\\n')[0];\n return subject.includes(text);\n })\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes by a signature field (v1.5).\n *\n * @param {string} role - 'author' or 'committer'\n * @param {string} field - 'name' or 'email'\n * @param {string} pattern - Substring to match\n * @returns {Promise<Array<string>>} Matching change IDs\n */\n async filterBySignatureField(role, field, pattern) {\n await this.graph.load();\n return this.graph\n .getAll()\n .filter((c) => c[role] && c[role][field] && c[role][field].includes(pattern))\n .map((c) => c.changeId);\n }\n\n /**\n * Find the fork point (youngest common ancestor) of a set of changes (v1.5).\n *\n * @param {Array<string>} changeIds - Seed change IDs\n * @returns {Promise<Array<string>>} Fork point (single element array or empty)\n */\n async findForkPoint(changeIds) {\n await this.graph.load();\n if (changeIds.length === 0) return [];\n\n // Intersect the ancestor sets of every seed.\n /** @type {Set<string> | null} */\n let common = null;\n for (const id of changeIds) {\n const ancestors = /** @type {Set<string>} */ (new Set(await this.getAncestors(id)));\n common =\n common === null\n ? ancestors\n : new Set([.../** @type {Set<string>} */ (common)].filter((a) => ancestors.has(a)));\n }\n if (!common || common.size === 0) return [];\n\n // Youngest common ancestor: the one that is not an ancestor of any other\n // member of the common set (i.e. a head within the common set).\n return await this.filterHeads(Array.from(common));\n }\n\n /**\n * Find the merge point (youngest common descendant) of a set of changes (v1.5).\n *\n * @param {Array<string>} changeIds - Seed change IDs\n * @returns {Promise<Array<string>>} Merge point (single element array or empty)\n */\n async findMergePoint(changeIds) {\n await this.graph.load();\n if (changeIds.length === 0) return [];\n\n /** @type {Set<string>|null} */\n let common = null;\n for (const id of changeIds) {\n const descendants = /** @type {Set<string>} */ (new Set(await this.getDescendants(id)));\n descendants.add(id);\n common =\n common === null\n ? descendants\n : new Set([.../** @type {Set<string>} */ (common)].filter((d) => descendants.has(d)));\n }\n if (!common || common.size === 0) return [];\n\n // Youngest common descendant: a root within the common set.\n return await this.filterRoots(Array.from(common));\n }\n\n /**\n * Filter changes by author name (v0.2)\n *\n * @param {string} authorName - Author name to match\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async filterByAuthor(authorName) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n return all.filter((c) => c.author && c.author.name.includes(authorName)).map((c) => c.changeId);\n }\n\n /**\n * Filter changes by description text (v0.2)\n *\n * @param {string} text - Text to search for in description\n * @returns {Promise<Array<string>>} Array of matching change IDs\n */\n async filterByDescription(text) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n return all.filter((c) => c.description && c.description.includes(text)).map((c) => c.changeId);\n }\n\n /**\n * Filter empty changes (v0.2)\n *\n * @returns {Promise<Array<string>>} Array of empty change IDs\n */\n async filterEmpty() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // A change is empty if it has an empty tree (placeholder for now)\n return all\n .filter((c) => c.tree === '0000000000000000000000000000000000000000')\n .map((c) => c.changeId);\n }\n\n /**\n * Filter changes by current user (v0.3.1)\n *\n * @returns {Promise<Array<string>>} Array of change IDs by current user\n */\n async filterMine() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n if (!this.userConfig) {\n // If no userConfig, return all changes\n return all.map((c) => c.changeId);\n }\n\n await this.userConfig.load();\n const currentUser = this.userConfig.getUser();\n\n return all\n .filter(\n (c) =>\n c.author && (c.author.email === currentUser.email || c.author.name === currentUser.name)\n )\n .map((c) => c.changeId);\n }\n\n /**\n * Filter merge commits (multiple parents) (v0.3.1)\n *\n * @returns {Promise<Array<string>>} Array of merge commit IDs\n */\n async filterMerge() {\n await this.graph.load();\n const all = this.graph.getAll();\n\n return all.filter((c) => c.parents && c.parents.length > 1).map((c) => c.changeId);\n }\n\n /**\n * Filter changes touching files matching pattern (v0.3.1)\n *\n * @param {string} pattern - File pattern (glob-style)\n * @returns {Promise<Array<string>>} Array of change IDs\n */\n async filterByFile(pattern) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // Simple pattern matching for now (exact match or contains)\n const results = [];\n for (const change of all) {\n if (change.fileSnapshot) {\n const files = Object.keys(change.fileSnapshot);\n const matches = files.some(\n (file) => file === pattern || file.includes(pattern) || this.globMatch(file, pattern)\n );\n if (matches) {\n results.push(change.changeId);\n }\n }\n }\n\n return results;\n }\n\n /**\n * Simple glob pattern matching\n *\n * @param {string} str - String to test\n * @param {string} pattern - Glob pattern (* and ? wildcards)\n * @returns {boolean} True if matches\n */\n globMatch(str, pattern) {\n const regexPattern = pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*').replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(str);\n }\n\n /**\n * Filter roots - commits not descendants of others in set (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @returns {Promise<Array<string>>} Change IDs that are roots\n */\n async filterRoots(changeIds) {\n await this.graph.load();\n\n const roots = [];\n const changeSet = new Set(changeIds);\n\n for (const changeId of changeIds) {\n // A change is a root if none of its parents are in the set\n const parents = this.graph.getParents(changeId);\n const hasParentInSet = parents.some((p) => changeSet.has(p));\n\n if (!hasParentInSet) {\n roots.push(changeId);\n }\n }\n\n return roots;\n }\n\n /**\n * Filter heads - commits not ancestors of others in set (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @returns {Promise<Array<string>>} Change IDs that are heads\n */\n async filterHeads(changeIds) {\n await this.graph.load();\n\n const heads = [];\n const changeSet = new Set(changeIds);\n\n for (const changeId of changeIds) {\n // A change is a head if it has no children in the set\n const children = this.graph.getChildren(changeId);\n const hasChildInSet = children.some((c) => changeSet.has(c));\n\n if (!hasChildInSet) {\n heads.push(changeId);\n }\n }\n\n return heads;\n }\n\n /**\n * Filter latest N commits by committer timestamp (v0.4)\n *\n * @param {Array<string>} changeIds - Set of change IDs\n * @param {number} count - Number of latest commits to return\n * @returns {Promise<Array<string>>} Latest N change IDs\n */\n async filterLatest(changeIds, count = 1) {\n await this.graph.load();\n\n const changes = [];\n for (const changeId of changeIds) {\n const change = await this.graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n\n // Sort by committer timestamp (descending)\n changes.sort((a, b) => {\n const timeA = a.committer?.timestamp || a.timestamp || 0;\n const timeB = b.committer?.timestamp || b.timestamp || 0;\n return /** @type {any} */ (new Date(timeB)) - /** @type {any} */ (new Date(timeA));\n });\n\n return changes.slice(0, count).map((c) => c.changeId);\n }\n\n /**\n * Filter tags matching pattern (v0.4)\n *\n * @param {string} [pattern] - Optional tag name pattern\n * @returns {Promise<Array<string>>} Change IDs pointed to by matching tags\n */\n async filterTags(pattern) {\n if (!this.tagStore) {\n return [];\n }\n\n await this.tagStore.load();\n // TagStore.list([pattern]) returns [{ name, changeId }] and applies the\n // glob pattern itself when provided.\n const matchingTags = await this.tagStore.list(pattern);\n\n const targets = new Set();\n for (const tag of matchingTags) {\n if (tag.changeId) {\n targets.add(tag.changeId);\n }\n }\n return Array.from(targets);\n }\n\n /**\n * Filter remote tags (v1.5 - jj v0.38 remote_tags())\n *\n * Remote tags are stored with a slash-qualified name (e.g. \"origin/v1.0\").\n *\n * @param {string} [pattern] - Optional tag name pattern\n * @returns {Promise<Array<string>>} Change IDs pointed to by matching remote tags\n */\n async filterRemoteTags(pattern) {\n if (!this.tagStore) {\n return [];\n }\n\n await this.tagStore.load();\n const allTags = await this.tagStore.list();\n\n const targets = new Set();\n for (const tag of allTags) {\n if (!tag.name.includes('/')) continue; // only remote-qualified tags\n if (pattern && !this.globMatch(tag.name, pattern)) continue;\n if (tag.changeId) targets.add(tag.changeId);\n }\n return Array.from(targets);\n }\n\n /**\n * Filter bookmarks matching pattern (v0.4)\n *\n * @param {string} [pattern] - Optional bookmark name pattern (glob-style)\n * @returns {Promise<Array<string>>} Change IDs pointed to by matching bookmarks\n */\n async filterBookmarks(pattern) {\n if (!this.bookmarkStore) {\n // No bookmark store available, return empty\n return [];\n }\n\n await this.bookmarkStore.load();\n const allBookmarks = await this.bookmarkStore.list();\n\n const result = [];\n for (const bookmark of allBookmarks) {\n // Only include local bookmarks (not remote)\n if (bookmark.remote) {\n continue;\n }\n\n // Apply pattern if provided\n if (pattern && !this.globMatch(bookmark.name, pattern)) {\n continue;\n }\n\n result.push(bookmark.changeId);\n }\n\n // Return unique changeIds\n return [...new Set(result)];\n }\n\n /**\n * Filter last N commits by timestamp (v0.5)\n *\n * @param {number} count - Number of commits to return\n * @returns {Promise<Array<string>>} Most recent change IDs\n */\n async filterLast(count) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n // Sort by committer timestamp (most recent first)\n const sorted = all.sort((a, b) => {\n const timeA = a.committer?.timestamp || 0;\n const timeB = b.committer?.timestamp || 0;\n return timeB - timeA;\n });\n\n return sorted.slice(0, count).map((c) => c.changeId);\n }\n\n /**\n * Filter commits within time range (v0.5)\n *\n * @param {number} value - Time value\n * @param {string} unit - Time unit ('d' for days, 'h' for hours)\n * @returns {Promise<Array<string>>} Change IDs within time range\n */\n async filterByTimeRange(value, unit) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const now = Date.now();\n let milliseconds;\n\n if (unit === 'd') {\n milliseconds = value * 24 * 60 * 60 * 1000; // days to ms\n } else if (unit === 'h') {\n milliseconds = value * 60 * 60 * 1000; // hours to ms\n } else {\n throw new JJError('INVALID_TIME_UNIT', `Invalid time unit: ${unit}`, { unit });\n }\n\n const cutoffTime = now - milliseconds;\n\n return all\n .filter((c) => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= cutoffTime;\n })\n .map((c) => c.changeId);\n }\n\n /**\n * Filter commits since a date (v0.5)\n *\n * @param {string} dateStr - ISO date string (YYYY-MM-DD)\n * @returns {Promise<Array<string>>} Change IDs since date\n */\n async filterSince(dateStr) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const sinceTime = new Date(dateStr).getTime();\n\n return all\n .filter((c) => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= sinceTime;\n })\n .map((c) => c.changeId);\n }\n\n /**\n * Filter commits between two dates (v0.5)\n *\n * @param {string} startDateStr - ISO date string (YYYY-MM-DD)\n * @param {string} endDateStr - ISO date string (YYYY-MM-DD)\n * @returns {Promise<Array<string>>} Change IDs between dates\n */\n async filterBetween(startDateStr, endDateStr) {\n await this.graph.load();\n const all = this.graph.getAll();\n\n const startTime = new Date(startDateStr).getTime();\n const endTime = new Date(endDateStr).getTime();\n\n return all\n .filter((c) => {\n const timestamp = c.committer?.timestamp || 0;\n return timestamp >= startTime && timestamp <= endTime;\n })\n .map((c) => c.changeId);\n }\n\n /**\n * Get all descendants of a change (v0.5)\n *\n * @param {string} changeId - Change ID\n * @param {number} [depth] - Optional depth limit\n * @returns {Promise<Array<string>>} Array of descendant change IDs\n */\n async getDescendants(changeId, depth = undefined) {\n await this.graph.load();\n\n const descendants = [];\n const visited = new Set();\n const queue = [{ id: changeId, level: 0 }];\n\n while (queue.length > 0) {\n const { id: current, level } = /** @type {{ id: string, level: number }} */ (queue.shift());\n\n if (visited.has(current)) {\n continue;\n }\n\n visited.add(current);\n\n // Don't include the starting change itself\n if (current !== changeId) {\n descendants.push(current);\n }\n\n // Check depth limit\n if (depth !== undefined && level >= depth) {\n continue;\n }\n\n const children = this.graph.getChildren(current);\n for (const child of children) {\n queue.push({ id: child, level: level + 1 });\n }\n }\n\n return descendants;\n }\n\n /**\n * Find common ancestor of two revisions (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<string>>} Common ancestor (single element array or empty)\n */\n async findCommonAncestor(rev1, rev2) {\n await this.graph.load();\n\n // Get all ancestors of both revisions\n const ancestors1 = new Set(await this.getAncestors(rev1));\n const ancestors2 = await this.getAncestors(rev2);\n\n // Find first common ancestor\n for (const ancestor of ancestors2) {\n if (ancestors1.has(ancestor)) {\n return [ancestor];\n }\n }\n\n return []; // No common ancestor\n }\n\n /**\n * Get commits in range (base..tip) (v0.5)\n *\n * @param {string} base - Base revision\n * @param {string} tip - Tip revision\n * @returns {Promise<Array<string>>} Commits in range (excluding base)\n */\n async getRange(base, tip) {\n await this.graph.load();\n\n const tipAncestors = new Set(await this.getAncestors(tip));\n const baseAncestors = new Set(await this.getAncestors(base));\n\n // Commits in range are ancestors of tip but not ancestors of base\n const range = [];\n for (const ancestor of tipAncestors) {\n if (!baseAncestors.has(ancestor)) {\n range.push(ancestor);\n }\n }\n\n return range;\n }\n\n /**\n * Find divergence point of two revisions (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<string>>} Divergence point (same as common ancestor)\n */\n async findDivergePoint(rev1, rev2) {\n // Divergence point is the same as common ancestor\n return await this.findCommonAncestor(rev1, rev2);\n }\n\n /**\n * Check if two revisions are connected (v0.5)\n *\n * @param {string} rev1 - First revision\n * @param {string} rev2 - Second revision\n * @returns {Promise<Array<boolean>>} Single element array with boolean result\n */\n async checkConnected(rev1, rev2) {\n await this.graph.load();\n\n // Check if rev2 is reachable from rev1\n const descendants = new Set(await this.getDescendants(rev1));\n const isDescendant = descendants.has(rev2);\n\n if (isDescendant) {\n return [true];\n }\n\n // Check if rev1 is reachable from rev2\n const ancestors = new Set(await this.getAncestors(rev2));\n const isAncestor = ancestors.has(rev1);\n\n return [isAncestor];\n }\n\n /**\n * Get direct parents of all commits in a set (v1.0)\n *\n * @param {Array<string>} changeIds - Array of change IDs\n * @returns {Promise<Array<string>>} Array of parent change IDs (deduplicated)\n */\n async getParentsOfSet(changeIds) {\n await this.graph.load();\n\n const parents = new Set();\n\n for (const changeId of changeIds) {\n const change = await this.graph.getChange(changeId);\n if (change && change.parents) {\n for (const parent of change.parents) {\n parents.add(parent);\n }\n }\n }\n\n return Array.from(parents);\n }\n\n /**\n * Get direct children of all commits in a set (v1.0)\n *\n * @param {Array<string>} changeIds - Array of change IDs\n * @returns {Promise<Array<string>>} Array of child change IDs (deduplicated)\n */\n async getChildrenOfSet(changeIds) {\n await this.graph.load();\n\n const children = new Set();\n const changeIdSet = new Set(changeIds);\n\n // Get all changes and check if their parents include any from our set\n const allChanges = this.graph.getAll();\n for (const change of allChanges) {\n if (change.parents && change.parents.some((/** @type {string} */ p) => changeIdSet.has(p))) {\n children.add(change.changeId);\n }\n }\n\n return Array.from(children);\n }\n\n /**\n * Evaluate a bare set-operation expression directly (kept for backward\n * compatibility — evaluate() now handles `&`/`|`/`~` as part of normal\n * parsing/precedence, so this is a thin wrapper that still enforces the\n * \"must contain an operator\" contract for direct callers.\n *\n * @param {string} expression - Expression expected to contain a set operator\n * @returns {Promise<Array<string>>} Result of the set operation\n */\n async evaluateSetOperation(expression) {\n const tokens = tokenize(expression.trim());\n const hasOperator = tokens.some(\n (t) => t.type === 'AMP' || t.type === 'PIPE' || t.type === 'TILDE'\n );\n if (!hasOperator) {\n throw new JJError('INVALID_SET_OPERATION', `Invalid set operation: ${expression}`, {\n expression,\n });\n }\n return await this.evaluate(expression);\n }\n}\n","/**\n * ConflictModel - First-class conflict handling\n *\n * In JJ, conflicts are not errors but structured data that can be:\n * - Stored in commits\n * - Rebased along with changes\n * - Resolved incrementally\n * - Committed and shared\n *\n * This matches JJ's philosophy: conflicts never block you.\n */\n\nimport path from 'path';\nimport { JJError } from '../utils/errors.js';\nimport { generateId } from '../utils/id-generation.js';\n\n/**\n * Conflict types supported by JJ\n */\nexport const ConflictType = {\n CONTENT: 'content', // File content conflicts (3-way merge)\n PATH: 'path', // Path/rename conflicts\n DELETE_MODIFY: 'delete-modify', // File deleted in one side, modified in other\n MODIFY_DELETE: 'modify-delete', // File modified in one side, deleted in other\n ADD_ADD: 'add-add', // Same path added in both sides\n};\n\n/**\n * ConflictModel manages conflict detection, storage, and resolution\n */\nexport class ConflictModel {\n /**\n * @param {any} storage\n * @param {any} fs\n * @param {any} [mergeDriverRegistry]\n */\n constructor(storage, fs, mergeDriverRegistry = null) {\n this.storage = storage;\n this.fs = fs;\n /** @type {any} */\n this.mergeDriverRegistry = mergeDriverRegistry; // v0.5: merge drivers\n this.conflicts = new Map(); // conflictId -> Conflict\n this.fileConflicts = new Map(); // path -> conflictId\n }\n\n /**\n * Initialize conflict storage\n */\n async init() {\n try {\n const data = await this.storage.read('repo/conflicts/conflicts.json');\n if (data) {\n // storage.read() already parses JSON\n this.conflicts = new Map(Object.entries(data.conflicts || {}));\n this.fileConflicts = new Map(Object.entries(data.fileConflicts || {}));\n }\n } catch (error) {\n // No conflicts file yet, that's fine\n this.conflicts = new Map();\n this.fileConflicts = new Map();\n }\n }\n\n /**\n * Load conflicts from storage\n */\n async load() {\n await this.init();\n }\n\n /**\n * Save conflicts to storage\n */\n async save() {\n const data = {\n conflicts: Object.fromEntries(this.conflicts),\n fileConflicts: Object.fromEntries(this.fileConflicts),\n };\n // storage.write() will handle JSON stringification\n await this.storage.write('repo/conflicts/conflicts.json', data);\n }\n\n /**\n * Detect conflicts during merge/rebase operations\n *\n * @param {Object} opts - Merge options\n * @param {string} opts.baseChange - Common ancestor change\n * @param {string} opts.leftChange - Left side change\n * @param {string} opts.rightChange - Right side change\n * @param {Map<any, any>} opts.baseFiles - Files in base\n * @param {Map<any, any>} opts.leftFiles - Files in left\n * @param {Map<any, any>} opts.rightFiles - Files in right\n * @param {Object} opts.drivers - Custom merge drivers (v0.5)\n * @param {string} opts.workingCopyDir - Working copy directory for file writes (v0.5)\n * @returns {Promise<any[]>} Detected conflicts\n */\n async detectConflicts(opts) {\n const {\n baseFiles,\n leftFiles,\n rightFiles,\n drivers = {},\n workingCopyDir,\n baseChange,\n leftChange,\n rightChange,\n } = opts;\n /** @type {any[]} */\n const conflicts = [];\n\n // Get all unique paths across all versions\n const allPaths = new Set([...baseFiles.keys(), ...leftFiles.keys(), ...rightFiles.keys()]);\n\n for (const path of allPaths) {\n const baseContent = baseFiles.get(path);\n const leftContent = leftFiles.get(path);\n const rightContent = rightFiles.get(path);\n\n // v0.5: Try merge driver first if available\n if (this.mergeDriverRegistry) {\n const mergeResult = await this._tryMergeDriver(\n path,\n { base: baseContent, ours: leftContent, theirs: rightContent },\n drivers,\n { baseChange, leftChange, rightChange }\n );\n\n if (mergeResult) {\n // Driver handled it\n if (mergeResult.hasConflict) {\n // Driver produced a conflict (possibly partial merge)\n // Use conflict info from driver result if available\n if (mergeResult.conflicts && mergeResult.conflicts.length > 0) {\n // Driver provided detailed conflict info\n for (const driverConflict of mergeResult.conflicts) {\n const conflict = this._createConflict({\n type: driverConflict.type || 'driver-conflict',\n path,\n sides: { base: baseContent, left: leftContent, right: rightContent },\n message:\n driverConflict.message ||\n mergeResult.message ||\n `Merge driver detected conflicts`,\n driverResult: mergeResult,\n driverFailed: mergeResult.driverFailed,\n driverError: mergeResult.driverError,\n });\n conflicts.push(conflict);\n }\n } else {\n // Driver didn't provide detailed conflicts, create generic one\n const conflict = this._createConflict({\n type: 'driver-conflict',\n path,\n sides: { base: baseContent, left: leftContent, right: rightContent },\n message: mergeResult.message || `Merge driver detected conflicts`,\n driverResult: mergeResult,\n driverFailed: mergeResult.driverFailed,\n driverError: mergeResult.driverError,\n });\n conflicts.push(conflict);\n }\n } else {\n // Driver successfully merged - write result to working copy\n if (workingCopyDir && mergeResult.content !== null) {\n await this._writeDriverResult(workingCopyDir, path, mergeResult);\n }\n }\n continue; // Driver handled this file, skip default detection\n }\n }\n\n // Fall back to default conflict detection\n const conflict = this._detectPathConflict(path, baseContent, leftContent, rightContent);\n if (conflict) {\n conflicts.push(conflict);\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect conflict for a single path\n *\n * @param {any} path\n * @param {any} base\n * @param {any} left\n * @param {any} right\n */\n _detectPathConflict(path, base, left, right) {\n const baseExists = base !== undefined;\n const leftExists = left !== undefined;\n const rightExists = right !== undefined;\n\n // No conflict if all three are the same\n if (base === left && left === right) {\n return null;\n }\n\n // No conflict if only one side changed\n if (base === left && base !== right) {\n return null; // Right side wins\n }\n if (base === right && base !== left) {\n return null; // Left side wins\n }\n if (base !== left && base !== right && left === right) {\n return null; // Both sides made the same change\n }\n\n // Now we have actual conflicts\n if (!baseExists && leftExists && rightExists) {\n // File added in both sides\n if (left === right) {\n return null; // Same content, no conflict\n }\n return this._createConflict({\n type: ConflictType.ADD_ADD,\n path,\n sides: { left, right },\n message: `File added with different content in both sides`,\n });\n }\n\n if (baseExists && !leftExists && !rightExists) {\n // File deleted in both sides\n return null; // No conflict\n }\n\n if (baseExists && !leftExists && rightExists) {\n // Deleted on left, modified on right\n return this._createConflict({\n type: ConflictType.DELETE_MODIFY,\n path,\n sides: { base, right },\n message: `File deleted on one side but modified on the other`,\n });\n }\n\n if (baseExists && leftExists && !rightExists) {\n // Modified on left, deleted on right\n return this._createConflict({\n type: ConflictType.MODIFY_DELETE,\n path,\n sides: { base, left },\n message: `File modified on one side but deleted on the other`,\n });\n }\n\n if (baseExists && leftExists && rightExists) {\n // Content conflict - all three versions exist but differ\n return this._createConflict({\n type: ConflictType.CONTENT,\n path,\n sides: { base, left, right },\n message: `Conflicting changes to file content`,\n });\n }\n\n return null;\n }\n\n /**\n * Create a conflict object\n *\n * @param {{ type: any, path: any, sides: any, message: any, driverFailed?: any, driverError?: any, driverResult?: any }} args\n */\n _createConflict({ type, path, sides, message, driverFailed, driverError }) {\n const conflictId = generateId('conflict');\n /** @type {Record<string, any>} */\n const conflict = {\n conflictId,\n type,\n path,\n sides,\n message,\n resolved: false,\n timestamp: new Date().toISOString(),\n };\n\n // Add driver failure metadata if present\n if (driverFailed !== undefined) {\n conflict.driverFailed = driverFailed;\n }\n if (driverError !== undefined) {\n conflict.driverError = driverError;\n }\n\n return conflict;\n }\n\n /**\n * Store a conflict\n *\n * @param {any} conflict\n */\n async addConflict(conflict) {\n this.conflicts.set(conflict.conflictId, conflict);\n this.fileConflicts.set(conflict.path, conflict.conflictId);\n await this.save();\n return conflict;\n }\n\n /**\n * Get conflict by ID\n *\n * @param {any} conflictId\n */\n getConflict(conflictId) {\n return this.conflicts.get(conflictId);\n }\n\n /**\n * Get conflict for a file path\n *\n * @param {any} path\n */\n getConflictForPath(path) {\n const conflictId = this.fileConflicts.get(path);\n if (!conflictId) return null;\n return this.conflicts.get(conflictId);\n }\n\n /**\n * List all conflicts\n *\n * @param {Record<string, any>} [opts]\n */\n listConflicts(opts = {}) {\n let conflicts = Array.from(this.conflicts.values());\n\n if (opts.resolved !== undefined) {\n conflicts = conflicts.filter((c) => c.resolved === opts.resolved);\n }\n\n if (opts.type) {\n conflicts = conflicts.filter((c) => c.type === opts.type);\n }\n\n return conflicts;\n }\n\n /**\n * Mark a conflict as resolved\n *\n * @param {any} conflictId\n * @param {any} resolution\n */\n async resolveConflict(conflictId, resolution) {\n const conflict = this.conflicts.get(conflictId);\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${conflictId} not found`);\n }\n\n // Support both object-based and legacy string resolutions\n let resolvedContent;\n\n if (typeof resolution === 'string') {\n // Legacy string format: 'manual', 'ours', 'theirs', etc.\n resolvedContent = { type: 'manual', value: resolution };\n } else if (resolution && typeof resolution === 'object') {\n // New object-based format\n if (resolution.side) {\n // { side: 'ours' | 'theirs' | 'base' }\n if (!['ours', 'theirs', 'base'].includes(resolution.side)) {\n throw new JJError('INVALID_RESOLUTION', `Invalid side: ${resolution.side}`, {\n suggestion: 'Use \"ours\", \"theirs\", or \"base\"',\n });\n }\n resolvedContent = { type: 'side', side: resolution.side };\n } else if (resolution.content !== undefined) {\n // { content: string | Uint8Array }\n resolvedContent = { type: 'content', content: resolution.content };\n } else if (resolution.hunks) {\n // { hunks: [...] } for partial resolution\n resolvedContent = { type: 'hunks', hunks: resolution.hunks };\n } else {\n // Store as-is for extensibility\n resolvedContent = resolution;\n }\n } else {\n throw new JJError('INVALID_RESOLUTION', 'Resolution must be a string or object');\n }\n\n conflict.resolved = true;\n conflict.resolution = resolvedContent;\n conflict.resolvedAt = new Date().toISOString();\n\n await this.save();\n return conflict;\n }\n\n /**\n * Remove a conflict (after resolution is committed)\n *\n * @param {any} conflictId\n */\n async removeConflict(conflictId) {\n const conflict = this.conflicts.get(conflictId);\n if (!conflict) return;\n\n this.conflicts.delete(conflictId);\n this.fileConflicts.delete(conflict.path);\n await this.save();\n }\n\n /**\n * Check if a change has conflicts\n */\n hasConflicts() {\n return this.listConflicts({ resolved: false }).length > 0;\n }\n\n /**\n * Create conflict markers for a content conflict (like Git's <<<<<<<, =======, >>>>>>>)\n *\n * @param {any} conflict\n */\n generateConflictMarkers(conflict) {\n if (conflict.type !== ConflictType.CONTENT) {\n throw new JJError('INVALID_CONFLICT_TYPE', 'Can only generate markers for content conflicts');\n }\n\n const { base, left, right } = conflict.sides;\n\n return [\n '<<<<<<< Left',\n left || '',\n '||||||| Base',\n base || '',\n '=======',\n right || '',\n '>>>>>>> Right',\n ].join('\\n');\n }\n\n /**\n * Parse conflict markers from file content\n *\n * @param {any} content\n */\n parseConflictMarkers(content) {\n const markerRegex =\n /^<{7} Left\\n([\\s\\S]*?)\\n\\|{7} Base\\n([\\s\\S]*?)\\n={7}\\n([\\s\\S]*?)\\n>{7} Right$/gm;\n const matches = markerRegex.exec(content);\n\n if (!matches) {\n return null;\n }\n\n return {\n left: matches[1],\n base: matches[2],\n right: matches[3],\n };\n }\n\n /**\n * Clear all conflicts\n */\n async clear() {\n this.conflicts.clear();\n this.fileConflicts.clear();\n await this.save();\n }\n\n /**\n * Try to use a merge driver for a file (v0.5)\n *\n * @param {string} path - File path\n * @param {{ base?: string, ours?: string, theirs?: string }} content - Content versions { base, ours, theirs }\n * @param {Object} customDrivers - Per-merge custom drivers\n * @param {Object} metadata - Merge metadata\n * @returns {Promise<Record<string, any>|null>} Merge result or null if no driver\n */\n async _tryMergeDriver(path, content, customDrivers, metadata) {\n if (!this.mergeDriverRegistry) {\n return null; // No registry available\n }\n\n // Check if file is binary\n const isBinary = this.mergeDriverRegistry.isBinaryFile(\n path,\n content.ours || content.theirs || content.base\n );\n\n // Find appropriate driver\n const driver = this.mergeDriverRegistry.findDriver(path, customDrivers, isBinary);\n\n if (!driver || driver === this.mergeDriverRegistry.defaultDriver) {\n return null; // No custom driver found\n }\n\n // Execute driver (errors are handled by wrapDriver)\n // In non-strict mode: returns result with driverFailed metadata\n // In strict mode: throws error\n const result = await this.mergeDriverRegistry.executeDriver(\n driver,\n { path, ...content, metadata },\n isBinary\n );\n\n return result;\n }\n\n /**\n * Write merge driver result to working copy (v0.5)\n *\n * @param {string} workingCopyDir - Working copy directory\n * @param {string} filePath - File path\n * @param {Record<string, any>} result - Merge result\n */\n async _writeDriverResult(workingCopyDir, filePath, result) {\n const fullPath = path.join(workingCopyDir, filePath);\n\n // Ensure directory exists\n const dir = path.dirname(fullPath);\n await this.fs.promises.mkdir(dir, { recursive: true });\n\n // Write main file\n if (result.content !== null && result.content !== undefined) {\n if (Buffer.isBuffer(result.content)) {\n await this.fs.promises.writeFile(fullPath, result.content);\n } else {\n await this.fs.promises.writeFile(fullPath, result.content, 'utf-8');\n }\n }\n\n // Write additional files if driver provided them\n if (result.additionalFiles) {\n for (const [additionalPath, additionalContent] of Object.entries(result.additionalFiles)) {\n const additionalFullPath = path.join(workingCopyDir, additionalPath);\n const additionalDir = path.dirname(additionalFullPath);\n await this.fs.promises.mkdir(additionalDir, { recursive: true });\n\n if (Buffer.isBuffer(additionalContent)) {\n await this.fs.promises.writeFile(additionalFullPath, additionalContent);\n } else {\n await this.fs.promises.writeFile(additionalFullPath, additionalContent, 'utf-8');\n }\n }\n }\n }\n}\n","/**\n * MergeDriverRegistry - Registry for custom merge drivers\n *\n * Manages registration, lookup, and execution of merge drivers.\n * Drivers are matched against file paths using glob patterns.\n */\n\nimport { JJError } from '../utils/errors.js';\n\n/**\n * Check if a file path matches a glob pattern\n * Simple implementation - for complex patterns, consider using minimatch\n *\n * @param {string} path - File path\n * @param {string} pattern - Glob pattern\n * @returns {boolean} Whether path matches pattern\n */\nfunction matchesPattern(path, pattern) {\n // Exact match\n if (pattern === path) return true;\n\n // Convert glob pattern to regex\n // Support: *, **, ?, [abc]\n // Literal dots must be escaped BEFORE the ** -> '.*' substitution, otherwise\n // the dot-escaping pass corrupts the inserted '.*' into the literal '\\.*'\n // (zero-or-more dots) instead of \"any characters\".\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '__DOUBLESTAR__')\n .replace(/\\*/g, '[^/]*')\n .replace(/__DOUBLESTAR__/g, '.*')\n .replace(/\\?/g, '[^/]');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(path);\n}\n\n/**\n * Check if a file is likely binary based on content\n *\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether content appears binary\n */\nfunction isBinaryContent(content) {\n if (Buffer.isBuffer(content)) return true;\n if (typeof content !== 'string') return false;\n\n // Check for null bytes (common in binary files)\n if (content.indexOf('\\0') !== -1) return true;\n\n // Check for high ratio of non-printable characters\n const nonPrintable = content.split('').filter((char) => {\n const code = char.charCodeAt(0);\n return code < 32 && code !== 9 && code !== 10 && code !== 13;\n }).length;\n\n const ratio = nonPrintable / content.length;\n return ratio > 0.3;\n}\n\n/**\n * Default merge driver - standard three-way text merge\n *\n * @param {{ content: { base?: string, ours?: string, theirs?: string } }} context\n * @returns {Promise<Record<string, any>>}\n */\nasync function defaultMergeDriver(context) {\n const { content } = context;\n const { base, ours, theirs } = content;\n\n // Simple cases\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n // No changes on our side, take theirs\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n // No changes on their side, take ours\n return { content: ours, hasConflict: false };\n }\n\n // Both sides changed - conflict\n const conflictMarkers = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n\n return {\n content: conflictMarkers,\n hasConflict: true,\n conflicts: [\n {\n type: 'content',\n sides: ['ours', 'theirs'],\n },\n ],\n };\n}\n\n/**\n * Wrap a driver with timeout and error handling\n *\n * @param {Function} driver - Driver function\n * @param {Object} options - Wrapper options\n * @param {number} [options.timeout=5000] - Timeout in ms\n * @param {boolean} [options.strict=false] - Throw on error instead of falling back\n * @param {any} [options.jj] - JJ instance for event emission\n * @param {string} [options.pattern] - Pattern that matched this driver\n * @returns {Function} Wrapped driver\n */\nfunction wrapDriver(driver, options = {}) {\n const { timeout = 5000, strict = false, jj = null, pattern = null } = options;\n\n return async (/** @type {any} */ context) => {\n let timeoutId;\n const timeoutPromise = new Promise((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error('Driver timeout')), timeout);\n // Use unref() to allow process to exit if this is the only pending timer\n if (timeoutId.unref) {\n timeoutId.unref();\n }\n });\n\n try {\n const result = await Promise.race([driver(context), timeoutPromise]);\n\n // Clear timeout if driver completed successfully\n clearTimeout(timeoutId);\n\n // Validate result\n if (!result || typeof result.hasConflict !== 'boolean') {\n throw new Error('Driver returned invalid result');\n }\n\n return result;\n } catch (error) {\n // Clear timeout on error too\n clearTimeout(timeoutId);\n\n // Emit driver:failed event if jj instance available\n if (jj && jj.dispatchEvent) {\n jj.dispatchEvent(\n new CustomEvent('driver:failed', {\n detail: {\n path: context.path,\n pattern: pattern,\n error: error.message,\n timestamp: new Date().toISOString(),\n },\n })\n );\n }\n\n // In strict mode, throw the error\n if (strict) {\n throw error;\n }\n\n // Fall back to default merge with error metadata\n const result = await defaultMergeDriver(context);\n return {\n ...result,\n driverFailed: true,\n driverError: error.message,\n };\n }\n };\n}\n\n/**\n * MergeDriverRegistry manages custom merge drivers\n */\nexport class MergeDriverRegistry {\n /**\n * @param {any} [jj]\n */\n constructor(jj = null) {\n /** @type {Array<{pattern: string, driver: Function, accepts: any, strict: boolean}>} */\n this.drivers = [];\n /** @type {any} */\n this.jj = jj; // JJ instance for event emission\n // Expose the built-in fallback driver so callers (e.g. ConflictModel) can\n // detect when findDriver() fell through to it rather than resolving a\n // real custom driver, and skip driver execution in that case.\n this.defaultDriver = defaultMergeDriver;\n }\n\n /**\n * Register one or more merge drivers\n *\n * @param {Record<string, any>} drivers - Pattern -> driver map\n *\n * @example\n * registry.register({\n * 'package.json': packageJsonDriver,\n * '*.md': markdownDriver,\n * 'critical.txt': { driver: myDriver, strict: true },\n * });\n */\n register(drivers) {\n for (const [pattern, driverOrConfig] of Object.entries(drivers)) {\n // Driver can be function or { driver, accepts, timeout, strict }\n let driver, accepts, timeout, strict;\n\n if (typeof driverOrConfig === 'function') {\n driver = driverOrConfig;\n accepts = { text: true, binary: false }; // Default: text only\n timeout = 5000;\n strict = false;\n } else {\n driver = driverOrConfig.driver || driverOrConfig.merge;\n accepts = driverOrConfig.accepts || { text: true, binary: false };\n timeout = driverOrConfig.timeout || 5000;\n strict = driverOrConfig.strict || false;\n }\n\n if (typeof driver !== 'function') {\n throw new JJError('INVALID_DRIVER', `Driver for pattern \"${pattern}\" must be a function`, {\n pattern,\n });\n }\n\n // Wrap driver with error handling\n const wrappedDriver = wrapDriver(driver, {\n timeout,\n strict,\n jj: this.jj,\n pattern,\n });\n\n this.drivers.push({ pattern, driver: wrappedDriver, accepts, strict });\n }\n }\n\n /**\n * Unregister a driver by pattern\n *\n * @param {string} pattern - Pattern to unregister\n */\n unregister(pattern) {\n this.drivers = this.drivers.filter((d) => d.pattern !== pattern);\n }\n\n /**\n * Get a specific driver by pattern\n *\n * @param {string} pattern - Pattern to look up\n * @returns {Function|undefined} Driver function or undefined\n */\n get(pattern) {\n const entry = this.drivers.find((d) => d.pattern === pattern);\n return entry?.driver;\n }\n\n /**\n * List all registered drivers\n *\n * @returns {Array<{pattern: string, accepts: Object}>} Driver list\n */\n list() {\n return this.drivers.map(({ pattern, accepts }) => ({ pattern, accepts }));\n }\n\n /**\n * Find the best matching driver for a file path\n *\n * Priority:\n * 1. Per-merge custom drivers (from merge options)\n * 2. Registered drivers (by pattern specificity)\n * 3. Default driver (three-way merge)\n *\n * @param {string} filePath - File path\n * @param {Object} customDrivers - Per-merge custom drivers\n * @param {boolean} isBinary - Whether file is binary\n * @returns {Function} Driver function\n */\n findDriver(filePath, customDrivers = {}, isBinary = false) {\n // 1. Check custom drivers (highest priority)\n for (const [pattern, driverOrConfig] of Object.entries(customDrivers)) {\n if (matchesPattern(filePath, pattern)) {\n let driver, accepts, timeout, strict;\n\n if (typeof driverOrConfig === 'function') {\n driver = driverOrConfig;\n accepts = { text: true, binary: false };\n timeout = 5000;\n strict = false;\n } else {\n driver = driverOrConfig.driver || driverOrConfig.merge;\n accepts = driverOrConfig.accepts || { text: true, binary: false };\n timeout = driverOrConfig.timeout || 5000;\n strict = driverOrConfig.strict || false;\n }\n\n // Check if driver accepts this file type\n if ((isBinary && accepts.binary) || (!isBinary && accepts.text)) {\n return wrapDriver(driver, {\n timeout,\n strict,\n jj: this.jj,\n pattern,\n });\n }\n }\n }\n\n // 2. Check registered drivers (by specificity)\n const matches = this.drivers\n .filter(({ pattern, accepts }) => {\n const matchesPath = matchesPattern(filePath, pattern);\n const acceptsType = (isBinary && accepts.binary) || (!isBinary && accepts.text);\n return matchesPath && acceptsType;\n })\n .sort((a, b) => b.pattern.length - a.pattern.length); // Most specific first\n\n if (matches.length > 0) {\n return matches[0].driver;\n }\n\n // 3. Fall back to default driver\n return defaultMergeDriver;\n }\n\n /**\n * Execute a driver with proper content encoding\n *\n * @param {Function} driver - Driver function\n * @param {Object} context - Merge context\n * @param {string} context.path - File path\n * @param {string|Buffer|null} context.base - Base content\n * @param {string|Buffer|null} context.ours - Our content\n * @param {string|Buffer|null} context.theirs - Their content\n * @param {Object} context.metadata - Metadata\n * @param {boolean} isBinary - Whether content is binary\n * @returns {Promise<Record<string, any>>}\n */\n async executeDriver(driver, context, isBinary) {\n const { base, ours, theirs, ...rest } = context;\n\n // Prepare content based on binary/text\n const content = {\n base: this.prepareContent(base, isBinary),\n ours: this.prepareContent(ours, isBinary),\n theirs: this.prepareContent(theirs, isBinary),\n };\n\n const driverContext = {\n ...rest,\n content,\n isBinary,\n };\n\n return await driver(driverContext);\n }\n\n /**\n * Prepare content for driver based on binary/text\n *\n * @param {string|Buffer|null} content - Raw content\n * @param {boolean} isBinary - Whether to return as Buffer\n * @returns {string|Buffer|null} Prepared content\n */\n prepareContent(content, isBinary) {\n if (content === null || content === undefined) {\n return null;\n }\n\n if (isBinary) {\n // Convert to Buffer if needed\n if (Buffer.isBuffer(content)) return content;\n if (typeof content === 'string') return Buffer.from(content, 'utf-8');\n return Buffer.from(String(content));\n } else {\n // Convert to string if needed\n if (typeof content === 'string') return content;\n if (Buffer.isBuffer(content)) return content.toString('utf-8');\n return String(content);\n }\n }\n\n /**\n * Check if file is binary based on path or content\n *\n * @param {string} path - File path\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether file is binary\n */\n isBinaryFile(path, content) {\n // Check by extension first\n const binaryExtensions = [\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.bmp',\n '.ico',\n '.zip',\n '.tar',\n '.gz',\n '.bz2',\n '.7z',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.exe',\n '.dll',\n '.so',\n '.dylib',\n '.mp3',\n '.mp4',\n '.avi',\n '.mov',\n ];\n\n const ext = path.substring(path.lastIndexOf('.')).toLowerCase();\n if (binaryExtensions.includes(ext)) {\n return true;\n }\n\n // Check content\n if (content) {\n return isBinaryContent(content);\n }\n\n return false;\n }\n}\n\n/**\n * Standalone helper to check if file is binary\n * (exported for external use)\n *\n * @param {string} path - File path\n * @param {string|Buffer} content - File content\n * @returns {boolean} Whether file is binary\n */\nexport function isBinaryFile(path, content) {\n const binaryExtensions = [\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.bmp',\n '.ico',\n '.zip',\n '.tar',\n '.gz',\n '.bz2',\n '.7z',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.exe',\n '.dll',\n '.so',\n '.dylib',\n '.mp3',\n '.mp4',\n '.avi',\n '.mov',\n ];\n\n const ext = path.substring(path.lastIndexOf('.')).toLowerCase();\n if (binaryExtensions.includes(ext)) {\n return true;\n }\n\n if (content) {\n return isBinaryContent(content);\n }\n\n return false;\n}\n","/**\n * WorkspaceManager - Manages multiple working copies (JJ workspaces)\n *\n * Allows multiple independent working directories to coexist,\n * each pointing to different changes in the repository.\n *\n * Note: JJ calls these \"workspaces\" not \"worktrees\" (Git terminology).\n */\n\nimport { JJError } from '../utils/errors.js';\nimport { validateChangeId } from '../utils/validation.js';\nimport { generateId } from '../utils/id-generation.js';\nimport path from 'path';\n\nexport class WorkspaceManager {\n /**\n * @param {Storage} storage - Storage manager instance\n * @param {any} fs - Filesystem implementation\n * @param {string} repoDir - Repository directory\n */\n constructor(storage, fs, repoDir) {\n this.storage = storage;\n this.fs = fs;\n this.repoDir = repoDir;\n this.workspaces = new Map(); // workspaceId -> Workspace\n }\n\n /**\n * Initialize workspace manager\n */\n async init() {\n // Create default workspace (main working copy)\n const defaultWorkspace = {\n id: 'default',\n name: 'default',\n path: this.repoDir,\n changeId: null,\n created: new Date().toISOString(),\n };\n\n this.workspaces.set('default', defaultWorkspace);\n await this.save();\n }\n\n /**\n * Load workspaces from storage\n */\n async load() {\n try {\n const data = await this.storage.read('repo/store/workspaces.json');\n if (data) {\n this.workspaces = new Map(Object.entries(data.workspaces || {}));\n }\n } catch (error) {\n // No workspaces file yet, initialize with default\n await this.init();\n }\n }\n\n /**\n * Save workspaces to storage\n */\n async save() {\n const data = {\n workspaces: Object.fromEntries(this.workspaces),\n };\n await this.storage.write('repo/store/workspaces.json', data);\n }\n\n /**\n * Add a new workspace\n *\n * @param {Object} args - Workspace options\n * @param {string} args.path - Path for the new workspace\n * @param {string} [args.name] - Optional name for the workspace\n * @param {string} [args.changeId] - Change to check out in new workspace\n * @returns {Promise<Object>} Created workspace\n */\n async add(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path for workspace', {\n suggestion: 'Provide a path for the new workspace',\n });\n }\n\n // Workspace paths can be absolute (unlike regular file paths)\n // Just validate changeId if provided\n if (args.changeId) {\n validateChangeId(args.changeId);\n }\n\n // Check if path already exists as a workspace\n for (const workspace of this.workspaces.values()) {\n if (workspace.path === args.path) {\n throw new JJError('WORKSPACE_EXISTS', `Workspace already exists at ${args.path}`, {\n path: args.path,\n });\n }\n }\n\n const workspaceId = generateId('workspace');\n const workspace = {\n id: workspaceId,\n name: args.name || `workspace-${workspaceId.slice(0, 8)}`,\n path: args.path,\n changeId: args.changeId || null,\n created: new Date().toISOString(),\n };\n\n // Create workspace directory\n await this.fs.promises.mkdir(args.path, { recursive: true });\n\n // Create workspace-specific working_copy directory in .jj\n const workspaceCopyDir = path.join(this.repoDir, '.jj', 'working_copy', workspaceId);\n await this.fs.promises.mkdir(workspaceCopyDir, { recursive: true });\n\n // Create .git file pointing to main repo's .git directory\n // This allows Git tools to work in the workspace\n // IMPORTANT: Must use absolute paths for Git compatibility\n const gitFilePath = path.join(args.path, '.git');\n const mainGitDir = path.resolve(this.repoDir, '.git');\n const gitFileContent = `gitdir: ${mainGitDir}\\n`;\n await this.fs.promises.writeFile(gitFilePath, gitFileContent, 'utf8');\n\n // Create .jj file pointing to main repo's .jj directory\n // This allows JJ tools to work in the workspace\n // IMPORTANT: Must use absolute paths for JJ CLI compatibility\n const jjFilePath = path.join(args.path, '.jj');\n const mainJJDir = path.resolve(this.repoDir, '.jj');\n const jjFileContent = `jjdir: ${mainJJDir}\\n`;\n await this.fs.promises.writeFile(jjFilePath, jjFileContent, 'utf8');\n\n this.workspaces.set(workspaceId, workspace);\n await this.save();\n\n return workspace;\n }\n\n /**\n * Remove a workspace\n *\n * @param {string} workspaceId - Workspace ID to remove\n * @param {boolean} [force=false] - Force removal even if files exist\n */\n async remove(workspaceId, force = false) {\n if (workspaceId === 'default') {\n throw new JJError('INVALID_OPERATION', 'Cannot remove default workspace', {\n suggestion: 'Use a different workspace ID',\n });\n }\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n // Check if directory is empty (unless force is true)\n if (!force) {\n try {\n const files = await this.fs.promises.readdir(workspace.path);\n if (files.length > 0) {\n throw new JJError('WORKSPACE_NOT_EMPTY', `Workspace at ${workspace.path} is not empty`, {\n path: workspace.path,\n suggestion: 'Use force=true to remove anyway',\n });\n }\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n // Remove the workspace directory and all its contents\n try {\n await this.fs.promises.rm(workspace.path, { recursive: true, force: true });\n } catch (error) {\n // Ignore errors if directory doesn't exist\n if (error.code !== 'ENOENT') {\n throw new JJError(\n 'WORKSPACE_REMOVAL_FAILED',\n `Failed to remove workspace directory: ${error.message}`,\n { path: workspace.path, originalError: error.message }\n );\n }\n }\n\n this.workspaces.delete(workspaceId);\n await this.save();\n }\n\n /**\n * Forget a workspace without deleting files\n *\n * @param {string} workspaceId - Workspace ID to forget\n */\n async forget(workspaceId) {\n if (workspaceId === 'default') {\n throw new JJError('INVALID_OPERATION', 'Cannot forget default workspace', {\n suggestion: 'Use a different workspace ID',\n });\n }\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n // Just remove from tracking, leave files alone\n this.workspaces.delete(workspaceId);\n await this.save();\n }\n\n /**\n * Get a workspace by ID\n *\n * @param {string} workspaceId - Workspace ID\n * @returns {Object|undefined} Workspace object\n */\n get(workspaceId) {\n return this.workspaces.get(workspaceId);\n }\n\n /**\n * Get workspace by path\n *\n * @param {string} path - Workspace path\n * @returns {Object|null} Workspace object or null\n */\n getByPath(path) {\n for (const workspace of this.workspaces.values()) {\n if (workspace.path === path) {\n return workspace;\n }\n }\n return null;\n }\n\n /**\n * List all workspaces\n *\n * @returns {Array<Object>} Array of workspaces\n */\n list() {\n return Array.from(this.workspaces.values());\n }\n\n /**\n * Update a workspace's change\n *\n * @param {string} workspaceId - Workspace ID\n * @param {string} changeId - New change ID\n */\n async updateChange(workspaceId, changeId) {\n validateChangeId(changeId);\n\n const workspace = this.workspaces.get(workspaceId);\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${workspaceId} not found`, {\n workspaceId,\n });\n }\n\n workspace.changeId = changeId;\n await this.save();\n }\n\n /**\n * Clear all workspaces (except default)\n */\n async clear() {\n const defaultWorkspace = this.workspaces.get('default');\n this.workspaces.clear();\n if (defaultWorkspace) {\n this.workspaces.set('default', defaultWorkspace);\n }\n await this.save();\n }\n}\n","/**\n * BackgroundOps - Background operations manager\n *\n * Handles file watching, automatic snapshots, and async operations.\n */\n\nimport { JJError } from '../utils/errors.js';\n\nexport class BackgroundOps {\n /**\n * @param {any} jj - JJ instance\n * @param {any} fs - Filesystem implementation\n * @param {string} dir - Repository directory\n */\n constructor(jj, fs, dir) {\n this.jj = jj;\n this.fs = fs;\n this.dir = dir;\n this.watchers = new Map();\n this.operations = new Map(); // operationId -> operation\n this.timers = new Map(); // watcherId -> timer\n this.running = false;\n }\n\n /**\n * Start background operations\n */\n async start() {\n if (this.running) {\n return;\n }\n\n this.running = true;\n }\n\n /**\n * Stop background operations\n */\n async stop() {\n if (!this.running) {\n return;\n }\n\n // Clear all timers\n for (const timer of this.timers.values()) {\n clearTimeout(timer);\n }\n this.timers.clear();\n\n // Stop all watchers\n for (const watcher of this.watchers.values()) {\n if (watcher.close) {\n watcher.close();\n }\n }\n\n this.watchers.clear();\n this.running = false;\n }\n\n /**\n * Watch a path for changes\n *\n * @param {string} path - Path to watch\n * @param {Function} callback - Callback function(event, filename)\n * @returns {Promise<string>} Watcher ID\n */\n async watch(path, callback) {\n if (!this.running) {\n throw new JJError('BACKGROUND_OPS_NOT_RUNNING', 'Background operations not started', {\n suggestion: 'Call start() first',\n });\n }\n\n // Check if fs.watch is available (Node.js)\n if (this.fs.watch) {\n const watcherId = `watcher-${this.watchers.size}`;\n const watcher = this.fs.watch(path, { recursive: true }, callback);\n this.watchers.set(watcherId, watcher);\n return watcherId;\n }\n\n // Browser: use FileSystem Access API observeDirectory if available\n if (typeof (/** @type {any} */ (globalThis).FileSystemObserver) !== 'undefined') {\n const watcherId = `watcher-${this.watchers.size}`;\n const observer = new /** @type {any} */ (globalThis).FileSystemObserver(\n async (/** @type {any} */ records) => {\n for (const record of records) {\n callback(record.type, record.relativePathComponents.join('/'));\n }\n }\n );\n\n // Note: This API is experimental and may not be available\n this.watchers.set(watcherId, observer);\n return watcherId;\n }\n\n throw new JJError('WATCH_NOT_SUPPORTED', 'File watching not supported in this environment');\n }\n\n /**\n * Unwatch a path\n *\n * @param {string} watcherId - Watcher ID\n */\n async unwatch(watcherId) {\n const watcher = this.watchers.get(watcherId);\n if (!watcher) {\n return;\n }\n\n // Clear any pending timer for this watcher\n const timer = this.timers.get(watcherId);\n if (timer) {\n clearTimeout(timer);\n this.timers.delete(watcherId);\n }\n\n if (watcher.close) {\n watcher.close();\n } else if (watcher.disconnect) {\n watcher.disconnect();\n }\n\n this.watchers.delete(watcherId);\n }\n\n /**\n * Queue a background operation\n *\n * @param {Function} operation - Async operation to run\n * @param {Object} opts - Options\n * @param {string} [opts.description] - Operation description\n * @returns {Promise<{id: string, promise: Promise<any>}>} Operation handle\n */\n async queue(operation, opts = {}) {\n const operationId = `op-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n\n /** @type {Record<string, any>} */\n const op = {\n id: operationId,\n description: opts.description || 'background operation',\n status: 'pending',\n created: new Date().toISOString(),\n promise: null,\n result: null,\n error: null,\n };\n\n this.operations.set(operationId, op);\n\n // Run operation asynchronously\n op.promise = (async () => {\n try {\n op.status = 'running';\n op.result = await operation();\n op.status = 'completed';\n op.completed = new Date().toISOString();\n return op.result;\n } catch (error) {\n op.status = 'failed';\n op.error = error;\n op.completed = new Date().toISOString();\n throw error;\n }\n })();\n\n return {\n id: operationId,\n promise: op.promise,\n };\n }\n\n /**\n * Get operation status\n *\n * @param {string} operationId - Operation ID\n * @returns {Object|null} Operation status\n */\n getOperation(operationId) {\n return this.operations.get(operationId) || null;\n }\n\n /**\n * List all operations\n *\n * @param {Object} opts - List options\n * @param {string} [opts.status] - Filter by status\n * @returns {Array<Object>} Operations\n */\n listOperations(opts = {}) {\n let ops = Array.from(this.operations.values());\n\n if (opts.status) {\n ops = ops.filter((op) => op.status === opts.status);\n }\n\n return ops.map((op) => ({\n id: op.id,\n description: op.description,\n status: op.status,\n created: op.created,\n completed: op.completed,\n error: op.error ? op.error.message : null,\n }));\n }\n\n /**\n * Enable auto-snapshot on file changes\n *\n * @param {Object} opts - Options\n * @param {number} [opts.debounceMs=1000] - Debounce delay in ms\n */\n async enableAutoSnapshot(opts = {}) {\n const debounceMs = opts.debounceMs || 1000;\n\n const watcherId = await this.watch(\n this.dir,\n (/** @type {any} */ event, /** @type {any} */ filename) => {\n if (filename && filename.startsWith('.jj/')) {\n return; // Ignore .jj directory changes\n }\n\n if (filename && filename.startsWith('.git/')) {\n return; // Ignore .git directory changes\n }\n\n // Debounce: wait for changes to settle\n const existingTimer = this.timers.get(watcherId);\n if (existingTimer) {\n clearTimeout(existingTimer);\n }\n\n const timer = setTimeout(async () => {\n try {\n // Create automatic snapshot. queue() resolves as soon as the\n // operation is *enqueued*, not once it finishes — it returns a\n // `{ id, promise }` handle. Awaiting only queue() (and not the\n // returned `promise`) would let a later describe() rejection\n // become an unhandled promise rejection instead of landing in\n // this catch block, so the handle's promise must be awaited too.\n const { promise } = await this.queue(\n async () => {\n await this.jj.describe({\n message: `Auto-snapshot: ${filename || 'multiple files'} changed`,\n });\n },\n { description: 'auto-snapshot' }\n );\n await promise;\n } catch (error) {\n console.error('Auto-snapshot failed:', error);\n } finally {\n // Clean up timer reference\n this.timers.delete(watcherId);\n }\n }, debounceMs);\n\n // Use unref() to allow process to exit if this is the only pending timer\n if (timer.unref) {\n timer.unref();\n }\n\n this.timers.set(watcherId, timer);\n }\n );\n\n return watcherId;\n }\n\n /**\n * Clean up completed operations\n *\n * @param {number} [maxAge] - Max age in ms (default: 1 hour)\n */\n cleanupOperations(maxAge = 3600000) {\n const cutoff = Date.now() - maxAge;\n\n for (const [id, op] of this.operations.entries()) {\n if (op.status === 'completed' || op.status === 'failed') {\n const completedTime = new Date(op.completed).getTime();\n if (completedTime < cutoff) {\n this.operations.delete(id);\n }\n }\n }\n }\n}\n","/**\n * UserConfig - Manages user configuration (name, email, etc.)\n *\n * In real JJ, this would come from:\n * - ~/.jjconfig.toml (global config)\n * - .jj/repo/config.toml (repo config)\n * - Environment variables\n *\n * For now, we store it in the repository.\n */\n\nexport class UserConfig {\n /**\n * @param {Storage} storage - Storage manager instance\n */\n constructor(storage) {\n this.storage = storage;\n this.config = null;\n }\n\n /**\n * Initialize with default config\n *\n * @param {Object} opts - Initial config\n * @param {string} [opts.userName='User'] - User name\n * @param {string} [opts.userEmail='user@example.com'] - User email\n */\n async init(opts = {}) {\n this.config = {\n user: {\n name: opts.userName || 'User',\n email: opts.userEmail || 'user@example.com',\n },\n };\n\n await this.save();\n }\n\n /**\n * Load config from storage and/or programmatic object\n * v0.35.0: Also loads workspace-specific config from workspace-config.json\n * v0.36.0: Accepts optional config object for programmatic configuration\n *\n * @param {Object} [opts] - Optional config options\n * @param {Object} [opts.workspace] - Workspace-specific config to merge (highest priority)\n * @param {Object} [opts.override] - Config object to merge over loaded config\n */\n async load(opts = {}) {\n try {\n const data = await this.storage.read('config.json');\n if (data) {\n this.config = data;\n }\n } catch (error) {\n // No config file yet, use defaults\n await this.init();\n }\n\n // Merge programmatic override config if provided\n if (opts.override) {\n this.config = this._deepMerge(this.config, opts.override);\n }\n\n // Load workspace-specific config from file (v0.35.0)\n try {\n const workspaceData = await this.storage.read('workspace-config.json');\n if (workspaceData) {\n // Merge workspace config over global config (workspace takes precedence)\n this.config = this._deepMerge(this.config, workspaceData);\n }\n } catch (error) {\n // No workspace config, that's fine\n }\n\n // Merge programmatic workspace config if provided (highest priority)\n if (opts.workspace) {\n this.config = this._deepMerge(this.config, opts.workspace);\n }\n }\n\n /**\n * Deep merge two config objects (workspace overrides global)\n * @param {any} target - Base config object\n * @param {any} source - Overriding config object\n * @private\n */\n _deepMerge(target, source) {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this._deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n\n return result;\n }\n\n /**\n * Save config to storage\n */\n async save() {\n await this.storage.write('config.json', this.config);\n }\n\n /**\n * Get user info\n *\n * @returns {Object} User info { name, email }\n */\n getUser() {\n if (!this.config) {\n return { name: 'User', email: 'user@example.com' };\n }\n return this.config.user;\n }\n\n /**\n * Set user info\n *\n * @param {Object} user - User info\n * @param {string} user.name - User name\n * @param {string} user.email - User email\n */\n async setUser(user) {\n if (!this.config) {\n await this.load();\n }\n\n this.config.user = {\n name: user.name,\n email: user.email,\n };\n\n await this.save();\n }\n\n /**\n * Get config value\n *\n * @param {string} key - Config key (dot notation supported)\n * @returns {*} Config value\n */\n get(key) {\n if (!this.config) {\n return undefined;\n }\n\n const parts = key.split('.');\n let value = this.config;\n\n for (const part of parts) {\n value = value?.[part];\n if (value === undefined) {\n return undefined;\n }\n }\n\n return value;\n }\n\n /**\n * Set config value\n *\n * @param {string} key - Config key (dot notation supported)\n * @param {*} value - Config value\n */\n async set(key, value) {\n if (!this.config) {\n await this.load();\n }\n\n const parts = key.split('.');\n const lastPart = /** @type {string} */ (parts.pop());\n let target = this.config;\n\n for (const part of parts) {\n if (!target[part]) {\n target[part] = {};\n }\n target = target[part];\n }\n\n target[lastPart] = value;\n await this.save();\n }\n}\n","/**\n * JJ Checkout File Manager\n *\n * Handles encoding/decoding of .jj/working_copy/checkout file using protobuf.\n * This file tracks which operation the working copy is at.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJCheckout {\n /**\n * @param {any} fs - File system module (isomorphic-git compatible)\n * @param {any} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'local_working_copy.proto');\n }\n\n /**\n * Write checkout file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @param {string} workspaceName - Workspace name (default: 'default')\n */\n async writeCheckout(operationId, workspaceName = 'default') {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Checkout = root.lookupType('local_working_copy.Checkout');\n\n // Convert hex operation ID to bytes\n const opIdBuffer = Buffer.from(operationId, 'hex');\n\n // Create message (use camelCase for protobufjs)\n const message = Checkout.create({\n operationId: opIdBuffer,\n workspaceName: workspaceName,\n });\n\n // Verify the message\n const errMsg = Checkout.verify(message);\n if (errMsg) {\n throw new Error(`Checkout message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = Checkout.encode(message).finish();\n\n // Write to .jj/working_copy/checkout\n const checkoutPath = `${this.dir}/.jj/working_copy/checkout`;\n await this.fs.promises.writeFile(checkoutPath, buffer);\n }\n\n /**\n * Read checkout file\n *\n * @returns {Promise<Record<string, any>>} Decoded checkout data\n */\n async readCheckout() {\n const checkoutPath = `${this.dir}/.jj/working_copy/checkout`;\n const buffer = await this.fs.promises.readFile(checkoutPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Checkout = root.lookupType('local_working_copy.Checkout');\n\n // Decode\n const message = /** @type {any} */ (Checkout.decode(buffer));\n\n // Return the decoded message with proper field access\n return {\n operation_id: message.operationId,\n workspace_name: message.workspaceName,\n };\n }\n}\n","/**\n * JJ TreeState File Manager\n *\n * Handles encoding/decoding of .jj/working_copy/tree_state file using protobuf.\n * This file tracks the working copy tree and file states.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJTreeState {\n /**\n * @param {any} fs - File system module (isomorphic-git compatible)\n * @param {any} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'local_working_copy.proto');\n }\n\n /**\n * Write tree_state file\n *\n * @param {string} treeId - Tree ID as hex string (40 characters for SHA-1)\n * @param {Array<any>} fileStates - Array of file state objects\n */\n async writeTreeState(treeId, fileStates = []) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const TreeState = root.lookupType('local_working_copy.TreeState');\n\n // Convert hex tree ID to bytes\n const treeIdBuffer = Buffer.from(treeId, 'hex');\n\n // Convert file states to protobuf format\n const fileStateEntries = fileStates.map((fs) => ({\n path: fs.path,\n state: {\n mtimeMillisSinceEpoch: fs.mtime, // Use camelCase for protobufjs\n size: fs.size,\n fileType: fs.fileType || 0, // 0 = Normal\n },\n }));\n\n // Create message (use camelCase for protobufjs)\n const message = TreeState.create({\n treeIds: [treeIdBuffer], // Single tree ID (no conflicts)\n fileStates: fileStateEntries,\n isFileStatesSorted: false, // We don't sort them\n sparsePatterns: {\n prefixes: [], // No sparse patterns\n },\n });\n\n // Verify the message\n const errMsg = TreeState.verify(message);\n if (errMsg) {\n throw new Error(`TreeState message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = TreeState.encode(message).finish();\n\n // Write to .jj/working_copy/tree_state\n const treeStatePath = `${this.dir}/.jj/working_copy/tree_state`;\n await this.fs.promises.writeFile(treeStatePath, buffer);\n }\n\n /**\n * Read tree_state file\n *\n * @returns {Promise<Record<string, any>>} Decoded tree state data\n */\n async readTreeState() {\n const treeStatePath = `${this.dir}/.jj/working_copy/tree_state`;\n const buffer = await this.fs.promises.readFile(treeStatePath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const TreeState = root.lookupType('local_working_copy.TreeState');\n\n // Decode\n const message = /** @type {any} */ (TreeState.decode(buffer));\n\n // Return the decoded message with proper field access\n return {\n tree_ids: message.treeIds,\n file_states: message.fileStates,\n is_file_states_sorted: message.isFileStatesSorted,\n sparse_patterns: message.sparsePatterns,\n };\n }\n}\n","/**\n * JJ Operation Store Manager\n *\n * Handles encoding/decoding of .jj/repo/op_store/operations/* files using protobuf.\n * Operations track the history of changes to the repository.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJOperationStore {\n /**\n * @param {any} fs - File system module (isomorphic-git compatible)\n * @param {any} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'simple_op_store.proto');\n }\n\n /**\n * Write operation file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @param {string} viewId - View ID as hex string (128 characters)\n * @param {Array<string>} parentIds - Parent operation IDs as hex strings\n * @param {Record<string, any>} metadata - Operation metadata\n */\n async writeOperation(operationId, viewId, parentIds, metadata) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Operation = root.lookupType('simple_op_store.Operation');\n\n // Convert hex IDs to bytes\n const viewIdBuffer = Buffer.from(viewId, 'hex');\n const parentBuffers = parentIds.map((id) => Buffer.from(id, 'hex'));\n\n // Create metadata message (use camelCase for protobufjs)\n const metadataMsg = {\n startTime: {\n millisSinceEpoch: metadata.start_time.millis_since_epoch,\n tzOffset: metadata.start_time.tz_offset,\n },\n endTime: {\n millisSinceEpoch: metadata.end_time.millis_since_epoch,\n tzOffset: metadata.end_time.tz_offset,\n },\n description: metadata.description,\n hostname: metadata.hostname,\n username: metadata.username,\n isSnapshot: metadata.is_snapshot,\n tags: metadata.tags,\n };\n\n // Create operation message (use camelCase for protobufjs)\n const message = Operation.create({\n viewId: viewIdBuffer,\n parents: parentBuffers,\n metadata: metadataMsg,\n commitPredecessors: [], // Empty for now\n storesCommitPredecessors: false,\n });\n\n // Verify the message\n const errMsg = Operation.verify(message);\n if (errMsg) {\n throw new Error(`Operation message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = Operation.encode(message).finish();\n\n // Write to .jj/repo/op_store/operations/OPERATIONID\n const opPath = `${this.dir}/.jj/repo/op_store/operations/${operationId}`;\n await this.fs.promises.writeFile(opPath, buffer);\n }\n\n /**\n * Read operation file\n *\n * @param {string} operationId - Operation ID as hex string (128 characters)\n * @returns {Promise<Record<string, any>>} Decoded operation data\n */\n async readOperation(operationId) {\n // Read from .jj/repo/op_store/operations/OPERATIONID\n const opPath = `${this.dir}/.jj/repo/op_store/operations/${operationId}`;\n const buffer = await this.fs.promises.readFile(opPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const Operation = root.lookupType('simple_op_store.Operation');\n\n // Decode\n const message = /** @type {any} */ (Operation.decode(buffer));\n\n // Return the decoded message with proper field access\n return {\n view_id: message.viewId,\n parents: message.parents,\n metadata: {\n start_time: {\n millis_since_epoch: message.metadata.startTime.millisSinceEpoch,\n tz_offset: message.metadata.startTime.tzOffset,\n },\n end_time: {\n millis_since_epoch: message.metadata.endTime.millisSinceEpoch,\n tz_offset: message.metadata.endTime.tzOffset,\n },\n description: message.metadata.description,\n hostname: message.metadata.hostname,\n username: message.metadata.username,\n is_snapshot: message.metadata.isSnapshot,\n tags: message.metadata.tags,\n },\n commit_predecessors: message.commitPredecessors,\n stores_commit_predecessors: message.storesCommitPredecessors,\n };\n }\n}\n","/**\n * JJ View Store Manager\n *\n * Handles encoding/decoding of .jj/repo/op_store/views/* files using protobuf.\n * Views represent the state of the repository at a given operation.\n */\n\nimport protobuf from 'protobufjs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// Determine proto path based on whether we're running from dist or src\nconst inDist = __dirname.includes('/dist') || __dirname.includes('\\\\dist');\nconst protoDir = inDist\n ? path.join(__dirname, '..', 'src', 'protos')\n : path.join(__dirname, '..', 'protos');\n\nexport class JJViewStore {\n /**\n * @param {any} fs - File system module (isomorphic-git compatible)\n * @param {any} dir - Repository directory path\n */\n constructor(fs, dir) {\n this.fs = fs;\n this.dir = dir;\n this.protoPath = path.join(protoDir, 'simple_op_store.proto');\n }\n\n /**\n * Write view file\n *\n * @param {string} viewId - View ID as hex string (128 characters)\n * @param {Array<string>} headIds - Head commit IDs as hex strings\n * @param {Object} wcCommitIds - Working copy commit IDs by workspace name\n */\n async writeView(viewId, headIds, wcCommitIds = {}) {\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const View = root.lookupType('simple_op_store.View');\n\n // Convert hex IDs to bytes\n const headBuffers = headIds.map((id) => Buffer.from(id, 'hex'));\n\n // Convert wcCommitIds object to map\n /** @type {Record<string, any>} */\n const wcCommitIdsMap = {};\n for (const [workspace, commitId] of Object.entries(wcCommitIds)) {\n wcCommitIdsMap[workspace] = Buffer.from(commitId, 'hex');\n }\n\n // Create view message (use camelCase for protobufjs)\n const message = View.create({\n headIds: headBuffers,\n wcCommitIds: wcCommitIdsMap,\n bookmarks: [],\n localTags: [],\n remoteViews: [],\n gitRefs: [],\n gitHead: null,\n hasGitRefsMigratedToRemoteTags: false,\n });\n\n // Verify the message\n const errMsg = View.verify(message);\n if (errMsg) {\n throw new Error(`View message verification failed: ${errMsg}`);\n }\n\n // Encode to binary\n const buffer = View.encode(message).finish();\n\n // Write to .jj/repo/op_store/views/VIEWID\n const viewPath = `${this.dir}/.jj/repo/op_store/views/${viewId}`;\n await this.fs.promises.writeFile(viewPath, buffer);\n }\n\n /**\n * Read view file\n *\n * @param {string} viewId - View ID as hex string (128 characters)\n * @returns {Promise<Record<string, any>>} Decoded view data\n */\n async readView(viewId) {\n // Read from .jj/repo/op_store/views/VIEWID\n const viewPath = `${this.dir}/.jj/repo/op_store/views/${viewId}`;\n const buffer = await this.fs.promises.readFile(viewPath);\n\n // Load protobuf schema\n const root = await protobuf.load(this.protoPath);\n const View = root.lookupType('simple_op_store.View');\n\n // Decode\n const message = /** @type {any} */ (View.decode(buffer));\n\n // Convert wcCommitIds map back to object\n /** @type {Record<string, any>} */\n const wcCommitIds = {};\n for (const [workspace, commitIdBuffer] of Object.entries(message.wcCommitIds || {})) {\n wcCommitIds[workspace] = commitIdBuffer;\n }\n\n // Return the decoded message with proper field access\n return {\n head_ids: message.headIds,\n wc_commit_ids: wcCommitIds,\n bookmarks: message.bookmarks,\n local_tags: message.localTags,\n remote_views: message.remoteViews,\n git_refs: message.gitRefs,\n git_head: message.gitHead,\n has_git_refs_migrated_to_remote_tags: message.hasGitRefsMigratedToRemoteTags,\n };\n }\n}\n","/**\n * isomorphic-git Backend Adapter\n *\n * Provides real Git object storage using isomorphic-git library.\n * Implements the JJBackend interface for Git interoperability.\n */\n\nimport git from 'isomorphic-git';\nimport { JJError } from '../utils/errors.js';\nimport { JJCheckout } from '../core/jj-checkout.js';\nimport { JJTreeState } from '../core/jj-tree-state.js';\nimport { JJOperationStore } from '../core/jj-operation-store.js';\nimport { JJViewStore } from '../core/jj-view-store.js';\nimport crypto from 'crypto';\n\n/**\n * Backend adapter for isomorphic-git\n *\n * @class IsomorphicGitBackend\n */\nexport class IsomorphicGitBackend {\n /**\n * Create isomorphic-git backend\n *\n * @param {Object} options - Backend options\n * @param {any} options.fs - Filesystem implementation (Node fs or LightningFS)\n * @param {any} [options.http] - HTTP client for network operations\n * @param {string} options.dir - Repository directory path\n */\n constructor({ fs, http, dir }) {\n if (!fs) {\n throw new JJError(\n 'INVALID_BACKEND_CONFIG',\n 'Filesystem (fs) is required for isomorphic-git backend',\n { suggestion: 'Provide fs option (Node fs or LightningFS)' }\n );\n }\n if (!dir) {\n throw new JJError('INVALID_BACKEND_CONFIG', 'Repository directory (dir) is required', {\n suggestion: 'Provide dir option with repository path',\n });\n }\n\n this.fs = fs;\n this.http = http;\n this.dir = dir;\n }\n\n /**\n * Initialize Git repository\n *\n * @param {Object} opts - Init options\n * @param {string} [opts.defaultBranch='main'] - Default branch name\n * @returns {Promise<void>}\n */\n async init(opts = {}) {\n try {\n await git.init({\n fs: this.fs,\n dir: this.dir,\n defaultBranch: opts.defaultBranch || 'main',\n });\n\n // Create .jj/repo structure for jj CLI compatibility\n await this._createJJRepoStructure();\n } catch (error) {\n throw new JJError('INIT_FAILED', `Failed to initialize Git repository: ${error.message}`, {\n dir: this.dir,\n originalError: error,\n });\n }\n }\n\n /**\n * Read Git object from storage\n *\n * @param {string} oid - Git object SHA-1 hash (40-char hex)\n * @returns {Promise<{type: string, data: any}>} Git object\n */\n async getObject(oid) {\n try {\n const { type, object } = await git.readObject({\n fs: this.fs,\n dir: this.dir,\n oid,\n });\n return { type, data: object };\n } catch (error) {\n if (error.code === 'NotFoundError' || error.code === 'ReadObjectFail') {\n throw new JJError('NOT_FOUND', `Git object ${oid} not found`, {\n oid,\n suggestion: 'Ensure object exists in repository',\n });\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read Git object: ${error.message}`, {\n oid,\n originalError: error,\n });\n }\n }\n\n /**\n * Write Git object to storage\n *\n * @param {string} type - Object type ('blob', 'tree', 'commit', 'tag')\n * @param {Uint8Array} data - Object data\n * @returns {Promise<string>} Object SHA-1 hash\n */\n async putObject(type, data) {\n try {\n const oid = await git.writeObject({\n fs: this.fs,\n dir: this.dir,\n type: /** @type {any} */ (type),\n object: data,\n });\n return oid;\n } catch (error) {\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to write Git object: ${error.message}`, {\n type,\n dataSize: data.length,\n originalError: error,\n });\n }\n }\n\n /**\n * Read Git reference\n *\n * @param {string} name - Full ref name (e.g., 'refs/heads/main')\n * @returns {Promise<string|null>} Commit SHA-1 or null if not found\n */\n async readRef(name) {\n try {\n const oid = await git.resolveRef({\n fs: this.fs,\n dir: this.dir,\n ref: name,\n });\n return oid;\n } catch (error) {\n if (error.code === 'NotFoundError' || error.code === 'ResolveRefError') {\n return null;\n }\n throw new JJError('STORAGE_READ_FAILED', `Failed to read Git ref: ${error.message}`, {\n ref: name,\n originalError: error,\n });\n }\n }\n\n /**\n * Create, update, or delete Git reference\n *\n * @param {string} name - Full ref name\n * @param {string|null} oid - Commit SHA-1 or null to delete\n * @returns {Promise<void>}\n */\n async updateRef(name, oid) {\n try {\n if (oid === null) {\n // Delete ref\n const refPath = `${this.dir}/.git/${name}`;\n try {\n await this.fs.promises.unlink(refPath);\n } catch (error) {\n // Ignore if ref doesn't exist\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n } else {\n // Create or update ref\n await git.writeRef({\n fs: this.fs,\n dir: this.dir,\n ref: name,\n value: oid,\n force: true,\n });\n }\n } catch (error) {\n throw new JJError('STORAGE_WRITE_FAILED', `Failed to update Git ref: ${error.message}`, {\n ref: name,\n oid,\n originalError: error,\n });\n }\n }\n\n /**\n * List Git references\n *\n * @param {string} [prefix=''] - Ref prefix filter\n * @returns {Promise<Array<{name: string, oid: string}>>} List of refs\n */\n async listRefs(prefix = '') {\n try {\n // Use expandRef to get all possible refs\n const result = [];\n const refDirs = ['refs/heads', 'refs/tags', 'refs/remotes'];\n\n for (const refDir of refDirs) {\n if (prefix && !refDir.startsWith(prefix) && !prefix.startsWith(refDir)) {\n continue;\n }\n\n try {\n const dirPath = `${this.dir}/.git/${refDir}`;\n const entries = await this.fs.promises.readdir(dirPath, { recursive: true });\n\n for (const entry of entries) {\n const refName = `${refDir}/${entry}`;\n if (prefix && !refName.startsWith(prefix)) {\n continue;\n }\n\n try {\n const oid = await this.readRef(refName);\n if (oid) {\n result.push({ name: refName, oid });\n }\n } catch (e) {\n // Skip refs that can't be read\n }\n }\n } catch (e) {\n // Directory doesn't exist, skip\n }\n }\n\n return result.sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n throw new JJError('STORAGE_READ_FAILED', `Failed to list Git refs: ${error.message}`, {\n prefix,\n originalError: error,\n });\n }\n }\n\n /**\n * Create a Git commit from working directory state\n *\n * @param {Object} opts - Commit options\n * @param {string} opts.message - Commit message\n * @param {Object} opts.author - Author info\n * @param {string} opts.author.name - Author name\n * @param {string} opts.author.email - Author email\n * @param {number} [opts.author.timestamp] - Author timestamp (milliseconds since epoch)\n * @param {{name: string, email: string, timestamp?: number}} [opts.committer] - Committer info (defaults to author)\n * @param {string[]} [opts.parents=[]] - Parent commit SHAs\n * @returns {Promise<string>} Commit SHA\n */\n async createCommit(opts) {\n try {\n const author = {\n name: opts.author.name,\n email: opts.author.email,\n timestamp: opts.author.timestamp\n ? Math.floor(opts.author.timestamp / 1000)\n : Math.floor(Date.now() / 1000),\n timezoneOffset: 0,\n };\n\n const committer = opts.committer\n ? {\n name: opts.committer.name,\n email: opts.committer.email,\n timestamp: opts.committer.timestamp\n ? Math.floor(opts.committer.timestamp / 1000)\n : author.timestamp,\n timezoneOffset: 0,\n }\n : author;\n\n const commitSha = await git.commit({\n fs: this.fs,\n dir: this.dir,\n message: opts.message,\n author,\n committer,\n parent: opts.parents || [],\n });\n\n return commitSha;\n } catch (error) {\n throw new JJError('COMMIT_FAILED', `Failed to create Git commit: ${error.message}`, {\n message: opts.message,\n originalError: error,\n });\n }\n }\n\n /**\n * Get the current tree SHA for the staging area (git index).\n *\n * `git.writeTree()` writes exactly the flat `TreeObject` array it's given —\n * it does not build one from the working directory or index. To get \"the\n * tree that would be committed right now\", walk the index (STAGE) to\n * collect every staged blob's path/oid/mode, group them into a nested\n * directory structure, and write each subtree bottom-up.\n *\n * @returns {Promise<string>} Tree SHA\n */\n async getCurrentTree() {\n try {\n /** @type {Array<{path: string, oid: string, mode: number}>} */\n const flatEntries = (\n await git.walk({\n fs: this.fs,\n dir: this.dir,\n trees: [git.STAGE()],\n map: async (filepath, [stage]) => {\n if (!stage || filepath === '.') return undefined;\n const type = await stage.type();\n if (type !== 'blob') return undefined; // directory marker, not a leaf\n return { path: filepath, oid: await stage.oid(), mode: await stage.mode() };\n },\n })\n ).filter(Boolean);\n\n // Group the flat, index-relative paths into a nested tree of\n // directories, each holding its immediate file/subdirectory children.\n /** @type {{dirs: Map<string, any>, files: Array<{name: string, oid: string, mode: string}>}} */\n const root = { dirs: new Map(), files: [] };\n for (const entry of flatEntries) {\n const parts = entry.path.split('/');\n let node = root;\n for (let i = 0; i < parts.length - 1; i++) {\n const segment = parts[i];\n if (!node.dirs.has(segment)) {\n node.dirs.set(segment, { dirs: new Map(), files: [] });\n }\n node = node.dirs.get(segment);\n }\n node.files.push({\n name: parts[parts.length - 1],\n oid: entry.oid,\n // isomorphic-git expects an octal mode STRING (e.g. \"100644\"), but\n // the walker returns the mode as a decimal number.\n mode: entry.mode.toString(8),\n });\n }\n\n const writeDir = async (/** @type {any} */ node) => {\n /** @type {any[]} */\n const treeEntries = [];\n for (const [name, child] of node.dirs.entries()) {\n const oid = await writeDir(child);\n treeEntries.push({ mode: '040000', path: name, oid, type: 'tree' });\n }\n for (const file of node.files) {\n treeEntries.push({ mode: file.mode, path: file.name, oid: file.oid, type: 'blob' });\n }\n return await git.writeTree(\n /** @type {any} */ ({ fs: this.fs, dir: this.dir, tree: treeEntries })\n );\n };\n\n return await writeDir(root);\n } catch (error) {\n throw new JJError('TREE_READ_FAILED', `Failed to get current tree: ${error.message}`, {\n originalError: error,\n });\n }\n }\n\n /**\n * Stage all files in the working directory\n *\n * @returns {Promise<void>}\n */\n async stageAll() {\n try {\n // Get all files in the directory\n const files = await this._getAllFiles(this.dir);\n\n // Add each file to the index\n for (const filepath of files) {\n try {\n await git.add({\n fs: this.fs,\n dir: this.dir,\n filepath,\n });\n } catch (error) {\n // Skip files that can't be staged (like .git directory)\n if (error.code !== 'ENOENT') {\n throw new JJError(\n 'STAGE_FILE_FAILED',\n `Could not stage ${filepath}: ${error.message}`,\n { filepath, originalError: error.message }\n );\n }\n }\n }\n } catch (error) {\n // A per-file STAGE_FILE_FAILED (thrown above) is already categorized —\n // re-throw it as-is instead of losing its specific code by re-wrapping\n // it in the more generic STAGE_FAILED (which is reserved for failures\n // in _getAllFiles() itself, e.g. an unreadable directory).\n if (error instanceof JJError) {\n throw error;\n }\n throw new JJError('STAGE_FAILED', `Failed to stage files: ${error.message}`, {\n originalError: error,\n });\n }\n }\n\n /**\n * Get all files in a directory recursively (helper method)\n *\n * @private\n * @param {string} dir - Directory path\n * @param {string} [baseDir=''] - Base directory for relative paths\n * @returns {Promise<string[]>} Array of relative file paths\n */\n async _getAllFiles(dir, baseDir = '') {\n const files = [];\n const entries = await this.fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const name = entry.name || entry;\n const fullPath = `${dir}/${name}`;\n const relativePath = baseDir ? `${baseDir}/${name}` : name;\n\n // Skip .git and .jj directories\n if (name === '.git' || name === '.jj') {\n continue;\n }\n\n try {\n const stats = await this.fs.promises.stat(fullPath);\n if (stats.isDirectory && stats.isDirectory()) {\n // Recurse into subdirectories\n const subFiles = await this._getAllFiles(fullPath, relativePath);\n files.push(...subFiles);\n } else if (stats.isFile && stats.isFile()) {\n files.push(relativePath);\n } else {\n // For simple objects without methods\n const isDir = (await this.fs.promises.readdir(fullPath).catch(() => null)) !== null;\n if (isDir) {\n const subFiles = await this._getAllFiles(fullPath, relativePath);\n files.push(...subFiles);\n } else {\n files.push(relativePath);\n }\n }\n } catch (error) {\n // Skip files we can't read\n continue;\n }\n }\n\n return files;\n }\n\n /**\n * Fetch objects and refs from remote repository\n *\n * @param {Object} opts - Fetch options\n * @param {string} opts.remote - Remote name or URL\n * @param {string[]} [opts.refs] - Ref specs to fetch\n * @param {number} [opts.depth] - Create a shallow clone with history truncated to depth (v0.4)\n * @param {boolean} [opts.relative] - Depth measured from current shallow depth (v0.4)\n * @param {boolean} [opts.singleBranch] - Only fetch single branch (v0.4)\n * @param {boolean} [opts.noTags] - Don't fetch tags (v0.4)\n * @param {any} [opts.onProgress] - Progress callback\n * @param {any} [opts.onAuth] - Authentication callback\n * @returns {Promise<{fetchedRefs: Array<any>, updatedRefs: Array<any>}>} Fetch result\n */\n async fetch(opts) {\n if (!this.http) {\n throw new JJError(\n 'NETWORK_NOT_AVAILABLE',\n 'HTTP client not provided - network operations unavailable',\n { suggestion: 'Provide http option when creating backend' }\n );\n }\n\n try {\n const fetchedRefs = [];\n const updatedRefs = [];\n\n // Fetch each ref spec (isomorphic-git fetches one at a time)\n const refsToFetch = opts.refs || ['HEAD'];\n for (const ref of refsToFetch) {\n await git.fetch({\n fs: this.fs,\n http: this.http,\n dir: this.dir,\n remote: opts.remote,\n ref,\n depth: opts.depth, // v0.4: Shallow clone support\n relative: opts.relative, // v0.4: Relative depth\n singleBranch: opts.singleBranch, // v0.4: Single branch only\n tags: opts.noTags === true ? false : undefined, // v0.4: Skip tags\n onProgress: opts.onProgress,\n onAuth: opts.onAuth,\n });\n\n // Track fetched ref\n const remoteRef = `refs/remotes/${opts.remote}/${ref.replace('refs/heads/', '')}`;\n const oid = await this.readRef(remoteRef);\n if (oid) {\n fetchedRefs.push({ name: remoteRef, oid });\n updatedRefs.push(remoteRef);\n }\n }\n\n return { fetchedRefs, updatedRefs };\n } catch (error) {\n if (error.code === 'HttpError' || error.code === 'NetworkError') {\n throw new JJError('NETWORK_ERROR', `Network error during fetch: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n if (error.code === 'AuthError') {\n throw new JJError('AUTH_FAILED', `Authentication failed: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n throw new JJError('FETCH_FAILED', `Fetch failed: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n }\n\n /**\n * Push objects and refs to remote repository\n *\n * @param {Object} opts - Push options\n * @param {string} opts.remote - Remote name or URL\n * @param {string[]} [opts.refs] - Ref specs to push\n * @param {boolean} [opts.force] - Allow non-fast-forward\n * @param {any} [opts.onProgress] - Progress callback\n * @param {any} [opts.onAuth] - Authentication callback\n * @returns {Promise<{pushedRefs: Array<any>, rejectedRefs: Array<any>}>} Push result\n */\n async push(opts) {\n if (!this.http) {\n throw new JJError(\n 'NETWORK_NOT_AVAILABLE',\n 'HTTP client not provided - network operations unavailable',\n { suggestion: 'Provide http option when creating backend' }\n );\n }\n\n try {\n const pushedRefs = [];\n const rejectedRefs = [];\n\n // Push each ref spec (isomorphic-git pushes one at a time)\n const refsToPush = opts.refs || [];\n for (const ref of refsToPush) {\n try {\n await git.push({\n fs: this.fs,\n http: this.http,\n dir: this.dir,\n remote: opts.remote,\n ref,\n force: opts.force || false,\n onProgress: opts.onProgress,\n onAuth: opts.onAuth,\n });\n\n // Track pushed ref\n const oid = await this.readRef(ref);\n if (oid) {\n pushedRefs.push({ name: ref, oid });\n }\n } catch (pushError) {\n // Track rejected refs\n rejectedRefs.push(ref);\n }\n }\n\n return { pushedRefs, rejectedRefs };\n } catch (error) {\n if (error.code === 'HttpError' || error.code === 'NetworkError') {\n throw new JJError('NETWORK_ERROR', `Network error during push: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n if (error.code === 'AuthError') {\n throw new JJError('AUTH_FAILED', `Authentication failed: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n if (error.code === 'PushRejectedError') {\n throw new JJError('PUSH_REJECTED', `Push rejected (non-fast-forward): ${error.message}`, {\n remote: opts.remote,\n suggestion: 'Use force option or pull first',\n originalError: error,\n });\n }\n throw new JJError('PUSH_FAILED', `Push failed: ${error.message}`, {\n remote: opts.remote,\n originalError: error,\n });\n }\n }\n\n /**\n * Create minimal .jj/repo structure for jj CLI compatibility\n * @private\n */\n async _createJJRepoStructure() {\n const jjDir = `${this.dir}/.jj`;\n const jjRepo = `${jjDir}/repo`;\n\n // Create directory structure\n await this.fs.promises.mkdir(`${jjRepo}/store`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/store/extra/heads`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_store/operations`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_store/views`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/op_heads/heads`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/index`, { recursive: true });\n await this.fs.promises.mkdir(`${jjRepo}/submodule_store`, { recursive: true });\n await this.fs.promises.mkdir(`${jjDir}/working_copy`, { recursive: true });\n\n // Write type files\n await this.fs.promises.writeFile(`${jjRepo}/store/type`, 'git');\n await this.fs.promises.writeFile(`${jjRepo}/store/git_target`, '../../../.git');\n await this.fs.promises.writeFile(`${jjRepo}/op_store/type`, 'simple_op_store');\n await this.fs.promises.writeFile(`${jjRepo}/op_heads/type`, 'simple_op_heads_store');\n await this.fs.promises.writeFile(`${jjRepo}/index/type`, 'default');\n await this.fs.promises.writeFile(`${jjRepo}/submodule_store/type`, 'default');\n await this.fs.promises.writeFile(`${jjDir}/working_copy/type`, 'local');\n\n // Create .jj/.gitignore to prevent git from tracking jj metadata\n await this.fs.promises.writeFile(`${jjDir}/.gitignore`, '/*\\n');\n\n // Add .jj to root .gitignore if it doesn't exist\n await this._ensureGitignore();\n\n // Create initial protobuf files for jj CLI compatibility\n await this._createInitialJJState();\n }\n\n /**\n * Create initial JJ state (protobuf files)\n * @private\n */\n async _createInitialJJState() {\n // Generate unique IDs for initial state\n const operationId = crypto.randomBytes(64).toString('hex'); // 512-bit = 128 hex chars\n const viewId = crypto.randomBytes(64).toString('hex');\n const emptyTreeId = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; // Git's empty tree hash\n\n // Get the initial commit from Git\n let initialCommitId = '0000000000000000000000000000000000000000';\n try {\n const headOid = await git.resolveRef({\n fs: this.fs,\n dir: this.dir,\n ref: 'HEAD',\n });\n if (headOid) {\n initialCommitId = crypto.randomBytes(64).toString('hex');\n }\n } catch (error) {\n // No initial commit yet\n }\n\n // Create checkout file\n const checkout = new JJCheckout(this.fs, this.dir);\n await checkout.writeCheckout(operationId, 'default');\n\n // Create tree_state file\n const treeState = new JJTreeState(this.fs, this.dir);\n await treeState.writeTreeState(emptyTreeId, []);\n\n // Create initial operation\n const opStore = new JJOperationStore(this.fs, this.dir);\n const metadata = {\n start_time: {\n millis_since_epoch: Date.now(),\n tz_offset: new Date().getTimezoneOffset(),\n },\n end_time: {\n millis_since_epoch: Date.now(),\n tz_offset: new Date().getTimezoneOffset(),\n },\n description: 'initialize repo',\n hostname: 'localhost',\n username: 'user',\n is_snapshot: false,\n tags: {},\n };\n await opStore.writeOperation(operationId, viewId, [], metadata);\n\n // Create initial view\n const viewStore = new JJViewStore(this.fs, this.dir);\n await viewStore.writeView(viewId, [initialCommitId], { default: initialCommitId });\n\n // Write operation head - the filename IS the operation ID\n const opHeadPath = `${this.dir}/.jj/repo/op_heads/heads/${operationId}`;\n await this.fs.promises.writeFile(opHeadPath, '');\n }\n\n /**\n * Ensure .gitignore has .jj/ entry\n * @private\n */\n async _ensureGitignore() {\n const gitignorePath = `${this.dir}/.gitignore`;\n let content = '';\n\n try {\n content = await this.fs.promises.readFile(gitignorePath, 'utf8');\n } catch (error) {\n if (error.code !== 'ENOENT') throw error;\n }\n\n // Check if .jj is already in .gitignore\n const lines = content.split('\\n');\n const hasJJ = lines.some((line) => line.trim() === '.jj' || line.trim() === '.jj/');\n\n if (!hasJJ) {\n // Add .jj to .gitignore\n const newContent = content + (content && !content.endsWith('\\n') ? '\\n' : '') + '.jj/\\n';\n await this.fs.promises.writeFile(gitignorePath, newContent);\n }\n }\n}\n","/**\n * Repository API - Main factory function and repository operations\n */\n\nimport { Storage } from '../core/storage-manager.js';\nimport { ChangeGraph } from '../core/change-graph.js';\nimport { WorkingCopy } from '../core/working-copy.js';\nimport { OperationLog } from '../core/operation-log.js';\nimport { BookmarkStore } from '../core/bookmark-store.js';\nimport { TagStore } from '../core/tag-store.js';\nimport { RevsetEngine } from '../core/revset-engine.js';\nimport { ConflictModel } from '../core/conflict-model.js';\nimport { MergeDriverRegistry } from '../core/merge-driver-registry.js';\nimport { WorkspaceManager } from '../core/workspace-manager.js';\nimport { BackgroundOps } from '../core/background-ops.js';\nimport { UserConfig } from '../core/user-config.js';\nimport { IsomorphicGitBackend } from '../backend/isomorphic-git-backend.js';\nimport { JJError } from '../utils/errors.js';\nimport { generateChangeId } from '../utils/id-generation.js';\nimport path from 'path';\n\n/**\n * Create and initialize a JJ repository instance\n *\n * @param {Object} options - Configuration options\n * @param {any} options.fs - Filesystem implementation (Node fs or LightningFS)\n * @param {string} options.dir - Repository directory path\n * @param {any} [options.git] - isomorphic-git instance (enables Git backend)\n * @param {any} [options.http] - HTTP client for network operations\n * @param {string|any} [options.backend] - Backend name ('isomorphic-git', 'memory') or backend instance\n * @param {boolean} [options.autoSnapshot] - Auto-snapshot the working dir before read/commit ops (default true)\n *\n * @returns {Promise<Record<string, any>>} Initialized JJ instance\n */\nexport async function createJJ(options) {\n if (!options) {\n throw new JJError('INVALID_CONFIG', 'Missing configuration options', {\n suggestion: 'Provide { fs, dir, git?, http? }',\n });\n }\n\n const fs = options.fs;\n const dir = options.dir;\n const git = options.git;\n const http = options.http;\n const backend = options.backend;\n // v1.6: automatically snapshot the working directory (disk-walk) before\n // read/commit operations, so files created out-of-band (editor, shell, git\n // checkout) are picked up — matching jj's \"snapshot before every command\".\n // Enabled by default; pass { autoSnapshot: false } to opt out.\n const autoSnapshot = options.autoSnapshot !== false;\n\n if (!fs) {\n throw new JJError('INVALID_CONFIG', 'Missing fs', {\n suggestion: 'Provide a filesystem implementation (Node fs, LightningFS, etc.)',\n });\n }\n\n if (!dir) {\n throw new JJError('INVALID_CONFIG', 'Missing dir', {\n suggestion: 'Provide a repository directory path',\n });\n }\n\n // Create core components\n const storage = /** @type {any} */ (new Storage(fs, dir));\n const baseGraph = new ChangeGraph(storage);\n const workingCopy = new WorkingCopy(storage, fs, dir);\n const oplog = new OperationLog(storage);\n const bookmarks = new BookmarkStore(storage);\n const tags = new TagStore(fs, `${dir}/.jj`);\n const mergeDrivers = new MergeDriverRegistry(); // v0.5: merge drivers\n const conflicts = new ConflictModel(storage, fs, mergeDrivers); // v0.5: pass registry\n const workspaces = new WorkspaceManager(storage, fs, dir);\n const userConfig = new UserConfig(storage);\n\n /**\n * Helper to get user info for oplog operations\n * @returns {Promise<import('../types').OperationUser>}\n */\n const getUserOplogInfo = async () => {\n await userConfig.load();\n const user = /** @type {any} */ (userConfig.getUser());\n return { name: user.name, email: user.email, hostname: 'localhost' };\n };\n\n /**\n * Helper to snapshot current filesystem state\n * This is called BEFORE every operation to enable undo\n * @returns {Promise<Record<string, string>>}\n */\n const snapshotFilesystem = async () => {\n /** @type {Record<string, string>} */\n const fileSnapshot = {};\n\n try {\n const trackedFiles = await workingCopy.listFiles();\n\n // Safeguards to prevent excessive memory usage\n const MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB per file\n const MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB total snapshot size\n let totalSnapshotSize = 0;\n\n for (const filePath of trackedFiles) {\n try {\n const fullPath = path.join(dir, filePath);\n const stats = await fs.promises.stat(fullPath);\n\n // Skip files that are too large\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Stop if total snapshot size would exceed limit\n if (totalSnapshotSize + stats.size > MAX_TOTAL_SIZE) {\n break;\n }\n\n const content = await fs.promises.readFile(fullPath, 'utf-8');\n fileSnapshot[filePath] = content;\n totalSnapshotSize += stats.size;\n } catch (error) {\n // Skip files that can't be read (binary, deleted, etc.)\n }\n }\n } catch (error) {\n // If we can't list files, return empty snapshot\n }\n\n return fileSnapshot;\n };\n\n /**\n * Automatic working-copy snapshot (v1.6).\n *\n * Walks the working directory on disk and reconciles tracked file state so\n * that files created/modified/deleted outside of jj.write() are reflected in\n * status/describe/diff/file.* . No-op when autoSnapshot is disabled or the\n * working copy isn't initialized yet. Best-effort: never throws.\n *\n * @returns {Promise<{added: string[], modified: string[], deleted: string[]} | null>}\n */\n const autoSnapshotWorkingCopy = async () => {\n if (!autoSnapshot) return null;\n try {\n await workingCopy.load();\n } catch {\n return null; // repo not initialized yet\n }\n\n let result;\n try {\n result = await workingCopy.snapshot();\n } catch {\n return null; // best-effort; don't let snapshotting break the operation\n }\n\n // If the disk changed, refresh the working-copy change's content snapshot so\n // read()/file.list()/file.search()/diff() reflect out-of-band edits.\n if (result && (result.added.length || result.modified.length || result.deleted.length)) {\n try {\n await graph.load();\n const wcId = workingCopy.getCurrentChangeId();\n const change = await graph.getChange(wcId);\n if (change) {\n change.fileSnapshot = await snapshotFilesystem();\n await graph.updateChange(change);\n }\n } catch {\n // Best-effort content refresh; tracking state is already updated.\n }\n }\n\n return result;\n };\n\n /**\n * Helper to dispatch events with async listener support and error handling\n * Store listener errors in detail so we can check them after dispatch\n * @param {any} eventTarget\n * @param {string} eventName\n * @param {any} detail\n * @param {{ cancelable?: boolean }} [options]\n * @returns {Promise<any>}\n */\n const dispatchEventAsync = async (eventTarget, eventName, detail, options = {}) => {\n // Extend detail to track errors from listeners\n const enhancedDetail = {\n ...detail,\n __listenerError: null,\n };\n\n const event = new CustomEvent(eventName, {\n detail: enhancedDetail,\n cancelable: options.cancelable !== false, // Default to cancelable\n });\n\n // EventTarget swallows errors from listeners, so we need to wrap the original listeners\n // to catch errors. We'll use a temporary error-catching wrapper.\n const originalDispatch = eventTarget.dispatchEvent.bind(eventTarget);\n\n // Dispatch event - EventTarget will call all listeners synchronously\n const notCancelled = originalDispatch(event);\n\n // Check if a listener stored an error\n if (enhancedDetail.__listenerError) {\n throw enhancedDetail.__listenerError;\n }\n\n // Check if event was prevented (only relevant for cancelable events)\n if (!notCancelled && options.cancelable !== false) {\n throw new JJError('EVENT_CANCELLED', `Operation cancelled by ${eventName} event listener`, {\n eventName,\n detail,\n });\n }\n\n return event;\n };\n\n // Helper to sync a JJ change to a Git commit\n // In JJ, every change has a corresponding Git commit\n /** @param {any} change */\n const syncChangeToGit = async (change) => {\n if (!gitBackend || !gitBackend.createCommit) {\n return; // No Git backend, skip\n }\n\n try {\n // Stage all files first\n if (gitBackend.stageAll) {\n await gitBackend.stageAll();\n }\n\n // Get parent commit IDs\n const parentCommitIds = [];\n await baseGraph.load();\n for (const parentChangeId of change.parents) {\n const parentChange = /** @type {any} */ (await baseGraph.getChange(parentChangeId));\n if (\n parentChange &&\n parentChange.commitId &&\n parentChange.commitId !== '0000000000000000000000000000000000000000'\n ) {\n parentCommitIds.push(parentChange.commitId);\n }\n }\n\n // Create the Git commit\n const commitSha = await gitBackend.createCommit({\n message: change.description,\n author: {\n name: change.author.name,\n email: change.author.email,\n timestamp: new Date(change.author.timestamp).getTime(),\n },\n committer: {\n name: change.committer.name,\n email: change.committer.email,\n timestamp: new Date(change.committer.timestamp).getTime(),\n },\n parents: parentCommitIds,\n });\n\n // Update the change with the Git commit ID (bypass middleware to avoid infinite loop)\n change.commitId = commitSha;\n await baseGraph.updateChange(change);\n } catch (error) {\n // Throw error - Git sync failures should not be silent\n throw new JJError(\n 'GIT_SYNC_FAILED',\n `Failed to sync change ${change.changeId.slice(0, 8)} to Git: ${error.message}`,\n {\n changeId: change.changeId,\n originalError: error.message,\n suggestion: 'Check Git backend configuration and repository state',\n }\n );\n }\n };\n\n /**\n * Create a middleware-wrapped graph that intercepts add/update operations\n * This allows pluggable backends without modifying core ChangeGraph logic\n */\n const createGraphWithMiddleware = (/** @type {any} */ baseGraph, /** @type {any} */ hooks) => {\n return {\n // Delegate all read operations directly to base graph\n load: () => baseGraph.load(),\n getChange: (/** @type {any} */ changeId) => baseGraph.getChange(changeId),\n getAllChanges: () => baseGraph.getAll(), // Alias for compatibility\n getAll: () => baseGraph.getAll(), // Used by revset engine\n getAncestors: (/** @type {any} */ changeId) => baseGraph.getAncestors(changeId),\n getDescendants: (/** @type {any} */ changeId) => baseGraph.getDescendants(changeId),\n getParents: (/** @type {any} */ changeId) => baseGraph.getParents(changeId),\n getChildren: (/** @type {any} */ changeId) => baseGraph.getChildren(changeId),\n findChangeByCommitId: async (/** @type {any} */ commitId) => {\n const changeId = baseGraph.findByCommitId(commitId);\n return changeId ? await baseGraph.getChange(changeId) : null;\n },\n\n // Wrap write operations with middleware hooks\n async addChange(/** @type {any} */ change) {\n await baseGraph.addChange(change);\n if (hooks.onAddChange) {\n await hooks.onAddChange(change);\n }\n },\n\n async updateChange(/** @type {any} */ change) {\n await baseGraph.updateChange(change);\n if (hooks.onUpdateChange) {\n await hooks.onUpdateChange(change);\n }\n },\n\n // Delegate other operations\n init: () => baseGraph.init(),\n };\n };\n\n // Create Git backend if specified\n // Auto-detect: if git instance provided, use isomorphic-git backend\n /** @type {any} */\n let gitBackend = null;\n if (git || backend === 'isomorphic-git' || backend === 'git') {\n gitBackend = new IsomorphicGitBackend({\n fs,\n dir,\n http,\n });\n } else if (backend && typeof backend === 'object') {\n // Custom backend instance provided\n gitBackend = backend;\n }\n\n // Wrap the base graph with middleware that syncs to Git\n // This allows us to support different backends in the future\n const graph = createGraphWithMiddleware(baseGraph, {\n onAddChange: async (/** @type {any} */ change) => {\n // Sync new change to Git backend\n await syncChangeToGit(change);\n },\n onUpdateChange: async (/** @type {any} */ change) => {\n // Sync updated change to Git backend\n await syncChangeToGit(change);\n },\n });\n\n // Create revset engine with the middleware-wrapped graph (v0.4: added bookmarkStore)\n const revset = new RevsetEngine(graph, workingCopy, userConfig, bookmarks, tags);\n\n /**\n * Helper to resolve conflicts with different strategies (v0.5)\n *\n * @param {any} conflict - Conflict object\n * @param {string} strategy - Resolution strategy ('ours', 'theirs', 'union')\n * @returns {string} Resolved content\n */\n function _resolveWithStrategy(conflict, strategy) {\n const ours = conflict.sides.left || '';\n const theirs = conflict.sides.right || '';\n\n switch (strategy) {\n case 'ours':\n return ours;\n case 'theirs':\n return theirs;\n case 'union':\n // Simple union - combine both sides\n return ours + theirs;\n default:\n throw new JJError('INVALID_STRATEGY', `Unknown resolution strategy: ${strategy}`, {\n strategy,\n suggestion: 'Use \"ours\", \"theirs\", or \"union\"',\n });\n }\n }\n\n // Create JJ instance (backgroundOps will be initialized after jj object is created)\n const jj = /** @type {any} */ ({\n storage,\n graph,\n workingCopy,\n oplog,\n bookmarks,\n revset,\n tags, // TagStore instance (raw); public API is the `tag` namespace below\n // NOTE: the raw ConflictModel is intentionally not exposed here because the\n // public `conflicts` namespace (defined below) uses the same key. It remains\n // accessible internally via the module closure.\n conflictModel: conflicts, // v1.5: advanced access to the raw ConflictModel\n workspaces,\n userConfig,\n mergeDrivers, // v0.5: expose merge driver registry\n backgroundOps: null, // Will be initialized below\n backend: gitBackend, // Expose backend for advanced users\n\n /**\n * Initialize a new JJ repository\n *\n * NOTE: This is a convenience alias. For Git-backed repos, prefer jj.git.init()\n * to match the JJ CLI semantics.\n */\n async init(/** @type {Record<string, any>} */ opts = {}) {\n // If Git backend is available, delegate to jj.git.init()\n if (gitBackend) {\n return await jj.git.init(opts);\n }\n\n // Otherwise, initialize without Git backend (mock backend, etc.)\n await storage.init();\n\n // Initialize user config first\n await userConfig.init({\n userName: opts.userName,\n userEmail: opts.userEmail,\n });\n\n // Initialize components\n await graph.init();\n await oplog.init();\n await bookmarks.init();\n await conflicts.init();\n await workspaces.init();\n\n // Create root change\n const rootChangeId = generateChangeId();\n const user = /** @type {any} */ (userConfig.getUser());\n const rootChange = {\n changeId: rootChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(root)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(rootChange);\n await workingCopy.init(rootChangeId);\n\n // Record init operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: 'initialize repository',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [rootChangeId],\n workingCopy: rootChangeId,\n },\n });\n },\n\n /**\n * Write a file to the working copy\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} File information including path, size, and mode\n */\n async write(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to write',\n });\n }\n\n if (args.data === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing data argument', {\n suggestion: 'Provide data to write to the file',\n });\n }\n\n const fullPath = `${dir}/${args.path}`;\n\n // Ensure directory exists\n const pathParts = args.path.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = `${dir}/${dirPath}`;\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write the file\n const data = typeof args.data === 'string' ? args.data : args.data;\n await fs.promises.writeFile(fullPath, data, 'utf8');\n\n // Track the file in working copy\n await workingCopy.load();\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(args.path, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n\n // Return useful information about the written file\n return {\n path: args.path,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n type: typeof args.data === 'string' ? 'text' : 'binary',\n };\n },\n\n /**\n * Read a file from the working copy or from a specific change\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async read(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to read',\n });\n }\n\n const encoding = args.encoding || 'utf-8';\n\n // Read from working copy if no changeId specified\n if (!args.changeId) {\n // v1.6: reflect out-of-band changes before reading the working copy.\n await autoSnapshotWorkingCopy();\n // Check sparse patterns\n await workingCopy.load();\n if (!workingCopy.matchesSparsePatterns(args.path)) {\n throw new JJError('FILE_NOT_IN_SPARSE', `File ${args.path} not in sparse checkout`, {\n path: args.path,\n suggestion:\n 'Add pattern to sparse checkout: jj.sparse.add({ patterns: [\"' + args.path + '\"] })',\n });\n }\n\n const fullPath = path.join(dir, args.path);\n try {\n if (encoding === 'utf-8' || encoding === 'utf8') {\n return await fs.promises.readFile(fullPath, 'utf-8');\n } else {\n return await fs.promises.readFile(fullPath);\n }\n } catch (error) {\n if (error.code === 'ENOENT') {\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in working copy`, {\n path: args.path,\n });\n }\n throw error;\n }\n }\n\n // Read from a specific change\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n // Try to read from fileSnapshot cache first\n if (change.fileSnapshot && change.fileSnapshot[args.path]) {\n const content = change.fileSnapshot[args.path];\n if (encoding === 'binary') {\n return new TextEncoder().encode(content);\n }\n return content;\n }\n\n // Fallback: read from Git if we have a commitId\n if (\n gitBackend &&\n change.commitId &&\n change.commitId !== '0000000000000000000000000000000000000000'\n ) {\n try {\n const git = (await import('isomorphic-git')).default;\n const { blob } = await git.readBlob({\n fs,\n dir,\n oid: change.commitId,\n filepath: args.path,\n });\n\n if (encoding === 'utf-8' || encoding === 'utf8') {\n return new TextDecoder().decode(blob);\n }\n return blob;\n } catch (error) {\n throw new JJError(\n 'FILE_NOT_FOUND',\n `File ${args.path} not found in change ${args.changeId}`,\n {\n path: args.path,\n changeId: args.changeId,\n originalError: error,\n }\n );\n }\n }\n\n throw new JJError(\n 'FILE_NOT_FOUND',\n `File ${args.path} not found in change ${args.changeId}`,\n {\n path: args.path,\n changeId: args.changeId,\n suggestion: 'File not in snapshot cache and no Git commit available',\n }\n );\n },\n\n /**\n * Alias for read() - matches jj CLI 'cat' command\n *\n * @param {Record<string, any>} args - Arguments (same as read())\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async cat(args) {\n return await this.read(args);\n },\n\n /**\n * List files in the working copy or in a specific change\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Array<string>>} Array of file paths\n */\n async listFiles(args = {}) {\n // List working copy files if no changeId specified\n if (!args.changeId) {\n // v1.6: include files created on disk out-of-band.\n await autoSnapshotWorkingCopy();\n await workingCopy.load();\n return await workingCopy.listFiles();\n }\n\n // List files in a specific change\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n // Try fileSnapshot first\n if (change.fileSnapshot) {\n return Object.keys(change.fileSnapshot);\n }\n\n // Fallback: read from Git tree\n if (\n gitBackend &&\n change.commitId &&\n change.commitId !== '0000000000000000000000000000000000000000'\n ) {\n try {\n const git = (await import('isomorphic-git')).default;\n const { tree } = await git.readTree({\n fs,\n dir,\n oid: change.commitId,\n });\n\n return tree.filter((entry) => entry.type === 'blob').map((entry) => entry.path);\n } catch (error) {\n throw new JJError('TREE_READ_FAILED', `Failed to read tree for change ${args.changeId}`, {\n changeId: args.changeId,\n originalError: error,\n });\n }\n }\n\n return [];\n },\n\n /**\n * Create a readable stream for a file (Node.js only)\n *\n * For large files, use streaming to avoid loading entire file into memory.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<ReadableStream>} Readable stream\n * @throws {JJError} If not in Node.js environment or file not found\n */\n async readStream(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to read',\n });\n }\n\n // Check if we're in Node.js\n if (typeof process === 'undefined' || !fs.createReadStream) {\n throw new JJError('UNSUPPORTED_OPERATION', 'readStream() is only supported in Node.js', {\n suggestion: 'Use read() instead for browser environments',\n });\n }\n\n // Reading from working copy\n if (!args.changeId) {\n const fullPath = path.join(dir, args.path);\n try {\n const stream = fs.createReadStream(\n fullPath,\n args.encoding ? { encoding: args.encoding } : {}\n );\n return stream;\n } catch (error) {\n throw new JJError('FILE_NOT_FOUND', `File ${args.path} not found in working copy`, {\n path: args.path,\n originalError: error.message,\n });\n }\n }\n\n // Reading from a specific change - for historical data, fall back to read()\n // Streaming from Git objects requires more complex implementation\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Streaming from historical changes not yet supported',\n {\n suggestion:\n 'Use read({ path, changeId }) for historical file access, or readStream({ path }) for working copy',\n }\n );\n },\n\n /**\n * Create a writable stream for a file (Node.js only)\n *\n * For large files, use streaming to avoid loading entire file into memory.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<WritableStream>} Writable stream\n * @throws {JJError} If not in Node.js environment\n */\n async writeStream(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to write',\n });\n }\n\n // Check if we're in Node.js\n if (typeof process === 'undefined' || !fs.createWriteStream) {\n throw new JJError('UNSUPPORTED_OPERATION', 'writeStream() is only supported in Node.js', {\n suggestion: 'Use write() instead for browser environments',\n });\n }\n\n const fullPath = path.join(dir, args.path);\n\n // Ensure directory exists\n const pathParts = args.path.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Create writable stream\n const stream = fs.createWriteStream(\n fullPath,\n args.encoding ? { encoding: args.encoding } : {}\n );\n\n // Track file when stream finishes\n stream.on('finish', async () => {\n try {\n await workingCopy.load();\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(args.path, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n } catch (error) {\n // Silently ignore - stream already finished, file tracking is best-effort\n // (Common in tests where temp directories are cleaned up quickly)\n }\n });\n\n return stream;\n },\n\n /**\n * Move/rename a file in the working copy OR move/rebase a change to a new parent\n *\n * This method is polymorphic and handles two distinct operations:\n *\n * 1. File operations (moving/renaming files):\n * - Signature: { from: string, to: string }\n * - Example: move({ from: 'old.js', to: 'new.js' })\n * - Moves a file in the working directory and updates tracking\n *\n * 2. History operations (rebasing changes):\n * - Signature: { changeId: ChangeID, newParent: ChangeID }\n * - OR: { from: ChangeID, to: ChangeID, paths: string[] }\n * - Example: move({ changeId: 'abc...', newParent: 'def...' })\n * - Rebases a change to have a different parent\n *\n * The method automatically detects which operation based on:\n * - Presence of `changeId`, `newParent`, or `paths` → history operation\n * - Presence of only `from` and `to` → file operation\n * - Change IDs are 32-character hex strings; file paths are not\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Returns change object for history operations, file info for file operations\n */\n /**\n * Move a file in the working copy\n *\n * @param {Record<string, any>} args - Move file arguments\n * @returns {Promise<Object>} Operation result including from, to paths and file stats\n */\n async moveFile(args) {\n if (!args.from || typeof args.from !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid from path', {\n suggestion: 'Provide a valid source file path',\n provided: { from: args.from, type: typeof args.from },\n });\n }\n\n if (!args.to || typeof args.to !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid to path', {\n suggestion: 'Provide a valid destination file path',\n provided: { to: args.to, type: typeof args.to },\n });\n }\n\n // Prevent moving to the same location\n if (args.from === args.to) {\n throw new JJError('INVALID_OPERATION', 'Source and destination paths are the same', {\n path: args.from,\n suggestion: 'Specify a different destination path',\n });\n }\n\n // Prevent absolute paths\n if (args.from.startsWith('/') || args.to.startsWith('/')) {\n throw new JJError('INVALID_PATH', 'Absolute paths are not allowed', {\n suggestion: 'Use paths relative to the repository root',\n provided: { from: args.from, to: args.to },\n });\n }\n\n // Prevent parent directory traversal\n if (args.from.includes('..') || args.to.includes('..')) {\n throw new JJError('INVALID_PATH', 'Parent directory traversal (..) is not allowed', {\n suggestion: 'Use paths within the repository',\n provided: { from: args.from, to: args.to },\n });\n }\n\n const fromPath = `${dir}/${args.from}`;\n const toPath = `${dir}/${args.to}`;\n\n // Check if source file exists\n try {\n await fs.promises.stat(fromPath);\n } catch (error) {\n throw new JJError('FILE_NOT_FOUND', `Source file not found: ${args.from}`, {\n path: args.from,\n suggestion: 'Check that the source file exists',\n });\n }\n\n // Ensure destination directory exists\n const toDir = toPath.substring(0, toPath.lastIndexOf('/'));\n try {\n await fs.promises.mkdir(toDir, { recursive: true });\n } catch (error) {\n throw new JJError(\n 'FILE_SYSTEM_ERROR',\n `Failed to create destination directory: ${error.message}`,\n {\n path: toDir,\n error: error.message,\n }\n );\n }\n\n // Move the file\n try {\n await fs.promises.rename(fromPath, toPath);\n } catch (error) {\n throw new JJError('FILE_SYSTEM_ERROR', `Failed to move file: ${error.message}`, {\n from: args.from,\n to: args.to,\n error: error.message,\n });\n }\n\n // Update working copy tracking\n await workingCopy.load();\n await workingCopy.untrackFile(args.from);\n const stats = await fs.promises.stat(toPath);\n await workingCopy.trackFile(args.to, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n\n return {\n from: args.from,\n to: args.to,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n };\n },\n\n /**\n * Move (rebase) a change to a new parent\n *\n * @param {Record<string, any>} args - Move change arguments (changeId/from/source, newParent/to/destination)\n * @returns {Promise<Object>} Updated change object\n */\n async moveChange(args) {\n await graph.load();\n\n // Support multiple parameter names for flexibility\n const changeId = args.changeId || args.from || args.source;\n const newParent = args.newParent || args.to || args.destination;\n\n if (!changeId || typeof changeId !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid changeId', {\n suggestion: 'Provide a valid changeId (32-character hex string) for history operations',\n provided: { changeId, type: typeof changeId },\n });\n }\n\n if (!newParent || typeof newParent !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid newParent', {\n suggestion: 'Provide a valid newParent change ID for history operations',\n provided: { newParent, type: typeof newParent },\n });\n }\n\n // Validate change ID format\n const changeIdPattern = /^[0-9a-f]{32}$/;\n if (!changeIdPattern.test(changeId)) {\n throw new JJError('INVALID_CHANGE_ID', `Invalid change ID format: ${changeId}`, {\n suggestion: 'Change IDs must be 32-character hex strings',\n provided: changeId,\n });\n }\n\n if (!changeIdPattern.test(newParent)) {\n throw new JJError(\n 'INVALID_CHANGE_ID',\n `Invalid new parent change ID format: ${newParent}`,\n {\n suggestion: 'Change IDs must be 32-character hex strings',\n provided: newParent,\n }\n );\n }\n\n const change = await graph.getChange(changeId);\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`, {\n changeId,\n suggestion: 'Use log() to view available changes',\n });\n }\n\n // Validate new parent exists\n const newParentChange = await graph.getChange(newParent);\n if (!newParentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `New parent change ${newParent} not found`, {\n newParent,\n suggestion: 'Use log() to view available changes',\n });\n }\n\n // Prevent moving a change to itself\n if (changeId === newParent) {\n throw new JJError('INVALID_OPERATION', 'Cannot move a change to itself as parent', {\n changeId,\n suggestion: 'Specify a different change as the new parent',\n });\n }\n\n // TODO: Prevent creating cycles in the change graph\n // For now, we'll allow it but it should be validated\n\n // Update parent\n change.parents = [newParent];\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `move change ${changeId.slice(0, 8)} to ${newParent.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return change;\n },\n\n /**\n * @deprecated Use moveFile() for files or moveChange() for history operations\n * Move operation - delegates to moveFile or moveChange based on arguments\n * @param {Record<string, any>} args\n */\n async move(args) {\n if (!args || typeof args !== 'object') {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid arguments', {\n suggestion:\n 'Use moveFile({ from, to }) for files or moveChange({ changeId, newParent }) for history',\n });\n }\n\n // Detect operation type based on arguments\n const isHistoryOp = this._detectHistoryOperation(args);\n\n if (isHistoryOp) {\n return await this.moveChange(args);\n } else {\n return await this.moveFile(args);\n }\n },\n\n /**\n * Detect if move operation is for history (rebase) or files\n *\n * @private\n * @param {Record<string, any>} args - Move arguments\n * @returns {boolean} True if history operation, false if file operation\n */\n _detectHistoryOperation(args) {\n // Explicit history operation indicators\n if (args.paths || args.changeId || args.newParent) {\n return true;\n }\n\n // If only from/to are present, check if they look like change IDs\n if (args.from && args.to && !args.changeId && !args.newParent && !args.paths) {\n // Change IDs are 32-character hex strings\n const changeIdPattern = /^[0-9a-f]{32}$/;\n const fromLooksLikeChangeId = changeIdPattern.test(args.from);\n const toLooksLikeChangeId = changeIdPattern.test(args.to);\n\n // If both look like change IDs, it's likely a history operation\n // However, we err on the side of file operations to be safe\n // Users should use explicit { changeId, newParent } for clarity\n if (fromLooksLikeChangeId && toLooksLikeChangeId) {\n // This is ambiguous - throw a helpful error\n throw new JJError(\n 'AMBIGUOUS_OPERATION',\n 'Ambiguous move operation: arguments look like change IDs',\n {\n suggestion:\n \"Use { changeId, newParent } for history operations or ensure file paths don't match change ID pattern\",\n args,\n }\n );\n }\n\n return false; // Treat as file operation\n }\n\n return false;\n },\n\n /**\n * Remove a file from the working copy\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Information about the removed file\n */\n async remove(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a path for the file to remove',\n });\n }\n\n const fullPath = `${dir}/${args.path}`;\n\n // Get file stats before removing\n const stats = await fs.promises.stat(fullPath);\n\n // Remove the file\n await fs.promises.unlink(fullPath);\n\n // Untrack from working copy\n await workingCopy.load();\n await workingCopy.untrackFile(args.path);\n\n // Return information about the removed file\n return {\n path: args.path,\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n };\n },\n\n /**\n * Describe the working copy change\n * @param {Record<string, any>} [args]\n */\n async describe(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // v1.6: pick up files created/changed on disk out-of-band so they are\n // captured by this describe (unless a specific revision is targeted).\n if (!args.revision) {\n await autoSnapshotWorkingCopy();\n }\n\n // Support describing specific revision (not just working copy)\n const targetChangeId = args.revision || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(targetChangeId);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${targetChangeId} not found`, {\n changeId: targetChangeId,\n });\n }\n\n // Only snapshot filesystem if describing working copy\n const isWorkingCopy = targetChangeId === workingCopy.getCurrentChangeId();\n const fileSnapshotBefore = isWorkingCopy ? await snapshotFilesystem() : null;\n\n // Dispatch change:updating event (preventable)\n await dispatchEventAsync(jj, 'change:updating', {\n operation: 'describe',\n changeId: targetChangeId,\n change,\n message: args.message,\n timestamp: new Date().toISOString(),\n });\n\n // Update description\n if (args.message !== undefined) {\n change.description = args.message;\n change.timestamp = new Date().toISOString();\n }\n\n // Update metadata\n if (args.metadata !== undefined) {\n change.metadata = args.metadata;\n }\n\n // Only snapshot files if describing working copy AND preserveSnapshot is not true\n if (isWorkingCopy && !args.preserveSnapshot) {\n // Snapshot current file contents for conflict detection\n // This allows us to load file contents during merge/rebase\n /** @type {Record<string, any>} */\n const fileSnapshot = {};\n const trackedFiles = await workingCopy.listFiles();\n\n // Safeguards to prevent excessive memory usage\n const MAX_FILE_SIZE = 1 * 1024 * 1024; // 1MB per file\n const MAX_TOTAL_SIZE = 10 * 1024 * 1024; // 10MB total snapshot size\n let totalSnapshotSize = 0;\n\n for (const filePath of trackedFiles) {\n try {\n const fullPath = path.join(dir, filePath);\n const stats = await fs.promises.stat(fullPath);\n\n // Skip files that are too large (silently - this is an optimization)\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Stop if total snapshot size would exceed limit (silently - optimization)\n if (totalSnapshotSize + stats.size > MAX_TOTAL_SIZE) {\n break;\n }\n\n const content = await fs.promises.readFile(fullPath, 'utf-8');\n fileSnapshot[filePath] = content;\n totalSnapshotSize += stats.size;\n } catch (error) {\n // Throw on file read errors - don't silently skip\n throw new JJError(\n 'SNAPSHOT_FILE_FAILED',\n `Could not snapshot file ${filePath}: ${error.message}`,\n {\n filePath,\n originalError: error.message,\n suggestion: 'File may be binary, deleted, or inaccessible',\n }\n );\n }\n }\n change.fileSnapshot = fileSnapshot;\n }\n\n // Save the updated change (middleware will sync to Git)\n await graph.updateChange(change);\n\n // Record operation with filesystem snapshot from BEFORE operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `describe change ${targetChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [targetChangeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n fileSnapshot: fileSnapshotBefore, // Store filesystem state from before operation\n },\n });\n\n // Dispatch change:updated event (informational)\n await dispatchEventAsync(\n jj,\n 'change:updated',\n {\n operation: 'describe',\n changeId: targetChangeId,\n change,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n return change;\n },\n\n /**\n * Edit change metadata without modifying content\n *\n * Allows updating author, committer, description, and optionally regenerating the change ID.\n * The file content and snapshot remain unchanged.\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Object>} Updated change object\n */\n async metaedit(args = {}) {\n // Normalize: accept 'change' as alias for 'revision'\n if (args.change && !args.revision) {\n args = { ...args, revision: args.change };\n }\n\n // Normalize: accept 'message' as alias for 'description'\n if (args.message && !args.description) {\n args = { ...args, description: args.message };\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Determine which change to edit\n const changeId = args.revision || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(changeId);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Validate that at least one metadata field is being updated\n const hasAuthor = args.author && (args.author.name || args.author.email);\n const hasCommitter = args.committer && (args.committer.name || args.committer.email);\n const hasResetChangeId = args.resetChangeId === true;\n const hasDescription = args.description !== undefined;\n\n if (!hasAuthor && !hasCommitter && !hasResetChangeId && !hasDescription) {\n throw new JJError('INVALID_ARGUMENT', 'No metadata provided to update', {\n suggestion: 'Provide author, committer, description, or resetChangeId: true',\n });\n }\n\n // Store old change ID for potential regeneration\n const _oldChangeId = change.changeId;\n\n // Update author if provided\n if (args.author) {\n if (!change.author) {\n change.author = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n }\n if (args.author.name !== undefined) {\n change.author.name = args.author.name;\n }\n if (args.author.email !== undefined) {\n change.author.email = args.author.email;\n }\n // Update timestamp to reflect the metadata change\n change.author.timestamp = new Date().toISOString();\n }\n\n // Update committer if provided\n if (args.committer) {\n if (!change.committer) {\n change.committer = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n }\n if (args.committer.name !== undefined) {\n change.committer.name = args.committer.name;\n }\n if (args.committer.email !== undefined) {\n change.committer.email = args.committer.email;\n }\n change.committer.timestamp = new Date().toISOString();\n }\n\n // Update description if provided\n if (args.description !== undefined) {\n change.description = args.description;\n }\n\n // Regenerate change ID if requested\n if (args.resetChangeId) {\n // For now, resetChangeId is not fully implemented as it requires complex graph operations\n // Future implementation would need to handle:\n // - Updating all children to point to new change ID\n // - Updating all bookmarks pointing to old change ID\n // - Updating operation log references\n throw new JJError('UNSUPPORTED_OPERATION', 'resetChangeId is not yet implemented', {\n feature: 'metaedit resetChangeId',\n reason: 'Requires complex graph manipulation to update all references',\n suggestion: 'Create a new change with desired metadata instead',\n });\n }\n\n // Update the existing change\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `metaedit change ${changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [changeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return change;\n },\n\n /**\n * Create a new change\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Object>} The new change object including changeId, description, parents, author, and timestamp\n */\n async new(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Snapshot filesystem BEFORE operation (for undo) unless preserveSnapshot is true\n let fileSnapshot;\n if (!args.preserveSnapshot) {\n fileSnapshot = await snapshotFilesystem();\n\n // Update current working copy change with the file snapshot\n // This ensures files written before jj.new() are captured\n const currentChangeId = workingCopy.getCurrentChangeId();\n const currentChange = await graph.getChange(currentChangeId);\n if (currentChange && fileSnapshot) {\n currentChange.fileSnapshot = fileSnapshot;\n await graph.updateChange(currentChange);\n }\n }\n\n // Determine parents\n let parents;\n if (args.insertAfter) {\n parents = [args.insertAfter];\n } else if (args.insertBefore) {\n const targetChange = await graph.getChange(args.insertBefore);\n if (!targetChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.insertBefore} not found`);\n }\n parents = targetChange.parents;\n } else if (args.parents) {\n parents = Array.isArray(args.parents) ? args.parents : [args.parents];\n } else if (args.from) {\n parents = [args.from];\n } else {\n parents = [workingCopy.getCurrentChangeId()];\n }\n\n const newChangeId = generateChangeId();\n const user = /** @type {any} */ (userConfig.getUser());\n\n // Initialize with parent's file snapshot\n let initialSnapshot = {};\n if (parents && parents.length > 0) {\n const parent = await graph.getChange(parents[0]);\n if (parent && parent.fileSnapshot) {\n initialSnapshot = { ...parent.fileSnapshot };\n }\n }\n\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000', // Placeholder\n parents: parents,\n tree: '0000000000000000000000000000000000000000', // Empty tree\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: args.message || '(no description)',\n timestamp: new Date().toISOString(),\n fileSnapshot: initialSnapshot, // Initialize with parent's snapshot\n };\n\n // Dispatch change:creating event (preventable)\n await dispatchEventAsync(jj, 'change:creating', {\n operation: 'new',\n changeId: newChangeId,\n parents: parents,\n change: newChange,\n message: args.message,\n timestamp: new Date().toISOString(),\n });\n\n await graph.addChange(newChange); // Middleware will sync to Git\n\n // Handle insertBefore: rebase target to have new change as parent\n if (args.insertBefore) {\n const targetChange = await graph.getChange(args.insertBefore);\n targetChange.parents = [newChangeId];\n await graph.updateChange(targetChange);\n }\n\n await workingCopy.setCurrentChange(newChangeId);\n\n // Record operation with filesystem snapshot\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `new change ${newChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [newChangeId],\n workingCopy: newChangeId,\n fileSnapshot, // Store filesystem state before operation\n },\n });\n\n // Dispatch change:created event (informational)\n await dispatchEventAsync(\n jj,\n 'change:created',\n {\n operation: 'new',\n changeId: newChangeId,\n parents: parents,\n change: newChange,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n return newChange;\n },\n\n /**\n * Get working copy status\n */\n async status() {\n await graph.load();\n await workingCopy.load();\n await conflicts.load();\n\n // Dirty tracked files (computed before reconciling so modifications to\n // already-tracked files are still reported).\n const modified = await workingCopy.getModifiedFiles();\n\n // v1.6: snapshot the working directory so files added/removed on disk\n // out-of-band show up in status.\n const snap = await autoSnapshotWorkingCopy();\n\n const currentChangeId = workingCopy.getCurrentChangeId();\n const change = await graph.getChange(currentChangeId);\n // Only show unresolved conflicts in status\n const activeConflicts = conflicts.listConflicts({ resolved: false });\n\n return {\n workingCopy: change,\n modified,\n added: snap ? snap.added : [],\n removed: snap ? snap.deleted : [],\n conflicts: activeConflicts,\n };\n },\n\n /**\n * Explicitly snapshot the working directory (v1.6).\n *\n * Walks the working copy on disk and reconciles tracked file state and the\n * working-copy change's content, picking up files created/modified/deleted\n * outside of jj.write() (editor, shell, git checkout). This runs\n * automatically before status/describe/diff/read/file.* unless the repo was\n * created with `{ autoSnapshot: false }`; call this to trigger it manually.\n *\n * @returns {Promise<{added: string[], modified: string[], deleted: string[]}>}\n */\n async snapshot() {\n await graph.load();\n await workingCopy.load();\n const result = await workingCopy.snapshot();\n // Refresh the working-copy change's content snapshot from disk.\n try {\n const wcId = workingCopy.getCurrentChangeId();\n const change = await graph.getChange(wcId);\n if (change) {\n change.fileSnapshot = await snapshotFilesystem();\n await graph.updateChange(change);\n }\n } catch {\n // Best-effort content refresh.\n }\n return result;\n },\n\n /**\n * Get repository statistics and analytics\n *\n * @returns {Promise<Object>} Repository statistics\n */\n async stats() {\n await graph.load();\n await workingCopy.load();\n await oplog.load();\n await userConfig.load();\n await bookmarks.load();\n\n const all = graph.getAll();\n const ops = await oplog.list();\n const currentUser = /** @type {any} */ (userConfig.getUser());\n\n // Count by author\n /** @type {Record<string, any>} */\n const authorCounts = {};\n for (const change of all) {\n if (!change.abandoned && change.author) {\n const author = change.author.email || change.author.name;\n authorCounts[author] = (authorCounts[author] || 0) + 1;\n }\n }\n\n // Count files\n const allFiles = new Set();\n for (const change of all) {\n if (change.fileSnapshot) {\n for (const file of Object.keys(change.fileSnapshot)) {\n allFiles.add(file);\n }\n }\n }\n\n // Count merge commits\n const mergeCommits = all.filter(\n (/** @type {any} */ c) => c.parents && c.parents.length > 1\n ).length;\n\n // Count empty commits\n const emptyCommits = all.filter(\n (/** @type {any} */ c) => c.tree === '0000000000000000000000000000000000000000'\n ).length;\n\n // Count abandoned\n const abandonedCount = all.filter((/** @type {any} */ c) => c.abandoned).length;\n\n // My commits\n const myCommits = all.filter(\n (/** @type {any} */ c) =>\n c.author &&\n !c.abandoned &&\n (c.author.email === currentUser.email || c.author.name === currentUser.name)\n ).length;\n\n // Get bookmark statistics\n const allBookmarks = await bookmarks.list();\n const localBookmarks = allBookmarks.filter((b) => !b.remote);\n const remoteBookmarks = allBookmarks.filter((b) => b.remote);\n\n return {\n changes: {\n total: all.length,\n active: all.length - abandonedCount,\n abandoned: abandonedCount,\n merges: mergeCommits,\n empty: emptyCommits,\n mine: myCommits,\n byAuthor: authorCounts,\n },\n authors: {\n total: Object.keys(authorCounts).length,\n breakdown: authorCounts,\n },\n files: {\n total: allFiles.size,\n list: Array.from(allFiles).sort(),\n byExtension: {}, // Add file extension breakdown\n },\n bookmarks: {\n total: allBookmarks.length,\n local: localBookmarks.length,\n remote: remoteBookmarks.length,\n },\n operations: {\n total: ops.length,\n latest: ops[ops.length - 1]?.description || 'none',\n },\n currentUser: {\n name: currentUser.name,\n email: currentUser.email,\n },\n };\n },\n\n /**\n * View change history\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Array<any>|number>} Array of changes or count if args.count is true\n */\n async log(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const revsetExpr = args.revset || 'all()';\n const changeIds = await revset.evaluate(revsetExpr);\n\n // If count mode, return count early (v0.36.0 feature)\n if (args.count) {\n return changeIds.length;\n }\n\n let changes = [];\n for (const changeId of changeIds) {\n const change = await graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n\n // Sort by topological order (children before parents), then by timestamp\n // This matches jj's default log behavior\n changes.sort((a, b) => {\n // Primary: Topological order - children (descendants) before parents\n const aIsParentOfB = b.parents && b.parents.includes(a.changeId);\n const bIsParentOfA = a.parents && a.parents.includes(b.changeId);\n\n if (aIsParentOfB) return 1; // a is parent of b, so b comes first\n if (bIsParentOfA) return -1; // b is parent of a, so a comes first\n\n // Secondary: Sort by timestamp descending (newest first)\n const aTime = new Date(a.timestamp).getTime();\n const bTime = new Date(b.timestamp).getTime();\n return bTime - aTime;\n });\n\n // Apply limit if specified\n if (args.limit) {\n changes = changes.slice(0, args.limit);\n }\n\n return changes;\n },\n\n /**\n * Show detailed information about a specific change\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Detailed change information\n */\n async show(args) {\n if (!args || !args.change) {\n throw new JJError('INVALID_ARGUMENT', 'Missing change argument', {\n suggestion: 'Provide { change: changeId }',\n });\n }\n\n await graph.load();\n\n // Resolve revset if needed\n let changeId = args.change;\n if (args.change === '@') {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n } else {\n // Try to resolve as revset\n try {\n const changes = await revset.evaluate(args.change);\n if (changes.length > 0) {\n changeId = changes[0];\n }\n } catch {\n // Use as-is\n }\n }\n\n const change = await graph.getChange(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Get additional context\n const children = await graph.getChildren(change.changeId);\n await oplog.load();\n await bookmarks.load();\n\n // Find bookmarks pointing to this change\n const allBookmarks = await bookmarks.list();\n const changeBookmarks = allBookmarks\n .filter((b) => b.changeId === change.changeId)\n .map((b) => b.name);\n\n // Find operations that modified this change\n const ops = await oplog.list();\n const relatedOps = ops.filter(\n (op) =>\n op.view &&\n (op.view.workingCopy === change.changeId ||\n (op.view.heads && op.view.heads.includes(change.changeId)))\n );\n\n return {\n ...change,\n children,\n bookmarks: changeBookmarks,\n operations: relatedOps.map((op) => ({\n id: op.id,\n timestamp: op.timestamp,\n description: op.description,\n })),\n };\n },\n\n /**\n * Amend the working copy change\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Updated change\n */\n async amend(args = {}) {\n // Amend is essentially the same as describe in JJ\n return await this.describe(args);\n },\n\n /**\n * Convenience: describe current change and create new one (jj commit)\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Object>} The newly created change\n */\n async commit(args = {}) {\n await this.describe({\n message: args.message,\n author: args.author,\n metadata: args.metadata,\n preserveSnapshot: args.preserveSnapshot,\n });\n return await this.new({\n message: args.nextMessage,\n preserveSnapshot: args.preserveSnapshot,\n });\n },\n\n /**\n * Edit a specific change (make it the working copy)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Information about the edited change including changeId, description, and file count\n */\n async edit(args) {\n // Normalize: accept both 'change' and 'changeId' parameters\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n }\n\n if (!args || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing changeId argument', {\n suggestion: 'Provide a changeId (or change) to edit',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.changeId);\n const user = /** @type {any} */ (userConfig.getUser());\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`, {\n changeId: args.changeId,\n });\n }\n\n const previousChangeId = workingCopy.getCurrentChangeId();\n\n // CRITICAL FIX: Clean working directory BEFORE snapshotting to prevent cross-branch pollution\n // Remove files that don't belong to the current changeId before we snapshot it\n if (previousChangeId !== args.changeId) {\n const previousChange = await graph.getChange(previousChangeId);\n if (previousChange) {\n const previousSnapshot = previousChange.fileSnapshot || {};\n const workingDirFiles = await workingCopy.listFiles();\n\n // Delete files that exist in working dir but NOT in previous changeId's snapshot\n // This removes pollution from other branches that were previously checked out\n for (const filePath of workingDirFiles) {\n if (!previousSnapshot[filePath]) {\n try {\n const fullPath = path.join(dir, filePath);\n await fs.promises.unlink(fullPath);\n await workingCopy.untrackFile(filePath);\n } catch (error) {\n // Ignore errors - file might already be deleted or inaccessible\n }\n }\n }\n }\n\n // Now snapshot the CLEAN working directory (no pollution!)\n const currentSnapshot = await snapshotFilesystem();\n if (currentSnapshot && Object.keys(currentSnapshot).length > 0) {\n previousChange.fileSnapshot = currentSnapshot;\n await graph.updateChange(previousChange);\n }\n }\n\n // Dispatch workingcopy:switching event (preventable)\n await dispatchEventAsync(jj, 'workingcopy:switching', {\n operation: 'edit',\n fromChangeId: previousChangeId,\n toChangeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n // Restore files from the change's snapshot to working directory\n if (change.fileSnapshot) {\n for (const [filePath, content] of Object.entries(change.fileSnapshot)) {\n try {\n const fullPath = path.join(dir, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n\n // Update working copy tracking\n const stats = await fs.promises.stat(fullPath);\n await workingCopy.trackFile(filePath, {\n mtime: stats.mtime,\n size: stats.size,\n mode: stats.mode,\n });\n } catch (error) {\n throw new JJError(\n 'FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath}: ${error.message}`,\n { filePath, originalError: error.message }\n );\n }\n }\n }\n\n // Set this change as the working copy\n await workingCopy.setCurrentChange(args.changeId);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: `edit change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [args.changeId],\n workingCopy: args.changeId,\n },\n });\n\n // Dispatch workingcopy:switched event (informational)\n await dispatchEventAsync(\n jj,\n 'workingcopy:switched',\n {\n operation: 'edit',\n fromChangeId: previousChangeId,\n toChangeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n // Return information about the edited change\n return {\n changeId: change.changeId,\n description: change.description,\n parents: change.parents,\n fileCount: change.fileSnapshot ? Object.keys(change.fileSnapshot).length : 0,\n timestamp: change.timestamp,\n };\n },\n\n /**\n * Undo last operation\n *\n * @returns {Promise<Object>} Information about the undo including the undone operation and restored state\n */\n async undo() {\n // Get the operation we're about to undo to access its pre-state\n await oplog.load();\n const ops = await oplog.list();\n if (ops.length === 0) {\n throw new JJError('NOTHING_TO_UNDO', 'No operations to undo');\n }\n\n // Get the current operation (the one being undone) to restore its pre-state\n const currentOp = ops[ops.length - 1];\n\n const previousView = /** @type {any} */ (await oplog.undo());\n\n // Restore state from previous view\n await workingCopy.setCurrentChange(previousView.workingCopy);\n\n // Restore filesystem from previous operation's snapshot (taken BEFORE that operation)\n // This is how JJ snapshots the working copy before every command\n if (previousView.fileSnapshot) {\n for (const [filePath, content] of Object.entries(previousView.fileSnapshot)) {\n try {\n const fullPath = path.join(dir, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(dir, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n } catch (error) {\n throw new JJError(\n 'UNDO_FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath} during undo: ${error.message}`,\n { filePath, originalError: error.message }\n );\n }\n }\n }\n\n // Restore conflicts state from before the undone operation\n // The conflictsSnapshot in an operation represents the state BEFORE that operation ran\n await conflicts.load();\n if (currentOp && currentOp.conflictsSnapshot) {\n // Restore conflicts from the operation we're undoing (its pre-state)\n conflicts.conflicts = new Map(Object.entries(currentOp.conflictsSnapshot.conflicts || {}));\n conflicts.fileConflicts = new Map(\n Object.entries(currentOp.conflictsSnapshot.fileConflicts || {})\n );\n await conflicts.save();\n } else {\n // No conflicts snapshot - clear conflicts\n await conflicts.clear();\n }\n\n // Record undo operation. Tag it with the view it undid so that redo()\n // can re-apply it (jj's progressive undo/redo, added in jj v0.33).\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: 'undo operation',\n eventType: 'undo',\n undoneOpId: currentOp.id,\n undoneView: currentOp.view,\n undoneConflictsSnapshot: currentOp.conflictsSnapshot || null,\n parents: [],\n view: previousView,\n });\n\n // Return information about what was undone\n return {\n undoneOperation: {\n description: currentOp.description,\n timestamp: currentOp.timestamp,\n user: currentOp.user,\n },\n restoredState: {\n workingCopy: previousView.workingCopy,\n heads: previousView.heads,\n fileCount: previousView.fileSnapshot ? Object.keys(previousView.fileSnapshot).length : 0,\n },\n };\n },\n\n /**\n * Redo an operation previously undone with undo() (v1.5)\n *\n * Mirrors `jj redo` (jj v0.33): progressively re-applies the operations that\n * `undo()` reverted, most-recent-undo first. Each redo consumes exactly one\n * pending undo.\n *\n * @returns {Promise<Object>} Information about the redone operation\n */\n async redo() {\n await oplog.load();\n const ops = await oplog.list();\n\n // Operations already consumed by a prior redo.\n const alreadyRedone = new Set();\n for (const op of ops) {\n if (op.eventType === 'redo' && op.redoOf) {\n alreadyRedone.add(op.redoOf);\n }\n }\n\n // Find the most recent undo operation that has not yet been redone.\n let undoOp = null;\n for (let i = ops.length - 1; i >= 0; i--) {\n if (ops[i].eventType === 'undo' && !alreadyRedone.has(ops[i].id)) {\n undoOp = ops[i];\n break;\n }\n }\n\n if (!undoOp) {\n throw new JJError('NOTHING_TO_REDO', 'No undone operations to redo', {\n suggestion: 'redo() only reverses a preceding undo()',\n });\n }\n\n const redoneView = undoOp.undoneView || {};\n\n // Restore the working-copy pointer.\n if (redoneView.workingCopy) {\n await workingCopy.setCurrentChange(redoneView.workingCopy);\n }\n\n // Restore the working-copy files captured in the undone view.\n if (redoneView.fileSnapshot) {\n for (const [filePath, content] of Object.entries(redoneView.fileSnapshot)) {\n try {\n const fullPath = path.join(dir, filePath);\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const fullDirPath = path.join(dir, pathParts.slice(0, -1).join('/'));\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n await fs.promises.writeFile(fullPath, content, 'utf8');\n } catch (error) {\n throw new JJError(\n 'REDO_FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath} during redo: ${error.message}`,\n { filePath, originalError: error.message }\n );\n }\n }\n }\n\n // Restore conflicts to the state that existed after the redone operation.\n await conflicts.load();\n if (undoOp.undoneConflictsSnapshot) {\n conflicts.conflicts = new Map(\n Object.entries(undoOp.undoneConflictsSnapshot.conflicts || {})\n );\n conflicts.fileConflicts = new Map(\n Object.entries(undoOp.undoneConflictsSnapshot.fileConflicts || {})\n );\n await conflicts.save();\n }\n\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: 'redo operation',\n eventType: 'redo',\n redoOf: undoOp.id,\n parents: [],\n view: redoneView,\n });\n\n return {\n redoneOperation: {\n description: undoOp.description,\n undoneOpId: undoOp.undoneOpId,\n },\n restoredState: {\n workingCopy: redoneView.workingCopy,\n heads: redoneView.heads,\n fileCount: redoneView.fileSnapshot ? Object.keys(redoneView.fileSnapshot).length : 0,\n },\n };\n },\n\n /**\n * View operation log (operation history)\n *\n * @param {Record<string, any>} [opts] - Options\n * @returns {Promise<Array<any>>} Array of operations\n */\n async obslog(opts = {}) {\n await oplog.load();\n let operations = await oplog.list();\n\n // Support both changeId and change parameters\n const changeId = opts.changeId || opts.change;\n\n // Filter by change if specified\n if (changeId) {\n operations = operations.filter(\n (op) =>\n op.view &&\n (op.view.workingCopy === changeId ||\n (op.view.heads && op.view.heads.includes(changeId)))\n );\n }\n\n // Apply limit\n if (opts.limit && opts.limit > 0) {\n operations = operations.slice(-opts.limit);\n }\n\n // Transform to evolution events with operation field\n const events = operations.map((op) => ({\n eventType: op.eventType || 'modify',\n description: op.description,\n operation: op.id, // Add operation ID\n timestamp: op.timestamp,\n user: op.user,\n }));\n\n // Reverse to show newest first\n return events.reverse();\n },\n\n /**\n * Operations namespace for advanced operation log queries\n */\n operations: {\n /**\n * List all operations\n *\n * @param {Record<string, any>} [opts] - Options\n * @returns {Promise<Array<any>>} Array of operations\n */\n async list(opts = {}) {\n await oplog.load();\n let ops = await oplog.list();\n\n if (opts.limit && opts.limit > 0) {\n ops = ops.slice(-opts.limit);\n }\n\n return ops.reverse();\n },\n\n /**\n * View repository at a specific operation (time travel)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Read-only repository view at that operation\n */\n async at(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find((op) => op.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Create a read-only view at this operation\n return {\n async log(_logArgs = {}) {\n // Get changes that existed at this operation\n await graph.load();\n const allChanges = await graph.getAllChanges();\n\n // Filter to changes that existed before or at this operation\n const opIndex = ops.indexOf(targetOp);\n const validChanges = allChanges.filter((/** @type {any} */ change) => {\n // Check if this change was created before this operation\n const changeOps = ops.filter(\n (op) => op.view && op.view.heads && op.view.heads.includes(change.changeId)\n );\n return changeOps.length > 0 && ops.indexOf(changeOps[0]) <= opIndex;\n });\n\n return validChanges;\n },\n\n async status() {\n return {\n workingCopy: targetOp.view.workingCopy,\n operation: targetOp.id,\n timestamp: targetOp.timestamp,\n description: targetOp.description,\n };\n },\n\n // Other methods can be added as needed\n };\n },\n\n /**\n * Show changes in a specific operation (matches `jj operation show`)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Operation details with changes made\n */\n async show(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const op = ops.find((o) => o.id === args.operation);\n\n if (!op) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Get changes introduced by this operation\n await graph.load();\n const changes = [];\n if (op.view && op.view.heads) {\n for (const changeId of op.view.heads) {\n const change = await graph.getChange(changeId);\n if (change) {\n changes.push(change);\n }\n }\n }\n\n return {\n id: op.id,\n timestamp: op.timestamp,\n user: op.user,\n description: op.description,\n parents: op.parents || [],\n view: op.view,\n changes,\n };\n },\n\n /**\n * Compare repository state between two operations (matches `jj operation diff`)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Differences between operations\n */\n async diff(args) {\n if (!args || !args.from || !args.to) {\n throw new JJError('INVALID_ARGUMENT', 'Missing from or to operation ID', {\n suggestion: 'Provide both { from: opId1, to: opId2 }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const fromOp = ops.find((o) => o.id === args.from);\n const toOp = ops.find((o) => o.id === args.to);\n\n if (!fromOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.from} not found`);\n }\n if (!toOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.to} not found`);\n }\n\n // Compare views\n const fromHeads = new Set(fromOp.view?.heads || []);\n const toHeads = new Set(toOp.view?.heads || []);\n\n const addedHeads = [...toHeads].filter((h) => !fromHeads.has(h));\n const removedHeads = [...fromHeads].filter((h) => !toHeads.has(h));\n\n // Compare bookmarks\n const fromBookmarks = fromOp.view?.bookmarks || {};\n const toBookmarks = toOp.view?.bookmarks || {};\n\n /** @type {Record<string, any>} */\n const bookmarkChanges = {};\n for (const name of new Set([...Object.keys(fromBookmarks), ...Object.keys(toBookmarks)])) {\n if (fromBookmarks[name] !== toBookmarks[name]) {\n bookmarkChanges[name] = {\n from: fromBookmarks[name],\n to: toBookmarks[name],\n };\n }\n }\n\n return {\n from: args.from,\n to: args.to,\n addedHeads,\n removedHeads,\n changes: [...addedHeads, ...removedHeads], // Combined for convenience\n bookmarkChanges,\n bookmarks: Object.keys(bookmarkChanges), // Array of changed bookmark names\n workingCopyChanged: fromOp.view?.workingCopy !== toOp.view?.workingCopy,\n };\n },\n\n /**\n * Restore repository to a specific operation (matches `jj operation restore`)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Restore result\n */\n async restore(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find((o) => o.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Restore bookmarks from the target operation\n if (targetOp.view && targetOp.view.bookmarks) {\n await bookmarks.load();\n // Clear current bookmarks\n const currentBookmarks = await jj.bookmark.list();\n for (const bookmark of currentBookmarks) {\n await bookmarks.delete(bookmark.name);\n }\n // Restore bookmarks from target operation\n for (const [name, changeId] of Object.entries(targetOp.view.bookmarks)) {\n await bookmarks.set(name, changeId);\n }\n await bookmarks.save();\n }\n\n // Restore working copy if specified\n if (targetOp.view && targetOp.view.workingCopy) {\n await workingCopy.load();\n await workingCopy.setCurrentChange(targetOp.view.workingCopy);\n }\n\n // Record this restoration as a new operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `restore to operation ${args.operation}`,\n parents: [],\n view: targetOp.view,\n });\n\n return {\n restoredTo: args.operation,\n timestamp: targetOp.timestamp,\n description: targetOp.description,\n };\n },\n\n /**\n * Revert a specific operation (create inverse operation)\n *\n * This creates a new operation that undoes the effects of the specified operation,\n * without affecting any operations that came after it.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Revert result\n */\n async revert(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n const ops = await oplog.list();\n const targetOp = ops.find((o) => o.id === args.operation);\n\n if (!targetOp) {\n throw new JJError('OPERATION_NOT_FOUND', `Operation ${args.operation} not found`);\n }\n\n // Get the operation before this one to compare state\n const targetIndex = ops.indexOf(targetOp);\n if (targetIndex === 0) {\n throw new JJError('CANNOT_REVERT', 'Cannot revert the first operation', {\n suggestion: 'Use operations.restore() to go back to the initial state',\n });\n }\n\n const previousOp = ops[targetIndex - 1];\n\n // Compute the inverse changes\n const inversChanges = /** @type {Record<string, any>} */ ({\n bookmarks: {},\n heads: [],\n });\n\n // Revert bookmark changes\n const prevBookmarks = previousOp.view?.bookmarks || {};\n const targetBookmarks = targetOp.view?.bookmarks || {};\n await bookmarks.load();\n\n for (const name of Object.keys(targetBookmarks)) {\n if (!prevBookmarks[name]) {\n // Bookmark was added - delete it\n await bookmarks.delete(name);\n inversChanges.bookmarks[name] = { action: 'deleted' };\n } else if (prevBookmarks[name] !== targetBookmarks[name]) {\n // Bookmark was moved - move it back (the bookmark still exists, so\n // use move() rather than set(), which is create-only).\n await bookmarks.move(name, prevBookmarks[name]);\n inversChanges.bookmarks[name] = {\n action: 'moved',\n from: targetBookmarks[name],\n to: prevBookmarks[name],\n };\n }\n }\n\n // Check for deleted bookmarks (existed before, don't exist after)\n for (const name of Object.keys(prevBookmarks)) {\n if (!targetBookmarks[name]) {\n // Bookmark was deleted - restore it\n await bookmarks.set(name, prevBookmarks[name]);\n inversChanges.bookmarks[name] = {\n action: 'restored',\n to: prevBookmarks[name],\n };\n }\n }\n\n await bookmarks.save();\n\n // Revert working copy change if it changed\n if (previousOp.view?.workingCopy !== targetOp.view?.workingCopy) {\n await workingCopy.load();\n await workingCopy.setCurrentChange(previousOp.view.workingCopy);\n }\n\n // Record the revert as a new operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `revert operation ${args.operation}`,\n parents: [],\n view: {\n bookmarks: prevBookmarks,\n remoteBookmarks: previousOp.view?.remoteBookmarks || {},\n heads: previousOp.view?.heads || [],\n workingCopy: previousOp.view?.workingCopy,\n },\n });\n\n return {\n reverted: args.operation,\n inverseChanges: inversChanges,\n description: targetOp.description,\n };\n },\n\n /**\n * Abandon an operation (remove from operation log)\n *\n * This is an advanced operation that permanently removes an operation from the log.\n * Children of the abandoned operation are automatically relinked to the abandoned\n * operation's parent to maintain chain integrity.\n *\n * WARNING: This is a destructive operation that cannot be undone. Use with caution.\n * In most cases, you should use undo(), restore(), or revert() instead.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Abandon result with relinked children\n */\n async abandon(args) {\n if (!args || !args.operation) {\n throw new JJError('INVALID_ARGUMENT', 'Missing operation ID', {\n suggestion: 'Provide { operation: operationId }',\n });\n }\n\n await oplog.load();\n\n // Call the OperationLog abandon method\n const result = /** @type {any} */ (await oplog.abandon(args.operation));\n\n // Record a new operation about the abandonment\n // Note: This creates a meta-record that an operation was abandoned\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `abandon operation ${args.operation}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n metadata: {\n abandonedOperation: args.operation,\n relinkedChildren: result.relinkedChildren.map((/** @type {any} */ c) => c.operationId),\n },\n });\n\n return {\n abandoned: args.operation,\n description: result.abandoned.description,\n relinkedChildren: result.relinkedChildren,\n newHead: result.newHead,\n };\n },\n },\n\n // ========================================\n // v0.2 FEATURES: History Editing\n // ========================================\n\n /**\n * Squash source change into destination change\n *\n * @param {Record<string, any>} args - Arguments\n */\n async squash(args = {}) {\n // Check for interactive mode (not supported)\n if (args.interactive) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive mode not supported in library API',\n {\n feature: 'squash --interactive',\n reason: 'Interactive file/hunk selection requires terminal UI',\n alternative: 'Specify paths explicitly: squash({ paths: [...] })',\n suggestion: 'For interactive squashing, use JJ CLI',\n }\n );\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Support 'into' as alias for 'dest' (matches JJ CLI)\n const dest = args.into || args.dest;\n\n // Default source to @ (working copy) if not provided\n const source = args.source || workingCopy.getCurrentChangeId();\n\n // If no dest specified and source is @, default dest to parent of @\n let destChangeId = dest;\n if (!destChangeId && source === workingCopy.getCurrentChangeId()) {\n const workingCopyChange = await graph.getChange(source);\n if (\n workingCopyChange &&\n workingCopyChange.parents &&\n workingCopyChange.parents.length > 0\n ) {\n destChangeId = workingCopyChange.parents[0];\n } else {\n throw new JJError('INVALID_ARGUMENTS', 'Cannot squash working copy: no parent found');\n }\n }\n\n if (!destChangeId) {\n throw new JJError('INVALID_ARGUMENTS', 'Destination (dest or into) is required');\n }\n\n const sourceChange = await graph.getChange(source);\n const destChange = await graph.getChange(destChangeId);\n\n if (!sourceChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Source change ${source} not found`);\n }\n\n if (!destChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Destination change ${destChangeId} not found`);\n }\n\n const currentWorkingCopyId = workingCopy.getCurrentChangeId();\n const isSquashingWorkingCopy = source === currentWorkingCopyId;\n\n // Dispatch change:squashing event (preventable)\n await dispatchEventAsync(jj, 'change:squashing', {\n operation: 'squash',\n sourceChangeId: source,\n destChangeId: destChangeId,\n sourceChange,\n destChange,\n timestamp: new Date().toISOString(),\n });\n\n // Mark source as abandoned\n sourceChange.abandoned = true;\n await graph.updateChange(sourceChange);\n\n // Update description of dest to indicate squash (middleware will sync to Git)\n destChange.description += `\\n\\n(squashed from ${source.slice(0, 8)})`;\n await graph.updateChange(destChange);\n\n let newWorkingCopyId = currentWorkingCopyId;\n\n // If squashing the working copy, create a new empty working copy on top of dest\n if (isSquashingWorkingCopy) {\n const user = /** @type {any} */ (userConfig.getUser());\n const newChangeId = generateChangeId();\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [destChangeId],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(no description set)',\n timestamp: new Date().toISOString(),\n fileSnapshot: {},\n };\n\n await graph.addChange(newChange); // Middleware will sync to Git\n await workingCopy.setCurrentChange(newChangeId);\n newWorkingCopyId = newChangeId;\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `squash ${source.slice(0, 8)} into ${destChangeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [destChangeId],\n workingCopy: newWorkingCopyId,\n },\n });\n\n // Dispatch change:squashed event (informational)\n await dispatchEventAsync(\n jj,\n 'change:squashed',\n {\n operation: 'squash',\n sourceChangeId: source,\n destChangeId: destChangeId,\n sourceChange,\n destChange,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n return destChange;\n },\n\n /**\n * Rebase a change to a new parent (matches `jj rebase`)\n *\n * This is the proper JJ CLI semantic for moving changes in history.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Updated change object\n *\n * @example\n * // Rebase a feature change onto updated main\n * await jj.rebase({ changeId: 'abc123', newParent: 'def456' });\n *\n * // Rebase only specific file changes\n * await jj.rebase({\n * changeId: 'abc123',\n * newParent: 'def456',\n * paths: ['src/feature.js']\n * });\n */\n async rebase(args) {\n return await this.moveChange(args);\n },\n\n /**\n * Abandon a change\n *\n * @param {Record<string, any>} [args] - Arguments\n * @returns {Promise<Object>} The abandoned change object including changeId, description, and abandoned flag\n */\n async abandon(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Default to @ (working copy) if changeId not provided\n const changeId = args.changeId || workingCopy.getCurrentChangeId();\n\n const change = await graph.getChange(changeId);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Dispatch change:abandoning event (preventable)\n await dispatchEventAsync(jj, 'change:abandoning', {\n operation: 'abandon',\n changeId: changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n change.abandoned = true;\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `abandon change ${changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Dispatch change:abandoned event (informational)\n await dispatchEventAsync(\n jj,\n 'change:abandoned',\n {\n operation: 'abandon',\n changeId: changeId,\n change,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n return change;\n },\n\n /**\n * Backout a change - create a new change that reverses the effect of the specified change\n *\n * Similar to `git revert`, this creates a new change that undoes the changes made\n * by the specified revision without modifying the original change.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} The new backout change including changeId, description, and backedOut field\n */\n async backout(args) {\n // Normalize: accept common parameter aliases\n if (args && args.change && !args.revision) {\n args = { ...args, revision: args.change };\n } else if (args && args.changeId && !args.revision) {\n args = { ...args, revision: args.changeId };\n } else if (args && args.target && !args.revision) {\n args = { ...args, revision: args.target };\n }\n\n if (!args || !args.revision) {\n throw new JJError('INVALID_ARGUMENT', 'Missing revision argument', {\n suggestion:\n 'Provide the change ID to back out: { revision: \"abc123...\" } (or use change/changeId/target)',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const originalChange = await graph.getChange(args.revision);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.revision} not found`);\n }\n\n // Get the parent's file snapshot (or empty if no parent)\n let parentSnapshot = {};\n if (originalChange.parents && originalChange.parents.length > 0) {\n const parent = await graph.getChange(originalChange.parents[0]);\n if (parent && parent.fileSnapshot) {\n parentSnapshot = { ...parent.fileSnapshot };\n }\n }\n\n // The backout change should have the parent's snapshot\n // (effectively removing all changes made in the original change)\n const backoutSnapshot = { ...parentSnapshot };\n\n // Create description\n const description =\n args.message ||\n `Backout change ${originalChange.changeId.slice(0, 8)}: ${originalChange.description || 'Untitled'}`;\n\n // Create new change with the reversed snapshot\n const backoutChangeId = generateChangeId();\n const backoutChange = {\n changeId: backoutChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [workingCopy.getCurrentChangeId()],\n tree: '0000000000000000000000000000000000000000',\n description,\n fileSnapshot: backoutSnapshot,\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(backoutChange);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `backout ${args.revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [backoutChangeId],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n changeId: backoutChangeId,\n description: backoutChange.description,\n backedOut: args.revision,\n fileSnapshot: backoutChange.fileSnapshot,\n };\n },\n\n /**\n * Revert a change by creating a new change that undoes it (v1.5)\n *\n * This is the canonical name in modern Jujutsu (`jj revert`), which fully\n * replaced `jj backout` in jj v0.35. `backout()` remains as a deprecated\n * alias for backward compatibility.\n *\n * @param {Record<string, any>} args - Revert arguments\n * @returns {Promise<Object>} Result including `revertedFrom`\n */\n async revert(args) {\n const result = await jj.backout(args);\n return {\n changeId: result.changeId,\n description: result.description,\n revertedFrom: result.backedOut,\n // Keep the legacy field so existing callers keep working.\n backedOut: result.backedOut,\n fileSnapshot: result.fileSnapshot,\n };\n },\n\n /**\n * Sign a change (matches `jj sign`, jj v0.27)\n *\n * A pure-JS library cannot verify GPG/SSH keys the way the jj CLI does, so\n * this records signature *metadata* on the change (backend/key/status). This\n * makes changes discoverable via the `signed()` revset and lets tooling\n * round-trip signature intent. Pass a real signer via `args.backend`/`args.key`.\n *\n * @param {Record<string, any>} [args] - Arguments\n * @returns {Promise<Object>} { changeId, signed, signature }\n */\n async sign(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const revision =\n args.revision || args.change || args.changeId || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(revision);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${revision} not found`);\n }\n\n const signature = {\n status: 'good',\n backend: args.backend || 'none',\n key: args.key || null,\n timestamp: new Date().toISOString(),\n };\n\n await graph.updateChange({ ...change, signed: true, signature });\n\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sign ${revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [revision],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { changeId: revision, signed: true, signature };\n },\n\n /**\n * Remove a signature from a change (matches `jj unsign`, jj v0.27)\n *\n * @param {Record<string, any>} [args] - Arguments\n * @returns {Promise<Object>} { changeId, signed }\n */\n async unsign(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const revision =\n args.revision || args.change || args.changeId || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(revision);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${revision} not found`);\n }\n\n const updated = { ...change, signed: false };\n delete updated.signature;\n await graph.updateChange(updated);\n\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `unsign ${revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [revision],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { changeId: revision, signed: false };\n },\n\n /**\n * Absorb working copy changes into ancestor changes\n *\n * Automatically identifies which ancestor change each file modification\n * belongs to and merges the changes back into those ancestors.\n * This is similar to `git absorb` or `git commit --fixup`.\n *\n * Algorithm (simplified, file-level):\n * 1. For each modified file in working copy\n * 2. Find most recent ancestor that modified that file\n * 3. Group modifications by ancestor changeId\n * 4. Update each ancestor with its modifications\n * 5. Remove absorbed changes from working copy\n *\n * @param {Record<string, any>} [args] - Optional arguments\n * @returns {Promise<Object>} Result with affected changes\n */\n async absorb(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n const workingChangeId = workingCopy.getCurrentChangeId();\n const workingChange = await graph.getChange(workingChangeId);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!workingChange) {\n // No working copy\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Snapshot current filesystem state to get the actual current changes\n const currentSnapshot = await snapshotFilesystem();\n\n if (!currentSnapshot || Object.keys(currentSnapshot).length === 0) {\n // Empty working copy, nothing to absorb\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Update working copy's fileSnapshot with current state so show() returns accurate data\n // This is safe even in dry-run mode since we're just syncing the graph with reality\n workingChange.fileSnapshot = currentSnapshot;\n await graph.updateChange(workingChange);\n\n // Get parent snapshot to determine what's modified\n /** @type {Record<string, any>} */\n let parentSnapshot = {};\n if (workingChange.parents && workingChange.parents.length > 0) {\n const parent = await graph.getChange(workingChange.parents[0]);\n if (parent && parent.fileSnapshot) {\n parentSnapshot = parent.fileSnapshot;\n }\n }\n\n // Find modified files (existed in parent AND content is different)\n /** @type {Record<string, any>} */\n const modifiedFiles = {};\n for (const [filePath, content] of Object.entries(currentSnapshot)) {\n // Only count as modified if file existed in parent (not a new file)\n if (parentSnapshot[filePath] !== undefined && parentSnapshot[filePath] !== content) {\n modifiedFiles[filePath] = content;\n }\n }\n\n // Also check for deletions (files in parent but not in working copy)\n for (const filePath of Object.keys(parentSnapshot)) {\n if (!currentSnapshot[filePath]) {\n modifiedFiles[filePath] = undefined; // Deletion\n }\n }\n\n // Check if there are new files (not in parent)\n /** @type {Record<string, any>} */\n const newFiles = {};\n for (const [filePath, content] of Object.entries(currentSnapshot)) {\n if (parentSnapshot[filePath] === undefined) {\n newFiles[filePath] = content;\n }\n }\n\n // If only new files, nothing to absorb but still update working copy\n if (Object.keys(modifiedFiles).length === 0) {\n // Update working copy to have proper fileSnapshot with new files\n if (!args.dryRun && Object.keys(newFiles).length > 0) {\n workingChange.fileSnapshot = { ...parentSnapshot, ...newFiles };\n await graph.updateChange(workingChange);\n }\n\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // For each modified file, use line-level tracking to find which ancestor\n // modified each line, then group modifications by ancestor\n /** @type {Record<string, any>} */\n const ancestorModifications = {}; // ancestorId -> { filePath: content }\n\n for (const filePath of Object.keys(modifiedFiles)) {\n const currentContent = modifiedFiles[filePath];\n\n // Handle file deletion\n if (currentContent === undefined) {\n const ancestor = await this._findFileAncestor(filePath, workingChange.parents);\n if (ancestor) {\n if (!ancestorModifications[ancestor.changeId]) {\n ancestorModifications[ancestor.changeId] = {};\n }\n ancestorModifications[ancestor.changeId][filePath] = undefined;\n }\n continue;\n }\n\n // For text files, use line-level tracking\n const parentContent = parentSnapshot[filePath] || '';\n const lineAncestors = await this._findLineAncestors(\n filePath,\n parentContent,\n currentContent,\n workingChange.parents\n );\n\n // Group line modifications by ancestor\n // lineAncestors is a Map: ancestorId -> { lines: Map(lineNum -> lineContent), originalContent }\n for (const [ancestorId, { lines, originalContent }] of lineAncestors.entries()) {\n if (!ancestorModifications[ancestorId]) {\n ancestorModifications[ancestorId] = {};\n }\n\n // Reconstruct file with modified lines\n const originalLines = originalContent.split('\\n');\n for (const [lineNum, newContent] of lines.entries()) {\n originalLines[lineNum] = newContent;\n }\n\n ancestorModifications[ancestorId][filePath] = originalLines.join('\\n');\n }\n }\n\n const affectedChanges = Object.keys(ancestorModifications);\n\n if (affectedChanges.length === 0) {\n // No ancestors found for modifications\n return {\n absorbed: args.dryRun ? undefined : false,\n wouldAbsorb: args.dryRun ? false : undefined,\n affectedChanges: [],\n };\n }\n\n // Dry run mode - just return what would happen\n if (args.dryRun) {\n return {\n wouldAbsorb: true,\n affectedChanges,\n preview: ancestorModifications,\n };\n }\n\n // Capture original states of all changes BEFORE updating any ancestors\n // This is needed to properly track descendant modifications when rebuilding\n const allChanges = graph.getAll();\n const originalStates = new Map();\n for (const change of allChanges) {\n originalStates.set(change.changeId, {\n fileSnapshot: JSON.parse(JSON.stringify(change.fileSnapshot || {})),\n parents: change.parents ? [...change.parents] : [],\n });\n }\n\n // Apply modifications to ancestors\n for (const [ancestorId, modifications] of Object.entries(ancestorModifications)) {\n const ancestor = await graph.getChange(ancestorId);\n\n if (ancestor) {\n // Update fileSnapshot with modifications\n ancestor.fileSnapshot = { ...ancestor.fileSnapshot };\n\n for (const [filePath, content] of Object.entries(modifications)) {\n if (content === undefined) {\n // Deletion\n delete ancestor.fileSnapshot[filePath];\n } else {\n ancestor.fileSnapshot[filePath] = content;\n }\n }\n\n // Update timestamp but preserve original metadata\n ancestor.committer = {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n };\n\n await graph.updateChange(ancestor);\n }\n }\n\n // Rebuild all descendants ONCE after all ancestors are updated\n // This includes changes that were directly updated by absorb\n const allAffectedDescendants = new Set();\n for (const ancestorId of affectedChanges) {\n const descendants = await this._findDescendants(ancestorId, workingChangeId);\n for (const desc of descendants) {\n allAffectedDescendants.add(desc);\n }\n }\n\n // Rebuild each affected descendant\n // For changes that were directly modified by absorb, we use their CURRENT state (post-absorb)\n // For changes that weren't directly modified, we use their original state\n if (allAffectedDescendants.size > 0) {\n await this._rebuildDescendantsWithStates(\n Array.from(allAffectedDescendants),\n originalStates,\n workingChangeId,\n new Set(affectedChanges) // Pass set of changes that were directly modified\n );\n }\n\n // Update working copy to reflect absorbed changes\n // Working copy should now match parent's new state (after absorption) plus any new files\n const updatedParent = await graph.getChange(workingChange.parents[0]);\n const newWorkingSnapshot =\n updatedParent && updatedParent.fileSnapshot ? { ...updatedParent.fileSnapshot } : {};\n\n // Add new files that weren't absorbed\n for (const [filePath, content] of Object.entries(newFiles)) {\n newWorkingSnapshot[filePath] = content;\n }\n\n workingChange.fileSnapshot = newWorkingSnapshot;\n await graph.updateChange(workingChange);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `absorb into ${affectedChanges.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: affectedChanges,\n workingCopy: workingChangeId,\n },\n });\n\n return {\n absorbed: true,\n affectedChanges,\n };\n },\n\n /**\n * Find the most recent ancestor that modified a file\n *\n * @private\n * @param {string} filePath - File path to search for\n * @param {string[]} startingPoints - Change IDs to start search from\n * @returns {Promise<Object|null>} The ancestor change that last modified the file\n */\n async _findFileAncestor(filePath, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return null;\n }\n\n // BFS to find most recent ancestor that MODIFIED this file\n // (i.e., file content is different from its parent)\n const queue = [...startingPoints];\n const visited = new Set();\n\n while (queue.length > 0) {\n const changeId = queue.shift();\n\n if (visited.has(changeId)) {\n continue;\n }\n visited.add(changeId);\n\n const change = await graph.getChange(changeId);\n if (!change) {\n continue;\n }\n\n // Check if this change has the file\n if (change.fileSnapshot && change.fileSnapshot[filePath] !== undefined) {\n // Check if this change MODIFIED the file (different from parent)\n let isModified = false;\n\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n const parentContent = parent?.fileSnapshot?.[filePath];\n const changeContent = change.fileSnapshot[filePath];\n\n // This change modified the file if:\n // 1. Parent doesn't have the file (file was added)\n // 2. Content is different from parent\n if (parentContent === undefined || parentContent !== changeContent) {\n isModified = true;\n }\n } else {\n // No parent = root change, so this is where the file was added\n isModified = true;\n }\n\n if (isModified) {\n return change;\n }\n }\n\n // Continue to parents\n if (change.parents) {\n queue.push(...change.parents);\n }\n }\n\n return null;\n },\n\n /**\n * Find which ancestors last modified each line in a file\n *\n * @private\n * @param {string} filePath - File path\n * @param {string} parentContent - Content from parent change\n * @param {string} currentContent - Current working copy content\n * @param {string[]} startingPoints - Change IDs to start search from (parent changeIds)\n * @returns {Promise<Map<any, any>>} Map of ancestorId -> { lines: Map(lineNum -> content), originalContent }\n */\n async _findLineAncestors(filePath, parentContent, currentContent, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return new Map();\n }\n\n // Split into lines and find which lines changed\n const parentLines = parentContent.split('\\n');\n const currentLines = currentContent.split('\\n');\n\n // Find modified line numbers\n const modifiedLineNums = [];\n const maxLen = Math.max(parentLines.length, currentLines.length);\n\n for (let i = 0; i < maxLen; i++) {\n const parentLine = i < parentLines.length ? parentLines[i] : undefined;\n const currentLine = i < currentLines.length ? currentLines[i] : undefined;\n\n if (parentLine !== currentLine) {\n modifiedLineNums.push(i);\n }\n }\n\n // For each modified line, find which ancestor last modified it\n const ancestorMap = new Map(); // ancestorId -> { lines: Map(lineNum -> content), originalContent }\n\n for (const lineNum of modifiedLineNums) {\n const newContent = lineNum < currentLines.length ? currentLines[lineNum] : undefined;\n\n // Find which ancestor last modified this line\n const ancestor = await this._findLineAncestor(\n filePath,\n lineNum,\n parentLines[lineNum],\n startingPoints\n );\n\n if (ancestor) {\n if (!ancestorMap.has(ancestor.changeId)) {\n ancestorMap.set(ancestor.changeId, {\n lines: new Map(),\n originalContent: ancestor.fileSnapshot[filePath] || '',\n });\n }\n\n ancestorMap.get(ancestor.changeId).lines.set(lineNum, newContent);\n }\n }\n\n return ancestorMap;\n },\n\n /**\n * Find which ancestor last modified a specific line in a file\n *\n * @private\n * @param {string} filePath - File path\n * @param {number} lineNum - Line number (0-indexed)\n * @param {string} parentLine - Line content from parent\n * @param {string[]} startingPoints - Change IDs to start search from\n * @returns {Promise<Object|null>} Ancestor change that last modified this line\n */\n async _findLineAncestor(filePath, lineNum, parentLine, startingPoints) {\n if (!startingPoints || startingPoints.length === 0) {\n return null;\n }\n\n // BFS to find most recent ancestor that MODIFIED this specific line\n const queue = [...startingPoints];\n const visited = new Set();\n\n while (queue.length > 0) {\n const changeId = queue.shift();\n\n if (visited.has(changeId)) {\n continue;\n }\n visited.add(changeId);\n\n const change = await graph.getChange(changeId);\n if (!change) {\n continue;\n }\n\n // Check if this change has the file\n if (change.fileSnapshot && change.fileSnapshot[filePath] !== undefined) {\n const changeContent = change.fileSnapshot[filePath];\n const changeLines = changeContent.split('\\n');\n const changeLine = lineNum < changeLines.length ? changeLines[lineNum] : undefined;\n\n // Check if this change MODIFIED this specific line\n let isModified = false;\n\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n if (parent && parent.fileSnapshot && parent.fileSnapshot[filePath] !== undefined) {\n const parentContent = parent.fileSnapshot[filePath];\n const parentLines = parentContent.split('\\n');\n const parentLine = lineNum < parentLines.length ? parentLines[lineNum] : undefined;\n\n // This change modified this line if the content is different\n if (changeLine !== parentLine) {\n isModified = true;\n }\n } else {\n // Parent doesn't have file, so this change added it (and this line)\n isModified = true;\n }\n } else {\n // No parent = root change, so this is where the line was added\n isModified = true;\n }\n\n if (isModified) {\n return change;\n }\n }\n\n // Continue to parents\n if (change.parents) {\n queue.push(...change.parents);\n }\n }\n\n return null;\n },\n\n /**\n * Find all descendants of a change\n *\n * @private\n * @param {string} changeId - The change to find descendants for\n * @param {string} stopAtChangeId - Don't include this change\n * @returns {Promise<string[]>} List of descendant change IDs\n */\n async _findDescendants(changeId, stopAtChangeId) {\n const allChanges = graph.getAll();\n const descendants = [];\n\n // BFS to find all descendants\n const queue = [changeId];\n const visited = new Set([changeId]);\n\n while (queue.length > 0) {\n const currentId = queue.shift();\n\n // Find children of current change\n for (const change of allChanges) {\n if (change.changeId === stopAtChangeId) {\n // Don't include this change\n continue;\n }\n\n if (\n change.parents &&\n change.parents.includes(currentId) &&\n !visited.has(change.changeId)\n ) {\n visited.add(change.changeId);\n queue.push(change.changeId);\n descendants.push(change.changeId);\n }\n }\n }\n\n return descendants;\n },\n\n /**\n * Rebuild descendants with captured original states\n *\n * @private\n * @param {string[]} descendantIds - List of descendant IDs to rebuild\n * @param {Map<any, any>} originalStates - Map of changeId -> original state before absorb\n * @param {string} stopAtChangeId - Don't rebuild this change\n * @param {Set<any>} directlyModified - Set of changeIds that were directly modified by absorb\n */\n async _rebuildDescendantsWithStates(\n descendantIds,\n originalStates,\n stopAtChangeId,\n directlyModified = new Set()\n ) {\n // Sort descendants by depth (parents before children)\n const sorted = await this._topologicalSort(descendantIds);\n\n // Rebuild each descendant by reapplying its modifications on top of updated parent\n for (const descendantId of sorted) {\n if (descendantId === stopAtChangeId) {\n continue;\n }\n\n const descendant = await graph.getChange(descendantId);\n if (!descendant || !descendant.parents || descendant.parents.length === 0) {\n continue;\n }\n\n // For changes that were directly modified by absorb, use their CURRENT state\n // For other changes, use their original state\n const useCurrentState = directlyModified.has(descendantId);\n const originalDescendantState = useCurrentState\n ? {\n fileSnapshot: descendant.fileSnapshot,\n parents: descendant.parents,\n }\n : originalStates.get(descendantId);\n\n if (!originalDescendantState) {\n continue;\n }\n\n // Get parent's CURRENT (updated) state\n const parent = await graph.getChange(descendant.parents[0]);\n if (!parent) {\n continue;\n }\n\n // Get parent's ORIGINAL (before absorb) state\n const originalParentState = originalStates.get(descendant.parents[0]);\n if (!originalParentState) {\n // No original state for parent, just use current parent\n descendant.fileSnapshot = { ...parent.fileSnapshot };\n await graph.updateChange(descendant);\n continue;\n }\n\n // For each file, track which lines the descendant modified from original parent\n // then reapply those modifications to the updated parent\n /** @type {Record<string, any>} */\n const newSnapshot = {};\n\n const allFiles = new Set([\n ...Object.keys(originalDescendantState.fileSnapshot),\n ...Object.keys(parent.fileSnapshot || {}),\n ]);\n\n for (const filePath of allFiles) {\n const originalDescendantContent = originalDescendantState.fileSnapshot[filePath] || '';\n const originalParentContent = originalParentState.fileSnapshot[filePath] || '';\n const updatedParentContent = parent.fileSnapshot[filePath] || '';\n\n // Find which lines descendant modified from original parent\n const originalDescendantLines = originalDescendantContent.split('\\n');\n const originalParentLines = originalParentContent.split('\\n');\n const updatedParentLines = updatedParentContent.split('\\n');\n\n // Rebuild file: start with updated parent, apply descendant's modifications\n const resultLines = [...updatedParentLines];\n\n // Find lines that descendant modified\n for (\n let i = 0;\n i < Math.max(originalDescendantLines.length, originalParentLines.length);\n i++\n ) {\n const originalDescendantLine =\n i < originalDescendantLines.length ? originalDescendantLines[i] : undefined;\n const originalParentLine =\n i < originalParentLines.length ? originalParentLines[i] : undefined;\n\n // If descendant modified this line from original parent, apply that modification\n if (originalDescendantLine !== originalParentLine) {\n // Extend resultLines if needed\n while (resultLines.length <= i) {\n resultLines.push('');\n }\n resultLines[i] = originalDescendantLine !== undefined ? originalDescendantLine : '';\n }\n }\n\n newSnapshot[filePath] = resultLines.join('\\n');\n }\n\n descendant.fileSnapshot = newSnapshot;\n await graph.updateChange(descendant);\n }\n },\n\n /**\n * Rebuild descendants of a change to inherit updates\n *\n * Track descendant modifications and reapply them on top of updated parent.\n *\n * @private\n * @param {string} ancestorId - The ancestor change that was updated\n * @param {string} stopAtChangeId - Don't rebuild this change (usually working copy)\n * @deprecated Use _rebuildDescendantsWithStates instead\n */\n async _rebuildDescendants(ancestorId, stopAtChangeId) {\n // Find all descendants of ancestorId\n const allChanges = graph.getAll();\n\n // Store original parent states before any modifications\n const originalParentStates = new Map();\n for (const change of allChanges) {\n if (change.parents && change.parents.length > 0) {\n const parent = await graph.getChange(change.parents[0]);\n if (parent) {\n originalParentStates.set(change.changeId, {\n parentId: change.parents[0],\n parentSnapshot: JSON.parse(JSON.stringify(parent.fileSnapshot || {})),\n });\n }\n }\n }\n\n const descendants = [];\n\n // BFS to find all descendants\n const queue = [ancestorId];\n const visited = new Set([ancestorId]);\n\n while (queue.length > 0) {\n const currentId = queue.shift();\n\n // Find children of current change\n for (const change of allChanges) {\n if (change.changeId === stopAtChangeId) {\n // Don't rebuild the working copy itself\n continue;\n }\n\n if (\n change.parents &&\n change.parents.includes(currentId) &&\n !visited.has(change.changeId)\n ) {\n visited.add(change.changeId);\n queue.push(change.changeId);\n descendants.push(change.changeId);\n }\n }\n }\n\n // Sort descendants by depth (parents before children)\n // This ensures we update parents before their children\n const sorted = await this._topologicalSort(descendants);\n\n // Rebuild each descendant by reapplying its modifications on top of updated parent\n for (const descendantId of sorted) {\n const descendant = await graph.getChange(descendantId);\n if (!descendant || !descendant.parents || descendant.parents.length === 0) {\n continue;\n }\n\n // Get parent's CURRENT (updated) state\n const parent = await graph.getChange(descendant.parents[0]);\n if (!parent || !parent.fileSnapshot) {\n continue;\n }\n\n // Get parent's ORIGINAL (before absorb) state\n const originalState = originalParentStates.get(descendantId);\n if (!originalState || originalState.parentId !== descendant.parents[0]) {\n // Parent relationship changed or no original state, just use current parent\n descendant.fileSnapshot = { ...parent.fileSnapshot };\n await graph.updateChange(descendant);\n continue;\n }\n\n const originalParentSnapshot = originalState.parentSnapshot;\n\n // For each file, track which lines the descendant modified from original parent\n // then reapply those modifications to the updated parent\n /** @type {Record<string, any>} */\n const newSnapshot = {};\n\n const allFiles = new Set([\n ...Object.keys(descendant.fileSnapshot || {}),\n ...Object.keys(parent.fileSnapshot || {}),\n ]);\n\n for (const filePath of allFiles) {\n const descendantContent = descendant.fileSnapshot[filePath] || '';\n const originalParentContent = originalParentSnapshot[filePath] || '';\n const updatedParentContent = parent.fileSnapshot[filePath] || '';\n\n // Find which lines descendant modified from original parent\n const descendantLines = descendantContent.split('\\n');\n const originalParentLines = originalParentContent.split('\\n');\n const updatedParentLines = updatedParentContent.split('\\n');\n\n // Rebuild file: start with updated parent, apply descendant's modifications\n const resultLines = [...updatedParentLines];\n\n // Find lines that descendant modified\n for (let i = 0; i < Math.max(descendantLines.length, originalParentLines.length); i++) {\n const descendantLine = i < descendantLines.length ? descendantLines[i] : undefined;\n const originalParentLine =\n i < originalParentLines.length ? originalParentLines[i] : undefined;\n\n // If descendant modified this line from original parent, apply that modification\n if (descendantLine !== originalParentLine) {\n // Extend resultLines if needed\n while (resultLines.length <= i) {\n resultLines.push('');\n }\n resultLines[i] = descendantLine !== undefined ? descendantLine : '';\n }\n }\n\n newSnapshot[filePath] = resultLines.join('\\n');\n }\n\n descendant.fileSnapshot = newSnapshot;\n await graph.updateChange(descendant);\n\n // Update the original parent state for this descendant's children\n originalParentStates.set(descendantId, {\n parentId: descendantId,\n parentSnapshot: JSON.parse(JSON.stringify(descendant.fileSnapshot)),\n });\n }\n },\n\n /**\n * Topologically sort changes (parents before children)\n *\n * @private\n * @param {string[]} changeIds - List of change IDs to sort\n * @returns {Promise<string[]>} Sorted change IDs\n */\n async _topologicalSort(changeIds) {\n const changes = await Promise.all(changeIds.map((id) => graph.getChange(id)));\n\n /** @type {any[]} */\n const sorted = [];\n const visited = new Set();\n const inProgress = new Set();\n\n const visit = async (/** @type {any} */ change) => {\n if (!change || visited.has(change.changeId)) {\n return;\n }\n\n if (inProgress.has(change.changeId)) {\n // Cycle detected - shouldn't happen in a DAG\n return;\n }\n\n inProgress.add(change.changeId);\n\n // Visit parents first\n if (change.parents) {\n for (const parentId of change.parents) {\n if (changeIds.includes(parentId)) {\n const parent = await graph.getChange(parentId);\n await visit(parent);\n }\n }\n }\n\n inProgress.delete(change.changeId);\n visited.add(change.changeId);\n sorted.push(change.changeId);\n };\n\n for (const change of changes) {\n await visit(change);\n }\n\n return sorted;\n },\n\n /**\n * Simplify parent edges by removing redundant parents\n *\n * A parent is redundant if it's already an ancestor through another parent.\n * This operation optimizes the graph structure without changing the content.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<{changeId: string, simplified: boolean, removedParents?: string[]}>}\n */\n async simplifyParents(args) {\n if (!args || !args.revision) {\n throw new JJError('INVALID_ARGUMENT', 'Missing revision argument', {\n suggestion: 'Provide: { revision: \"abc123...\" }',\n });\n }\n\n await graph.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.revision);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.revision} not found`);\n }\n\n // If change has 0 or 1 parents, nothing to simplify\n if (!change.parents || change.parents.length <= 1) {\n return {\n changeId: args.revision,\n simplified: false,\n };\n }\n\n // Find redundant parents\n // A parent P is redundant if there exists another parent Q such that P is an ancestor of Q\n /** @type {any[]} */\n const redundantParents = [];\n\n for (let i = 0; i < change.parents.length; i++) {\n const parentP = change.parents[i];\n\n // Check if parentP is an ancestor of any other parent\n for (let j = 0; j < change.parents.length; j++) {\n if (i === j) continue;\n\n const parentQ = change.parents[j];\n\n // Get all ancestors of parentQ\n const ancestorsQ = await this.log({ revisions: [parentQ] });\n const ancestorIds = ancestorsQ.map((/** @type {any} */ c) => c.changeId);\n\n // If parentP is in the ancestors of parentQ, then parentP is redundant\n if (ancestorIds.includes(parentP)) {\n if (!redundantParents.includes(parentP)) {\n redundantParents.push(parentP);\n }\n break;\n }\n }\n }\n\n // If no redundant parents found, nothing changed\n if (redundantParents.length === 0) {\n return {\n changeId: args.revision,\n simplified: false,\n };\n }\n\n // Remove redundant parents\n change.parents = change.parents.filter(\n (/** @type {any} */ p) => !redundantParents.includes(p)\n );\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `simplify parents of ${args.revision.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [args.revision],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n changeId: args.revision,\n simplified: true,\n removedParents: redundantParents,\n };\n },\n\n /**\n * Un-abandon a change (restore from abandoned state)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} The un-abandoned change object including changeId, description, and abandoned flag (now false)\n */\n async unabandon(args) {\n // Normalize: accept both 'change' and 'changeId' parameters\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n }\n\n if (!args || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing changeId argument', {\n suggestion: 'Provide a changeId (or change) to unabandon',\n });\n }\n\n if (typeof args.changeId !== 'string') {\n throw new JJError('INVALID_ARGUMENT', 'Change ID must be a string', {\n changeId: args.changeId,\n });\n }\n\n await graph.load();\n await userConfig.load();\n\n const change = await graph.getChange(args.changeId);\n const user = /** @type {any} */ (userConfig.getUser());\n\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n // Dispatch change:unabandoning event (preventable)\n await dispatchEventAsync(jj, 'change:unabandoning', {\n operation: 'unabandon',\n changeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n });\n\n change.abandoned = false;\n await graph.updateChange(change);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: { name: user.name, email: user.email, hostname: 'localhost' },\n description: `unabandon change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Dispatch change:unabandoned event (informational)\n await dispatchEventAsync(\n jj,\n 'change:unabandoned',\n {\n operation: 'unabandon',\n changeId: args.changeId,\n change,\n timestamp: new Date().toISOString(),\n },\n { cancelable: false }\n );\n\n return change;\n },\n\n /**\n * Split a change into multiple changes (simplified v0.2 implementation)\n *\n * @param {Record<string, any>} args - Arguments\n */\n async split(args) {\n // Normalize: accept common parameter aliases\n if (args && args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args && args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n } else if (args && args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n }\n\n // Check for interactive mode (not supported)\n if (args.interactive) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive mode not supported in library API',\n {\n feature: 'split --interactive',\n reason: 'Interactive file/hunk selection requires terminal UI',\n alternative: 'Specify paths explicitly: split({ changeId, paths: [...] })',\n suggestion: 'For interactive splitting, use JJ CLI',\n }\n );\n }\n\n await graph.load();\n await workingCopy.load();\n\n const originalChange = await graph.getChange(args.changeId);\n\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n const currentWorkingCopyId = workingCopy.getCurrentChangeId();\n const isSplittingWorkingCopy = args.changeId === currentWorkingCopyId;\n\n // Create first split change (keep original ID) - middleware will sync to Git\n originalChange.description = args.description1 || originalChange.description + ' (part 1)';\n await graph.updateChange(originalChange);\n\n // Create second split change as new change on top - middleware will sync to Git\n const newChangeId = generateChangeId();\n const newChange = {\n changeId: newChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [args.changeId],\n tree: originalChange.tree,\n author: originalChange.author,\n committer: originalChange.committer,\n description: args.description2 || originalChange.description + ' (part 2)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(newChange);\n\n // If splitting the working copy, move to the second (child) commit\n let newWorkingCopyId = currentWorkingCopyId;\n if (isSplittingWorkingCopy) {\n await workingCopy.setCurrentChange(newChangeId);\n newWorkingCopyId = newChangeId;\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `split change ${args.changeId.slice(0, 8)}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [newChangeId],\n workingCopy: newWorkingCopyId,\n },\n });\n\n return { original: originalChange, new: newChange };\n },\n\n // ========================================\n // v0.3 FEATURES: Git Integration\n // ========================================\n\n /**\n * Git-specific operations (network, direct Git access)\n */\n git: {\n /**\n * Initialize a new Git-backed JJ repository\n * Matches `jj git init` CLI command\n *\n * @param {Record<string, any>} opts - Initialization options\n */\n async init(opts = {}) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n // Initialize Git backend\n await gitBackend.init({\n defaultBranch: opts.defaultBranch || 'main',\n });\n\n await storage.init();\n\n // Initialize user config first\n await userConfig.init({\n userName: opts.userName,\n userEmail: opts.userEmail,\n });\n\n // Initialize components\n await graph.init();\n await oplog.init();\n await bookmarks.init();\n await conflicts.init();\n await workspaces.init();\n\n // Create root change\n const rootChangeId = generateChangeId();\n const user = /** @type {any} */ (userConfig.getUser());\n const rootChange = {\n changeId: rootChangeId,\n commitId: '0000000000000000000000000000000000000000',\n parents: [],\n tree: '0000000000000000000000000000000000000000',\n author: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: '(root)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(rootChange);\n await workingCopy.init(rootChangeId);\n\n // Record init operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: {\n name: user.name,\n email: user.email,\n hostname: 'localhost',\n },\n description: 'initialize git-backed repository',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [rootChangeId],\n workingCopy: rootChangeId,\n },\n });\n },\n\n /**\n * Fetch changes from remote Git repository\n *\n * @param {Record<string, any>} args - Fetch arguments\n */\n async fetch(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n const result = await gitBackend.fetch({\n remote: args.remote,\n refs: args.refs,\n depth: args.depth, // v0.4: Shallow clone support\n relative: args.relative, // v0.4: Relative depth\n singleBranch: args.singleBranch, // v0.4: Single branch only\n noTags: args.noTags, // v0.4: Skip tags\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git fetch from ${args.remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * Push changes to remote Git repository\n *\n * @param {Record<string, any>} args - Push arguments\n */\n async push(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n const result = await gitBackend.push({\n remote: args.remote,\n refs: args.refs,\n force: args.force,\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git push to ${args.remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * Clone a Git repository (matches `jj git clone`)\n *\n * @param {Record<string, any>} args - Clone arguments\n * @returns {Promise<Object>} Clone result with directory path\n */\n async clone(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n if (!args || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing url argument', {\n suggestion: 'Provide a Git repository URL to clone from',\n });\n }\n\n if (!http) {\n throw new JJError('HTTP_NOT_AVAILABLE', 'HTTP client not provided', {\n suggestion: 'Provide http option when creating JJ: createJJ({ fs, dir, git, http })',\n });\n }\n\n // Determine clone directory\n const git = (await import('isomorphic-git')).default;\n const cloneDir =\n args.dir ||\n args.url\n .split('/')\n .pop()\n .replace(/\\.git$/, '');\n const fullCloneDir = path.join(dir, cloneDir);\n\n // Clone using isomorphic-git\n await git.clone({\n fs,\n http,\n dir: fullCloneDir,\n url: args.url,\n ref: args.ref,\n depth: args.depth,\n singleBranch: args.singleBranch,\n noTags: args.noTags,\n onProgress: args.onProgress,\n onAuth: args.onAuth,\n });\n\n // Initialize JJ repository structure in cloned directory\n const clonedBackend = /** @type {any} */ (\n new IsomorphicGitBackend({ fs, http, dir: fullCloneDir })\n );\n await clonedBackend._createJJRepoStructure();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git clone from ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n url: args.url,\n directory: fullCloneDir,\n ref: args.ref || 'HEAD',\n };\n },\n\n /**\n * Import Git refs into JJ bookmarks\n *\n * @returns {Promise<Object>} Import result\n */\n async import() {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n await graph.load();\n await bookmarks.load();\n\n // Get all Git refs\n const refs = await gitBackend.listRefs('refs/heads');\n const importedBookmarks = [];\n\n for (const ref of refs) {\n const bookmarkName = ref.name.replace('refs/heads/', '');\n\n // Find or create change for this commit\n let change = await graph.findChangeByCommitId(ref.oid);\n if (!change) {\n // Create a new change for this commit\n const changeId = generateChangeId();\n const user = /** @type {any} */ (userConfig.getUser());\n change = {\n changeId,\n commitId: ref.oid,\n parents: [],\n tree: ref.oid,\n author: { name: user.name, email: user.email, timestamp: new Date().toISOString() },\n committer: {\n name: user.name,\n email: user.email,\n timestamp: new Date().toISOString(),\n },\n description: `Imported from Git ref ${ref.name}`,\n timestamp: new Date().toISOString(),\n };\n await graph.addChange(change);\n }\n\n // Create or update bookmark pointing to this change\n const existing = await bookmarks.get(bookmarkName);\n if (existing) {\n await bookmarks.move(bookmarkName, change.changeId);\n } else {\n await bookmarks.set(bookmarkName, change.changeId);\n }\n importedBookmarks.push(bookmarkName);\n }\n\n await bookmarks.save();\n // Note: graph.save() not needed - addChange() saves automatically\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git import (${importedBookmarks.length} refs)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { imported: importedBookmarks };\n },\n\n /**\n * Export JJ bookmarks to Git refs\n *\n * @returns {Promise<Object>} Export result\n */\n async export() {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n await graph.load();\n await bookmarks.load();\n\n const allBookmarks = await bookmarks.list();\n const exportedRefs = [];\n\n for (const bookmark of allBookmarks) {\n const change = await graph.getChange(bookmark.changeId);\n if (!change || !change.commitId) {\n continue;\n }\n\n // Update Git ref\n const refName = `refs/heads/${bookmark.name}`;\n await gitBackend.updateRef(refName, change.commitId);\n exportedRefs.push(refName);\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git export (${exportedRefs.length} refs)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { exported: exportedRefs };\n },\n\n /**\n * Git remote operations\n */\n remote: {\n /**\n * List Git remotes (matches `jj git remote list`)\n *\n * @returns {Promise<Array<any>>} List of remotes with names and URLs\n */\n async list() {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n const remotes = await git.listRemotes({ fs, dir });\n return remotes.map((r) => ({ name: r.remote, url: r.url }));\n },\n\n /**\n * Add a Git remote (matches `jj git remote add`)\n *\n * @param {Record<string, any>} args - Remote arguments\n * @returns {Promise<Object>} Added remote info\n */\n async add(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n if (!args || !args.name || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or url', {\n suggestion: 'Provide both name and url: { name: \"origin\", url: \"https://...\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n await git.addRemote({\n fs,\n dir,\n remote: args.name,\n url: args.url,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote add ${args.name} ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, url: args.url };\n },\n\n /**\n * Remove a Git remote (matches `jj git remote remove`)\n *\n * @param {Record<string, any>} args - Remote arguments\n * @returns {Promise<Object>} Removal result\n */\n async remove(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing remote name', {\n suggestion: 'Provide remote name: { name: \"origin\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n await git.deleteRemote({\n fs,\n dir,\n remote: args.name,\n });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote remove ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { removed: args.name };\n },\n\n /**\n * Rename a Git remote (matches `jj git remote rename`)\n *\n * @param {Record<string, any>} args - Remote arguments\n * @returns {Promise<Object>} Rename result\n */\n async rename(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n if (!args || !args.oldName || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing oldName or newName', {\n suggestion: 'Provide both names: { oldName: \"origin\", newName: \"upstream\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n\n // Get current URL\n const remotes = await git.listRemotes({ fs, dir });\n const remote = remotes.find((r) => r.remote === args.oldName);\n if (!remote) {\n throw new JJError('NOT_FOUND', `Remote ${args.oldName} not found`);\n }\n\n // Remove old and add new\n await git.deleteRemote({ fs, dir, remote: args.oldName });\n await git.addRemote({ fs, dir, remote: args.newName, url: remote.url });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote rename ${args.oldName} ${args.newName}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { oldName: args.oldName, newName: args.newName, url: remote.url };\n },\n\n /**\n * Set URL for a Git remote (matches `jj git remote set-url`)\n *\n * @param {Record<string, any>} args - Remote arguments\n * @returns {Promise<Object>} Updated remote info\n */\n async setUrl(args) {\n if (!gitBackend) {\n throw new JJError('BACKEND_NOT_AVAILABLE', 'Git backend not configured', {\n suggestion: 'Provide git instance: createJJ({ fs, dir, git, http })',\n });\n }\n\n if (!args || !args.name || !args.url) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or url', {\n suggestion: 'Provide both: { name: \"origin\", url: \"https://...\" }',\n });\n }\n\n const git = (await import('isomorphic-git')).default;\n\n // Check if remote exists\n const remotes = await git.listRemotes({ fs, dir });\n const remote = remotes.find((r) => r.remote === args.name);\n if (!remote) {\n throw new JJError('NOT_FOUND', `Remote ${args.name} not found`);\n }\n\n // Remove and re-add with new URL\n await git.deleteRemote({ fs, dir, remote: args.name });\n await git.addRemote({ fs, dir, remote: args.name, url: args.url });\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `git remote set-url ${args.name} ${args.url}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, url: args.url };\n },\n },\n\n /**\n * Get Git repository root directory (matches `jj git root`)\n *\n * @returns {Promise<Object>} Repository root information\n */\n async root() {\n // Return the directory containing .git\n const gitDir = path.join(dir, '.git');\n\n try {\n await fs.promises.access(gitDir);\n return { root: dir, gitDir };\n } catch (error) {\n throw new JJError('NOT_GIT_REPO', `Not a Git repository: ${dir}`, {\n suggestion: 'Initialize with jj.git.init() first',\n });\n }\n },\n },\n\n // ========================================\n // v0.3 FEATURES: First-Class Conflicts\n // ========================================\n\n /**\n * Merge changes from another change, detecting conflicts\n *\n * @param {Record<string, any>} args - Merge arguments\n * @returns {Promise<Object>} Merge result with conflicts\n */\n async merge(args) {\n if (!args || !args.source) {\n throw new JJError('INVALID_ARGUMENT', 'Missing source change argument', {\n suggestion: 'Provide a source change ID to merge',\n });\n }\n\n // Snapshot conflicts state before merge (for undo)\n await conflicts.load();\n const conflictsSnapshot = {\n conflicts: Object.fromEntries(conflicts.conflicts),\n fileConflicts: Object.fromEntries(conflicts.fileConflicts),\n };\n\n const currentChangeId = workingCopy.getCurrentChangeId();\n const _currentChange = await graph.getChange(currentChangeId);\n const sourceChange = await graph.getChange(args.source);\n\n if (!sourceChange) {\n throw new JJError('NOT_FOUND', `Source change ${args.source} not found`);\n }\n\n // Find common ancestor\n const ancestors = graph.getAncestors(currentChangeId);\n const sourceAncestors = graph.getAncestors(args.source);\n\n // Simple merge base detection (first common ancestor)\n let baseChangeId = null;\n for (const ancestor of ancestors) {\n if (sourceAncestors.includes(ancestor)) {\n baseChangeId = ancestor;\n break;\n }\n }\n\n if (!baseChangeId) {\n throw new JJError('MERGE_ERROR', 'No common ancestor found for merge');\n }\n\n // Get file contents for three-way merge\n const baseFiles = new Map();\n const leftFiles = new Map();\n const rightFiles = new Map();\n\n // Load base files from snapshot\n const baseChange = await graph.getChange(baseChangeId);\n if (baseChange && baseChange.fileSnapshot) {\n for (const [filePath, content] of Object.entries(baseChange.fileSnapshot)) {\n baseFiles.set(filePath, content);\n }\n }\n\n // Load current (left) files from working copy\n const wcFiles = await workingCopy.listFiles();\n for (const file of wcFiles) {\n try {\n const content = await fs.promises.readFile(path.join(dir, file), 'utf-8');\n leftFiles.set(file, content);\n } catch (error) {\n // File might be deleted or binary - throw error for explicit handling\n throw new JJError(\n 'MERGE_FILE_READ_FAILED',\n `Could not read file ${file} for merge: ${error.message}`,\n { file, originalError: error.message, suggestion: 'File may be binary or deleted' }\n );\n }\n }\n\n // Load source (right) files from snapshot\n if (sourceChange && sourceChange.fileSnapshot) {\n for (const [filePath, content] of Object.entries(sourceChange.fileSnapshot)) {\n rightFiles.set(filePath, content);\n }\n }\n\n // Detect conflicts (v0.5: pass custom drivers and working copy dir)\n const detectedConflicts = await conflicts.detectConflicts({\n baseFiles,\n leftFiles,\n rightFiles,\n drivers: args.drivers || {}, // v0.5: custom merge drivers\n workingCopyDir: /** @type {any} */ (args.dryRun ? null : dir), // v0.5: skip file writes in dry-run\n baseChange: baseChangeId, // v0.5: metadata for drivers\n leftChange: currentChangeId,\n rightChange: args.source,\n });\n\n // v0.5: Dry-run mode - return preview without applying changes\n if (args.dryRun) {\n return {\n merged: false,\n dryRun: true,\n conflicts: detectedConflicts,\n base: baseChangeId,\n left: currentChangeId,\n right: args.source,\n };\n }\n\n // Store detected conflicts\n for (const conflict of detectedConflicts) {\n await conflicts.addConflict(conflict);\n }\n\n // Record operation with conflicts snapshot\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `merge ${args.source}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [currentChangeId, args.source],\n workingCopy: currentChangeId,\n },\n conflictsSnapshot, // Store conflicts state before merge for undo\n });\n\n return {\n merged: true,\n conflicts: detectedConflicts,\n base: baseChangeId,\n left: currentChangeId,\n right: args.source,\n };\n },\n\n /**\n * Conflicts API\n */\n conflicts: {\n /**\n * List active (unresolved) conflicts\n *\n * @param {Record<string, any>} opts - List options\n */\n async list(opts = {}) {\n await conflicts.load();\n // By default, only show unresolved conflicts\n const resolved = opts.includeResolved ? undefined : false;\n return conflicts.listConflicts({ resolved });\n },\n\n /**\n * Resolve a conflict (v0.5 enhanced)\n *\n * @param {Record<string, any>} args - Resolution arguments\n */\n async resolve(args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n\n // Get the conflict\n const conflict = conflicts.getConflict(args.conflictId);\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${args.conflictId} not found`);\n }\n\n let resolvedContent;\n\n // v0.5: Support different resolution methods\n if (args.resolution) {\n // Manual resolution provided\n resolvedContent = args.resolution;\n } else if (args.driver) {\n // Use merge driver\n const driver = mergeDrivers.get(args.driver);\n if (!driver) {\n throw new JJError('DRIVER_NOT_FOUND', `Driver ${args.driver} not found`);\n }\n\n const driverResult = await mergeDrivers.executeDriver(\n driver,\n /** @type {any} */ ({\n path: conflict.path,\n base: conflict.sides.base,\n ours: conflict.sides.left,\n theirs: conflict.sides.right,\n }),\n mergeDrivers.isBinaryFile(conflict.path, conflict.sides.left)\n );\n\n if (driverResult.hasConflict) {\n throw new JJError('DRIVER_FAILED', `Driver could not resolve conflict`);\n }\n\n resolvedContent = driverResult.content;\n } else if (args.strategy) {\n // Use resolution strategy\n resolvedContent = _resolveWithStrategy(conflict, args.strategy);\n } else {\n throw new JJError('INVALID_ARGUMENT', 'Must provide resolution, driver, or strategy');\n }\n\n // Write resolved content to file\n await fs.promises.writeFile(path.join(dir, conflict.path), resolvedContent, 'utf-8');\n\n // Mark conflict as resolved\n await conflicts.resolveConflict(args.conflictId, 'manual');\n await conflicts.save();\n\n return { resolved: true };\n },\n\n /**\n * Resolve all conflicts (v0.5)\n *\n * @param {Record<string, any>} args - Resolution arguments\n */\n async resolveAll(args) {\n if (!args || !args.strategy) {\n throw new JJError('INVALID_ARGUMENT', 'Missing strategy');\n }\n\n await conflicts.load();\n const allConflicts = conflicts.listConflicts({ resolved: false });\n\n // Filter conflicts if requested\n let toResolve = allConflicts;\n if (args.filter && args.filter.path) {\n const pattern = args.filter.path;\n toResolve = allConflicts.filter((c) => {\n // Simple pattern matching - exact match or glob\n if (pattern.includes('*')) {\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n return regex.test(c.path);\n }\n return c.path === pattern;\n });\n }\n\n // Resolve each conflict\n let resolvedCount = 0;\n for (const conflict of toResolve) {\n try {\n const resolvedContent = _resolveWithStrategy(conflict, args.strategy);\n\n // Write resolved content\n await fs.promises.writeFile(path.join(dir, conflict.path), resolvedContent, 'utf-8');\n\n // Mark as resolved\n await conflicts.resolveConflict(conflict.conflictId, args.strategy);\n resolvedCount++;\n } catch (error) {\n console.warn(`Failed to resolve ${conflict.path}: ${error.message}`);\n }\n }\n\n await conflicts.save();\n\n return { resolved: resolvedCount, total: toResolve.length };\n },\n\n /**\n * Get conflict markers for a conflict (v0.5)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<string>} Conflict markers in standard format\n */\n async markers(args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n const conflict = conflicts.getConflict(args.conflictId);\n\n if (!conflict) {\n throw new JJError('CONFLICT_NOT_FOUND', `Conflict ${args.conflictId} not found`);\n }\n\n // Generate standard conflict markers\n const ours = conflict.sides.left || '';\n const theirs = conflict.sides.right || '';\n\n return `<<<<<<< ours\\n${ours}=======\\n${theirs}>>>>>>> theirs`;\n },\n\n /**\n * Mark conflict as resolved\n */\n async markResolved(/** @type {Record<string, any>} */ args) {\n if (!args || !args.conflictId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing conflictId');\n }\n\n await conflicts.load();\n await conflicts.resolveConflict(args.conflictId, 'manual');\n await conflicts.save();\n\n return { resolved: true };\n },\n },\n\n /**\n * Interactive conflict resolution (stub - not supported)\n *\n * This is a stub method that throws an error explaining why interactive\n * conflict resolution is not available in JavaScript/browser environments.\n *\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async resolve(/** @type {Record<string, any>} */ args = {}) {\n // Check for external merge tool usage\n if (args.tool) {\n throw new JJError('UNSUPPORTED_OPERATION', 'External merge tools not supported', {\n feature: 'resolve --tool',\n reason: 'External merge tools require system integration not available in library API',\n alternative: 'Use jj.conflicts.resolve() with programmatic resolution',\n suggestion: 'For conflict resolution, use the programmatic API or resolve files manually',\n });\n }\n\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Interactive conflict resolution (jj resolve) is not supported in JavaScript environments',\n {\n suggestion: [\n 'Use the programmatic conflict API instead:',\n ' - jj.conflicts.list() to see conflicts',\n ' - jj.conflicts.get({ conflictId }) to inspect a conflict',\n ' - jj.conflicts.markers({ conflictId }) to get conflict markers',\n ' - jj.conflicts.resolve({ conflictId, resolution }) to resolve',\n ' - jj.conflicts.resolveMany({ strategy, paths }) for bulk resolution',\n '',\n 'Interactive conflict resolution requires a terminal and editor,',\n 'which are not available in JavaScript/browser contexts.',\n ].join('\\n'),\n }\n );\n },\n\n /**\n * File operations namespace - Matches JJ CLI file commands\n */\n file: {\n /**\n * Show file content (matches `jj file show`)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<string|Uint8Array>} File contents\n */\n async show(args) {\n return await jj.read(args);\n },\n\n /**\n * List files (matches `jj file list`)\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Array<string>>} Array of file paths\n */\n async list(args = {}) {\n return await jj.listFiles(args);\n },\n\n /**\n * Search file contents (matches `jj file search`, jj v0.37).\n *\n * Searches the tracked files of a change (defaults to the working copy)\n * for lines matching a pattern. Following jj v0.41, the pattern is treated\n * as a regular expression by default; pass `{ kind: 'substring' }` for a\n * literal search.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Array<{path: string, lineNumber: number, line: string}>>}\n */\n async search(args) {\n if (!args || !args.pattern) {\n throw new JJError('INVALID_ARGUMENT', 'Missing pattern argument', {\n suggestion: 'Provide a search pattern: { pattern: \"TODO\" }',\n });\n }\n\n // v1.6: when searching the working copy, snapshot the disk first so\n // out-of-band files are searchable.\n if (!args.changeId && !args.change) {\n await autoSnapshotWorkingCopy();\n }\n\n await graph.load();\n const changeId = args.changeId || args.change || workingCopy.getCurrentChangeId();\n const change = await graph.getChange(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n const kind = args.kind || 'regex';\n let matcher;\n if (kind === 'substring') {\n matcher = (/** @type {any} */ line) => line.includes(args.pattern);\n } else {\n let regex;\n try {\n regex = new RegExp(args.pattern);\n } catch (error) {\n throw new JJError('INVALID_PATTERN', `Invalid regex pattern: ${error.message}`, {\n pattern: args.pattern,\n });\n }\n matcher = (/** @type {any} */ line) => regex.test(line);\n }\n\n const snapshot = change.fileSnapshot || {};\n /** @type {any[]} */\n const results = [];\n for (const [filePath, content] of Object.entries(snapshot)) {\n if (args.path && filePath !== args.path) continue;\n if (typeof content !== 'string') continue; // skip binary\n const lines = content.split('\\n');\n lines.forEach((line, index) => {\n if (matcher(line)) {\n results.push({ path: filePath, lineNumber: index + 1, line });\n }\n });\n }\n return results;\n },\n\n /**\n * Write file content (organized file operation)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Write result with file info\n */\n async write(args) {\n return await jj.write(args);\n },\n\n /**\n * Move/rename file (organized file operation)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Move result\n */\n async move(args) {\n return await jj.move(args);\n },\n\n /**\n * Remove file (organized file operation)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Remove result with file info\n */\n async remove(args) {\n return await jj.remove(args);\n },\n\n /**\n * Show which revision modified each line (matches `jj file annotate` / git blame)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Array<any>>} Array of line annotations with changeId, author, timestamp, and content\n */\n async annotate(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a file path to annotate',\n });\n }\n\n await graph.load();\n\n // Get the starting change (default to working copy)\n const startChangeId = args.changeId || workingCopy.getCurrentChangeId();\n const startChange = await graph.getChange(startChangeId);\n if (!startChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${startChangeId} not found`);\n }\n\n // Read current file content\n const content = await jj.read({ path: args.path, changeId: startChangeId });\n const lines = typeof content === 'string' ? content.split('\\n') : [];\n\n // For each line, find which change last modified it\n const annotations = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Traverse history to find the change that introduced this line\n let currentChangeId = startChangeId;\n let foundChange = startChange;\n\n while (currentChangeId) {\n const change = await graph.getChange(currentChangeId);\n if (!change) break;\n\n // Check if this change modified the file\n if (change.fileSnapshot && change.fileSnapshot[args.path]) {\n foundChange = change;\n break;\n }\n\n // Move to parent (simplified - takes first parent)\n currentChangeId =\n change.parents && change.parents.length > 0 ? change.parents[0] : null;\n }\n\n annotations.push({\n lineNumber: i + 1,\n changeId: foundChange.changeId,\n author: foundChange.author,\n timestamp: foundChange.timestamp,\n content: line,\n });\n }\n\n return annotations;\n },\n\n /**\n * Change file permissions (matches `jj file chmod`)\n * Note: Only works in Node.js, not in browsers\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} chmod result\n */\n async chmod(args) {\n if (!args || !args.path) {\n throw new JJError('INVALID_ARGUMENT', 'Missing path argument', {\n suggestion: 'Provide a file path to chmod',\n });\n }\n\n if (args.mode === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing mode argument', {\n suggestion: 'Provide a mode: { path: \"file.sh\", mode: 0o755 }',\n });\n }\n\n // Check if we're in a browser environment\n if (typeof process === 'undefined' || !fs.promises.chmod) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'chmod is not supported in browser environments',\n {\n suggestion: 'chmod only works in Node.js',\n }\n );\n }\n\n const fullPath = path.join(dir, args.path);\n\n // Convert string mode to number if needed\n const mode = typeof args.mode === 'string' ? parseInt(args.mode, 8) : args.mode;\n\n await fs.promises.chmod(fullPath, mode);\n\n // Get updated file stats\n const stats = await fs.promises.stat(fullPath);\n\n return {\n path: args.path,\n mode: stats.mode,\n modeOctal: (stats.mode & parseInt('777', 8)).toString(8),\n };\n },\n\n /**\n * Track files (stub - not supported)\n *\n * This is a stub method that throws an error explaining why explicit\n * file tracking is not needed in JavaScript environments.\n *\n * @param {Record<string, any>} _args - Arguments\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async track(_args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Explicit file tracking (jj file track) is not needed in JavaScript environments',\n {\n suggestion: [\n 'Files are automatically tracked when you write them:',\n ' - jj.file.write({ path, data }) - Automatically tracks the file',\n ' - jj.write({ path, data }) - Same as above (convenience method)',\n '',\n 'The file tracking system in JJ CLI is designed for manual filesystem',\n 'edits (using editors, command-line tools, etc.). In isomorphic-jj,',\n 'all file modifications go through the API, so tracking is automatic.',\n '',\n 'To add a file to the repository, simply write it:',\n ' await jj.write({ path: \"myfile.txt\", data: \"content\" });',\n ].join('\\n'),\n }\n );\n },\n\n /**\n * Untrack files (stub - not supported)\n *\n * This is a stub method that throws an error explaining why explicit\n * file untracking is not needed in JavaScript environments.\n *\n * @param {Record<string, any>} _args - Arguments\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async untrack(_args) {\n throw new JJError(\n 'UNSUPPORTED_OPERATION',\n 'Explicit file untracking (jj file untrack) is not needed in JavaScript environments',\n {\n suggestion: [\n 'To remove a file from the repository, use:',\n ' - jj.file.remove({ path }) - Removes and untracks the file',\n ' - jj.remove({ path }) - Same as above (convenience method)',\n '',\n 'The file tracking system in JJ CLI is designed for manual filesystem',\n 'edits (using editors, command-line tools, etc.). In isomorphic-jj,',\n 'all file modifications go through the API, so untracking is automatic',\n 'when you remove a file.',\n '',\n 'To remove a file:',\n ' await jj.remove({ path: \"myfile.txt\" });',\n ].join('\\n'),\n }\n );\n },\n },\n\n /**\n * Workspace API - Multiple working copies\n */\n workspace: {\n /**\n * Add a new workspace\n *\n * @param {Record<string, any>} args - Workspace arguments\n */\n async add(args) {\n await workspaces.load();\n\n // If no changeId specified, default to current working copy change\n if (!args.changeId) {\n const currentChangeId = workingCopy.getCurrentChangeId();\n args = { ...args, changeId: currentChangeId };\n }\n\n const workspace = /** @type {any} */ (await workspaces.add(/** @type {any} */ (args)));\n\n // If a change was specified, check it out in the new workspace\n if (args.changeId) {\n await graph.load();\n const change = await graph.getChange(args.changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${args.changeId} not found`);\n }\n\n // Restore files from change snapshot to the new workspace\n if (change.fileSnapshot) {\n for (const [filePath, content] of Object.entries(change.fileSnapshot)) {\n try {\n const fullPath = path.join(args.path, filePath);\n\n // Ensure directory exists\n const pathParts = filePath.split('/');\n if (pathParts.length > 1) {\n const dirPath = pathParts.slice(0, -1).join('/');\n const fullDirPath = path.join(args.path, dirPath);\n await fs.promises.mkdir(fullDirPath, { recursive: true });\n }\n\n // Write file content\n await fs.promises.writeFile(fullPath, content, 'utf8');\n } catch (error) {\n throw new JJError(\n 'WORKSPACE_FILE_RESTORE_FAILED',\n `Failed to restore file ${filePath} to workspace: ${error.message}`,\n { filePath, workspacePath: args.path, originalError: error.message }\n );\n }\n }\n }\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `add workspace at ${args.path}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return workspace;\n },\n\n /**\n * Remove a workspace\n *\n * @param {Record<string, any>} args - Remove arguments\n */\n async remove(args) {\n if (!args || !args.id) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace ID');\n }\n\n await workspaces.load();\n await workspaces.remove(args.id, args.force);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `remove workspace ${args.id}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { removed: true };\n },\n\n /**\n * Forget a workspace without removing files (matches `jj workspace forget`)\n *\n * @param {Record<string, any>} args - Forget arguments\n */\n async forget(args) {\n if (!args || !args.id) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace ID');\n }\n\n await workspaces.load();\n await workspaces.forget(args.id);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `forget workspace ${args.id}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { forgotten: true };\n },\n\n /**\n * List all workspaces\n */\n async list() {\n await workspaces.load();\n return /** @type {any[]} */ (workspaces.list());\n },\n\n /**\n * Get a specific workspace\n *\n * @param {string} id - Workspace ID\n */\n async get(id) {\n await workspaces.load();\n const workspace = /** @type {any} */ (workspaces.get(id));\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${id} not found`);\n }\n return workspace;\n },\n\n /**\n * Rename a workspace (matches `jj workspace rename`)\n *\n * @param {Record<string, any>} args - Rename arguments\n * @returns {Promise<Object>} Updated workspace\n */\n async rename(args) {\n if (!args || !args.workspace || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing workspace or newName');\n }\n\n await workspaces.load();\n const workspace = /** @type {any} */ (workspaces.get(args.workspace));\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${args.workspace} not found`);\n }\n\n workspace.name = args.newName;\n await workspaces.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `rename workspace ${args.workspace} to ${args.newName}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return workspace;\n },\n\n /**\n * Get workspace root directory (matches `jj workspace root`)\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<string>} Root directory path\n */\n async root(args = {}) {\n // If no workspace specified, return current repository root\n if (!args.workspace) {\n return dir;\n }\n\n await workspaces.load();\n\n // Try to get by ID first, then by name\n let workspace = /** @type {any} */ (workspaces.get(args.workspace));\n if (!workspace) {\n // Search by name\n const allWorkspaces = /** @type {any[]} */ (workspaces.list());\n workspace = allWorkspaces.find((ws) => ws.name === args.workspace);\n }\n\n if (!workspace) {\n throw new JJError('WORKSPACE_NOT_FOUND', `Workspace ${args.workspace} not found`);\n }\n\n return workspace.path;\n },\n\n /**\n * Update stale workspaces (matches `jj workspace update-stale`)\n *\n * @param {Record<string, any>} [args={}] - Arguments\n * @returns {Promise<Object>} Update result\n */\n async updateStale(args = {}) {\n await workspaces.load();\n await graph.load();\n\n const allWorkspaces = /** @type {any[]} */ (workspaces.list());\n const staleWorkspaces = [];\n\n for (const ws of allWorkspaces) {\n // Skip workspaces without a changeId - they're fresh/uninitialized, not stale\n if (!ws.changeId) {\n continue;\n }\n\n // Check if workspace's change still exists and is not abandoned\n const change = await graph.getChange(ws.changeId);\n if (!change || change.abandoned) {\n staleWorkspaces.push(ws);\n }\n }\n\n // If specific workspace requested, only update that one\n const toUpdate = args.workspace\n ? staleWorkspaces.filter((ws) => ws.id === args.workspace || ws.name === args.workspace)\n : staleWorkspaces;\n\n if (args.workspace && toUpdate.length === 0) {\n // Look up the workspace to get its name for a better error message\n let workspace = /** @type {any} */ (workspaces.get(args.workspace));\n if (!workspace) {\n const allWorkspaces = /** @type {any[]} */ (workspaces.list());\n workspace = allWorkspaces.find((ws) => ws.name === args.workspace);\n }\n const workspaceName = workspace ? workspace.name : args.workspace;\n throw new JJError('WORKSPACE_NOT_STALE', `Workspace ${workspaceName} is not stale`);\n }\n\n // Update each stale workspace to a valid change (use current working copy)\n const currentChangeId = workingCopy.getCurrentChangeId();\n for (const ws of toUpdate) {\n ws.changeId = currentChangeId;\n }\n\n if (toUpdate.length > 0) {\n await workspaces.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `update ${toUpdate.length} stale workspace(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: currentChangeId,\n },\n });\n }\n\n return {\n updated: toUpdate.length,\n workspaces: toUpdate.map((ws) => ({ id: ws.id, name: ws.name })),\n };\n },\n },\n\n /**\n * Background operations API\n */\n background: {\n /**\n * Start background operations\n */\n async start() {\n if (!jj.backgroundOps) {\n jj.backgroundOps = new BackgroundOps(jj, fs, dir);\n }\n await jj.backgroundOps.start();\n return { started: true };\n },\n\n /**\n * Stop background operations\n */\n async stop() {\n if (!jj.backgroundOps) {\n return { stopped: false };\n }\n await jj.backgroundOps.stop();\n return { stopped: true };\n },\n\n /**\n * Queue a background operation\n *\n * @param {Function} operation - Async operation\n * @param {Record<string, any>} [opts] - Options\n */\n async queue(operation, opts) {\n if (!jj.backgroundOps) {\n throw new JJError('BACKGROUND_OPS_NOT_STARTED', 'Background operations not started', {\n suggestion: 'Call jj.background.start() first',\n });\n }\n return await jj.backgroundOps.queue(operation, opts);\n },\n\n /**\n * List background operations\n *\n * @param {Record<string, any>} [opts] - Filter options\n */\n listOperations(opts) {\n if (!jj.backgroundOps) {\n return [];\n }\n return jj.backgroundOps.listOperations(opts);\n },\n\n /**\n * Enable auto-snapshot on file changes\n *\n * @param {Record<string, any>} [opts] - Options\n */\n async enableAutoSnapshot(opts) {\n if (!jj.backgroundOps) {\n await this.start();\n }\n return await jj.backgroundOps.enableAutoSnapshot(opts);\n },\n\n /**\n * Watch a path for changes\n *\n * @param {string} path - Path to watch\n * @param {Function} callback - Callback(event, filename)\n */\n async watch(path, callback) {\n if (!jj.backgroundOps) {\n await this.start();\n }\n return await jj.backgroundOps.watch(path, callback);\n },\n\n /**\n * Unwatch a path\n *\n * @param {string} watcherId - Watcher ID\n */\n async unwatch(watcherId) {\n if (!jj.backgroundOps) {\n return;\n }\n await jj.backgroundOps.unwatch(watcherId);\n },\n },\n\n /**\n * Bookmark operations (branch management)\n */\n bookmark: {\n /**\n * List all bookmarks\n *\n * @returns {Promise<Array<any>>} Array of bookmarks with name and changeId\n */\n async list() {\n await bookmarks.load();\n return bookmarks.list();\n },\n\n /**\n * Set/create a bookmark (matches `jj bookmark set`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Bookmark info\n */\n async set(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n } else if (args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n }\n }\n\n if (!args || !args.name || !args.changeId) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or changeId', {\n args,\n suggestion:\n 'Provide both: { name: \"main\", changeId: \"abc123...\" } (or use target/change/revision instead of changeId)',\n });\n }\n\n await bookmarks.load();\n await bookmarks.set(args.name, args.changeId);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark set ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: args.changeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, changeId: args.changeId };\n },\n\n /**\n * Create a new bookmark (matches `jj bookmark create`)\n *\n * Unlike `set()`, this will fail if the bookmark already exists.\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Bookmark info\n */\n async create(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.changeId) {\n args = { ...args, changeId: args.target };\n } else if (args.change && !args.changeId) {\n args = { ...args, changeId: args.change };\n } else if (args.revision && !args.changeId) {\n args = { ...args, changeId: args.revision };\n }\n }\n\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name argument', {\n suggestion:\n 'Provide: { name: \"main\", changeId: \"abc123...\" } or { name: \"main\" } for working copy',\n });\n }\n\n // Default to working copy if no changeId provided\n let changeId = args.changeId;\n if (!changeId) {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n }\n\n await bookmarks.load();\n\n // Check if bookmark already exists\n const existingBookmark = await bookmarks.get(args.name);\n if (existingBookmark) {\n throw new JJError('BOOKMARK_EXISTS', `Bookmark ${args.name} already exists`, {\n suggestion:\n 'Use bookmark.set() to update an existing bookmark, or bookmark.move() to move it',\n });\n }\n\n await bookmarks.set(args.name, changeId);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark create ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: changeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, changeId };\n },\n\n /**\n * Move a bookmark to a different change (matches `jj bookmark move`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Move result\n */\n async move(args) {\n // Normalize: accept common parameter aliases\n if (args) {\n if (args.target && !args.to) {\n args = { ...args, to: args.target };\n } else if (args.changeId && !args.to) {\n args = { ...args, to: args.changeId };\n } else if (args.change && !args.to) {\n args = { ...args, to: args.change };\n } else if (args.revision && !args.to) {\n args = { ...args, to: args.revision };\n }\n }\n\n if (!args || !args.name || !args.to) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name or to', {\n args,\n suggestion:\n 'Provide both: { name: \"main\", to: \"abc123...\" } (or use target/changeId/change/revision instead of to)',\n });\n }\n\n await bookmarks.load();\n const bookmarkChangeId = await bookmarks.get(args.name);\n if (!bookmarkChangeId) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.name} not found`);\n }\n\n await bookmarks.move(args.name, args.to);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark move ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: args.to },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, from: bookmarkChangeId, to: args.to };\n },\n\n /**\n * Advance a bookmark to a descendant change (matches `jj bookmark advance`,\n * jj v0.39). Unlike move(), advance() only moves the bookmark *forward*\n * along the graph — the target must be a descendant of the bookmark's\n * current position (defaults to the working copy).\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} { name, from, to }\n */\n async advance(args) {\n if (args) {\n const alias = args.to || args.target || args.changeId || args.change || args.revision;\n if (alias) args = { ...args, to: alias };\n }\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide the bookmark name: { name: \"main\", to: \"abc123...\" }',\n });\n }\n\n await bookmarks.load();\n await graph.load();\n\n const from = await bookmarks.get(args.name);\n if (!from) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.name} not found`);\n }\n\n const to = args.to || workingCopy.getCurrentChangeId();\n\n // The target must be a descendant of (or equal to) the current position.\n const descendants = new Set(await revset.getDescendants(from));\n if (to !== from && !descendants.has(to)) {\n throw new JJError(\n 'BOOKMARK_NOT_ADVANCEABLE',\n `Cannot advance bookmark ${args.name}: ${to.slice(0, 8)} is not a descendant of ${from.slice(0, 8)}`,\n { suggestion: 'Use bookmark.move() to move a bookmark backward or sideways' }\n );\n }\n\n await bookmarks.move(args.name, to);\n\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark advance ${args.name}`,\n parents: [],\n view: {\n bookmarks: { [args.name]: to },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, from, to };\n },\n\n /**\n * Delete a bookmark (matches `jj bookmark delete`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Deletion result\n */\n async delete(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name', {\n suggestion: 'Provide bookmark name: { name: \"feature\" }',\n });\n }\n\n await bookmarks.load();\n const bookmark = await bookmarks.get(args.name);\n if (!bookmark) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.name} not found`);\n }\n\n await bookmarks.delete(args.name);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark delete ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { deleted: args.name };\n },\n\n /**\n * Rename a bookmark (matches `jj bookmark rename`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Rename result\n */\n async rename(args) {\n if (!args || !args.oldName || !args.newName) {\n throw new JJError('INVALID_ARGUMENT', 'Missing oldName or newName', {\n suggestion: 'Provide both: { oldName: \"feature\", newName: \"feature-v2\" }',\n });\n }\n\n await bookmarks.load();\n const bookmarkChangeId = await bookmarks.get(args.oldName);\n if (!bookmarkChangeId) {\n throw new JJError('NOT_FOUND', `Bookmark ${args.oldName} not found`);\n }\n\n // Create new bookmark with same changeId, delete old\n await bookmarks.set(args.newName, bookmarkChangeId);\n await bookmarks.delete(args.oldName);\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark rename ${args.oldName} to ${args.newName}`,\n parents: [],\n view: {\n bookmarks: { [args.newName]: bookmarkChangeId },\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { oldName: args.oldName, newName: args.newName, changeId: bookmarkChangeId };\n },\n\n /**\n * Track a remote bookmark (matches `jj bookmark track`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Track result\n */\n async track(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"main\", remote: \"origin\" }',\n });\n }\n\n const remote = args.remote || 'origin';\n const remoteBookmarkName = `${remote}/${args.name}`;\n\n // Store tracking info in bookmarks metadata\n await bookmarks.load();\n /** @type {Record<string, any>} */\n const tracking = bookmarks.tracking || {};\n tracking[args.name] = { remote, remoteName: args.name };\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark track ${args.name} from ${remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: { [remoteBookmarkName]: true },\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, remote, tracking: true };\n },\n\n /**\n * Untrack a remote bookmark (matches `jj bookmark untrack`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Untrack result\n */\n async untrack(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"main\" }',\n });\n }\n\n // Remove tracking info\n await bookmarks.load();\n /** @type {Record<string, any>} */\n const tracking = bookmarks.tracking || {};\n const wasTracking = tracking[args.name];\n delete tracking[args.name];\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark untrack ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, tracking: false, wasTracking: !!wasTracking };\n },\n\n /**\n * Forget a remote bookmark (matches `jj bookmark forget`)\n *\n * @param {Record<string, any>} args - Bookmark arguments\n * @returns {Promise<Object>} Forget result\n */\n async forget(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing bookmark name', {\n suggestion: 'Provide bookmark name: { name: \"feature\", remote: \"origin\" }',\n });\n }\n\n const remote = args.remote || 'origin';\n\n // Untrack and remove local reference\n await bookmarks.load();\n /** @type {Record<string, any>} */\n const tracking = bookmarks.tracking || {};\n delete tracking[args.name];\n bookmarks.tracking = tracking;\n await bookmarks.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `bookmark forget ${args.name} from ${remote}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { name: args.name, remote, forgotten: true };\n },\n },\n\n /**\n * Branch operations (alias for bookmark.*)\n *\n * JJ CLI historically used \"branch\" terminology before standardizing on \"bookmark\".\n * This namespace provides full compatibility with both naming conventions.\n *\n * All branch.* methods are aliases that call the corresponding bookmark.* methods.\n */\n get branch() {\n // Return bookmark namespace as branch alias\n return jj.bookmark;\n },\n\n /**\n * Tag operations (immutable references)\n */\n tag: {\n /**\n * Create a new tag\n *\n * Tags are immutable references that cannot be moved once created.\n * Unlike bookmarks, tags are permanent markers typically used for releases.\n *\n * @param {Record<string, any>} args - Tag arguments\n * @returns {Promise<{name: string, changeId: string}>} Created tag\n * @throws {JJError} If tag already exists or name is invalid\n */\n async create(args) {\n if (!args || args.name === undefined || args.name === null) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name argument', {\n suggestion:\n 'Provide: { name: \"v1.0.0\", changeId: \"abc123...\" } or { name: \"v1.0.0\" } for working copy',\n });\n }\n\n // Default to working copy if no changeId provided\n let changeId = args.changeId;\n if (!changeId) {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n }\n\n // TagStore.create() will validate the name format\n const result = await tags.create(args.name, changeId);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `tag create ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return result;\n },\n\n /**\n * Create or update (move) a tag (matches `jj tag set`, jj v0.35).\n *\n * Unlike create(), set() is an upsert: it will point an existing tag at a\n * new change instead of erroring.\n *\n * @param {Record<string, any>} args - Tag arguments\n * @returns {Promise<{name: string, changeId: string, updated: boolean}>}\n */\n async set(args) {\n if (!args || args.name === undefined || args.name === null) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name argument', {\n suggestion: 'Provide: { name: \"v1.0.0\", changeId: \"abc123...\" }',\n });\n }\n\n let changeId = args.changeId || args.change || args.revision;\n if (!changeId) {\n await workingCopy.load();\n changeId = workingCopy.getCurrentChangeId();\n }\n\n await tags.load();\n const existed = await tags.exists(args.name);\n if (existed) {\n await tags.delete(args.name);\n }\n const result = await tags.create(args.name, changeId);\n\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `tag set ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { ...result, updated: existed };\n },\n\n /**\n * List all tags\n *\n * @param {Record<string, any>} [args] - Optional filter arguments\n * @returns {Promise<Array<{name: string, changeId: string}>>} List of tags\n */\n async list(args) {\n const pattern = args?.pattern;\n return await tags.list(pattern);\n },\n\n /**\n * Delete a tag\n *\n * @param {Record<string, any>} args - Tag arguments\n * @returns {Promise<{deleted: string}>} Deletion result\n * @throws {JJError} If tag doesn't exist\n */\n async delete(args) {\n if (!args || !args.name) {\n throw new JJError('INVALID_ARGUMENT', 'Missing name', {\n suggestion: 'Provide tag name: { name: \"v1.0.0\" }',\n });\n }\n\n await tags.delete(args.name);\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `tag delete ${args.name}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { deleted: args.name };\n },\n },\n\n /**\n * Remote operations (high-level, namespaced alternatives to git.fetch/push)\n */\n remote: {\n /**\n * Fetch from remote (alias to jj.git.fetch for convenience)\n *\n * @param {Record<string, any>} args - Fetch arguments\n * @returns {Promise<Object>} Fetch result\n */\n async fetch(args) {\n return await jj.git.fetch(args);\n },\n\n /**\n * Push to remote (alias to jj.git.push for convenience)\n *\n * @param {Record<string, any>} args - Push arguments\n * @returns {Promise<Object>} Push result\n */\n async push(args) {\n return await jj.git.push(args);\n },\n\n /**\n * Add a remote (alias to jj.git.remote.add for convenience)\n *\n * @param {Record<string, any>} args - Remote arguments\n * @returns {Promise<Object>} Added remote info\n */\n async add(args) {\n return await jj.git.remote.add(args);\n },\n },\n\n /**\n * Configuration management\n */\n config: {\n /**\n * Get a configuration value (matches `jj config get`)\n *\n * @param {Record<string, any>} args - Config arguments\n * @returns {Promise<any>} Config value\n */\n async get(args) {\n // Support both 'key' and 'name' parameters\n const key = args?.key || args?.name;\n\n if (!args || !key) {\n throw new JJError('INVALID_ARGUMENT', 'Missing config key/name', {\n suggestion: 'Provide config key: { key: \"user.name\" }',\n });\n }\n\n // Ensure config is loaded at least once\n if (!userConfig.config) {\n await userConfig.load();\n }\n\n // Use userConfig.get() to preserve programmatic config\n return userConfig.get(key);\n },\n\n /**\n * Set a configuration value (matches `jj config set`)\n *\n * @param {Record<string, any>} args - Config arguments\n * @returns {Promise<Object>} Set result\n */\n async set(args) {\n // Support both 'key' and 'name' parameters\n const key = args?.key || args?.name;\n\n if (!args || !key || args.value === undefined) {\n throw new JJError('INVALID_ARGUMENT', 'Missing key/name or value', {\n suggestion: 'Provide both: { key: \"user.name\", value: \"John Doe\" }',\n });\n }\n\n await userConfig.load();\n\n // Handle nested keys (e.g., 'user.name')\n const parts = key.split('.');\n let obj = userConfig.config;\n\n for (let i = 0; i < parts.length - 1; i++) {\n if (!obj[parts[i]] || typeof obj[parts[i]] !== 'object') {\n obj[parts[i]] = {};\n }\n obj = obj[parts[i]];\n }\n\n obj[parts[parts.length - 1]] = args.value;\n await userConfig.save();\n\n return { key, name: key, value: args.value };\n },\n\n /**\n * List all configuration values (matches `jj config list`)\n *\n * @returns {Promise<Object>} All configuration values\n */\n async list() {\n await userConfig.load();\n return userConfig.config;\n },\n\n /**\n * Reload configuration (including workspace-specific config)\n * v0.35.0: Loads workspace-config.json if present\n * v0.36.0: Accepts optional config object for programmatic configuration\n *\n * @param {Record<string, any>} [opts] - Optional config options\n * @returns {Promise<void>}\n *\n * @example\n * // Load from files only\n * await repo.config.load();\n *\n * @example\n * // Programmatic workspace config (no file I/O needed)\n * await repo.config.load({\n * workspace: { user: { email: 'test@example.com' } }\n * });\n *\n * @example\n * // Override global config programmatically\n * await repo.config.load({\n * override: { test: { value: 'override' } }\n * });\n */\n async load(opts) {\n await userConfig.load(opts);\n },\n },\n\n /**\n * Template helper functions (v0.36.0)\n *\n * Utilities for displaying and formatting JJ data\n */\n template: {\n /**\n * Get files modified in a change\n *\n * @param {string} changeId - Change ID\n * @returns {Promise<string[]>} Array of file paths\n */\n async files(changeId) {\n await graph.load();\n const change = await graph.getChange(changeId);\n if (!change || !change.fileSnapshot) {\n return [];\n }\n return Object.keys(change.fileSnapshot);\n },\n\n /**\n * Join array elements with a separator\n *\n * @param {string[]} array - Array of strings\n * @param {string} separator - Separator string\n * @returns {string} Joined string\n */\n join(array, separator) {\n if (!Array.isArray(array)) {\n return '';\n }\n return array.join(separator);\n },\n\n /**\n * Format path for display\n *\n * @param {string} path - File path\n * @returns {string} Formatted path\n */\n format_path(path) {\n if (!path) {\n return '';\n }\n // Simple formatting: just return the path as-is for now\n // In real JJ, this might apply colors, truncation, etc.\n return path;\n },\n },\n\n /**\n * Sparse checkout management\n *\n * Controls which paths are materialized in the working copy.\n * Useful for large repositories where you only need specific files.\n */\n sparse: {\n /**\n * List current sparse patterns\n *\n * @returns {Promise<string[]>} Array of sparse patterns\n */\n async list() {\n await workingCopy.load();\n return workingCopy.getSparsePatterns();\n },\n\n /**\n * Set sparse patterns (replaces all existing patterns)\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async set(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"src/**\", \"README.md\"] }',\n });\n }\n\n await workingCopy.load();\n await workingCopy.setSparsePatterns(args.patterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse set ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: args.patterns };\n },\n\n /**\n * Add patterns to sparse checkout\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async add(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"tests/**\"] }',\n });\n }\n\n await workingCopy.load();\n const currentPatterns = workingCopy.getSparsePatterns();\n\n // Add new patterns, avoiding duplicates\n const updatedPatterns = [...currentPatterns];\n for (const pattern of args.patterns) {\n if (!updatedPatterns.includes(pattern)) {\n updatedPatterns.push(pattern);\n }\n }\n\n await workingCopy.setSparsePatterns(updatedPatterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse add ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: updatedPatterns };\n },\n\n /**\n * Remove patterns from sparse checkout\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<{patterns: string[]}>} Result with current patterns\n */\n async remove(args) {\n if (!args || !Array.isArray(args.patterns)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing patterns array', {\n suggestion: 'Provide: { patterns: [\"tests/**\"] }',\n });\n }\n\n await workingCopy.load();\n const currentPatterns = workingCopy.getSparsePatterns();\n\n // Remove specified patterns\n const updatedPatterns = currentPatterns.filter((p) => !args.patterns.includes(p));\n\n await workingCopy.setSparsePatterns(updatedPatterns);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `sparse remove ${args.patterns.length} pattern(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: updatedPatterns };\n },\n\n /**\n * Reset to full checkout (remove all sparse patterns)\n *\n * @returns {Promise<{patterns: string[]}>} Result with empty patterns\n */\n async reset() {\n await workingCopy.load();\n await workingCopy.setSparsePatterns([]);\n await workingCopy.save();\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: 'sparse reset (full checkout)',\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return { patterns: [] };\n },\n\n /**\n * Clear all patterns (empty working copy)\n * Alias for reset()\n *\n * @returns {Promise<{patterns: string[]}>} Result with empty patterns\n */\n async clear() {\n return await this.reset();\n },\n },\n\n /**\n * Binary search to find first bad change (bisect)\n *\n * @status PARTIAL - Basic structure implemented, full bisect logic pending\n */\n bisect: {\n /**\n * Start bisect session\n *\n * @param {Record<string, any>} args - Bisect arguments\n * @returns {Promise<Object>} Bisect state\n */\n async start(args) {\n if (!args || !args.good || !args.bad) {\n throw new JJError('INVALID_ARGUMENT', 'Both good and bad change IDs required', {\n suggestion: 'Provide: { good: \"changeId1\", bad: \"changeId2\" }',\n });\n }\n\n await graph.load();\n\n // Check if bisect is already active\n const existingState = /** @type {any} */ (await storage.read('bisect/state.json'));\n if (existingState && existingState.active) {\n throw new JJError('BISECT_ALREADY_ACTIVE', 'Bisect session already in progress', {\n suggestion: 'Use bisect.reset() to end current session first',\n });\n }\n\n // Verify changes exist\n const goodChange = await graph.getChange(args.good);\n const badChange = await graph.getChange(args.bad);\n\n if (!goodChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Good change ${args.good} not found`);\n }\n if (!badChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Bad change ${args.bad} not found`);\n }\n\n // Find all changes between good and bad\n const candidates = await this._findBisectCandidates(args.good, args.bad);\n\n // Pick the middle change\n // If no candidates between good and bad, test bad itself\n const current =\n candidates.length > 0 ? candidates[Math.floor(candidates.length / 2)] : args.bad;\n\n const bisectState = {\n active: true,\n good: [args.good],\n bad: [args.bad],\n candidates,\n current,\n remaining: candidates.length > 0 ? Math.ceil(Math.log2(candidates.length + 1)) : 0,\n found: false,\n };\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Mark current change as good\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async good() {\n const bisectState = /** @type {any} */ (await storage.read('bisect/state.json'));\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Add current to good set\n if (bisectState.current && !bisectState.good.includes(bisectState.current)) {\n bisectState.good.push(bisectState.current);\n }\n\n // Update candidates and pick next\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Mark current change as bad\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async bad() {\n const bisectState = /** @type {any} */ (await storage.read('bisect/state.json'));\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Add current to bad set\n if (bisectState.current && !bisectState.bad.includes(bisectState.current)) {\n bisectState.bad.push(bisectState.current);\n }\n\n // Update candidates and pick next\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Skip current change\n *\n * @returns {Promise<Object>} Updated bisect state\n */\n async skip() {\n const bisectState = /** @type {any} */ (await storage.read('bisect/state.json'));\n\n if (!bisectState || !bisectState.active) {\n throw new JJError('BISECT_NOT_ACTIVE', 'No active bisect session');\n }\n\n // Remove current from candidates\n if (bisectState.current) {\n bisectState.candidates = bisectState.candidates.filter(\n (/** @type {any} */ c) => c !== bisectState.current\n );\n }\n\n // Pick next candidate\n await this._updateBisectState(bisectState);\n\n await storage.write('bisect/state.json', bisectState);\n\n return bisectState;\n },\n\n /**\n * Reset/end bisect session\n *\n * @returns {Promise<Object>} Final state\n */\n async reset() {\n await storage.write('bisect/state.json', { active: false });\n return { active: false };\n },\n\n /**\n * Get bisect status\n *\n * @returns {Promise<Object>} Bisect state\n */\n async status() {\n const bisectState = /** @type {any} */ (await storage.read('bisect/state.json'));\n return bisectState || { active: false };\n },\n\n /**\n * Find candidate changes between good and bad\n *\n * @private\n * @param {string} goodId - Good change ID\n * @param {string} badId - Bad change ID\n * @returns {Promise<string[]>} List of candidate change IDs\n */\n async _findBisectCandidates(goodId, badId) {\n await graph.load();\n\n // Find all ancestors of bad that are descendants of good\n const badAncestors = graph.getAncestors(badId);\n const _goodAncestors = graph.getAncestors(goodId);\n\n // Candidates are changes that are:\n // - Ancestors of bad (or bad itself)\n // - Descendants of good (or good itself)\n // - Not good or bad themselves\n const candidates = [];\n\n for (const changeId of badAncestors) {\n if (changeId === goodId) {\n continue; // Don't include good itself\n }\n if (changeId === badId) {\n continue; // Don't include bad itself\n }\n\n // Check if this change is a descendant of good\n const ancestors = graph.getAncestors(changeId);\n if (ancestors.includes(goodId)) {\n candidates.push(changeId);\n }\n }\n\n return candidates;\n },\n\n /**\n * Update bisect state after marking good/bad/skip\n *\n * @private\n * @param {any} bisectState - Current bisect state\n */\n async _updateBisectState(bisectState) {\n await graph.load();\n\n // Filter candidates: remove any that are now known to be good or bad\n const newCandidates = [];\n\n for (const candidateId of bisectState.candidates) {\n // Skip if already marked as good or bad\n if (bisectState.good.includes(candidateId) || bisectState.bad.includes(candidateId)) {\n continue;\n }\n\n // Check if candidate is an ancestor of any good change (then it's good)\n let isGood = false;\n for (const goodId of bisectState.good) {\n const goodAncestors = graph.getAncestors(goodId);\n if (goodAncestors.includes(candidateId)) {\n isGood = true;\n break;\n }\n }\n\n if (isGood) {\n continue;\n }\n\n // Check if any bad change is an ancestor of candidate (then candidate is bad)\n let isBad = false;\n for (const badId of bisectState.bad) {\n const candidateAncestors = graph.getAncestors(candidateId);\n if (candidateAncestors.includes(badId)) {\n isBad = true;\n break;\n }\n }\n\n if (isBad) {\n continue;\n }\n\n newCandidates.push(candidateId);\n }\n\n bisectState.candidates = newCandidates;\n bisectState.remaining =\n newCandidates.length > 0 ? Math.ceil(Math.log2(newCandidates.length + 1)) : 0;\n\n // Pick the middle candidate\n if (newCandidates.length > 0) {\n bisectState.current = newCandidates[Math.floor(newCandidates.length / 2)];\n } else {\n // No more candidates - we found the first bad change\n bisectState.found = true;\n bisectState.current = null;\n\n // The first bad change is the one in the bad set that has no bad ancestors\n for (const badId of bisectState.bad) {\n const badAncestors = graph.getAncestors(badId);\n const hasChildBad = bisectState.bad.some((/** @type {any} */ otherId) => {\n if (otherId === badId) return false;\n return badAncestors.includes(otherId);\n });\n\n if (!hasChildBad) {\n bisectState.firstBad = badId;\n break;\n }\n }\n }\n },\n },\n\n /**\n * Show file differences between revisions (matches `jj diff`)\n *\n * @param {Record<string, any>} [args={}] - Diff arguments\n * @returns {Promise<Object>} Diff result with changed files\n */\n async diff(args = {}) {\n // v1.6: snapshot the working copy first so diffs against @ reflect\n // out-of-band edits (only when diffing the working copy, i.e. no explicit `to`).\n if (!args.to) {\n await autoSnapshotWorkingCopy();\n }\n\n await graph.load();\n await workingCopy.load();\n\n const toChangeId = args.to || workingCopy.getCurrentChangeId();\n const toChange = await graph.getChange(toChangeId);\n if (!toChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Target change ${toChangeId} not found`);\n }\n\n // Default 'from' to parent of 'to'\n let fromChangeId = args.from;\n if (!fromChangeId) {\n fromChangeId = toChange.parents && toChange.parents.length > 0 ? toChange.parents[0] : null;\n }\n\n const fromChange = fromChangeId ? await graph.getChange(fromChangeId) : null;\n\n const fromFiles = fromChange?.fileSnapshot || {};\n const toFiles = toChange.fileSnapshot || {};\n\n // Find all paths that changed\n const allPaths = new Set([...Object.keys(fromFiles), ...Object.keys(toFiles)]);\n const diffs = [];\n\n for (const filePath of allPaths) {\n // Filter by paths if specified\n if (args.paths && args.paths.length > 0) {\n if (!args.paths.includes(filePath)) {\n continue;\n }\n }\n\n const fromContent = fromFiles[filePath] || '';\n const toContent = toFiles[filePath] || '';\n\n if (fromContent !== toContent) {\n diffs.push({\n path: filePath,\n status: !fromContent ? 'added' : !toContent ? 'deleted' : 'modified',\n fromContent,\n toContent,\n });\n }\n }\n\n return {\n from: fromChangeId,\n to: toChangeId,\n files: diffs,\n };\n },\n\n /**\n * Move working copy to next child revision (matches `jj next`)\n *\n * @param {Record<string, any>} [args={}] - Next arguments\n * @returns {Promise<Object>} Updated working copy info\n */\n async next(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const offset = args.offset || 1;\n const currentChangeId = workingCopy.getCurrentChangeId();\n const currentChange = await graph.getChange(currentChangeId);\n\n if (!currentChange) {\n throw new JJError('CHANGE_NOT_FOUND', 'Current working copy change not found');\n }\n\n // Find children\n await graph.load();\n const allChanges = await graph.getAllChanges();\n const children = allChanges.filter(\n (/** @type {any} */ c) => c.parents && c.parents.includes(currentChangeId)\n );\n\n if (children.length === 0) {\n throw new JJError('NO_CHILDREN', 'No child revisions found');\n }\n\n // Take first child for simplicity (could be enhanced to handle multiple children)\n let targetChange = children[0];\n\n // Move forward 'offset' times\n for (let i = 1; i < offset; i++) {\n const nextChildren = allChanges.filter(\n (/** @type {any} */ c) => c.parents && c.parents.includes(targetChange.changeId)\n );\n if (nextChildren.length === 0) {\n throw new JJError('INSUFFICIENT_CHILDREN', `Cannot move forward ${offset} generations`);\n }\n targetChange = nextChildren[0];\n }\n\n // Update working copy\n await jj.edit({ changeId: targetChange.changeId });\n\n return {\n from: currentChangeId,\n to: targetChange.changeId,\n changeId: targetChange.changeId, // Add for convenience\n offset,\n };\n },\n\n /**\n * Move working copy to previous parent revision (matches `jj prev`)\n *\n * @param {Record<string, any>} [args={}] - Prev arguments\n * @returns {Promise<Object>} Updated working copy info\n */\n async prev(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const offset = args.offset || 1;\n let currentChangeId = workingCopy.getCurrentChangeId();\n\n // Move backward 'offset' times\n for (let i = 0; i < offset; i++) {\n const currentChange = await graph.getChange(currentChangeId);\n if (!currentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${currentChangeId} not found`);\n }\n\n if (!currentChange.parents || currentChange.parents.length === 0) {\n throw new JJError('NO_PARENTS', 'No parent revisions found');\n }\n\n // Take first parent for simplicity\n currentChangeId = currentChange.parents[0];\n }\n\n // Update working copy\n await jj.edit({ changeId: currentChangeId });\n\n return {\n from: workingCopy.getCurrentChangeId(),\n to: currentChangeId,\n changeId: currentChangeId, // Add for convenience\n offset,\n };\n },\n\n /**\n * Create copies of changes (matches `jj duplicate`)\n *\n * @param {Record<string, any>} [args={}] - Duplicate arguments\n * @returns {Promise<Object>} Duplication result with new change IDs\n */\n async duplicate(args = {}) {\n await graph.load();\n await workingCopy.load();\n await userConfig.load();\n\n // Support both changeId (singular) and changes (plural)\n const changesToDup =\n args.changes || (args.changeId ? [args.changeId] : [workingCopy.getCurrentChangeId()]);\n const duplicatedChanges = [];\n\n for (const changeId of changesToDup) {\n const originalChange = await graph.getChange(changeId);\n if (!originalChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n\n // Create new change as a copy\n const newChangeId = generateChangeId();\n const _user = /** @type {any} */ (userConfig.getUser());\n const newChange = {\n ...originalChange,\n changeId: newChangeId,\n commitId: null, // New change doesn't have a commit yet\n description: originalChange.description + ' (duplicate)',\n timestamp: new Date().toISOString(),\n };\n\n await graph.addChange(newChange);\n duplicatedChanges.push({\n original: changeId,\n duplicate: newChangeId,\n });\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `duplicate ${changesToDup.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: duplicatedChanges.map((d) => d.duplicate),\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n // Return both formats for compatibility\n return {\n duplicated: duplicatedChanges,\n changeIds: duplicatedChanges.map((d) => d.duplicate),\n };\n },\n\n /**\n * Restore paths from another revision (matches `jj restore`)\n *\n * @param {Record<string, any>} args - Restore arguments\n * @returns {Promise<Object>} Restore result\n */\n async restore(args = {}) {\n await graph.load();\n await workingCopy.load();\n\n const toChangeId = args.to || workingCopy.getCurrentChangeId();\n const toChange = await graph.getChange(toChangeId);\n if (!toChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Target change ${toChangeId} not found`);\n }\n\n // Default 'from' to parent\n let fromChangeId = args.from;\n if (!fromChangeId) {\n fromChangeId = toChange.parents && toChange.parents.length > 0 ? toChange.parents[0] : null;\n }\n\n const fromChange = fromChangeId ? await graph.getChange(fromChangeId) : null;\n if (!fromChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Source change ${fromChangeId} not found`);\n }\n\n const restoredPaths = [];\n const filesToRestore = args.paths || Object.keys(fromChange.fileSnapshot || {});\n\n for (const filePath of filesToRestore) {\n const content = fromChange.fileSnapshot[filePath];\n if (content !== undefined) {\n await jj.write({ path: filePath, data: content });\n restoredPaths.push(filePath);\n }\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `restore ${restoredPaths.length} path(s) from ${fromChangeId}`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: [],\n workingCopy: toChangeId,\n },\n });\n\n return {\n from: fromChangeId,\n to: toChangeId,\n restoredPaths,\n };\n },\n\n /**\n * Make multiple changes siblings (parallelize them)\n *\n * This operation takes multiple changes and gives them the same parent,\n * making them siblings in the change graph instead of ancestors/descendants.\n *\n * @param {Record<string, any>} args - Arguments\n * @returns {Promise<Object>} Operation result with parallelized changes\n *\n * @example\n * // Make three changes siblings\n * await jj.parallelize({\n * changes: ['abc123', 'def456', 'ghi789']\n * });\n *\n * // Make changes siblings with specific parent\n * await jj.parallelize({\n * changes: ['abc123', 'def456'],\n * parent: 'main-change-id'\n * });\n */\n async parallelize(args) {\n if (!args || !args.changes || !Array.isArray(args.changes)) {\n throw new JJError('INVALID_ARGUMENT', 'Missing or invalid changes array', {\n suggestion: 'Provide an array of change IDs: { changes: [changeId1, changeId2, ...] }',\n });\n }\n\n if (args.changes.length < 2) {\n throw new JJError('INVALID_ARGUMENT', 'At least 2 changes are required to parallelize', {\n suggestion: 'Provide at least 2 change IDs in the changes array',\n });\n }\n\n await graph.load();\n await workingCopy.load();\n\n // Validate all changes exist\n const changes = [];\n for (const changeId of args.changes) {\n const change = await graph.getChange(changeId);\n if (!change) {\n throw new JJError('CHANGE_NOT_FOUND', `Change ${changeId} not found`);\n }\n changes.push(change);\n }\n\n // Determine the parent to use\n let parentId;\n if (args.parent) {\n // Use specified parent\n const parentChange = await graph.getChange(args.parent);\n if (!parentChange) {\n throw new JJError('CHANGE_NOT_FOUND', `Parent change ${args.parent} not found`);\n }\n parentId = args.parent;\n } else {\n // Find common ancestor of all changes\n if (args.changes.length === 2) {\n const commonAncestors = await revset.findCommonAncestor(args.changes[0], args.changes[1]);\n if (commonAncestors.length === 0) {\n throw new JJError('NO_COMMON_ANCESTOR', 'Changes have no common ancestor', {\n suggestion: 'Specify a parent explicitly using the parent parameter',\n });\n }\n parentId = commonAncestors[0];\n } else {\n // For more than 2 changes, find common ancestor iteratively\n let commonAncestor = args.changes[0];\n for (let i = 1; i < args.changes.length; i++) {\n const ancestors = await revset.findCommonAncestor(commonAncestor, args.changes[i]);\n if (ancestors.length === 0) {\n throw new JJError('NO_COMMON_ANCESTOR', 'Changes have no common ancestor', {\n suggestion: 'Specify a parent explicitly using the parent parameter',\n });\n }\n commonAncestor = ancestors[0];\n }\n parentId = commonAncestor;\n }\n }\n\n // Update all changes to have the same parent\n const parallelizedChanges = [];\n for (const change of changes) {\n // Don't modify if already a direct child of the target parent\n if (change.parents.length === 1 && change.parents[0] === parentId) {\n parallelizedChanges.push({\n changeId: change.changeId,\n alreadyParallel: true,\n });\n continue;\n }\n\n const oldParents = [...change.parents]; // Store old parents before modifying\n change.parents = [parentId];\n await graph.updateChange(change);\n parallelizedChanges.push({\n changeId: change.changeId,\n oldParents,\n newParent: parentId,\n });\n }\n\n // Record operation\n await oplog.recordOperation({\n timestamp: new Date().toISOString(),\n user: await getUserOplogInfo(),\n description: `parallelize ${args.changes.length} change(s)`,\n parents: [],\n view: {\n bookmarks: {},\n remoteBookmarks: {},\n heads: args.changes,\n workingCopy: workingCopy.getCurrentChangeId(),\n },\n });\n\n return {\n parallelized: parallelizedChanges,\n parent: parentId,\n };\n },\n });\n\n // ============================================================================\n // UNSUPPORTED FEATURE STUBS\n // These features cannot/should not be implemented in a library API\n // ============================================================================\n\n /**\n * diffedit - Touch up changes with diff editor (STUB)\n *\n * @status UNSUPPORTED - Requires interactive diff editor\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.diffedit = async function (/** @type {any} */ _args) {\n throw new JJError('UNSUPPORTED_OPERATION', 'diffedit requires interactive diff editor', {\n feature: 'diffedit',\n reason: 'Interactive tools not supported in library API',\n alternative: 'Use jj.diff() to view changes, then jj.edit() to modify the change',\n suggestion:\n 'For programmatic editing, use jj.write() to update files and jj.describe() to update the description',\n });\n };\n\n /**\n * fix - Update files with formatting fixes (STUB)\n *\n * @status UNSUPPORTED - Requires external formatters\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n jj.fix = async function (/** @type {any} */ _args) {\n throw new JJError('UNSUPPORTED_OPERATION', 'Automatic formatting requires external tools', {\n feature: 'fix',\n reason: 'External formatters (prettier, eslint, etc.) must be integrated separately',\n alternative: 'Run formatters separately, then use jj.write() to update files',\n suggestion: 'Consider using pre-commit hooks to run formatters automatically',\n });\n };\n\n // NOTE: jj.sign() / jj.unsign() are implemented as real (metadata-based)\n // methods in the main API object above (v1.5). The old UNSUPPORTED stubs were\n // removed — a pure-JS library can't verify keys, but it can record and expose\n // signature metadata for the signed() revset and Git-layer integration.\n\n /**\n * util - CLI utility commands (STUB namespace)\n *\n * @status UNSUPPORTED - CLI-specific utilities\n */\n jj.util = {\n /**\n * completion - Generate shell completions (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async completion() {\n throw new JJError('UNSUPPORTED_OPERATION', 'Shell completion generation is CLI-specific', {\n feature: 'util.completion',\n reason: 'Completions are for command-line shells, not library APIs',\n alternative: 'Not applicable - use JJ CLI for shell completions',\n });\n },\n\n /**\n * gc - Garbage collection (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async gc() {\n throw new JJError('UNSUPPORTED_OPERATION', 'Garbage collection is a CLI utility', {\n feature: 'util.gc',\n reason: 'Storage management handled automatically by isomorphic-jj',\n alternative: 'Repository cleanup happens automatically',\n });\n },\n\n /**\n * exec - Execute command with JJ environment (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async exec(/** @type {any} */ _args) {\n throw new JJError('UNSUPPORTED_OPERATION', 'Command execution is a CLI utility', {\n feature: 'util.exec',\n reason: 'Shell command execution not appropriate for library API',\n alternative: 'Use Node.js child_process module directly if needed',\n });\n },\n\n /**\n * configSchema - Print config schema (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async configSchema() {\n throw new JJError('UNSUPPORTED_OPERATION', 'Config schema output is a CLI utility', {\n feature: 'util.configSchema',\n reason: 'Schema introspection not needed for programmatic usage',\n alternative: 'See TypeScript types or API documentation for config structure',\n });\n },\n };\n\n /**\n * gerrit - Gerrit Code Review integration (STUB namespace)\n *\n * @status UNSUPPORTED - Platform-specific integration\n */\n jj.gerrit = {\n /**\n * upload - Upload changes to Gerrit (STUB)\n * @throws {JJError} Always throws UNSUPPORTED_OPERATION\n */\n async upload(/** @type {any} */ _args) {\n throw new JJError('UNSUPPORTED_OPERATION', 'Gerrit integration not supported', {\n feature: 'gerrit.upload',\n reason: 'Gerrit-specific features not implemented',\n alternative: 'Use jj.git.push() with appropriate Gerrit remote configuration',\n suggestion: 'Configure Gerrit remote and use standard Git push with refs/for/ syntax',\n });\n },\n };\n\n // Add EventTarget capabilities to jj instance\n const eventTarget = new EventTarget();\n jj.addEventListener = eventTarget.addEventListener.bind(eventTarget);\n jj.removeEventListener = eventTarget.removeEventListener.bind(eventTarget);\n jj.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget);\n\n // Set jj instance on merge drivers for event emission\n mergeDrivers.jj = jj;\n\n return jj;\n}\n","/**\n * Built-in merge drivers for common file types\n *\n * These drivers extend JJ's merge algorithm with domain-specific logic.\n */\n\n/**\n * Deep merge for JSON objects\n * Recursively merges objects, with theirs taking precedence on conflicts\n *\n * @param {any} base - Base object\n * @param {any} ours - Our changes\n * @param {any} theirs - Their changes\n * @returns {Record<string, any>|null} Merged object\n */\nfunction deepMergeJSON(base, ours, theirs) {\n // If all are identical, return any\n if (JSON.stringify(ours) === JSON.stringify(theirs)) {\n return ours;\n }\n\n // If ours is same as base, take theirs\n if (JSON.stringify(ours) === JSON.stringify(base)) {\n return theirs;\n }\n\n // If theirs is same as base, take ours\n if (JSON.stringify(theirs) === JSON.stringify(base)) {\n return ours;\n }\n\n // Both sides changed - need smart merge\n if (\n typeof ours !== 'object' ||\n typeof theirs !== 'object' ||\n Array.isArray(ours) ||\n Array.isArray(theirs)\n ) {\n // Primitives or arrays - conflict\n return null;\n }\n\n // Merge objects\n const result = { ...base };\n\n // Get all keys\n const allKeys = new Set([\n ...Object.keys(base || {}),\n ...Object.keys(ours || {}),\n ...Object.keys(theirs || {}),\n ]);\n\n for (const key of allKeys) {\n const baseVal = base?.[key];\n const oursVal = ours?.[key];\n const theirsVal = theirs?.[key];\n\n if (JSON.stringify(oursVal) === JSON.stringify(theirsVal)) {\n // Both sides agree\n result[key] = oursVal;\n } else if (JSON.stringify(oursVal) === JSON.stringify(baseVal)) {\n // We didn't change it, take theirs\n result[key] = theirsVal;\n } else if (JSON.stringify(theirsVal) === JSON.stringify(baseVal)) {\n // They didn't change it, take ours\n result[key] = oursVal;\n } else {\n // Both changed differently\n if (\n typeof oursVal === 'object' &&\n typeof theirsVal === 'object' &&\n !Array.isArray(oursVal) &&\n !Array.isArray(theirsVal)\n ) {\n // Recurse for nested objects\n const merged = deepMergeJSON(baseVal || {}, oursVal, theirsVal);\n if (merged === null) {\n return null; // Conflict in nested object\n }\n result[key] = merged;\n } else {\n // Can't merge - conflict\n return null;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Generic JSON merge driver\n *\n * Attempts to merge JSON files intelligently by merging objects.\n * Falls back to conflict markers if merge isn't possible.\n *\n * @param {{ path?: string, content: { base?: string, ours?: string, theirs?: string } }} args\n */\nexport async function jsonDriver({ content }) {\n const { base, ours, theirs } = content;\n\n try {\n const baseObj = base ? JSON.parse(base) : {};\n const oursObj = ours ? JSON.parse(ours) : {};\n const theirsObj = theirs ? JSON.parse(theirs) : {};\n\n const merged = deepMergeJSON(baseObj, oursObj, theirsObj);\n\n if (merged !== null) {\n // Successful merge\n return {\n content: JSON.stringify(merged, null, 2) + '\\n',\n hasConflict: false,\n };\n } else {\n // Conflict - return with markers\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [\n {\n type: 'json-merge-conflict',\n message: 'Both sides modified the same field with different values',\n },\n ],\n };\n }\n } catch (error) {\n // JSON parsing failed - fall back to text conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [\n {\n type: 'json-parse-error',\n message: `JSON parsing failed: ${error.message}`,\n },\n ],\n };\n }\n}\n\n/**\n * package.json merge driver\n *\n * Smart merging for Node.js package.json files:\n * - Union merge for dependencies/devDependencies\n * - Take theirs for version (semver conflicts are hard)\n * - Merge other fields intelligently\n *\n * @param {{ path?: string, content: { base?: string, ours?: string, theirs?: string } }} args\n */\nexport async function packageJsonDriver({ content }) {\n const { base, ours, theirs } = content;\n\n try {\n const baseObj = base ? JSON.parse(base) : {};\n const oursObj = ours ? JSON.parse(ours) : {};\n const theirsObj = theirs ? JSON.parse(theirs) : {};\n\n // Start with base\n const merged = { ...baseObj };\n\n // Merge top-level fields\n for (const key of Object.keys({ ...oursObj, ...theirsObj })) {\n if (\n key === 'dependencies' ||\n key === 'devDependencies' ||\n key === 'peerDependencies' ||\n key === 'optionalDependencies'\n ) {\n // Union merge dependencies\n merged[key] = {\n ...baseObj[key],\n ...oursObj[key],\n ...theirsObj[key], // theirs wins on conflicts\n };\n } else if (key === 'version') {\n // Version conflicts are tricky - take theirs\n merged[key] = theirsObj[key] || oursObj[key] || baseObj[key];\n } else if (key === 'scripts') {\n // Merge scripts\n merged[key] = {\n ...baseObj[key],\n ...oursObj[key],\n ...theirsObj[key], // theirs wins\n };\n } else {\n // Other fields - use standard logic\n const oursVal = oursObj[key];\n const theirsVal = theirsObj[key];\n const baseVal = baseObj[key];\n\n if (JSON.stringify(oursVal) === JSON.stringify(theirsVal)) {\n merged[key] = oursVal;\n } else if (JSON.stringify(oursVal) === JSON.stringify(baseVal)) {\n merged[key] = theirsVal;\n } else if (JSON.stringify(theirsVal) === JSON.stringify(baseVal)) {\n merged[key] = oursVal;\n } else {\n // Conflict - take theirs\n merged[key] = theirsVal;\n }\n }\n }\n\n return {\n content: JSON.stringify(merged, null, 2) + '\\n',\n hasConflict: false,\n metadata: {\n driver: 'package.json',\n mergedDependencies: Object.keys(merged.dependencies || {}).length,\n mergedDevDependencies: Object.keys(merged.devDependencies || {}).length,\n },\n };\n } catch (error) {\n // Parsing failed - fall back to conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [\n {\n type: 'parse-error',\n message: `package.json parsing failed: ${error.message}`,\n },\n ],\n };\n }\n}\n\n/**\n * YAML merge driver (basic)\n *\n * Note: This is a simple implementation. For production use, consider\n * using a proper YAML library like 'js-yaml'.\n *\n * @param {{ path?: string, content: { base?: string, ours?: string, theirs?: string } }} args\n */\nexport async function yamlDriver({ content }) {\n const { base, ours, theirs } = content;\n\n // Simple YAML merge - just do text-based for now\n // A full implementation would parse YAML and do object merging\n\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n return { content: ours, hasConflict: false };\n }\n\n // Conflict\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [\n {\n type: 'yaml-conflict',\n message: 'YAML files modified on both sides',\n },\n ],\n };\n}\n\n/**\n * Markdown merge driver (section-based)\n *\n * Attempts to merge markdown files by sections (headers).\n * Falls back to conflict markers for complex cases.\n *\n * @param {{ path?: string, content: { base?: string, ours?: string, theirs?: string } }} args\n */\nexport async function markdownDriver({ content }) {\n const { base, ours, theirs } = content;\n\n // Simple markdown merge - just text-based for now\n // A full implementation would parse sections and merge by header\n\n if (ours === theirs) {\n return { content: ours, hasConflict: false };\n }\n\n if (ours === base) {\n return { content: theirs, hasConflict: false };\n }\n\n if (theirs === base) {\n return { content: ours, hasConflict: false };\n }\n\n // For now, fall back to conflict markers\n // TODO: Implement section-based merging\n const conflictContent = `<<<<<<< ours\\n${ours || ''}\\n=======\\n${theirs || ''}\\n>>>>>>> theirs`;\n return {\n content: conflictContent,\n hasConflict: true,\n conflicts: [\n {\n type: 'markdown-conflict',\n message: 'Markdown files modified on both sides',\n },\n ],\n };\n}\n\n/**\n * Get all built-in drivers as a map\n *\n * @returns {Object} Map of pattern -> driver function\n */\nexport function getBuiltInDrivers() {\n return {\n 'package.json': packageJsonDriver,\n '*.json': jsonDriver,\n '*.yaml': yamlDriver,\n '*.yml': yamlDriver,\n '*.md': markdownDriver,\n '*.markdown': markdownDriver,\n };\n}\n"],"names":["matchesPattern","__filename","fileURLToPath","__dirname","inDist","protoDir","crypto"],"mappings":"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"}