@weave-tools/weave-it 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +868 -0
  3. package/dist/cli.d.ts +5 -0
  4. package/dist/cli.js +4538 -0
  5. package/dist/cli.js.map +1 -0
  6. package/package.json +65 -0
  7. package/templates/opencode/commands/weave-architect.md +7 -0
  8. package/templates/opencode/commands/weave-capture.md +7 -0
  9. package/templates/opencode/commands/weave-clarify.md +7 -0
  10. package/templates/opencode/commands/weave-execute.md +7 -0
  11. package/templates/opencode/commands/weave-explore.md +7 -0
  12. package/templates/opencode/commands/weave-issues.md +7 -0
  13. package/templates/opencode/commands/weave-knowledge.md +7 -0
  14. package/templates/opencode/commands/weave-new.md +7 -0
  15. package/templates/opencode/commands/weave-next.md +7 -0
  16. package/templates/opencode/commands/weave-prd.md +7 -0
  17. package/templates/opencode/commands/weave-prepare.md +7 -0
  18. package/templates/skills/weave-architect/SKILL.md +291 -0
  19. package/templates/skills/weave-architect/api-contract-template.md +21 -0
  20. package/templates/skills/weave-architect/frontend-backend-template.md +21 -0
  21. package/templates/skills/weave-architect/index-template.md +24 -0
  22. package/templates/skills/weave-architect/schema-template.md +21 -0
  23. package/templates/skills/weave-capture/SKILL.md +398 -0
  24. package/templates/skills/weave-clarify/SKILL.md +513 -0
  25. package/templates/skills/weave-execute/SKILL.md +215 -0
  26. package/templates/skills/weave-explore/SKILL.md +434 -0
  27. package/templates/skills/weave-issues/SKILL.md +441 -0
  28. package/templates/skills/weave-knowledge/SKILL.md +161 -0
  29. package/templates/skills/weave-knowledge/knowledge-templates.md +63 -0
  30. package/templates/skills/weave-new/SKILL.md +76 -0
  31. package/templates/skills/weave-next/SKILL.md +216 -0
  32. package/templates/skills/weave-prd/SKILL.md +419 -0
  33. package/templates/skills/weave-prd/prd-template.md +186 -0
  34. package/templates/skills/weave-prepare/SKILL.md +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/add.ts","../src/lib/add-folder.ts","../src/lib/folders.ts","../src/lib/files.ts","../src/lib/git.ts","../src/lib/ids.ts","../src/lib/session-state.ts","../src/lib/weave-scaffold.ts","../src/lib/sync.ts","../src/lib/workspace-mode.ts","../src/lib/workspace-repos.ts","../src/commands/agent.ts","../src/lib/agent-skills.ts","../src/commands/artifact.ts","../src/lib/artifact-context.ts","../src/lib/architecture-artifact.ts","../src/lib/artifact-metadata.ts","../src/lib/changes.ts","../src/commands/change.ts","../src/lib/with-notices.ts","../src/lib/notices.ts","../src/lib/user-paths.ts","../src/lib/npm-version.ts","../src/commands/init.ts","../src/lib/init-workspace.ts","../src/commands/skills.ts","../src/commands/status.ts","../src/lib/status.ts","../src/commands/task.ts","../src/lib/task-prepare.ts","../src/lib/tasks.ts","../src/commands/workspace.ts","../src/lib/show-workspace.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { addCommand } from \"./commands/add.js\";\nimport { agentCommand } from \"./commands/agent.js\";\nimport { artifactCommand } from \"./commands/artifact.js\";\nimport { changeCommand } from \"./commands/change.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { skillCommand, skillsCommand } from \"./commands/skills.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { taskCommand } from \"./commands/task.js\";\nimport { workspaceCommand } from \"./commands/workspace.js\";\nimport { pathToFileURL } from \"node:url\";\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"weave\")\n .description(\"Repo-local LLM wiki and temporary multi-folder AI session tooling.\")\n .version(\"0.1.0\");\n\n program.addCommand(initCommand());\n program.addCommand(addCommand());\n program.addCommand(workspaceCommand());\n program.addCommand(changeCommand());\n program.addCommand(artifactCommand());\n program.addCommand(agentCommand());\n program.addCommand(skillsCommand());\n program.addCommand(skillCommand());\n program.addCommand(statusCommand());\n program.addCommand(taskCommand());\n\n return program;\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n await createProgram().parseAsync(process.argv);\n}\n","import { Command } from \"commander\";\nimport { addFolder } from \"../lib/add-folder.js\";\n\nexport function addCommand(): Command {\n return new Command(\"add\")\n .description(\"Add a folder or git URL to the current Weave context (repo session or workspace registry).\")\n .argument(\"<path>\", \"folder path or git URL to add\")\n .option(\"--id <id>\", \"folder id\")\n .option(\"--kind <kind>\", \"folder kind\", \"app\")\n .action(async (targetPath: string, options: { id?: string; kind?: string }) => {\n const result = await addFolder({\n cwd: process.cwd(),\n targetPath,\n folderId: options.id,\n folderKind: options.kind,\n });\n\n process.stdout.write(`${result.message}\\n`);\n\n if (result.status === \"no_session\") {\n process.exitCode = 1;\n }\n });\n}\n","import path from \"node:path\";\nimport { realpath, stat } from \"node:fs/promises\";\nimport { resolveFolder } from \"./folders.js\";\nimport { cloneRepo, getGitRemote } from \"./git.js\";\nimport { movePath, pathExists } from \"./files.js\";\nimport { addFolderToSession, defaultSessionPath, loadCurrentSession, saveCurrentSession } from \"./session-state.js\";\nimport { ensureWeaveScaffold } from \"./weave-scaffold.js\";\nimport { findWorkspaceMode, isWorkspaceMode } from \"./workspace-mode.js\";\nimport {\n defaultRepoId,\n findRegisteredRepoByPath,\n isGitUrl,\n isInsideWorkspace,\n readWorkspaceMetadata,\n registerRepoIntoWorkspace,\n repoNameFromUrl,\n relativeRepoPath,\n} from \"./workspace-repos.js\";\n\nexport type AddFolderOptions = {\n cwd?: string;\n targetPath: string;\n folderId?: string;\n folderKind?: string;\n now?: Date;\n sessionPath?: string;\n};\n\nexport type AddFolderStatus = \"added\" | \"already_exists\" | \"no_session\";\n\nexport type AddFolderCommandResult = {\n status: AddFolderStatus;\n message: string;\n};\n\nexport async function addFolder(options: AddFolderOptions): Promise<AddFolderCommandResult> {\n const cwd = options.cwd ?? process.cwd();\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadCurrentSession(sessionPath);\n\n if (!session) {\n return {\n status: \"no_session\",\n message: \"No current Weave session found. Run `weave init` first.\",\n };\n }\n\n const modeResult = await findWorkspaceMode(cwd);\n if (isWorkspaceMode(modeResult)) {\n return addFolderToWorkspace({\n cwd,\n workspacePath: modeResult.workspacePath,\n targetPath: options.targetPath,\n folderId: options.folderId,\n folderKind: options.folderKind ?? \"app\",\n });\n }\n\n return addFolderToRepoSession({\n cwd,\n targetPath: options.targetPath,\n folderId: options.folderId,\n folderKind: options.folderKind,\n session,\n sessionPath,\n now,\n });\n}\n\nasync function addFolderToRepoSession(input: {\n cwd: string;\n targetPath: string;\n folderId?: string;\n folderKind?: string;\n session: NonNullable<Awaited<ReturnType<typeof loadCurrentSession>>>;\n sessionPath: string;\n now: Date;\n}): Promise<AddFolderCommandResult> {\n const folder = await resolveFolder({\n cwd: input.cwd,\n targetPath: input.targetPath,\n id: input.folderId,\n kind: input.folderKind,\n });\n await ensureWeaveScaffold({ folder });\n\n const result = addFolderToSession(input.session, folder, input.now);\n await saveCurrentSession(result.session, input.sessionPath);\n\n if (!result.added) {\n return {\n status: \"already_exists\",\n message: `Folder already exists in current Weave session: ${result.id}\\n\\nPath:\\n ${folder.path}`,\n };\n }\n\n return {\n status: \"added\",\n message: `Added folder to current Weave session: ${result.id}\\n\\nPath:\\n ${folder.path}\\n\\nNext:\\n weave workspace`,\n };\n}\n\nasync function addFolderToWorkspace(input: {\n cwd: string;\n workspacePath: string;\n targetPath: string;\n folderId?: string;\n folderKind: string;\n}): Promise<AddFolderCommandResult> {\n const workspacePath = await realpath(input.workspacePath);\n const metadata = await readWorkspaceMetadata(workspacePath);\n\n if (!metadata) {\n throw new Error(`Workspace metadata is missing or invalid: ${path.join(workspacePath, \".weave\", \"workspace.yml\")}`);\n }\n\n let repoAbsolutePath: string;\n let relativePath: string;\n let remote: string | undefined;\n\n if (isGitUrl(input.targetPath)) {\n const url = input.targetPath.trim();\n const destName = repoNameFromUrl(url);\n relativePath = destName;\n repoAbsolutePath = path.join(workspacePath, destName);\n\n if (await pathExists(repoAbsolutePath)) {\n throw new Error(`Destination already exists: ${repoAbsolutePath}`);\n }\n\n const existingId = findRegisteredRepoByPath(metadata, relativePath);\n if (existingId) {\n return workspaceAlreadyRegisteredMessage(existingId, relativePath, workspacePath);\n }\n\n try {\n await cloneRepo(url, destName, workspacePath);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to clone repository: ${detail}`);\n }\n\n remote = url;\n } else {\n const candidate = path.resolve(input.cwd, input.targetPath);\n await assertDirectory(candidate);\n\n if (await isInsideWorkspace(workspacePath, candidate)) {\n repoAbsolutePath = await realpath(candidate);\n relativePath = relativeRepoPath(workspacePath, repoAbsolutePath);\n } else {\n const sourcePath = await realpath(candidate);\n const destName = path.basename(sourcePath);\n relativePath = destName;\n repoAbsolutePath = path.join(workspacePath, destName);\n\n if (await pathExists(repoAbsolutePath)) {\n throw new Error(`Destination already exists in workspace: ${repoAbsolutePath}`);\n }\n\n try {\n await movePath(sourcePath, repoAbsolutePath);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to adopt folder into workspace: ${detail}`);\n }\n }\n\n const existingId = findRegisteredRepoByPath(metadata, relativePath);\n if (existingId) {\n return workspaceAlreadyRegisteredMessage(existingId, relativePath, workspacePath);\n }\n\n remote = await getGitRemote(repoAbsolutePath);\n }\n\n const id = defaultRepoId(relativePath, input.folderId);\n await registerRepoIntoWorkspace({\n workspacePath,\n id,\n relativePath,\n kind: input.folderKind,\n remote,\n });\n\n const remoteText = remote ? `\\n\\nRemote:\\n ${remote}` : \"\";\n return {\n status: \"added\",\n message: `Registered repo in workspace: ${id}\\n\\nPath:\\n ${relativePath}${remoteText}\\n\\nWorkspace:\\n ${workspacePath}\\n\\nNext:\\n weave workspace`,\n };\n}\n\nfunction workspaceAlreadyRegisteredMessage(\n id: string,\n relativePath: string,\n workspacePath: string,\n): AddFolderCommandResult {\n return {\n status: \"already_exists\",\n message: `Repo already registered in workspace: ${id}\\n\\nPath:\\n ${relativePath}\\n\\nWorkspace:\\n ${workspacePath}`,\n };\n}\n\nasync function assertDirectory(targetPath: string): Promise<void> {\n try {\n const value = await stat(targetPath);\n if (!value.isDirectory()) {\n throw new Error(`Expected a directory: ${targetPath}`);\n }\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"Expected a directory\")) {\n throw error;\n }\n throw new Error(`Expected a directory: ${targetPath}`);\n }\n}\n","import path from \"node:path\";\nimport { realpath } from \"node:fs/promises\";\nimport { ensureDirectory } from \"./files.js\";\nimport { findGitRoot, getGitRemote } from \"./git.js\";\nimport { slugify, titleFromSlug } from \"./ids.js\";\n\nexport type ResolvedFolder = {\n id: string;\n path: string;\n name: string;\n kind: string;\n gitRemote?: string;\n};\n\nexport async function resolveFolder(input: {\n cwd: string;\n targetPath?: string;\n id?: string;\n kind?: string;\n}): Promise<ResolvedFolder> {\n const candidate = input.targetPath ? path.resolve(input.cwd, input.targetPath) : input.cwd;\n await ensureDirectory(candidate);\n\n const gitRoot = await findGitRoot(candidate);\n const folderPath = await realpath(gitRoot ?? candidate);\n const basename = path.basename(folderPath);\n const id = input.id ?? slugify(basename, \"folder\");\n const gitRemote = gitRoot ? await getGitRemote(folderPath) : undefined;\n\n return {\n id,\n path: folderPath,\n name: titleFromSlug(id) || basename,\n kind: input.kind ?? \"app\",\n gitRemote,\n };\n}\n","import { constants } from \"node:fs\";\nimport { access, mkdir, readFile, readdir, rename, stat, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nexport async function pathExists(path: string): Promise<boolean> {\n try {\n await access(path, constants.F_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function writeNewFile(path: string, contents: string): Promise<void> {\n await writeFile(path, contents, { flag: \"wx\" });\n}\n\nexport async function writeFileIfMissing(path: string, contents: string): Promise<boolean> {\n if (await pathExists(path)) {\n return false;\n }\n\n await writeNewFile(path, contents);\n return true;\n}\n\nexport async function writeFileAtomic(path: string, contents: string): Promise<void> {\n const tempPath = `${path}.${process.pid}.tmp`;\n await writeFile(tempPath, contents);\n await rename(tempPath, path);\n}\n\nexport async function ensureDir(path: string): Promise<void> {\n await mkdir(path, { recursive: true });\n}\n\nexport async function createDirExclusive(path: string): Promise<void> {\n await mkdir(path, { recursive: false });\n}\n\nexport async function ensureDirectory(path: string): Promise<void> {\n const value = await stat(path);\n\n if (!value.isDirectory()) {\n throw new Error(`Expected a directory: ${path}`);\n }\n}\n\nexport async function isDirectoryEmpty(path: string): Promise<boolean> {\n const entries = await readdir(path);\n return entries.length === 0;\n}\n\nexport async function movePath(source: string, target: string): Promise<void> {\n await rename(source, target);\n}\n\nexport async function readJsonCache<T>(path: string): Promise<T | null> {\n try {\n const contents = await readFile(path, \"utf8\");\n return JSON.parse(contents) as T;\n } catch {\n return null;\n }\n}\n\nexport async function writeJsonCache<T>(path: string, data: T): Promise<boolean> {\n try {\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(data, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(args: string[], cwd: string): Promise<string | undefined> {\n try {\n const { stdout } = await execFileAsync(\"git\", args, { cwd, env: gitEnv() });\n const value = stdout.trim();\n return value.length > 0 ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction gitEnv(): NodeJS.ProcessEnv {\n return {\n ...process.env,\n GIT_AUTHOR_NAME: process.env.GIT_AUTHOR_NAME ?? \"Weave\",\n GIT_AUTHOR_EMAIL: process.env.GIT_AUTHOR_EMAIL ?? \"weave@example.invalid\",\n GIT_COMMITTER_NAME: process.env.GIT_COMMITTER_NAME ?? \"Weave\",\n GIT_COMMITTER_EMAIL: process.env.GIT_COMMITTER_EMAIL ?? \"weave@example.invalid\",\n };\n}\n\nexport async function findGitRoot(cwd: string): Promise<string | undefined> {\n return git([\"rev-parse\", \"--show-toplevel\"], cwd);\n}\n\nexport async function currentBranch(cwd: string): Promise<string | undefined> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return undefined;\n }\n\n return git([\"branch\", \"--show-current\"], gitRoot);\n}\n\nexport async function isWorktreeDirty(cwd: string): Promise<boolean> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return false;\n }\n\n return Boolean(await git([\"status\", \"--porcelain\"], gitRoot));\n}\n\nexport async function branchExists(cwd: string, branch: string): Promise<boolean> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return false;\n }\n\n return Boolean(await git([\"rev-parse\", \"--verify\", `refs/heads/${branch}`], gitRoot));\n}\n\nexport async function checkoutBranch(cwd: string, branch: string): Promise<void> {\n const gitRoot = await findGitRoot(cwd);\n await runGitRequired([\"checkout\", branch], gitRoot ?? cwd);\n}\n\nexport async function createBranch(cwd: string, branch: string): Promise<void> {\n const gitRoot = await findGitRoot(cwd);\n await runGitRequired([\"checkout\", \"-b\", branch], gitRoot ?? cwd);\n}\n\nexport async function currentHead(cwd: string): Promise<string | undefined> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return undefined;\n }\n\n return git([\"rev-parse\", \"HEAD\"], gitRoot);\n}\n\nexport async function getGitRemote(cwd: string): Promise<string | undefined> {\n return git([\"config\", \"--get\", \"remote.origin.url\"], cwd);\n}\n\nexport async function runGitRequired(args: string[], cwd: string): Promise<void> {\n await execFileAsync(\"git\", args, { cwd, env: gitEnv() });\n}\n\nexport async function cloneRepo(url: string, destinationDir: string, cwd: string): Promise<void> {\n await runGitRequired([\"clone\", \"--\", url, destinationDir], cwd);\n}\n","export function slugify(value: string, fallback: string): string {\n const slug = value\n .trim()\n .toLowerCase()\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n return slug.length > 0 ? slug : fallback;\n}\n\nexport function titleFromSlug(value: string): string {\n return value\n .replace(/[-_]+/g, \" \")\n .split(\" \")\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n","import os from \"node:os\";\nimport path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\nimport YAML from \"yaml\";\nimport type { ArtifactName } from \"./artifact-metadata.js\";\nimport { ensureDir, pathExists, writeFileAtomic } from \"./files.js\";\nimport type { ResolvedFolder } from \"./folders.js\";\nimport { slugify, titleFromSlug } from \"./ids.js\";\n\nexport type SessionCurrentChange = {\n id: string;\n path: string;\n branch: string;\n updated_at: string;\n};\n\nexport type SessionCurrentArtifact = {\n artifact: ArtifactName;\n change_id: string;\n path: string;\n updated_at: string;\n};\n\nexport type SessionFolder = {\n path: string;\n name: string;\n kind: string;\n git_remote?: string;\n current_change?: SessionCurrentChange;\n current_artifact?: SessionCurrentArtifact;\n};\n\nexport type CurrentSession = {\n version: 1;\n updated_at: string;\n folders: Record<string, SessionFolder>;\n};\n\nexport type AddFolderResult = {\n added: boolean;\n id: string;\n session: CurrentSession;\n};\n\nexport function defaultSessionPath(): string {\n if (process.env.WEAVE_SESSION_PATH) {\n return path.resolve(process.env.WEAVE_SESSION_PATH);\n }\n\n return path.join(os.homedir(), \".cache\", \"weave\", \"current-session.yml\");\n}\n\nexport async function loadCurrentSession(sessionPath = defaultSessionPath()): Promise<CurrentSession | undefined> {\n if (!(await pathExists(sessionPath))) {\n return undefined;\n }\n\n return YAML.parse(await readFile(sessionPath, \"utf8\")) as CurrentSession;\n}\n\nexport async function saveCurrentSession(\n session: CurrentSession,\n sessionPath = defaultSessionPath(),\n): Promise<void> {\n await ensureDir(path.dirname(sessionPath));\n await writeFileAtomic(sessionPath, YAML.stringify(session));\n}\n\nexport function createCurrentSession(folder: ResolvedFolder, now: Date): CurrentSession {\n const session: CurrentSession = {\n version: 1,\n updated_at: now.toISOString(),\n folders: {},\n };\n\n addFolderToSession(session, folder, now);\n return session;\n}\n\nexport function addFolderToSession(session: CurrentSession, folder: ResolvedFolder, now: Date): AddFolderResult {\n const existingId = findFolderByPath(session, folder.path);\n\n if (existingId) {\n session.updated_at = now.toISOString();\n return { added: false, id: existingId, session };\n }\n\n const id = uniqueFolderId(session, folder.id);\n const sessionFolder: SessionFolder = {\n path: folder.path,\n name: folder.name,\n kind: folder.kind,\n };\n\n if (folder.gitRemote) {\n sessionFolder.git_remote = folder.gitRemote;\n }\n\n session.folders[id] = sessionFolder;\n session.updated_at = now.toISOString();\n\n return { added: true, id, session };\n}\n\nexport function findFolderByPath(session: CurrentSession, folderPath: string): string | undefined {\n return Object.entries(session.folders).find(([, folder]) => folder.path === folderPath)?.[0];\n}\n\nexport function ensureFolderInSession(session: CurrentSession, folderPath: string, now: Date): string {\n const existingId = findFolderByPath(session, folderPath);\n if (existingId) {\n session.updated_at = now.toISOString();\n return existingId;\n }\n\n const basename = path.basename(folderPath);\n const id = uniqueFolderId(session, slugify(basename, \"folder\"));\n session.folders[id] = {\n path: folderPath,\n name: titleFromSlug(id) || basename,\n kind: \"app\",\n };\n session.updated_at = now.toISOString();\n return id;\n}\n\nexport function setCurrentChangeForPath(\n session: CurrentSession,\n folderPath: string,\n change: Omit<SessionCurrentChange, \"updated_at\">,\n now: Date,\n): string {\n const id = ensureFolderInSession(session, folderPath, now);\n session.folders[id].current_change = {\n ...change,\n updated_at: now.toISOString(),\n };\n session.updated_at = now.toISOString();\n return id;\n}\n\nexport function setCurrentArtifactForPath(\n session: CurrentSession,\n folderPath: string,\n artifact: Omit<SessionCurrentArtifact, \"updated_at\">,\n now: Date,\n): string {\n const id = ensureFolderInSession(session, folderPath, now);\n session.folders[id].current_artifact = {\n ...artifact,\n updated_at: now.toISOString(),\n };\n session.updated_at = now.toISOString();\n return id;\n}\n\nexport function clearCurrentArtifactForPath(\n session: CurrentSession,\n folderPath: string,\n now: Date,\n): string {\n const id = ensureFolderInSession(session, folderPath, now);\n delete session.folders[id].current_artifact;\n session.updated_at = now.toISOString();\n return id;\n}\n\nexport function currentArtifactForPath(\n session: CurrentSession | undefined,\n folderPath: string,\n): SessionCurrentArtifact | undefined {\n const id = session ? findFolderByPath(session, folderPath) : undefined;\n return id ? session?.folders[id]?.current_artifact : undefined;\n}\n\nfunction uniqueFolderId(session: CurrentSession, id: string): string {\n if (!session.folders[id]) {\n return id;\n }\n\n let index = 2;\n\n while (session.folders[`${id}-${index}`]) {\n index += 1;\n }\n\n return `${id}-${index}`;\n}\n","import path from \"node:path\";\nimport YAML from \"yaml\";\nimport { ensureDir, pathExists, writeFileIfMissing } from \"./files.js\";\nimport { hashDocument } from \"./sync.js\";\n\nexport type ScaffoldResult = {\n wikiDir: string;\n metadataDir: string;\n created: string[];\n};\n\nexport async function ensureWeaveScaffold(input: { folder: { path: string } }): Promise<ScaffoldResult> {\n const wikiDir = path.join(input.folder.path, \"wiki\");\n const metadataDir = path.join(input.folder.path, \".weave\");\n const created: string[] = [];\n const knowledgeIndex = knowledgeIndexTemplate();\n const knowledgeReadme = knowledgeReadmeTemplate();\n const domainsReadme = domainsReadmeTemplate();\n const sharedReadme = sharedReadmeTemplate();\n const knowledgeDir = path.join(wikiDir, \"knowledge\");\n const changesDir = path.join(wikiDir, \"changes\");\n const changesExisted = await pathExists(changesDir);\n\n await ensureDir(knowledgeDir);\n await ensureDir(path.join(knowledgeDir, \"domains\"));\n await ensureDir(path.join(knowledgeDir, \"shared\"));\n await ensureDir(changesDir);\n await ensureDir(metadataDir);\n\n if (await writeFileIfMissing(path.join(metadataDir, \"sync.yml\"), syncTemplate(knowledgeIndex))) {\n created.push(\".weave/sync.yml\");\n }\n\n if (await writeFileIfMissing(path.join(knowledgeDir, \"index.md\"), knowledgeIndex)) {\n created.push(\"wiki/knowledge/index.md\");\n }\n if (await writeFileIfMissing(path.join(knowledgeDir, \"README.md\"), knowledgeReadme)) {\n created.push(\"wiki/knowledge/README.md\");\n }\n if (await writeFileIfMissing(path.join(knowledgeDir, \"domains\", \"README.md\"), domainsReadme)) {\n created.push(\"wiki/knowledge/domains/README.md\");\n }\n if (await writeFileIfMissing(path.join(knowledgeDir, \"shared\", \"README.md\"), sharedReadme)) {\n created.push(\"wiki/knowledge/shared/README.md\");\n }\n\n if (!changesExisted) {\n created.push(\"wiki/changes/\");\n }\n\n return { wikiDir, metadataDir, created };\n}\n\nfunction syncTemplate(knowledgeIndex: string): string {\n return YAML.stringify({\n version: 1,\n documents: {\n \"knowledge.index\": {\n path: \"wiki/knowledge/index.md\",\n hash: hashDocument(knowledgeIndex),\n status: \"synced\",\n },\n },\n });\n}\n\nfunction knowledgeIndexTemplate(): string {\n return `# Product Knowledge\n\nThis folder contains current product knowledge for this repo/folder.\n\n## Domains\n\n_Add product domains here as they become relevant._\n\nExamples:\n- Billing\n- Permissions\n- Onboarding\n- Notifications\n`;\n}\n\nfunction knowledgeReadmeTemplate(): string {\n return `# Knowledge Structure\n\nThis folder contains current-state behavioral specs. Historical change provenance belongs in \\`wiki/changes/**\\`.\n\nUse this progressive structure:\n\n\\`\\`\\`text\nwiki/knowledge/\n index.md\n README.md\n domains/\n README.md\n <domain>/\n index.md\n overview.md\n glossary.md\n source-map.md\n features/\n <feature>/\n behavior.md\n decision-tables.md\n lifecycle.md\n permissions.md\n source-map.md\n domain-wide/\n lifecycle.md\n permissions.md\n visibility.md\n notifications.md\n approvals.md\n edge-cases.md\n shared/\n README.md\n <shared-behavior>/\n behavior.md\n source-map.md\n\\`\\`\\`\n\n- \\`domains/\\` contains product or system areas users naturally name.\n- \\`features/\\` contains independently understandable behavior inside a domain.\n- \\`domain-wide/\\` contains behavior that coordinates multiple features inside one domain.\n- \\`shared/\\` contains behavior reused across multiple domains.\n\n## Guided Templates\n\n\\`behavior.md\\` is the core current-state spec:\n\n\\`\\`\\`md\n# <Feature Or Shared Behavior>\n\n## Purpose\n## Current Behavior\n## Domain Model\n## Configuration Dimensions\n## Behavioral Rules\n## Decision Tables\n## Lifecycle\n## Permissions And Visibility\n## Integrations And Side Effects\n## Edge Cases\n## Invariants\n## Source Anchors\n## Change History\n## Open Questions\n\\`\\`\\`\n\n\\`Purpose\\`, \\`Current Behavior\\`, \\`Source Anchors\\`, and \\`Change History\\` are strongly recommended. Other sections may be omitted when they do not apply.\n\n\\`decision-tables.md\\` is optional and focused on permutations:\n\n\\`\\`\\`md\n# <Feature> Decision Tables\n\n## Table: <Scenario>\n\n| Dimension | Value | Outcome |\n| --- | --- | --- |\n\n## Notes\n## Source Anchors\n\\`\\`\\`\n\n\\`source-map.md\\` connects behavior to reality:\n\n\\`\\`\\`md\n# <Domain Or Feature> Source Map\n\n## Core Product Surfaces\n## Source Anchors\n## Tests\n## Config And Flags\n## Jobs And Side Effects\n## External Integrations\n## Ownership Notes\n\\`\\`\\`\n\n\\`knowledge-delta.md\\` lives under \\`wiki/changes/<change-id>/\\` and bridges one change to current knowledge:\n\n\\`\\`\\`md\n# Knowledge Delta\n\n## Durable Behavior Changes\n## Affected Knowledge Areas\n## Knowledge Files Updated\n## No-Impact Rationale\n## Source Evidence\n## Follow-Up Knowledge Work\n\\`\\`\\`\n`;\n}\n\nfunction domainsReadmeTemplate(): string {\n return `# Domains\n\nCreate one folder per product or system domain. A domain folder may start small and grow as behavior becomes heavier.\n\nRecommended domain files:\n\n- \\`index.md\\`: entry point and links to important specs\n- \\`overview.md\\`: domain summary\n- \\`glossary.md\\`: domain terms\n- \\`source-map.md\\`: code, tests, flags, jobs, integrations, and ownership\n- \\`features/<feature>/behavior.md\\`: feature-level current behavior\n- \\`domain-wide/*.md\\`: behavior that coordinates multiple features in the domain\n`;\n}\n\nfunction sharedReadmeTemplate(): string {\n return `# Shared Behavior\n\nUse this folder for behavior reused across multiple domains, such as permissions, approvals, notifications, audit logs, privacy, retention, imports, exports, and integrations.\n\nPrefer keeping behavior inside one domain until multiple domains depend on it. When behavior becomes shared, document the shared model here and the domain-specific integration inside the domain.\n`;\n}\n","import { createHash } from \"node:crypto\";\n\nexport function hashDocument(contents: string): string {\n return `sha256:${createHash(\"sha256\").update(contents).digest(\"hex\")}`;\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { realpath } from \"node:fs/promises\";\nimport YAML from \"yaml\";\nimport { pathExists } from \"./files.js\";\nimport { defaultSessionPath, findFolderByPath, loadCurrentSession } from \"./session-state.js\";\n\nexport type WorkspaceModeKind = \"workspace\" | \"repo\";\n\nexport type FindWorkspaceModeResult = {\n mode: WorkspaceModeKind;\n workspacePath: string;\n workspaceYmlPath: string;\n};\n\nexport type ResolvedChangeContext = {\n mode: WorkspaceModeKind;\n rootPath: string;\n workspaceYmlPath: string;\n folderId?: string;\n folderName?: string;\n};\n\nexport async function findWorkspaceMode(startPath: string): Promise<FindWorkspaceModeResult | undefined> {\n let current = await realpath(startPath);\n\n for (;;) {\n const workspaceYmlPath = path.join(current, \".weave\", \"workspace.yml\");\n if (await pathExists(workspaceYmlPath)) {\n const parsed = await readWorkspaceYml(workspaceYmlPath);\n if (!parsed) {\n return undefined;\n }\n\n const mode = parsed.mode === \"workspace\" ? \"workspace\" : \"repo\";\n return {\n mode,\n workspacePath: current,\n workspaceYmlPath,\n };\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\nexport async function resolveChangeContext(\n startPath: string,\n sessionPath = defaultSessionPath(),\n): Promise<ResolvedChangeContext | undefined> {\n const workspace = await findWorkspaceMode(startPath);\n if (!workspace) {\n return undefined;\n }\n\n const session = await loadCurrentSession(sessionPath);\n const folderId = session ? findFolderByPath(session, workspace.workspacePath) : undefined;\n const folder = folderId ? session?.folders[folderId] : undefined;\n\n return {\n mode: workspace.mode,\n rootPath: workspace.workspacePath,\n workspaceYmlPath: workspace.workspaceYmlPath,\n folderId,\n folderName: folder?.name,\n };\n}\n\nasync function readWorkspaceYml(workspaceYmlPath: string): Promise<{ mode?: string } | undefined> {\n try {\n const parsed = YAML.parse(await readFile(workspaceYmlPath, \"utf8\"));\n if (!parsed || typeof parsed !== \"object\") {\n return undefined;\n }\n return parsed as { mode?: string };\n } catch {\n return undefined;\n }\n}\n\nexport function isWorkspaceMode(result: FindWorkspaceModeResult | undefined): result is FindWorkspaceModeResult & {\n mode: \"workspace\";\n} {\n return result?.mode === \"workspace\";\n}\n","import { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { realpath } from \"node:fs/promises\";\nimport YAML from \"yaml\";\nimport { pathExists } from \"./files.js\";\nimport { slugify } from \"./ids.js\";\n\nconst GIT_URL_PATTERN = /^(git@|https?:\\/\\/|ssh:\\/\\/|git:\\/\\/|file:\\/\\/)/i;\n\nexport type WorkspaceRepoEntry = {\n path: string;\n kind: string;\n remote?: string;\n};\n\nexport type WorkspaceMetadata = {\n version?: number;\n mode?: string;\n name?: string;\n repos: Record<string, WorkspaceRepoEntry>;\n};\n\nexport function isGitUrl(input: string): boolean {\n return GIT_URL_PATTERN.test(input.trim());\n}\n\nexport function repoNameFromUrl(url: string): string {\n const trimmed = url.trim().replace(/\\/$/, \"\");\n const lastSegment = trimmed.split(\"/\").pop() ?? trimmed;\n const withoutGit = lastSegment.replace(/\\.git$/i, \"\");\n return withoutGit || \"repo\";\n}\n\nexport async function isInsideWorkspace(workspacePath: string, candidatePath: string): Promise<boolean> {\n const resolvedWorkspace = await realpath(workspacePath);\n const resolvedCandidate = await realpath(candidatePath);\n const relative = path.relative(resolvedWorkspace, resolvedCandidate);\n\n if (relative === \"\") {\n return true;\n }\n\n if (path.isAbsolute(relative)) {\n return false;\n }\n\n return !relative.startsWith(`..${path.sep}`) && relative !== \"..\";\n}\n\nexport function relativeRepoPath(workspacePath: string, repoAbsolutePath: string): string {\n const relative = path.relative(workspacePath, repoAbsolutePath);\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function gitignoreEntryForRelativePath(relativePath: string): string {\n const normalized = relativePath.split(path.sep).join(\"/\").replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return `/${normalized}/`;\n}\n\nexport async function readWorkspaceMetadata(workspacePath: string): Promise<WorkspaceMetadata | undefined> {\n const workspaceYmlPath = path.join(workspacePath, \".weave\", \"workspace.yml\");\n if (!(await pathExists(workspaceYmlPath))) {\n return undefined;\n }\n\n try {\n const parsed = YAML.parse(await readFile(workspaceYmlPath, \"utf8\")) as Record<string, unknown>;\n if (!parsed || typeof parsed !== \"object\") {\n return undefined;\n }\n\n const repos = parseRepos(parsed.repos);\n return {\n version: typeof parsed.version === \"number\" ? parsed.version : undefined,\n mode: typeof parsed.mode === \"string\" ? parsed.mode : undefined,\n name: typeof parsed.name === \"string\" ? parsed.name : undefined,\n repos,\n };\n } catch {\n return undefined;\n }\n}\n\nfunction parseRepos(value: unknown): Record<string, WorkspaceRepoEntry> {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n\n const repos: Record<string, WorkspaceRepoEntry> = {};\n for (const [id, entry] of Object.entries(value as Record<string, unknown>)) {\n if (!entry || typeof entry !== \"object\") {\n continue;\n }\n const record = entry as Record<string, unknown>;\n const repoPath = typeof record.path === \"string\" ? record.path : undefined;\n const kind = typeof record.kind === \"string\" ? record.kind : undefined;\n if (!repoPath || !kind) {\n continue;\n }\n repos[id] = {\n path: repoPath,\n kind,\n ...(typeof record.remote === \"string\" ? { remote: record.remote } : {}),\n };\n }\n return repos;\n}\n\nexport function findRegisteredRepoByPath(\n metadata: WorkspaceMetadata,\n relativePath: string,\n): string | undefined {\n const normalized = normalizeRepoPath(relativePath);\n return Object.entries(metadata.repos).find(([, entry]) => normalizeRepoPath(entry.path) === normalized)?.[0];\n}\n\nfunction normalizeRepoPath(repoPath: string): string {\n return repoPath.split(path.sep).join(\"/\").replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n}\n\nexport async function appendGitignoreEntry(workspacePath: string, relativePath: string): Promise<void> {\n const gitignorePath = path.join(workspacePath, \".gitignore\");\n const entry = gitignoreEntryForRelativePath(relativePath);\n const existing = (await pathExists(gitignorePath)) ? await readFile(gitignorePath, \"utf8\") : \"\";\n const lines = existing.split(\"\\n\");\n\n if (lines.some((line) => line.trim() === entry.trim())) {\n return;\n }\n\n const separator = existing.length > 0 && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n const prefix = existing.length > 0 ? separator : \"\";\n await writeFile(gitignorePath, `${existing}${prefix}${entry}\\n`);\n}\n\nexport async function registerRepoInWorkspaceMetadata(\n workspacePath: string,\n input: { id: string; relativePath: string; kind: string; remote?: string },\n): Promise<void> {\n const workspaceYmlPath = path.join(workspacePath, \".weave\", \"workspace.yml\");\n const metadata = (await readWorkspaceMetadata(workspacePath)) ?? {\n version: 1,\n mode: \"workspace\",\n name: path.basename(workspacePath),\n repos: {},\n };\n\n const normalizedPath = normalizeRepoPath(input.relativePath);\n const existing = metadata.repos[input.id];\n if (existing && normalizeRepoPath(existing.path) !== normalizedPath) {\n throw new Error(\n `Workspace repo id \"${input.id}\" is already registered for a different path (${existing.path}). Pass --id with a different value.`,\n );\n }\n\n const collision = Object.entries(metadata.repos).find(\n ([id, entry]) => id !== input.id && normalizeRepoPath(entry.path) === normalizedPath,\n );\n if (collision) {\n throw new Error(`Path is already registered in workspace as \"${collision[0]}\".`);\n }\n\n metadata.repos[input.id] = {\n path: normalizedPath,\n kind: input.kind,\n ...(input.remote ? { remote: input.remote } : {}),\n };\n\n await writeFile(\n workspaceYmlPath,\n YAML.stringify({\n version: metadata.version ?? 1,\n mode: metadata.mode ?? \"workspace\",\n name: metadata.name ?? path.basename(workspacePath),\n repos: metadata.repos,\n }),\n );\n}\n\nexport type RegisterRepoIntoWorkspaceInput = {\n workspacePath: string;\n id: string;\n relativePath: string;\n kind: string;\n remote?: string;\n};\n\nexport type RegisterRepoIntoWorkspaceResult = {\n id: string;\n relativePath: string;\n};\n\nexport async function registerRepoIntoWorkspace(\n input: RegisterRepoIntoWorkspaceInput,\n): Promise<RegisterRepoIntoWorkspaceResult> {\n await appendGitignoreEntry(input.workspacePath, input.relativePath);\n await registerRepoInWorkspaceMetadata(input.workspacePath, {\n id: input.id,\n relativePath: input.relativePath,\n kind: input.kind,\n remote: input.remote,\n });\n\n return {\n id: input.id,\n relativePath: input.relativePath,\n };\n}\n\nexport function defaultRepoId(relativePath: string, explicitId?: string): string {\n if (explicitId) {\n return explicitId;\n }\n const basename = path.basename(relativePath.split(\"/\").join(path.sep));\n return slugify(basename, \"repo\");\n}\n\nexport function workspaceGitignoreBaseTemplate(): string {\n return [\".DS_Store\", \"node_modules/\"].join(\"\\n\") + \"\\n\";\n}\n\nexport function listReposForDisplay(metadata: WorkspaceMetadata): Array<{\n id: string;\n path: string;\n kind: string;\n remote?: string;\n}> {\n return Object.entries(metadata.repos).map(([id, entry]) => ({\n id,\n path: entry.path,\n kind: entry.kind,\n ...(entry.remote ? { remote: entry.remote } : {}),\n }));\n}\n","import { Command, InvalidArgumentError } from \"commander\";\nimport {\n type AgentSelection,\n diffAgentSkills,\n installAgentSkills,\n resetAgentSkills,\n updateAgentSkills,\n} from \"../lib/agent-skills.js\";\n\ninterface JsonOption {\n json?: boolean;\n}\n\nexport function agentCommand(): Command {\n const command = new Command(\"agent\").description(\"Install and manage agent skills.\");\n\n command\n .command(\"install\")\n .description(\"Install Weave skills for an agent.\")\n .argument(\"<agent>\", \"codex, cursor, claude, opencode, or all\", parseAgentSelection)\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (agent: AgentSelection, options: JsonOption) => {\n await runAction(async () => {\n const result = await installAgentSkills({ cwd: process.cwd(), agent });\n writeOperationResult(result.message, result.results, options.json ?? false);\n });\n });\n\n command\n .command(\"update\")\n .description(\"Update installed Weave skills when they have not been modified.\")\n .argument(\"<agent>\", \"codex, cursor, claude, opencode, or all\", parseAgentSelection)\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (agent: AgentSelection, options: JsonOption) => {\n await runAction(async () => {\n const result = await updateAgentSkills({ cwd: process.cwd(), agent });\n writeOperationResult(result.message, result.results, options.json ?? false);\n });\n });\n\n command\n .command(\"diff\")\n .description(\"Show differences between installed skills and current Weave defaults.\")\n .argument(\"<agent>\", \"codex, cursor, claude, opencode, or all\", parseAgentSelection)\n .argument(\"[skill]\", \"skill name\")\n .action(async (agent: AgentSelection, skill?: string) => {\n await runAction(async () => {\n const result = await diffAgentSkills({ cwd: process.cwd(), agent, skill });\n process.stdout.write(`${result.message}\\n`);\n });\n });\n\n command\n .command(\"reset\")\n .description(\"Overwrite installed skills with current Weave defaults.\")\n .argument(\"<agent>\", \"codex, cursor, claude, opencode, or all\", parseAgentSelection)\n .argument(\"[skill]\", \"skill name\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (agent: AgentSelection, skill: string | undefined, options: JsonOption) => {\n await runAction(async () => {\n const result = await resetAgentSkills({ cwd: process.cwd(), agent, skill });\n writeOperationResult(result.message, result.results, options.json ?? false);\n });\n });\n\n return command;\n}\n\nfunction parseAgentSelection(value: string): AgentSelection {\n if (value === \"codex\" || value === \"cursor\" || value === \"claude\" || value === \"opencode\" || value === \"all\") {\n return value;\n }\n\n throw new InvalidArgumentError(`Unsupported agent: ${value}`);\n}\n\nfunction writeOperationResult(message: string, results: unknown, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(results, null, 2)}\\n`);\n return;\n }\n\n process.stdout.write(`${message}\\n`);\n}\n\nasync function runAction(action: () => Promise<void>): Promise<void> {\n try {\n await action();\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, extname, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport YAML from \"yaml\";\nimport { ensureDir, pathExists, writeFileAtomic } from \"./files.js\";\n\nexport type AgentName = \"codex\" | \"cursor\" | \"claude\" | \"opencode\";\nexport type AgentSelection = AgentName | \"all\";\nexport type ManagedArtifactKind = \"skill\" | \"command\" | \"resource\";\nexport type SkillOperationStatus = \"installed\" | \"unchanged\" | \"modified\" | \"updated\" | \"reset\" | \"missing\";\n\nexport interface DefaultSkill {\n name: string;\n description: string;\n lastChangedIn: string;\n sourcePath: string;\n content: string;\n hash: string;\n}\n\ninterface DefaultCommand {\n name: string;\n sourcePath: string;\n content: string;\n hash: string;\n}\n\ninterface DefaultSkillResource {\n name: string;\n sourcePath: string;\n content: string;\n hash: string;\n}\n\nexport interface SkillOperationResult {\n agent: AgentName;\n kind: ManagedArtifactKind;\n skill: string;\n path: string;\n status: SkillOperationStatus;\n message: string;\n}\n\nexport interface SkillOperationSummary {\n status: \"ok\";\n message: string;\n results: SkillOperationResult[];\n}\n\ninterface AgentSkillOptions {\n cwd: string;\n agent: AgentSelection;\n templatesDir?: string;\n commandTemplatesDir?: string;\n now?: Date;\n}\n\ninterface ResetAgentSkillOptions extends AgentSkillOptions {\n skill?: string;\n}\n\ninterface DiffAgentSkillOptions extends AgentSkillOptions {\n skill?: string;\n}\n\nexport interface ManifestEntry {\n path: string;\n source_hash: string;\n installed_hash: string;\n installed_at: string;\n installed_from: string | null;\n}\n\nexport interface AgentManifestEntries {\n skills?: Record<string, ManifestEntry>;\n commands?: Record<string, ManifestEntry>;\n resources?: Record<string, ManifestEntry>;\n}\n\nexport interface AgentsManifest {\n version: 1;\n installed: Partial<Record<AgentName, AgentManifestEntries>>;\n}\n\ninterface ConcreteTarget {\n agent: AgentName;\n skillsDir: string;\n commandsDir?: string;\n}\n\ninterface ManagedArtifact {\n kind: ManagedArtifactKind;\n name: string;\n content: string;\n hash: string;\n lastChangedIn: string | null;\n destination: string;\n}\n\nconst manifestRelativePath = join(\".weave\", \"agents.yml\");\n\nexport async function listDefaultSkills(options: { templatesDir?: string } = {}): Promise<DefaultSkill[]> {\n const templatesDir = options.templatesDir ?? (await findDefaultSkillsDir());\n const entries = await readdir(templatesDir, { withFileTypes: true });\n const skills = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => readDefaultSkill(entry.name, { templatesDir })),\n );\n\n return skills.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function readDefaultSkill(\n name: string,\n options: { templatesDir?: string } = {},\n): Promise<DefaultSkill> {\n validateSkillName(name);\n\n const templatesDir = options.templatesDir ?? (await findDefaultSkillsDir());\n const sourcePath = join(templatesDir, name, \"SKILL.md\");\n const content = await readFile(sourcePath, \"utf8\").catch((error: unknown) => {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n throw new Error(`Unknown skill: ${name}`);\n }\n\n throw error;\n });\n const metadata = parseSkillFrontmatter(content, sourcePath);\n\n if (metadata.name !== name) {\n throw new Error(`Skill frontmatter name mismatch in ${sourcePath}: expected ${name}, got ${metadata.name}`);\n }\n\n return {\n name: metadata.name,\n description: metadata.description,\n lastChangedIn: metadata.lastChangedIn,\n sourcePath,\n content,\n hash: hashContent(content),\n };\n}\n\nexport async function installAgentSkills(options: AgentSkillOptions): Promise<SkillOperationSummary> {\n const manifest = await loadAgentsManifest(options.cwd);\n const results: SkillOperationResult[] = [];\n\n for (const target of resolveAgentTargets(options.cwd, options.agent)) {\n const artifacts = await defaultArtifactsForTarget(target, options);\n for (const artifact of artifacts) {\n results.push(await installArtifact(options.cwd, target.agent, artifact, manifest, options.now ?? new Date()));\n }\n }\n\n await saveAgentsManifest(options.cwd, manifest);\n\n return summarize(results);\n}\n\nexport async function updateAgentSkills(options: AgentSkillOptions): Promise<SkillOperationSummary> {\n const manifest = await loadAgentsManifest(options.cwd);\n const results: SkillOperationResult[] = [];\n\n for (const target of resolveAgentTargets(options.cwd, options.agent)) {\n const artifacts = await defaultArtifactsForTarget(target, options);\n for (const artifact of artifacts) {\n results.push(await updateArtifact(options.cwd, target.agent, artifact, manifest, options.now ?? new Date()));\n }\n }\n\n await saveAgentsManifest(options.cwd, manifest);\n\n return summarize(results);\n}\n\nexport async function resetAgentSkills(options: ResetAgentSkillOptions): Promise<SkillOperationSummary> {\n const manifest = await loadAgentsManifest(options.cwd);\n const results: SkillOperationResult[] = [];\n\n for (const target of resolveAgentTargets(options.cwd, options.agent)) {\n const artifacts = await defaultArtifactsForTarget(target, options, options.skill);\n for (const artifact of artifacts) {\n results.push(await resetArtifact(options.cwd, target.agent, artifact, manifest, options.now ?? new Date()));\n }\n }\n\n await saveAgentsManifest(options.cwd, manifest);\n\n return summarize(results);\n}\n\nexport async function diffAgentSkills(options: DiffAgentSkillOptions): Promise<{ status: \"ok\"; message: string }> {\n const chunks: string[] = [];\n\n for (const target of resolveAgentTargets(options.cwd, options.agent)) {\n const artifacts = await defaultArtifactsForTarget(target, options, options.skill);\n for (const artifact of artifacts) {\n if (!(await pathExists(artifact.destination))) {\n chunks.push(`Missing ${target.agent}/${artifact.kind}/${artifact.name} at ${relative(options.cwd, artifact.destination)}`);\n continue;\n }\n\n const installed = await readFile(artifact.destination, \"utf8\");\n chunks.push(\n formatFullFileDiff(\n relative(options.cwd, artifact.destination),\n `${artifact.kind}:${artifact.name}`,\n installed,\n artifact.content,\n ),\n );\n }\n }\n\n return {\n status: \"ok\",\n message: chunks.join(\"\\n\"),\n };\n}\n\nasync function defaultArtifactsForTarget(\n target: ConcreteTarget,\n options: Pick<AgentSkillOptions, \"templatesDir\" | \"commandTemplatesDir\">,\n onlyName?: string,\n): Promise<ManagedArtifact[]> {\n const skills = onlyName\n ? [await readDefaultSkill(onlyName, { templatesDir: options.templatesDir })]\n : await listDefaultSkills({ templatesDir: options.templatesDir });\n const artifacts: ManagedArtifact[] = [];\n\n for (const skill of skills) {\n artifacts.push({\n kind: \"skill\",\n name: skill.name,\n content: skill.content,\n hash: skill.hash,\n lastChangedIn: skill.lastChangedIn,\n destination: installedSkillPath(target.skillsDir, skill.name),\n });\n\n const resources = await listDefaultSkillResources(skill);\n for (const resource of resources) {\n artifacts.push({\n kind: \"resource\",\n name: `${skill.name}/${resource.name}`,\n content: resource.content,\n hash: resource.hash,\n lastChangedIn: skill.lastChangedIn,\n destination: installedSkillResourcePath(target.skillsDir, skill.name, resource.name),\n });\n }\n }\n\n if (target.agent === \"opencode\" && target.commandsDir) {\n const commands = onlyName\n ? await maybeReadDefaultOpencodeCommand(onlyName, { commandTemplatesDir: options.commandTemplatesDir })\n : await listDefaultOpencodeCommands({ commandTemplatesDir: options.commandTemplatesDir });\n\n for (const command of Array.isArray(commands) ? commands : commands ? [commands] : []) {\n artifacts.push({\n kind: \"command\",\n name: command.name,\n content: command.content,\n hash: command.hash,\n lastChangedIn: null,\n destination: installedOpencodeCommandPath(target.commandsDir, command.name),\n });\n }\n }\n\n return artifacts;\n}\n\nasync function listDefaultSkillResources(skill: DefaultSkill): Promise<DefaultSkillResource[]> {\n const skillDir = dirname(skill.sourcePath);\n const entries = await readdir(skillDir, { withFileTypes: true });\n const resources = await Promise.all(\n entries\n .filter((entry) => entry.isFile() && entry.name !== \"SKILL.md\")\n .map(async (entry) => {\n validateSkillResourceName(entry.name);\n const sourcePath = join(skillDir, entry.name);\n const content = await readFile(sourcePath, \"utf8\");\n return {\n name: entry.name,\n sourcePath,\n content,\n hash: hashContent(content),\n };\n }),\n );\n\n return resources.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nasync function listDefaultOpencodeCommands(\n options: { commandTemplatesDir?: string } = {},\n): Promise<DefaultCommand[]> {\n const commandTemplatesDir = options.commandTemplatesDir ?? (await findDefaultOpencodeCommandsDir());\n const entries = await readdir(commandTemplatesDir, { withFileTypes: true }).catch((error: unknown) => {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n });\n const commands = await Promise.all(\n entries\n .filter((entry) => entry.isFile() && extname(entry.name) === \".md\")\n .map((entry) => readDefaultOpencodeCommand(basename(entry.name, \".md\"), { commandTemplatesDir })),\n );\n\n return commands.sort((left, right) => left.name.localeCompare(right.name));\n}\n\nasync function readDefaultOpencodeCommand(\n name: string,\n options: { commandTemplatesDir?: string } = {},\n): Promise<DefaultCommand> {\n validateSkillName(name);\n\n const commandTemplatesDir = options.commandTemplatesDir ?? (await findDefaultOpencodeCommandsDir());\n const sourcePath = join(commandTemplatesDir, `${name}.md`);\n const content = await readFile(sourcePath, \"utf8\");\n\n return {\n name,\n sourcePath,\n content,\n hash: hashContent(content),\n };\n}\n\nasync function maybeReadDefaultOpencodeCommand(\n name: string,\n options: { commandTemplatesDir?: string } = {},\n): Promise<DefaultCommand | undefined> {\n return readDefaultOpencodeCommand(name, options).catch((error: unknown) => {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n });\n}\n\nasync function installArtifact(\n cwd: string,\n agent: AgentName,\n artifact: ManagedArtifact,\n manifest: AgentsManifest,\n now: Date,\n): Promise<SkillOperationResult> {\n const relativePath = relative(cwd, artifact.destination);\n await ensureDir(dirname(artifact.destination));\n\n if (!(await pathExists(artifact.destination))) {\n await writeFile(artifact.destination, artifact.content);\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"installed\", `Installed ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n const currentHash = hashContent(await readFile(artifact.destination, \"utf8\"));\n const entry = getManifestEntry(manifest, agent, artifact.kind, artifact.name);\n if (entry && currentHash !== entry.installed_hash) {\n return result(agent, artifact, relativePath, \"modified\", `Skipped modified ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n if (!entry && currentHash !== artifact.hash) {\n return result(agent, artifact, relativePath, \"modified\", `Skipped existing ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n if (entry && currentHash === entry.installed_hash && currentHash !== artifact.hash) {\n await writeFile(artifact.destination, artifact.content);\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"updated\", `Updated ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"unchanged\", `${artifact.name} ${artifact.kind} already installed for ${agent}`);\n}\n\nasync function updateArtifact(\n cwd: string,\n agent: AgentName,\n artifact: ManagedArtifact,\n manifest: AgentsManifest,\n now: Date,\n): Promise<SkillOperationResult> {\n const relativePath = relative(cwd, artifact.destination);\n const entry = getManifestEntry(manifest, agent, artifact.kind, artifact.name);\n\n if (!(await pathExists(artifact.destination))) {\n if (!entry && artifact.kind === \"resource\") {\n await ensureDir(dirname(artifact.destination));\n await writeFile(artifact.destination, artifact.content);\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"installed\", `Installed ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n return result(agent, artifact, relativePath, \"missing\", `Missing ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n const currentHash = hashContent(await readFile(artifact.destination, \"utf8\"));\n if (!entry || currentHash !== entry.installed_hash) {\n return result(agent, artifact, relativePath, \"modified\", `Skipped modified ${artifact.name} ${artifact.kind} for ${agent}`);\n }\n\n if (currentHash === artifact.hash) {\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"unchanged\", `${artifact.name} ${artifact.kind} already up to date for ${agent}`);\n }\n\n await writeFile(artifact.destination, artifact.content);\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n return result(agent, artifact, relativePath, \"updated\", `Updated ${artifact.name} ${artifact.kind} for ${agent}`);\n}\n\nasync function resetArtifact(\n cwd: string,\n agent: AgentName,\n artifact: ManagedArtifact,\n manifest: AgentsManifest,\n now: Date,\n): Promise<SkillOperationResult> {\n const relativePath = relative(cwd, artifact.destination);\n\n await ensureDir(dirname(artifact.destination));\n await writeFile(artifact.destination, artifact.content);\n setManifestEntry(manifest, agent, artifact, relativePath, now);\n\n return result(agent, artifact, relativePath, \"reset\", `Reset ${artifact.name} ${artifact.kind} for ${agent}`);\n}\n\nfunction setManifestEntry(\n manifest: AgentsManifest,\n agent: AgentName,\n artifact: ManagedArtifact,\n relativePath: string,\n now: Date,\n): void {\n manifest.installed[agent] ??= {};\n const entries = manifest.installed[agent];\n if (!entries) {\n return;\n }\n\n const bucket = manifestBucketForKind(artifact.kind);\n entries[bucket] ??= {};\n entries[bucket][artifact.name] = {\n path: relativePath,\n source_hash: artifact.hash,\n installed_hash: artifact.hash,\n installed_at: now.toISOString(),\n installed_from: artifact.lastChangedIn,\n };\n}\n\nfunction getManifestEntry(\n manifest: AgentsManifest,\n agent: AgentName,\n kind: ManagedArtifactKind,\n name: string,\n): ManifestEntry | undefined {\n const entries = manifest.installed[agent];\n return entries?.[manifestBucketForKind(kind)]?.[name];\n}\n\nfunction resolveAgentTargets(cwd: string, agent: AgentSelection): ConcreteTarget[] {\n switch (agent) {\n case \"codex\":\n return [{ agent, skillsDir: join(cwd, \".agents\", \"skills\") }];\n case \"cursor\":\n return [{ agent, skillsDir: join(cwd, \".agents\", \"skills\") }];\n case \"claude\":\n return [{ agent, skillsDir: join(cwd, \".claude\", \"skills\") }];\n case \"opencode\":\n return [{ agent, skillsDir: join(cwd, \".agents\", \"skills\"), commandsDir: join(cwd, \".opencode\", \"commands\") }];\n case \"all\":\n return [\n { agent: \"codex\", skillsDir: join(cwd, \".agents\", \"skills\") },\n { agent: \"cursor\", skillsDir: join(cwd, \".agents\", \"skills\") },\n { agent: \"claude\", skillsDir: join(cwd, \".claude\", \"skills\") },\n { agent: \"opencode\", skillsDir: join(cwd, \".agents\", \"skills\"), commandsDir: join(cwd, \".opencode\", \"commands\") },\n ];\n default:\n throw new Error(`Unsupported agent: ${agent satisfies never}`);\n }\n}\n\nfunction installedSkillPath(skillsDir: string, skillName: string): string {\n return join(skillsDir, skillName, \"SKILL.md\");\n}\n\nfunction installedSkillResourcePath(skillsDir: string, skillName: string, resourceName: string): string {\n return join(skillsDir, skillName, resourceName);\n}\n\nfunction installedOpencodeCommandPath(commandsDir: string, commandName: string): string {\n return join(commandsDir, `${commandName}.md`);\n}\n\nexport async function loadAgentsManifest(cwd: string): Promise<AgentsManifest> {\n const manifestPath = join(cwd, manifestRelativePath);\n\n if (!(await pathExists(manifestPath))) {\n return { version: 1, installed: {} };\n }\n\n const parsed = YAML.parse(await readFile(manifestPath, \"utf8\")) as Partial<AgentsManifest> | null;\n const installed = parsed?.installed ?? {};\n\n for (const agent of Object.keys(installed) as AgentName[]) {\n const buckets = installed[agent];\n if (!buckets) continue;\n for (const bucket of [\"skills\", \"commands\", \"resources\"] as const) {\n const entries = buckets[bucket];\n if (!entries) continue;\n for (const name of Object.keys(entries)) {\n const entry = entries[name] as Partial<ManifestEntry>;\n entries[name] = {\n path: entry.path ?? \"\",\n source_hash: entry.source_hash ?? \"\",\n installed_hash: entry.installed_hash ?? \"\",\n installed_at: entry.installed_at ?? \"\",\n installed_from: entry.installed_from ?? null,\n };\n }\n }\n }\n\n return {\n version: 1,\n installed,\n };\n}\n\nasync function saveAgentsManifest(cwd: string, manifest: AgentsManifest): Promise<void> {\n const manifestPath = join(cwd, manifestRelativePath);\n await mkdir(dirname(manifestPath), { recursive: true });\n await writeFileAtomic(manifestPath, YAML.stringify(manifest));\n}\n\nfunction parseSkillFrontmatter(\n content: string,\n sourcePath: string,\n): { name: string; description: string; lastChangedIn: string } {\n const match = /^---\\n([\\s\\S]*?)\\n---/.exec(content);\n if (!match) {\n throw new Error(`Missing frontmatter in ${sourcePath}`);\n }\n\n const metadata = YAML.parse(match[1]) as Partial<{\n name: string;\n description: string;\n last_changed_in: string | number;\n }>;\n if (!metadata.name || !metadata.description) {\n throw new Error(`Skill frontmatter in ${sourcePath} must include name and description`);\n }\n if (metadata.last_changed_in === undefined || metadata.last_changed_in === null || metadata.last_changed_in === \"\") {\n throw new Error(\n `Skill frontmatter in ${sourcePath} must include last_changed_in (the weave-it package version of the last skill change)`,\n );\n }\n\n return {\n name: metadata.name,\n description: metadata.description,\n lastChangedIn: String(metadata.last_changed_in),\n };\n}\n\nfunction formatFullFileDiff(installedPath: string, defaultName: string, installed: string, currentDefault: string): string {\n if (installed === currentDefault) {\n return `No differences for ${installedPath}`;\n }\n\n const installedLines = splitLines(installed);\n const defaultLines = splitLines(currentDefault);\n\n return [\n `--- installed:${installedPath}`,\n `+++ default:${defaultName}`,\n ...installedLines.map((line) => `-${line}`),\n ...defaultLines.map((line) => `+${line}`),\n ].join(\"\\n\");\n}\n\nfunction splitLines(value: string): string[] {\n return value.endsWith(\"\\n\") ? value.slice(0, -1).split(\"\\n\") : value.split(\"\\n\");\n}\n\nfunction result(\n agent: AgentName,\n artifact: ManagedArtifact,\n path: string,\n status: SkillOperationStatus,\n message: string,\n): SkillOperationResult {\n return { agent, kind: artifact.kind, skill: artifact.name, path, status, message };\n}\n\nfunction summarize(results: SkillOperationResult[]): SkillOperationSummary {\n return {\n status: \"ok\",\n message: results.map((item) => item.message).join(\"\\n\"),\n results,\n };\n}\n\nfunction hashContent(content: string): string {\n return `sha256:${createHash(\"sha256\").update(content).digest(\"hex\")}`;\n}\n\nasync function findDefaultSkillsDir(): Promise<string> {\n return join(await findTemplatesRoot(), \"skills\");\n}\n\nasync function findDefaultOpencodeCommandsDir(): Promise<string> {\n return join(await findTemplatesRoot(), \"opencode\", \"commands\");\n}\n\nasync function findTemplatesRoot(): Promise<string> {\n let current = dirname(fileURLToPath(import.meta.url));\n\n while (true) {\n const candidate = join(current, \"templates\");\n try {\n await access(candidate, constants.R_OK);\n return candidate;\n } catch {\n const parent = dirname(current);\n if (parent === current) {\n throw new Error(\"Could not locate templates\");\n }\n\n current = parent;\n }\n }\n}\n\nfunction validateSkillName(name: string): void {\n if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(name)) {\n throw new Error(`Invalid skill name: ${name}`);\n }\n}\n\nfunction validateSkillResourceName(name: string): void {\n if (!/^[a-z0-9]+(-[a-z0-9]+)*\\.md$/.test(name)) {\n throw new Error(`Invalid skill resource name: ${name}`);\n }\n}\n\nfunction manifestBucketForKind(kind: ManagedArtifactKind): \"skills\" | \"commands\" | \"resources\" {\n switch (kind) {\n case \"skill\":\n return \"skills\";\n case \"command\":\n return \"commands\";\n case \"resource\":\n return \"resources\";\n default:\n throw new Error(`Unsupported artifact kind: ${kind satisfies never}`);\n }\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error;\n}\n","import { Command, InvalidArgumentError } from \"commander\";\nimport {\n clearCurrentArtifact,\n currentArtifact,\n setCurrentArtifact,\n type ArtifactCurrentResult,\n} from \"../lib/artifact-context.js\";\nimport { isArtifactName, type ArtifactName } from \"../lib/artifact-metadata.js\";\nimport { ChangeCommandError } from \"../lib/changes.js\";\n\ninterface ArtifactCurrentOptions {\n json?: boolean;\n}\n\ninterface ArtifactCurrentSetOptions {\n json?: boolean;\n}\n\nexport function artifactCommand(): Command {\n const command = new Command(\"artifact\").description(\"Inspect and route Weave artifact context.\");\n\n const current = new Command(\"current\")\n .description(\"Show, set, or clear the current artifact context.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: ArtifactCurrentOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await currentArtifact({\n cwd: process.cwd(),\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n current\n .command(\"set\")\n .description(\"Set the current artifact context for the active change.\")\n .argument(\"<artifact>\", \"artifact: exploration, prd, or architecture\", parseArtifactName)\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (artifact: ArtifactName, options: ArtifactCurrentSetOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await setCurrentArtifact({\n cwd: process.cwd(),\n artifact,\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n current\n .command(\"clear\")\n .description(\"Clear the current artifact context for the active change.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: ArtifactCurrentSetOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await clearCurrentArtifact({\n cwd: process.cwd(),\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n command.addCommand(current);\n return command;\n}\n\nfunction parseArtifactName(value: string): ArtifactName {\n if (isArtifactName(value)) {\n return value;\n }\n\n throw new InvalidArgumentError(`Unsupported artifact: ${value}`);\n}\n\nfunction writeResult(result: ArtifactCurrentResult, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n process.stdout.write(`${result.message}\\n`);\n}\n\nasync function runAction(json: boolean, action: () => Promise<void>): Promise<void> {\n try {\n await action();\n } catch (error) {\n if (json) {\n process.stdout.write(`${JSON.stringify(errorResult(error), null, 2)}\\n`);\n } else {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n }\n process.exitCode = 1;\n }\n}\n\nfunction errorResult(error: unknown): { status: \"error\"; code: string; message: string; details?: unknown } {\n if (error instanceof ChangeCommandError) {\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n details: error.details,\n };\n }\n\n return {\n status: \"error\",\n code: \"unknown_error\",\n message: error instanceof Error ? error.message : String(error),\n };\n}\n","import path from \"node:path\";\nimport { resolveArchitectureArtifact } from \"./architecture-artifact.js\";\nimport { artifactFileName, isArtifactName, type ArtifactName } from \"./artifact-metadata.js\";\nimport { ChangeCommandError, currentChange } from \"./changes.js\";\nimport {\n clearCurrentArtifactForPath,\n currentArtifactForPath,\n defaultSessionPath,\n loadCurrentSession,\n saveCurrentSession,\n setCurrentArtifactForPath,\n type SessionCurrentArtifact,\n} from \"./session-state.js\";\n\nexport type ArtifactCurrentSource = \"session\" | \"none\";\n\nexport interface ArtifactCurrentTargetResult {\n id?: string;\n name?: string;\n path: string;\n source: ArtifactCurrentSource;\n current: boolean;\n artifact?: SessionCurrentArtifact;\n current_change?: {\n id: string;\n path: string;\n branch: string;\n };\n}\n\nexport interface ArtifactCurrentResult {\n status: \"ok\";\n targets: ArtifactCurrentTargetResult[];\n message: string;\n}\n\nexport interface ArtifactCurrentOptions {\n cwd: string;\n now?: Date;\n sessionPath?: string;\n}\n\nexport interface ArtifactCurrentSetOptions extends ArtifactCurrentOptions {\n artifact: string;\n}\n\nexport async function currentArtifact(options: ArtifactCurrentOptions): Promise<ArtifactCurrentResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const changeResult = await currentChange({ cwd: options.cwd, now, sessionPath });\n const session = await loadCurrentSession(sessionPath);\n const targets: ArtifactCurrentTargetResult[] = changeResult.targets.map((target) => {\n const saved = currentArtifactForPath(session, target.path);\n const valid = Boolean(saved && target.current && saved.change_id === target.current.id);\n return {\n id: target.id,\n name: target.name,\n path: target.path,\n source: valid ? \"session\" : \"none\",\n current: valid,\n artifact: valid ? saved : undefined,\n current_change: target.current\n ? { id: target.current.id, path: target.current.path, branch: target.current.branch }\n : undefined,\n };\n });\n\n return {\n status: \"ok\",\n targets,\n message: formatCurrentArtifactMessage(targets),\n };\n}\n\nexport async function setCurrentArtifact(options: ArtifactCurrentSetOptions): Promise<ArtifactCurrentResult> {\n const artifact = parseArtifact(options.artifact);\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const changeResult = await currentChange({ cwd: options.cwd, now, sessionPath });\n\n if (changeResult.targets.length !== 1) {\n throw new ChangeCommandError(\"ambiguous_target\", \"Set current artifact for one target at a time\");\n }\n\n const target = changeResult.targets[0];\n if (!target.current) {\n throw new ChangeCommandError(\"no_current_change\", \"No active Weave change found. Run `weave change new` or `weave change switch` first.\");\n }\n\n const session = (await loadCurrentSession(sessionPath)) ?? {\n version: 1 as const,\n updated_at: now.toISOString(),\n folders: {},\n };\n const artifactState = {\n artifact,\n change_id: target.current.id,\n path: await resolveArtifactContextPath(target.current.path, target.current.changePath, artifact),\n };\n\n setCurrentArtifactForPath(session, target.path, artifactState, now);\n await saveCurrentSession(session, sessionPath);\n\n const saved = currentArtifactForPath(session, target.path);\n const results: ArtifactCurrentTargetResult[] = [\n {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"session\",\n current: true,\n artifact: saved,\n current_change: {\n id: target.current.id,\n path: target.current.path,\n branch: target.current.branch,\n },\n },\n ];\n\n return {\n status: \"ok\",\n targets: results,\n message: formatCurrentArtifactMessage(results),\n };\n}\n\nexport async function clearCurrentArtifact(options: ArtifactCurrentOptions): Promise<ArtifactCurrentResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const changeResult = await currentChange({ cwd: options.cwd, now, sessionPath });\n\n if (changeResult.targets.length !== 1) {\n throw new ChangeCommandError(\"ambiguous_target\", \"Clear current artifact for one target at a time\");\n }\n\n const target = changeResult.targets[0];\n const session = (await loadCurrentSession(sessionPath)) ?? {\n version: 1 as const,\n updated_at: now.toISOString(),\n folders: {},\n };\n clearCurrentArtifactForPath(session, target.path, now);\n await saveCurrentSession(session, sessionPath);\n\n const results: ArtifactCurrentTargetResult[] = [\n {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"none\",\n current: false,\n current_change: target.current\n ? { id: target.current.id, path: target.current.path, branch: target.current.branch }\n : undefined,\n },\n ];\n\n return {\n status: \"ok\",\n targets: results,\n message: formatCurrentArtifactMessage(results),\n };\n}\n\nfunction parseArtifact(value: string): ArtifactName {\n if (isArtifactName(value)) {\n return value;\n }\n\n throw new ChangeCommandError(\"invalid_artifact\", `Unsupported artifact: ${value}. Expected exploration, prd, or architecture.`);\n}\n\nasync function resolveArtifactContextPath(changeRelativePath: string, changeAbsolutePath: string, artifact: ArtifactName): Promise<string> {\n if (artifact !== \"architecture\") {\n return path.join(changeRelativePath, artifactFileName(artifact));\n }\n\n const architecture = await resolveArchitectureArtifact(changeAbsolutePath);\n if ((architecture.status === \"folder\" || architecture.status === \"conflict\") && architecture.indexExists) {\n return path.join(changeRelativePath, \"architecture\", \"index.md\");\n }\n\n return path.join(changeRelativePath, \"architecture.md\");\n}\n\nfunction formatCurrentArtifactMessage(targets: ArtifactCurrentTargetResult[]): string {\n return targets\n .map((target) => {\n const label = target.name ? `${target.name} (${target.path})` : target.path;\n if (!target.artifact) {\n return [`Target: ${label}`, \"Current artifact: none\"].join(\"\\n\");\n }\n\n return [\n `Target: ${label}`,\n `Current artifact: ${target.artifact.artifact}`,\n `Change: ${target.artifact.change_id}`,\n `Path: ${target.artifact.path}`,\n ].join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists } from \"./files.js\";\n\nexport type ArchitectureArtifactState =\n | {\n status: \"missing\";\n filePath: string;\n folderPath: string;\n substantive: false;\n }\n | {\n status: \"conflict\";\n filePath: string;\n folderPath: string;\n substantive: boolean;\n fileSubstantive: boolean;\n indexPath: string;\n indexExists: boolean;\n indexSubstantive: boolean;\n facetPaths: string[];\n substantiveFacetPaths: string[];\n }\n | {\n status: \"file\";\n path: string;\n filePath: string;\n folderPath: string;\n substantive: boolean;\n }\n | {\n status: \"folder\";\n filePath: string;\n folderPath: string;\n indexPath: string;\n indexExists: boolean;\n indexSubstantive: boolean;\n facetPaths: string[];\n substantiveFacetPaths: string[];\n substantive: boolean;\n partial: boolean;\n };\n\ninterface FolderArchitectureDetails {\n indexPath: string;\n indexExists: boolean;\n indexSubstantive: boolean;\n facetPaths: string[];\n substantiveFacetPaths: string[];\n}\n\nexport async function resolveArchitectureArtifact(changePath: string): Promise<ArchitectureArtifactState> {\n const filePath = path.join(changePath, \"architecture.md\");\n const folderPath = path.join(changePath, \"architecture\");\n const fileExists = await pathExists(filePath);\n const folderExists = await isDirectory(folderPath);\n\n if (fileExists && folderExists) {\n const folder = await readFolderArchitecture(folderPath);\n const fileSubstantive = await hasSubstantiveMarkdown(filePath);\n const substantive = fileSubstantive || folder.indexSubstantive || folder.substantiveFacetPaths.length > 0;\n return {\n status: \"conflict\",\n filePath,\n folderPath,\n substantive,\n fileSubstantive,\n ...folder,\n };\n }\n\n if (fileExists) {\n return {\n status: \"file\",\n path: filePath,\n filePath,\n folderPath,\n substantive: await hasSubstantiveMarkdown(filePath),\n };\n }\n\n if (folderExists) {\n const folder = await readFolderArchitecture(folderPath);\n return {\n status: \"folder\",\n filePath,\n folderPath,\n ...folder,\n substantive: folder.indexSubstantive || folder.substantiveFacetPaths.length > 0,\n partial: !folder.indexSubstantive && folder.substantiveFacetPaths.length > 0,\n };\n }\n\n return {\n status: \"missing\",\n filePath,\n folderPath,\n substantive: false,\n };\n}\n\nexport function architectureMarkdownPaths(state: ArchitectureArtifactState): string[] {\n switch (state.status) {\n case \"missing\":\n return [];\n case \"file\":\n return [state.path];\n case \"folder\":\n return [...(state.indexExists ? [state.indexPath] : []), ...state.facetPaths];\n case \"conflict\":\n return [state.filePath, ...(state.indexExists ? [state.indexPath] : []), ...state.facetPaths];\n }\n}\n\nexport async function hasSubstantiveMarkdown(filePath: string): Promise<boolean> {\n if (!(await pathExists(filePath))) {\n return false;\n }\n\n const content = await readFile(filePath, \"utf8\");\n const withoutFrontmatter = content.replace(/^---\\n[\\s\\S]*?\\n---\\n?/, \"\");\n const withoutScaffold = withoutFrontmatter\n .split(\"\\n\")\n .filter((line) => {\n const trimmed = line.trim();\n return trimmed && !trimmed.startsWith(\"#\") && trimmed !== \"Not ready\";\n })\n .join(\"\\n\")\n .trim();\n return withoutScaffold.length > 0;\n}\n\nasync function readFolderArchitecture(folderPath: string): Promise<FolderArchitectureDetails> {\n const indexPath = path.join(folderPath, \"index.md\");\n const entries = await readdir(folderPath, { withFileTypes: true });\n const markdownPaths = entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".md\"))\n .map((entry) => path.join(folderPath, entry.name))\n .sort((left, right) => left.localeCompare(right));\n const facetPaths = markdownPaths.filter((filePath) => path.basename(filePath) !== \"index.md\");\n const substantiveFacetPaths: string[] = [];\n\n for (const facetPath of facetPaths) {\n if (await hasSubstantiveMarkdown(facetPath)) {\n substantiveFacetPaths.push(facetPath);\n }\n }\n\n return {\n indexPath,\n indexExists: await pathExists(indexPath),\n indexSubstantive: await hasSubstantiveMarkdown(indexPath),\n facetPaths,\n substantiveFacetPaths,\n };\n}\n\nasync function isDirectory(filePath: string): Promise<boolean> {\n try {\n return (await stat(filePath)).isDirectory();\n } catch {\n return false;\n }\n}\n","import YAML from \"yaml\";\n\nexport type ArtifactName = \"exploration\" | \"prd\" | \"architecture\";\nexport type ArtifactStatus = \"draft\" | \"reviewed\" | \"approved\";\nexport type ArtifactOwner = \"product\" | \"engineering\";\n\nexport const artifactNames: ArtifactName[] = [\"exploration\", \"prd\", \"architecture\"];\n\nexport interface ArtifactFrontmatterOptions {\n artifact: ArtifactName;\n now: Date;\n status?: ArtifactStatus;\n owner?: ArtifactOwner;\n source?: string;\n}\n\nexport function isArtifactName(value: string | undefined): value is ArtifactName {\n return Boolean(value && (artifactNames as string[]).includes(value));\n}\n\nexport function artifactFileName(artifact: ArtifactName): string {\n return artifact === \"exploration\" ? \"exploration.md\" : `${artifact}.md`;\n}\n\nexport function defaultArtifactOwner(artifact: ArtifactName): ArtifactOwner {\n return artifact === \"architecture\" ? \"engineering\" : \"product\";\n}\n\nexport function defaultArtifactSource(artifact: ArtifactName): string {\n if (artifact === \"exploration\") {\n return \"discussion\";\n }\n\n return artifact === \"prd\" ? \"exploration.md\" : \"prd.md\";\n}\n\nexport function artifactFrontmatter(options: ArtifactFrontmatterOptions): string {\n const artifact = options.artifact;\n const timestamp = options.now.toISOString();\n return `---\\n${YAML.stringify({\n artifact,\n status: options.status ?? \"draft\",\n owner: options.owner ?? defaultArtifactOwner(artifact),\n created_at: timestamp,\n updated_at: timestamp,\n reviewed_at: null,\n approved_at: null,\n approved_by: null,\n source: options.source ?? defaultArtifactSource(artifact),\n })}---\\n\\n`;\n}\n","import { randomBytes } from \"node:crypto\";\nimport { execFile } from \"node:child_process\";\nimport { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport YAML from \"yaml\";\nimport { architectureMarkdownPaths, hasSubstantiveMarkdown, resolveArchitectureArtifact } from \"./architecture-artifact.js\";\nimport { artifactFileName, artifactFrontmatter, type ArtifactName } from \"./artifact-metadata.js\";\nimport { pathExists } from \"./files.js\";\nimport { findGitRoot } from \"./git.js\";\nimport { slugify, titleFromSlug } from \"./ids.js\";\nimport {\n clearCurrentArtifactForPath,\n defaultSessionPath,\n findFolderByPath,\n loadCurrentSession,\n saveCurrentSession,\n setCurrentArtifactForPath,\n setCurrentChangeForPath,\n type CurrentSession,\n type SessionCurrentChange,\n} from \"./session-state.js\";\nimport { ensureWeaveScaffold } from \"./weave-scaffold.js\";\nimport { resolveChangeContext, type WorkspaceModeKind } from \"./workspace-mode.js\";\n\nconst execFileAsync = promisify(execFile);\nconst idChars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n\nexport type BranchStatus = \"created\" | \"checked_out\" | \"already_active\" | \"skipped_not_git\";\nexport type ChangeType = \"feat\" | \"fix\" | \"refactor\" | \"docs\" | \"test\" | \"ci\" | \"chore\";\nexport type BranchMatch = \"match\" | \"mismatch\" | \"not_git\" | \"unknown\";\nexport type CurrentSource = \"session\" | \"inferred_saved\" | \"none\";\nexport type ChangeStage = (typeof changeStages)[number];\nexport type StoredChangeStage = (typeof storedStages)[number];\nexport type ArtifactSourceId = (typeof artifactSourceIds)[number];\nexport type KnowledgeStatus = (typeof knowledgeStatuses)[number];\nexport type KnowledgeInvalidationSource = ChangeStage | ArtifactSourceId;\nexport type StaleChangeLanes = Partial<Record<ChangeStage, StaleChangeLaneMetadata>>;\nexport type ChangeArtifactsMetadata = Partial<Record<ChangeStage, ChangeArtifactMetadata>>;\n\nexport const changeTypes: ChangeType[] = [\"feat\", \"fix\", \"refactor\", \"docs\", \"test\", \"ci\", \"chore\"];\nexport const changeStages = [\"exploration\", \"prd\", \"architecture\", \"issues\"] as const;\n// `started` is a stored stage but NOT an artifact lane: non-feature changes begin at\n// `started` before any durable artifact lane has been reached. It never appears in\n// `changeStages`, so staleness/dependency logic operates only on the four real lanes.\nexport const storedStages = [\"started\", ...changeStages] as const;\nexport const artifactSourceIds = [\"exploration\", \"prd\", \"architecture\", \"discussion\", \"sessions\", \"codebase\"] as const;\nexport const knowledgeStatuses = [\"pending\", \"stale\", \"updated\", \"none\"] as const;\n\nexport interface StaleChangeLaneMetadata {\n invalidated_by: ChangeStage;\n invalidated_at: string;\n}\n\nexport interface StaleHistoryEntry {\n lane: ChangeStage;\n invalidated_by: ChangeStage | null;\n invalidated_at: string | null;\n cleared_at: string;\n reason: string | null;\n}\n\nexport interface ChangeArtifactMetadata {\n sources: ArtifactSourceId[];\n updated_at: string;\n}\n\nexport interface KnowledgeMetadata {\n status: KnowledgeStatus;\n updated_at: string;\n domains: string[];\n shared: string[];\n files: string[];\n delta?: string;\n reason?: string;\n invalidated_by?: KnowledgeInvalidationSource;\n invalidated_at?: string;\n}\n\nexport class ChangeCommandError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly details?: unknown,\n ) {\n super(message);\n }\n}\n\nexport interface ChangeTargetResult {\n path: string;\n changePath: string;\n branch: string;\n branchStatus: BranchStatus;\n current: boolean;\n}\n\nexport interface ChangeOperationResult {\n status: \"ok\";\n id: string;\n slug: string;\n title: string;\n type: ChangeType;\n branch: string;\n targets: ChangeTargetResult[];\n message: string;\n}\n\nexport interface ChangeSummary {\n id: string;\n slug: string;\n title: string;\n type: ChangeType;\n stage: StoredChangeStage;\n stale: StaleChangeLanes;\n stale_history: StaleHistoryEntry[];\n artifacts: ChangeArtifactsMetadata;\n knowledge?: KnowledgeMetadata;\n branch: string;\n path: string;\n changePath: string;\n created_at?: string;\n updated_at?: string;\n active: boolean;\n}\n\nexport interface ChangeTargetSummary {\n id?: string;\n name?: string;\n path: string;\n changes: ChangeSummary[];\n}\n\nexport interface ChangeListResult {\n status: \"ok\";\n targets: ChangeTargetSummary[];\n message: string;\n}\n\nexport interface CurrentChangeTargetResult {\n id?: string;\n name?: string;\n path: string;\n source: CurrentSource;\n saved: boolean;\n current?: ChangeSummary;\n branch?: string;\n branchMatch: BranchMatch;\n mismatch?: ChangeMismatch;\n}\n\nexport interface CurrentChangeResult {\n status: \"ok\";\n targets: CurrentChangeTargetResult[];\n message: string;\n}\n\nexport interface ChangeMismatch {\n session: SessionCurrentChange;\n branch: ChangeSummary;\n}\n\nexport interface StatusChangeTargetResult {\n id?: string;\n name?: string;\n path: string;\n active: boolean;\n source: CurrentSource | \"explicit\";\n saved: boolean;\n change?: ChangeSummary;\n branch?: string;\n branchMatch: BranchMatch;\n mismatch?: ChangeMismatch;\n}\n\nexport interface StatusChangeResult {\n status: \"ok\";\n targets: StatusChangeTargetResult[];\n message: string;\n}\n\nexport interface ActiveChangeContext {\n target: {\n id?: string;\n name?: string;\n path: string;\n };\n change: ChangeSummary;\n mode: WorkspaceModeKind;\n branch?: string;\n branchMatch: BranchMatch;\n}\n\nexport interface SwitchChangeResult {\n status: \"ok\";\n change: ChangeSummary;\n branchStatus: BranchStatus;\n target: {\n id?: string;\n name?: string;\n path: string;\n };\n message: string;\n}\n\nexport interface CreateChangeOptions {\n cwd: string;\n title: string;\n type?: ChangeType;\n slug?: string;\n now?: Date;\n randomId?: () => string;\n sessionPath?: string;\n}\n\nexport interface ListChangesOptions {\n cwd: string;\n sessionPath?: string;\n}\n\nexport interface CurrentChangeOptions {\n cwd: string;\n now?: Date;\n sessionPath?: string;\n}\n\nexport interface StatusChangeOptions {\n cwd: string;\n change?: string;\n now?: Date;\n sessionPath?: string;\n}\n\nexport interface ProgressChangeOptions {\n cwd: string;\n stage: ChangeStage;\n sources?: readonly string[];\n now?: Date;\n sessionPath?: string;\n noInvalidate?: boolean;\n invalidateOnly?: readonly ChangeStage[];\n}\n\nexport interface KnowledgeChangeOptions {\n cwd: string;\n status: KnowledgeStatus;\n domains?: readonly string[];\n shared?: readonly string[];\n files?: readonly string[];\n delta?: string;\n reason?: string;\n invalidatedBy?: string;\n now?: Date;\n sessionPath?: string;\n}\n\nexport interface ProgressChangeResult {\n status: \"ok\";\n target: {\n id?: string;\n name?: string;\n path: string;\n };\n change: ChangeSummary;\n progressed: ChangeStage;\n sources: ArtifactSourceId[];\n note?: string;\n message: string;\n}\n\nexport interface KnowledgeChangeResult {\n status: \"ok\";\n target: {\n id?: string;\n name?: string;\n path: string;\n };\n change: ChangeSummary;\n knowledge: KnowledgeMetadata;\n message: string;\n}\n\nexport interface SwitchChangeOptions {\n cwd: string;\n change: string;\n now?: Date;\n sessionPath?: string;\n}\n\ninterface ChangeTarget {\n id?: string;\n name?: string;\n path: string;\n}\n\ninterface ExistingChangeMetadata {\n id: string;\n slug: string;\n title: string;\n type: ChangeType;\n branch: string;\n}\n\ninterface ChangeStatusMetadata extends ExistingChangeMetadata {\n stage: StoredChangeStage;\n stale: StaleChangeLanes;\n stale_history: StaleHistoryEntry[];\n artifacts: ChangeArtifactsMetadata;\n knowledge?: KnowledgeMetadata;\n created_at?: string;\n updated_at?: string;\n}\n\nexport async function createChange(options: CreateChangeOptions): Promise<ChangeOperationResult> {\n const now = options.now ?? new Date();\n const title = options.title.trim();\n if (!title) {\n throw new ChangeCommandError(\"missing_title\", \"Change title is required\");\n }\n\n const targets = [await resolveTarget(options.cwd, options.sessionPath)];\n const type = options.type ?? \"feat\";\n const slug = normalizeChangeSlug(options.slug ?? title);\n const id = await generateChangeId(targets, slug, now, options.randomId ?? randomChangeIdPart);\n const branch = changeBranch(id);\n\n await assertChangeMissing(targets, id);\n\n const results: ChangeTargetResult[] = [];\n for (const target of targets) {\n const branchStatus = await ensureChangeBranch(target.path, branch);\n await ensureWeaveScaffold({ folder: { path: target.path } });\n const changePath = changeDir(target.path, id);\n await mkdir(changePath, { recursive: false });\n await mkdir(path.join(changePath, \"sessions\"));\n await writeFile(path.join(changePath, \"status.yml\"), statusTemplate({ id, slug, title, type, branch, now }));\n // Feature changes scaffold exploration.md and start at `stage: exploration`. Non-feature\n // changes start at `stage: started` with no exploration artifact; their first real artifact\n // is created later by the fitting skill (weave-architect, weave-issues, or weave-prd).\n if (type === \"feat\") {\n await writeFile(path.join(changePath, \"exploration.md\"), explorationTemplate(title, title, now));\n }\n results.push({ path: target.path, changePath, branch, branchStatus, current: true });\n }\n\n await saveCurrentForTargets(\n options.sessionPath,\n results.map((target) => ({\n root: target.path,\n changeId: id,\n changePath: target.changePath,\n branch,\n artifact: type === \"feat\" ? \"exploration\" : undefined,\n })),\n now,\n );\n\n return summarizeChangeOperation({ id, slug, title, type, branch, targets: results, verb: \"Created\" });\n}\n\nexport async function listChanges(options: ListChangesOptions): Promise<ChangeListResult> {\n const session = await loadCurrentSession(options.sessionPath ?? defaultSessionPath());\n const targets = [await resolveTarget(options.cwd, options.sessionPath)];\n const summaries: ChangeTargetSummary[] = [];\n\n for (const target of targets) {\n const activeId = activeChangeForTarget(session, target)?.id;\n const changes = await readChanges(target.path, activeId);\n summaries.push({ id: target.id, name: target.name, path: target.path, changes });\n }\n\n return {\n status: \"ok\",\n targets: summaries,\n message: formatListMessage(summaries),\n };\n}\n\nexport async function currentChange(options: CurrentChangeOptions): Promise<CurrentChangeResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const targets = [await resolveTarget(options.cwd, sessionPath)];\n const results: CurrentChangeTargetResult[] = [];\n let mutated = false;\n\n for (const target of targets) {\n const context = await currentContextForTarget(session, target, now, { saveInferred: true });\n mutated ||= context.saved;\n results.push(context);\n }\n\n if (mutated) {\n await saveCurrentSession(session, sessionPath);\n }\n\n return {\n status: \"ok\",\n targets: results,\n message: formatCurrentMessage(results),\n };\n}\n\nexport async function statusChange(options: StatusChangeOptions): Promise<StatusChangeResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const targets = [await resolveTarget(options.cwd, sessionPath)];\n const results: StatusChangeTargetResult[] = [];\n let mutated = false;\n\n for (const target of targets) {\n if (options.change) {\n const changes = await readChanges(target.path, activeChangeForTarget(session, target)?.id);\n const change = resolveChangeReference(changes, options.change);\n const branch = await currentBranch(target.path);\n results.push({\n id: target.id,\n name: target.name,\n path: target.path,\n active: change.active,\n source: \"explicit\",\n saved: false,\n change,\n branch,\n branchMatch: branchMatch(branch, change.branch, await findGitRoot(target.path)),\n });\n continue;\n }\n\n const context = await currentContextForTarget(session, target, now, { saveInferred: true });\n mutated ||= context.saved;\n results.push({\n id: context.id,\n name: context.name,\n path: context.path,\n active: Boolean(context.current),\n source: context.source,\n saved: context.saved,\n change: context.current,\n branch: context.branch,\n branchMatch: context.branchMatch,\n mismatch: context.mismatch,\n });\n }\n\n if (mutated) {\n await saveCurrentSession(session, sessionPath);\n }\n\n return {\n status: \"ok\",\n targets: results,\n message: formatStatusMessage(results),\n };\n}\n\nexport async function activeChangeContext(options: CurrentChangeOptions): Promise<ActiveChangeContext> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const context = await resolveChangeContext(options.cwd, sessionPath);\n if (!context) {\n throw new ChangeCommandError(\"no_weave_context\", \"No Weave context found. Run `weave init` first.\");\n }\n\n const target: ChangeTarget = {\n id: context.folderId,\n name: context.folderName,\n path: context.rootPath,\n };\n const current = await currentContextForTarget(session, target, now, { saveInferred: true });\n if (current.saved) {\n await saveCurrentSession(session, sessionPath);\n }\n if (!current.current) {\n throw new ChangeCommandError(\"no_current_change\", \"No active Weave change found. Run `weave change new` or `weave change switch` first.\");\n }\n\n return {\n target: { id: target.id, name: target.name, path: target.path },\n change: current.current,\n mode: context.mode,\n branch: current.branch,\n branchMatch: current.branchMatch,\n };\n}\n\nexport async function switchChange(options: SwitchChangeOptions): Promise<SwitchChangeResult> {\n const now = options.now ?? new Date();\n const target = await resolveTarget(options.cwd, options.sessionPath);\n await assertCleanGitTargets([target]);\n\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const changes = await readChanges(target.path, activeChangeForTarget(session, target)?.id);\n const change = resolveChangeReference(changes, options.change);\n const branchStatus = await ensureChangeBranch(target.path, change.branch);\n\n setCurrentChangeForPath(\n session,\n target.path,\n { id: change.id, path: change.path, branch: change.branch },\n now,\n );\n const activeArtifact = activeArtifactForTarget(session, target);\n if (activeArtifact && activeArtifact.change_id !== change.id) {\n clearCurrentArtifactForPath(session, target.path, now);\n }\n await saveCurrentSession(session, sessionPath);\n\n return {\n status: \"ok\",\n change: { ...change, active: true },\n branchStatus,\n target: { id: target.id, name: target.name, path: target.path },\n message: [\n `Switched change: ${change.id}`,\n \"\",\n `Title: ${change.title}`,\n `Type: ${change.type}`,\n `Stage: ${change.stage}`,\n `Branch: ${change.branch} (${formatBranchStatus(branchStatus)})`,\n `Path: ${change.path}`,\n \"Current: yes\",\n ].join(\"\\n\"),\n };\n}\n\nexport async function progressChange(options: ProgressChangeOptions): Promise<ProgressChangeResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const target = await resolveTarget(options.cwd, sessionPath);\n const context = await currentContextForTarget(session, target, now, { saveInferred: true });\n if (context.saved) {\n await saveCurrentSession(session, sessionPath);\n }\n if (!context.current) {\n throw new ChangeCommandError(\"no_current_change\", \"No active Weave change found. Run `weave change new` or `weave change switch` first.\");\n }\n\n const statusPath = path.join(context.current.changePath, \"status.yml\");\n const raw = await readStatusFile(statusPath);\n const existing = await readChangeMetadata(context.current.changePath, context.current.id);\n const sourceResolution = await resolveProgressSources(options, context.current.changePath);\n\n const nextStage = maxStage([existing.stage, options.stage]);\n const artifacts: ChangeArtifactsMetadata = {\n ...existing.artifacts,\n [options.stage]: {\n sources: sourceResolution.sources,\n updated_at: now.toISOString(),\n },\n };\n const stale: StaleChangeLanes = { ...existing.stale };\n delete stale[options.stage];\n\n const invalidatedAt = now.toISOString();\n const computedDependents = transitiveDependents(options.stage, artifacts);\n const propagationTargets = resolveStalePropagationTargets({\n computed: computedDependents,\n noInvalidate: options.noInvalidate ?? false,\n invalidateOnly: options.invalidateOnly,\n });\n for (const stage of propagationTargets) {\n stale[stage] = {\n invalidated_by: options.stage,\n invalidated_at: invalidatedAt,\n };\n }\n\n const nextStatus = {\n ...raw,\n stage: nextStage,\n artifacts,\n updated_at: invalidatedAt,\n };\n if (Object.keys(stale).length > 0) {\n Object.assign(nextStatus, { stale });\n } else {\n delete (nextStatus as { stale?: StaleChangeLanes }).stale;\n }\n const knowledge = staleKnowledgeFromProgress(raw.knowledge, existing.knowledge, options.stage, invalidatedAt);\n if (knowledge) {\n Object.assign(nextStatus, { knowledge });\n }\n\n await writeFile(statusPath, YAML.stringify(nextStatus));\n const updated = await readChangeMetadata(context.current.changePath, context.current.id);\n const change: ChangeSummary = {\n ...updated,\n path: context.current.path,\n changePath: context.current.changePath,\n active: true,\n };\n\n return {\n status: \"ok\",\n target: { id: target.id, name: target.name, path: target.path },\n change,\n progressed: options.stage,\n sources: sourceResolution.sources,\n note: sourceResolution.note,\n message: formatProgressMessage({ id: target.id, name: target.name, path: target.path }, change, options.stage, sourceResolution.note),\n };\n}\n\nexport interface ClearChangeStalenessOptions {\n cwd: string;\n lane: ChangeStage;\n reason?: string;\n now?: Date;\n sessionPath?: string;\n}\n\nexport interface ClearChangeStalenessResult {\n status: \"ok\";\n target: {\n id?: string;\n name?: string;\n path: string;\n };\n change: ChangeSummary;\n cleared: ChangeStage;\n history_entry: StaleHistoryEntry;\n message: string;\n}\n\nexport async function clearChangeStaleness(\n options: ClearChangeStalenessOptions,\n): Promise<ClearChangeStalenessResult> {\n const now = options.now ?? new Date();\n const session = await loadOrCreateSession(\n options.sessionPath ?? defaultSessionPath(),\n now,\n );\n const target = await resolveTarget(options.cwd, options.sessionPath);\n const context = await currentContextForTarget(session, target, now, { saveInferred: true });\n if (context.saved) {\n await saveCurrentSession(session, options.sessionPath ?? defaultSessionPath());\n }\n if (!context.current) {\n throw new ChangeCommandError(\n \"no_current_change\",\n \"No active Weave change found. Run `weave change new` or `weave change switch` first.\",\n );\n }\n\n const statusPath = path.join(context.current.changePath, \"status.yml\");\n const raw = await readStatusFile(statusPath);\n const existing = await readChangeMetadata(context.current.changePath, context.current.id);\n\n const currentStale = existing.stale[options.lane];\n if (!currentStale) {\n throw new ChangeCommandError(\n \"lane_not_stale\",\n `Lane \"${options.lane}\" is not currently marked stale; nothing to clear.`,\n { lane: options.lane },\n );\n }\n\n const nextStale: StaleChangeLanes = { ...existing.stale };\n delete nextStale[options.lane];\n\n const historyEntry: StaleHistoryEntry = {\n lane: options.lane,\n invalidated_by: currentStale.invalidated_by,\n invalidated_at: currentStale.invalidated_at,\n cleared_at: now.toISOString(),\n reason: options.reason && options.reason.trim().length > 0 ? options.reason.trim() : null,\n };\n const nextHistory: StaleHistoryEntry[] = [...existing.stale_history, historyEntry];\n\n const nextStatus = {\n ...raw,\n updated_at: now.toISOString(),\n stale_history: nextHistory,\n } as Record<string, unknown>;\n if (Object.keys(nextStale).length > 0) {\n nextStatus.stale = nextStale;\n } else {\n delete (nextStatus as { stale?: StaleChangeLanes }).stale;\n }\n\n await writeFile(statusPath, YAML.stringify(nextStatus));\n const updated = await readChangeMetadata(context.current.changePath, context.current.id);\n const change: ChangeSummary = {\n ...updated,\n path: context.current.path,\n changePath: context.current.changePath,\n active: true,\n };\n\n return {\n status: \"ok\",\n target: { id: target.id, name: target.name, path: target.path },\n change,\n cleared: options.lane,\n history_entry: historyEntry,\n message: `Cleared stale flag for ${options.lane} (was invalidated by ${currentStale.invalidated_by}).${historyEntry.reason ? ` Reason: ${historyEntry.reason}` : \"\"}`,\n };\n}\n\nexport async function knowledgeChange(options: KnowledgeChangeOptions): Promise<KnowledgeChangeResult> {\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(sessionPath, now);\n const target = await resolveTarget(options.cwd, sessionPath);\n const context = await currentContextForTarget(session, target, now, { saveInferred: true });\n if (context.saved) {\n await saveCurrentSession(session, sessionPath);\n }\n if (!context.current) {\n throw new ChangeCommandError(\"no_current_change\", \"No active Weave change found. Run `weave change new` or `weave change switch` first.\");\n }\n\n const invalidatedBy = options.invalidatedBy ? normalizeKnowledgeInvalidationSource(options.invalidatedBy) : undefined;\n const statusPath = path.join(context.current.changePath, \"status.yml\");\n const raw = await readStatusFile(statusPath);\n const existing = await readChangeMetadata(context.current.changePath, context.current.id);\n const knowledge = mergeKnowledgeMetadata(raw.knowledge, existing.knowledge, {\n status: options.status,\n updatedAt: now.toISOString(),\n domains: options.domains,\n shared: options.shared,\n files: options.files,\n delta: options.delta,\n reason: options.reason,\n invalidatedBy,\n });\n\n const nextStatus = {\n ...raw,\n knowledge,\n updated_at: now.toISOString(),\n };\n await writeFile(statusPath, YAML.stringify(nextStatus));\n const updated = await readChangeMetadata(context.current.changePath, context.current.id);\n const change: ChangeSummary = {\n ...updated,\n path: context.current.path,\n changePath: context.current.changePath,\n active: true,\n };\n\n if (!change.knowledge) {\n throw new ChangeCommandError(\"invalid_knowledge_status\", \"Knowledge status could not be recorded\");\n }\n\n return {\n status: \"ok\",\n target: { id: target.id, name: target.name, path: target.path },\n change,\n knowledge: change.knowledge,\n message: formatKnowledgeMessage({ id: target.id, name: target.name, path: target.path }, change),\n };\n}\n\nfunction normalizeChangeSlug(value: string): string {\n const slug = slugify(value, \"change\");\n return slug.split(\"-\").filter(Boolean).slice(0, 6).join(\"-\") || \"change\";\n}\n\nasync function generateChangeId(\n targets: ChangeTarget[],\n slug: string,\n now: Date,\n randomId: () => string,\n): Promise<string> {\n const date = formatDatePrefix(now);\n for (let index = 0; index < 20; index += 1) {\n const id = `${date}-${randomId()}-${slug}`;\n const exists = await Promise.all(targets.map((target) => pathExists(changeDir(target.path, id))));\n if (!exists.some(Boolean)) {\n return id;\n }\n }\n\n throw new ChangeCommandError(\"id_collision\", \"Could not generate a unique change id\");\n}\n\nfunction formatDatePrefix(now: Date): string {\n const year = String(now.getFullYear()).slice(-2);\n const month = String(now.getMonth() + 1).padStart(2, \"0\");\n const day = String(now.getDate()).padStart(2, \"0\");\n return `${year}${month}${day}`;\n}\n\nfunction randomChangeIdPart(): string {\n const bytes = randomBytes(4);\n return Array.from(bytes, (byte) => idChars[byte % idChars.length]).join(\"\");\n}\n\nfunction changeBranch(changeId: string): string {\n return `change/${changeId}`;\n}\n\nfunction changeDir(root: string, changeId: string): string {\n return path.join(root, \"wiki\", \"changes\", changeId);\n}\n\nasync function assertChangeMissing(targets: ChangeTarget[], changeId: string): Promise<void> {\n const existing: string[] = [];\n for (const target of targets) {\n const targetChangePath = changeDir(target.path, changeId);\n if (await pathExists(targetChangePath)) {\n existing.push(targetChangePath);\n }\n }\n\n if (existing.length > 0) {\n throw new ChangeCommandError(\n \"change_exists\",\n `Change already exists:\\n${existing.map((item) => ` ${item}`).join(\"\\n\")}`,\n { existing },\n );\n }\n}\n\nasync function resolveTarget(cwd: string, sessionPath?: string): Promise<ChangeTarget> {\n const context = await resolveChangeContext(cwd, sessionPath ?? defaultSessionPath());\n if (!context) {\n throw new ChangeCommandError(\"no_weave_context\", \"No Weave context found. Run `weave init` first.\");\n }\n\n return {\n id: context.folderId,\n name: context.folderName,\n path: context.rootPath,\n };\n}\n\nasync function readChanges(root: string, activeId?: string): Promise<ChangeSummary[]> {\n const changesRoot = path.join(root, \"wiki\", \"changes\");\n const entries = await readdir(changesRoot, { withFileTypes: true }).catch((error: unknown) => {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return [];\n }\n throw error;\n });\n\n const changes = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory())\n .map(async (entry) => {\n const changePath = path.join(changesRoot, entry.name);\n const metadata = await readChangeMetadata(changePath, entry.name);\n return {\n ...metadata,\n path: path.join(\"wiki\", \"changes\", metadata.id),\n changePath,\n active: metadata.id === activeId,\n };\n }),\n );\n\n return changes.sort(compareChangesNewestFirst);\n}\n\nasync function readChangeMetadata(changePath: string, fallbackId: string): Promise<ChangeStatusMetadata> {\n const statusPath = path.join(changePath, \"status.yml\");\n const parsed = (await pathExists(statusPath)) ? await readStatusFile(statusPath) : {};\n const id = typeof parsed?.id === \"string\" ? parsed.id : fallbackId;\n const slug = typeof parsed?.slug === \"string\" ? parsed.slug : id.split(\"-\").slice(2).join(\"-\");\n const title = typeof parsed?.title === \"string\" ? parsed.title : titleFromSlug(slug);\n const type = isChangeType(parsed?.type) ? parsed.type : \"feat\";\n const branch = typeof parsed?.branch === \"string\" ? parsed.branch : changeBranch(id);\n const stage = isStoredChangeStage(parsed?.stage) ? parsed.stage : \"exploration\";\n return {\n id,\n slug,\n title,\n type,\n stage,\n stale: parseStaleLanes(parsed?.stale),\n stale_history: parseStaleHistory(parsed?.stale_history),\n artifacts: parseArtifactsMetadata(parsed?.artifacts),\n knowledge: parseKnowledgeMetadata(parsed?.knowledge),\n branch,\n created_at: typeof parsed?.created_at === \"string\" ? parsed.created_at : undefined,\n updated_at: typeof parsed?.updated_at === \"string\" ? parsed.updated_at : undefined,\n };\n}\n\nasync function readStatusFile(statusPath: string): Promise<Record<string, unknown>> {\n const parsed = YAML.parse(await readFile(statusPath, \"utf8\"));\n return isRecord(parsed) ? parsed : {};\n}\n\nfunction parseStaleHistory(value: unknown): StaleHistoryEntry[] {\n if (!Array.isArray(value)) return [];\n const out: StaleHistoryEntry[] = [];\n for (const entry of value) {\n if (!isRecord(entry)) continue;\n const lane = entry.lane;\n const clearedAt = entry.cleared_at;\n if (!isChangeStage(lane) || typeof clearedAt !== \"string\") continue;\n out.push({\n lane,\n invalidated_by: isChangeStage(entry.invalidated_by) ? entry.invalidated_by : null,\n invalidated_at: typeof entry.invalidated_at === \"string\" ? entry.invalidated_at : null,\n cleared_at: clearedAt,\n reason: typeof entry.reason === \"string\" ? entry.reason : null,\n });\n }\n return out;\n}\n\nfunction parseStaleLanes(value: unknown): StaleChangeLanes {\n if (!isRecord(value)) {\n return {};\n }\n\n const stale: StaleChangeLanes = {};\n for (const [lane, metadata] of Object.entries(value)) {\n if (!isChangeStage(lane) || !isRecord(metadata)) {\n continue;\n }\n const invalidatedBy = metadata.invalidated_by;\n const invalidatedAt = metadata.invalidated_at;\n if (!isChangeStage(invalidatedBy) || typeof invalidatedAt !== \"string\") {\n continue;\n }\n stale[lane] = {\n invalidated_by: invalidatedBy,\n invalidated_at: invalidatedAt,\n };\n }\n return stale;\n}\n\nfunction parseArtifactsMetadata(value: unknown): ChangeArtifactsMetadata {\n if (!isRecord(value)) {\n return {};\n }\n\n const artifacts: ChangeArtifactsMetadata = {};\n for (const [lane, metadata] of Object.entries(value)) {\n if (!isChangeStage(lane) || !isRecord(metadata)) {\n continue;\n }\n const updatedAt = metadata.updated_at;\n if (typeof updatedAt !== \"string\") {\n continue;\n }\n artifacts[lane] = {\n sources: parseArtifactSources(metadata.sources),\n updated_at: updatedAt,\n };\n }\n return artifacts;\n}\n\nfunction parseArtifactSources(value: unknown): ArtifactSourceId[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return dedupeSources(value.filter(isArtifactSourceId));\n}\n\nfunction parseKnowledgeMetadata(value: unknown): KnowledgeMetadata | undefined {\n if (!isRecord(value) || !isKnowledgeStatus(value.status) || typeof value.updated_at !== \"string\") {\n return undefined;\n }\n\n const invalidatedBy = value.invalidated_by;\n const invalidatedAt = value.invalidated_at;\n const knowledge: KnowledgeMetadata = {\n status: value.status,\n updated_at: value.updated_at,\n domains: parseStringList(value.domains),\n shared: parseStringList(value.shared),\n files: parseStringList(value.files),\n };\n\n if (typeof value.delta === \"string\") {\n knowledge.delta = value.delta;\n }\n if (typeof value.reason === \"string\") {\n knowledge.reason = value.reason;\n }\n if (isKnowledgeInvalidationSource(invalidatedBy) && typeof invalidatedAt === \"string\") {\n knowledge.invalidated_by = invalidatedBy;\n knowledge.invalidated_at = invalidatedAt;\n }\n\n return knowledge;\n}\n\nfunction parseStringList(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return dedupeStrings(value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0));\n}\n\nfunction dedupeStrings(values: readonly string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n}\n\nfunction mergeKnowledgeMetadata(\n rawKnowledge: unknown,\n existing: KnowledgeMetadata | undefined,\n update: {\n status: KnowledgeStatus;\n updatedAt: string;\n domains?: readonly string[];\n shared?: readonly string[];\n files?: readonly string[];\n delta?: string;\n reason?: string;\n invalidatedBy?: KnowledgeInvalidationSource;\n },\n): KnowledgeMetadata {\n const base = isRecord(rawKnowledge) ? { ...rawKnowledge } : {};\n const currentDomains = existing?.domains ?? parseStringList(base.domains);\n const currentShared = existing?.shared ?? parseStringList(base.shared);\n const currentFiles = existing?.files ?? parseStringList(base.files);\n const next = {\n ...base,\n status: update.status,\n updated_at: update.updatedAt,\n domains: update.domains ? dedupeStrings(update.domains) : currentDomains,\n shared: update.shared ? dedupeStrings(update.shared) : currentShared,\n files: update.files ? dedupeStrings(update.files) : currentFiles,\n };\n\n if (update.delta !== undefined) {\n Object.assign(next, { delta: update.delta });\n } else if (existing?.delta) {\n Object.assign(next, { delta: existing.delta });\n }\n\n if (update.reason !== undefined) {\n Object.assign(next, { reason: update.reason });\n } else if (existing?.reason) {\n Object.assign(next, { reason: existing.reason });\n }\n\n if (update.status === \"stale\") {\n Object.assign(next, { invalidated_at: update.updatedAt });\n if (update.invalidatedBy) {\n Object.assign(next, { invalidated_by: update.invalidatedBy });\n } else if (existing?.invalidated_by) {\n Object.assign(next, { invalidated_by: existing.invalidated_by });\n }\n } else {\n delete (next as { invalidated_by?: KnowledgeInvalidationSource }).invalidated_by;\n delete (next as { invalidated_at?: string }).invalidated_at;\n }\n\n return parseKnowledgeMetadata(next) ?? {\n status: update.status,\n updated_at: update.updatedAt,\n domains: update.domains ? dedupeStrings(update.domains) : currentDomains,\n shared: update.shared ? dedupeStrings(update.shared) : currentShared,\n files: update.files ? dedupeStrings(update.files) : currentFiles,\n };\n}\n\nfunction staleKnowledgeFromProgress(\n rawKnowledge: unknown,\n existing: KnowledgeMetadata | undefined,\n invalidatedBy: ChangeStage,\n invalidatedAt: string,\n): KnowledgeMetadata | undefined {\n if (!existing || (existing.status !== \"updated\" && existing.status !== \"none\")) {\n return existing;\n }\n\n return mergeKnowledgeMetadata(rawKnowledge, existing, {\n status: \"stale\",\n updatedAt: invalidatedAt,\n invalidatedBy,\n reason: `${invalidatedBy} changed after knowledge was marked ${existing.status}.`,\n });\n}\n\nasync function resolveProgressSources(\n options: ProgressChangeOptions,\n changePath: string,\n): Promise<{ sources: ArtifactSourceId[]; note?: string }> {\n const requested = options.sources ?? [];\n const sources = dedupeSources(requested.map((source) => normalizeArtifactSourceId(source)));\n if (sources.length > 0) {\n return { sources };\n }\n\n if (options.stage === \"issues\" && (await resolveArchitectureArtifact(changePath)).substantive) {\n return { sources: [\"architecture\"] };\n }\n\n return {\n sources,\n note: `No sources recorded for ${options.stage}; downstream stale invalidation will only use explicitly recorded dependencies.`,\n };\n}\n\nfunction normalizeArtifactSourceId(value: string): ArtifactSourceId {\n if (isArtifactSourceId(value)) {\n return value;\n }\n\n throw new ChangeCommandError(\n \"unsupported_source\",\n `Unsupported artifact source: ${value}. Expected ${artifactSourceIds.join(\", \")}`,\n { source: value, supported: artifactSourceIds },\n );\n}\n\nfunction dedupeSources(sources: ArtifactSourceId[]): ArtifactSourceId[] {\n return [...new Set(sources)];\n}\n\nfunction resolveStalePropagationTargets(input: {\n computed: ChangeStage[];\n noInvalidate: boolean;\n invalidateOnly?: readonly ChangeStage[];\n}): ChangeStage[] {\n if (input.noInvalidate && input.invalidateOnly && input.invalidateOnly.length > 0) {\n throw new ChangeCommandError(\n \"conflicting_stale_flags\",\n \"Use either --no-invalidate or --invalidate=<list>, not both.\",\n );\n }\n if (input.noInvalidate) {\n return [];\n }\n if (input.invalidateOnly && input.invalidateOnly.length > 0) {\n const computed = new Set(input.computed);\n const intersection: ChangeStage[] = [];\n const unknown: ChangeStage[] = [];\n for (const candidate of input.invalidateOnly) {\n if (computed.has(candidate)) {\n intersection.push(candidate);\n } else {\n unknown.push(candidate);\n }\n }\n if (unknown.length > 0) {\n throw new ChangeCommandError(\n \"invalid_invalidate_target\",\n `Cannot invalidate lanes that are not transitive dependents of the progressed lane: ${unknown.join(\", \")}`,\n { unknown, computedDependents: input.computed },\n );\n }\n return intersection;\n }\n return input.computed;\n}\n\nfunction transitiveDependents(source: ChangeStage, artifacts: ChangeArtifactsMetadata): ChangeStage[] {\n const dependents = new Set<ChangeStage>();\n const queue: ChangeStage[] = [source];\n\n for (let index = 0; index < queue.length; index += 1) {\n const current = queue[index];\n for (const candidate of changeStages) {\n if (candidate === source || dependents.has(candidate)) {\n continue;\n }\n const candidateSources = artifacts[candidate]?.sources ?? [];\n if (candidateSources.some((candidateSource) => candidateSource === current)) {\n dependents.add(candidate);\n queue.push(candidate);\n }\n }\n }\n\n return changeStages.filter((stage) => dependents.has(stage));\n}\n\nasync function hasIssueEvidence(changePath: string): Promise<boolean> {\n const tasksPath = path.join(changePath, \"tasks.md\");\n if (await hasSubstantiveMarkdown(tasksPath)) {\n return true;\n }\n\n const architecture = await resolveArchitectureArtifact(changePath);\n const evidencePaths = [\n path.join(changePath, \"exploration.md\"),\n path.join(changePath, \"prd.md\"),\n ...architectureMarkdownPaths(architecture),\n ];\n\n for (const filePath of evidencePaths) {\n if (!(await pathExists(filePath))) {\n continue;\n }\n const content = await readFile(filePath, \"utf8\");\n if (/(https?:\\/\\/\\S+\\/issues\\/\\d+|(^|\\s)#\\d+\\b)/m.test(content)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction compareChangesNewestFirst(left: ChangeSummary, right: ChangeSummary): number {\n const leftTime = left.created_at ?? left.id;\n const rightTime = right.created_at ?? right.id;\n return rightTime.localeCompare(leftTime);\n}\n\nfunction resolveChangeReference(changes: ChangeSummary[], value: string): ChangeSummary {\n const ref = value.trim().toLowerCase();\n const matches = changes.filter((change) => {\n const token = change.id.split(\"-\")[1];\n return (\n change.id.toLowerCase() === ref ||\n token === ref ||\n change.slug.toLowerCase().includes(ref) ||\n change.title.toLowerCase().includes(ref)\n );\n });\n\n if (matches.length === 1) {\n return matches[0];\n }\n\n if (matches.length === 0) {\n throw new ChangeCommandError(\"change_not_found\", `No matching change found: ${value}`);\n }\n\n throw new ChangeCommandError(\n \"ambiguous_change\",\n `Ambiguous change reference: ${value}\\n${matches.map((change) => ` ${change.id} - ${change.title}`).join(\"\\n\")}`,\n { candidates: matches.map((change) => ({ id: change.id, title: change.title, type: change.type, stage: change.stage })) },\n );\n}\n\nasync function currentContextForTarget(\n session: CurrentSession,\n target: ChangeTarget,\n now: Date,\n options: { saveInferred: boolean },\n): Promise<CurrentChangeTargetResult> {\n const saved = activeChangeForTarget(session, target);\n const changes = await readChanges(target.path, saved?.id);\n const branch = await currentBranch(target.path);\n const inferred = branch ? inferChangeFromBranch(changes, branch) : undefined;\n\n if (saved && inferred && saved.id !== inferred.id) {\n const savedChange = changes.find((change) => change.id === saved.id);\n return {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"session\",\n saved: false,\n current: savedChange ? { ...savedChange, active: true } : undefined,\n branch,\n branchMatch: \"mismatch\",\n mismatch: { session: saved, branch: inferred },\n };\n }\n\n if (saved) {\n const current = changes.find((change) => change.id === saved.id);\n return {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"session\",\n saved: false,\n current: current ? { ...current, active: true } : undefined,\n branch,\n branchMatch: current ? branchMatch(branch, current.branch, await findGitRoot(target.path)) : \"unknown\",\n };\n }\n\n if (inferred && options.saveInferred) {\n setCurrentChangeForPath(session, target.path, { id: inferred.id, path: inferred.path, branch: inferred.branch }, now);\n return {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"inferred_saved\",\n saved: true,\n current: { ...inferred, active: true },\n branch,\n branchMatch: \"match\",\n };\n }\n\n return {\n id: target.id,\n name: target.name,\n path: target.path,\n source: \"none\",\n saved: false,\n branch,\n branchMatch: branch ? \"unknown\" : (await findGitRoot(target.path)) ? \"unknown\" : \"not_git\",\n };\n}\n\nfunction activeChangeForTarget(session: CurrentSession | undefined, target: ChangeTarget): SessionCurrentChange | undefined {\n const id = target.id ?? (session ? findFolderByPath(session, target.path) : undefined);\n return id ? session?.folders[id]?.current_change : undefined;\n}\n\nfunction activeArtifactForTarget(session: CurrentSession | undefined, target: ChangeTarget) {\n const id = target.id ?? (session ? findFolderByPath(session, target.path) : undefined);\n return id ? session?.folders[id]?.current_artifact : undefined;\n}\n\nfunction inferChangeFromBranch(changes: ChangeSummary[], branch: string): ChangeSummary | undefined {\n if (!branch.startsWith(\"change/\")) {\n return undefined;\n }\n\n const id = branch.slice(\"change/\".length);\n return changes.find((change) => change.id === id);\n}\n\nasync function saveCurrentForTargets(\n sessionPath: string | undefined,\n updates: Array<{ root: string; changeId: string; changePath: string; branch: string; artifact?: ArtifactName }>,\n now: Date,\n): Promise<void> {\n const pathToSession = sessionPath ?? defaultSessionPath();\n const session = await loadOrCreateSession(pathToSession, now);\n for (const update of updates) {\n const changeRelativePath = path.relative(update.root, update.changePath);\n setCurrentChangeForPath(\n session,\n update.root,\n {\n id: update.changeId,\n path: changeRelativePath,\n branch: update.branch,\n },\n now,\n );\n // Non-feature changes start at `stage: started` with no scaffolded artifact, so they\n // begin with no current artifact context; the fitting skill sets it when it creates the\n // first real artifact.\n if (update.artifact) {\n setCurrentArtifactForPath(\n session,\n update.root,\n {\n artifact: update.artifact,\n change_id: update.changeId,\n path: artifactPath(changeRelativePath, update.artifact),\n },\n now,\n );\n }\n }\n await saveCurrentSession(session, pathToSession);\n}\n\nfunction artifactPath(changePath: string, artifact: ArtifactName): string {\n return path.join(changePath, artifactFileName(artifact));\n}\n\nasync function loadOrCreateSession(sessionPath: string, now: Date): Promise<CurrentSession> {\n return (\n (await loadCurrentSession(sessionPath)) ?? {\n version: 1,\n updated_at: now.toISOString(),\n folders: {},\n }\n );\n}\n\nfunction statusTemplate(input: { id: string; slug: string; title: string; type: ChangeType; branch: string; now: Date }): string {\n return YAML.stringify({\n version: 1,\n id: input.id,\n slug: input.slug,\n title: input.title,\n type: input.type,\n stage: input.type === \"feat\" ? \"exploration\" : \"started\",\n branch: input.branch,\n created_at: input.now.toISOString(),\n updated_at: input.now.toISOString(),\n });\n}\n\nfunction explorationTemplate(title: string, topic: string, now: Date): string {\n return `${artifactFrontmatter({ artifact: \"exploration\", now })}# ${titleFromSlug(slugify(title, \"change\")) || title}\n\n## Topic\n\n${topic}\n\n## Current Understanding\n\n## Open Questions\n\n## Decisions\n\n## Scenarios\n\n## Existing Behavior\n\n## PRD Readiness\n\nNot ready\n`;\n}\n\nasync function ensureChangeBranch(cwd: string, branch: string): Promise<BranchStatus> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return \"skipped_not_git\";\n }\n\n const current = await git([\"branch\", \"--show-current\"], gitRoot);\n if (current === branch) {\n return \"already_active\";\n }\n\n const exists = await git([\"rev-parse\", \"--verify\", `refs/heads/${branch}`], gitRoot);\n if (exists) {\n await gitRequired([\"checkout\", branch], gitRoot);\n return \"checked_out\";\n }\n\n await gitRequired([\"checkout\", \"-b\", branch], gitRoot);\n return \"created\";\n}\n\nasync function assertCleanGitTargets(targets: ChangeTarget[]): Promise<void> {\n for (const target of targets) {\n const gitRoot = await findGitRoot(target.path);\n if (!gitRoot) {\n continue;\n }\n\n const dirty = await git([\"status\", \"--porcelain\"], gitRoot);\n if (dirty) {\n throw new ChangeCommandError(\"dirty_worktree\", `Uncommitted changes in ${target.path}. Commit, stash, or clean them before switching change context.`, {\n path: target.path,\n });\n }\n }\n}\n\nasync function currentBranch(cwd: string): Promise<string | undefined> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n return undefined;\n }\n\n return git([\"branch\", \"--show-current\"], gitRoot);\n}\n\nfunction branchMatch(branch: string | undefined, expected: string, gitRoot: string | undefined): BranchMatch {\n if (!gitRoot) {\n return \"not_git\";\n }\n if (!branch) {\n return \"unknown\";\n }\n return branch === expected ? \"match\" : \"mismatch\";\n}\n\nasync function git(args: string[], cwd: string): Promise<string | undefined> {\n try {\n const { stdout } = await execFileAsync(\"git\", args, { cwd });\n const value = stdout.trim();\n return value.length > 0 ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function gitRequired(args: string[], cwd: string): Promise<void> {\n await execFileAsync(\"git\", args, { cwd });\n}\n\nfunction summarizeChangeOperation(input: {\n id: string;\n slug: string;\n title: string;\n type: ChangeType;\n branch: string;\n targets: ChangeTargetResult[];\n verb: string;\n}): ChangeOperationResult {\n const lines = [\n `${input.verb} change: ${input.id}`,\n \"\",\n `Title: ${input.title}`,\n `Type: ${input.type}`,\n `Branch: ${input.branch}`,\n \"\",\n \"Targets:\",\n ...input.targets.map((target) => ` ${target.path} (${formatBranchStatus(target.branchStatus)}, current)`),\n ];\n\n return {\n status: \"ok\",\n id: input.id,\n slug: input.slug,\n title: input.title,\n type: input.type,\n branch: input.branch,\n targets: input.targets,\n message: lines.join(\"\\n\"),\n };\n}\n\nfunction formatListMessage(targets: ChangeTargetSummary[]): string {\n if (targets.length === 0) {\n return \"No workspace folders found.\";\n }\n\n return targets\n .map((target) => {\n const lines = [`Changes in ${target.name ?? target.path}`];\n if (target.changes.length === 0) {\n lines.push(\" No changes found.\");\n } else {\n lines.push(\n ...target.changes.map((change) => `${change.active ? \"*\" : \" \"} ${change.id} ${change.type} ${change.stage} ${change.title}`),\n );\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n\nfunction formatCurrentMessage(targets: CurrentChangeTargetResult[]): string {\n if (targets.length === 0) {\n return \"No workspace folders found.\";\n }\n\n return targets.map(formatCurrentTarget).join(\"\\n\\n\");\n}\n\nfunction formatCurrentTarget(target: CurrentChangeTargetResult): string {\n const heading = target.name ? `${target.name} (${target.path})` : target.path;\n if (!target.current) {\n if (target.mismatch) {\n return [\n `Current change in ${heading}: mismatch`,\n `Session: ${target.mismatch.session.id}`,\n `Branch: ${target.mismatch.branch.id}`,\n `Resolve with: weave change switch ${target.mismatch.branch.id}`,\n ].join(\"\\n\");\n }\n return `Current change in ${heading}: none`;\n }\n\n return [\n `Current change in ${heading}: ${target.current.id}`,\n `Title: ${target.current.title}`,\n `Type: ${target.current.type}`,\n `Stage: ${target.current.stage}`,\n ...formatStaleLines(target.current.stale),\n ...formatKnowledgeLines(target.current.knowledge),\n `Branch: ${target.current.branch}`,\n `Path: ${target.current.path}`,\n `Source: ${formatCurrentSource(target.source)}`,\n ].join(\"\\n\");\n}\n\nfunction formatStatusMessage(targets: StatusChangeTargetResult[]): string {\n if (targets.length === 0) {\n return \"No workspace folders found.\";\n }\n\n return targets.map(formatStatusTarget).join(\"\\n\\n\");\n}\n\nfunction formatStatusTarget(target: StatusChangeTargetResult): string {\n const heading = target.name ? `${target.name} (${target.path})` : target.path;\n if (target.mismatch) {\n return [\n `Status in ${heading}: mismatch`,\n `Session: ${target.mismatch.session.id}`,\n `Branch: ${target.mismatch.branch.id}`,\n `Resolve with: weave change switch ${target.mismatch.branch.id}`,\n ].join(\"\\n\");\n }\n\n if (!target.change) {\n return `Status in ${heading}: no active change`;\n }\n\n return [\n `Status in ${heading}: ${target.change.id}`,\n `Title: ${target.change.title}`,\n `Type: ${target.change.type}`,\n `Stage: ${target.change.stage}`,\n ...formatStaleLines(target.change.stale),\n ...formatKnowledgeLines(target.change.knowledge),\n `Branch: ${target.change.branch}`,\n `Path: ${target.change.path}`,\n `Active: ${target.active ? \"yes\" : \"no\"}`,\n `Branch match: ${target.branchMatch}`,\n `Source: ${formatCurrentSource(target.source)}`,\n ].join(\"\\n\");\n}\n\nfunction formatProgressMessage(target: ChangeTarget, change: ChangeSummary, progressed: ChangeStage, note?: string): string {\n const heading = target.name ? `${target.name} (${target.path})` : target.path;\n return [\n `Progressed change in ${heading}: ${change.id}`,\n `Progressed lane: ${progressed}`,\n `Stage: ${change.stage}`,\n ...formatStaleLines(change.stale),\n ...formatKnowledgeLines(change.knowledge),\n ...(note ? [`Note: ${note}`] : []),\n `Path: ${change.path}`,\n ].join(\"\\n\");\n}\n\nfunction formatKnowledgeMessage(target: ChangeTarget, change: ChangeSummary): string {\n const heading = target.name ? `${target.name} (${target.path})` : target.path;\n return [\n `Updated knowledge status in ${heading}: ${change.id}`,\n ...formatKnowledgeLines(change.knowledge),\n `Stage: ${change.stage}`,\n `Path: ${change.path}`,\n ].join(\"\\n\");\n}\n\nfunction formatStaleLines(stale: StaleChangeLanes): string[] {\n const entries = changeStages\n .filter((stage) => stale[stage])\n .map((stage) => {\n const metadata = stale[stage]!;\n return `${stage} (invalidated by ${metadata.invalidated_by})`;\n });\n return entries.length > 0 ? [`Stale: ${entries.join(\", \")}`] : [];\n}\n\nfunction formatKnowledgeLines(knowledge: KnowledgeMetadata | undefined): string[] {\n if (!knowledge) {\n return [];\n }\n\n const suffix =\n knowledge.status === \"stale\" && knowledge.invalidated_by\n ? ` (invalidated by ${knowledge.invalidated_by})`\n : \"\";\n return [`Knowledge: ${knowledge.status}${suffix}`];\n}\n\nfunction formatCurrentSource(source: CurrentSource | \"explicit\"): string {\n switch (source) {\n case \"inferred_saved\":\n return \"inferred from branch and saved\";\n case \"session\":\n return \"session\";\n case \"explicit\":\n return \"explicit\";\n case \"none\":\n return \"none\";\n }\n}\n\nfunction formatBranchStatus(status: BranchStatus): string {\n switch (status) {\n case \"already_active\":\n return \"branch already active\";\n case \"checked_out\":\n return \"branch checked out\";\n case \"created\":\n return \"branch created\";\n case \"skipped_not_git\":\n return \"branch skipped: not a git repo\";\n }\n}\n\nfunction isChangeType(value: unknown): value is ChangeType {\n return typeof value === \"string\" && (changeTypes as string[]).includes(value);\n}\n\nexport function isChangeStage(value: unknown): value is ChangeStage {\n return typeof value === \"string\" && (changeStages as readonly string[]).includes(value);\n}\n\nexport function isStoredChangeStage(value: unknown): value is StoredChangeStage {\n return typeof value === \"string\" && (storedStages as readonly string[]).includes(value);\n}\n\nexport function isArtifactSourceId(value: unknown): value is ArtifactSourceId {\n return typeof value === \"string\" && (artifactSourceIds as readonly string[]).includes(value);\n}\n\nexport function isKnowledgeStatus(value: unknown): value is KnowledgeStatus {\n return typeof value === \"string\" && (knowledgeStatuses as readonly string[]).includes(value);\n}\n\nexport function isKnowledgeInvalidationSource(value: unknown): value is KnowledgeInvalidationSource {\n return isChangeStage(value) || isArtifactSourceId(value);\n}\n\nfunction normalizeKnowledgeInvalidationSource(value: string): KnowledgeInvalidationSource {\n if (isKnowledgeInvalidationSource(value)) {\n return value;\n }\n\n const supported = dedupeStrings([...changeStages, ...artifactSourceIds]);\n throw new ChangeCommandError(\n \"unsupported_knowledge_invalidation_source\",\n `Unsupported knowledge invalidation source: ${value}. Expected ${supported.join(\", \")}`,\n { source: value, supported },\n );\n}\n\nfunction maxStage(stages: StoredChangeStage[]): ChangeStage {\n // `started` has index -1 (not a real lane), so any progressed lane wins and the\n // \"exploration\" seed keeps the result at the highest reached artifact lane.\n const highest = stages.reduce<StoredChangeStage>(\n (acc, stage) => (stageIndex(stage) > stageIndex(acc) ? stage : acc),\n \"exploration\",\n );\n return isChangeStage(highest) ? highest : \"exploration\";\n}\n\nfunction stageIndex(stage: StoredChangeStage): number {\n return (changeStages as readonly string[]).indexOf(stage);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error;\n}\n","import { Command, InvalidArgumentError } from \"commander\";\nimport {\n ChangeCommandError,\n changeStages,\n knowledgeStatuses,\n changeTypes,\n type ChangeStage,\n type KnowledgeStatus,\n clearChangeStaleness,\n type ClearChangeStalenessResult,\n createChange,\n currentChange,\n listChanges,\n type ChangeListResult,\n type ChangeOperationResult,\n type ChangeType,\n progressChange,\n type ProgressChangeResult,\n knowledgeChange,\n type KnowledgeChangeResult,\n statusChange,\n switchChange,\n type CurrentChangeResult,\n type StatusChangeResult,\n type SwitchChangeResult,\n isChangeStage,\n isKnowledgeStatus,\n} from \"../lib/changes.js\";\nimport { withNotices } from \"../lib/with-notices.js\";\n\ninterface ChangeNewOptions {\n slug?: string;\n type?: ChangeType;\n json?: boolean;\n}\n\ninterface ChangeTargetOptions {\n json?: boolean;\n}\n\ninterface ChangeStatusOptions {\n json?: boolean;\n}\n\ninterface ChangeProgressOptions extends ChangeStatusOptions {\n source?: string[];\n // Commander merges the negatable `--no-invalidate` and the value `--invalidate <lanes>`\n // onto this single attribute: `true` by default, `false` for `--no-invalidate`, or the\n // comma-separated lane string for `--invalidate <lanes>`.\n invalidate?: string | boolean;\n}\n\ninterface ChangeClearStaleOptions extends ChangeStatusOptions {\n reason?: string;\n}\n\ninterface ChangeKnowledgeOptions extends ChangeStatusOptions {\n domain?: string[];\n shared?: string[];\n file?: string[];\n delta?: string;\n reason?: string;\n invalidatedBy?: string;\n}\n\nexport function changeCommand(): Command {\n const command = new Command(\"change\").description(\"Create and inspect Weave change artifacts.\");\n\n command\n .command(\"new\")\n .description(\"Create a change exploration.\")\n .argument(\"<title>\", \"change title\")\n .option(\"--type <type>\", \"change type: feat, fix, refactor, docs, test, ci, or chore\", parseChangeType, \"feat\")\n .option(\"--slug <slug>\", \"change slug override\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (title: string, options: ChangeNewOptions) => {\n const json = options.json ?? false;\n await runAction(json, async () => {\n await withNotices({ commandName: \"change-new\", json }, async () => {\n const result = await createChange({\n cwd: process.cwd(),\n title,\n type: options.type,\n slug: options.slug,\n });\n return { json: result, text: result.message };\n });\n });\n });\n\n command\n .command(\"list\")\n .description(\"List changes.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: ChangeTargetOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await listChanges({\n cwd: process.cwd(),\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n command\n .command(\"current\")\n .description(\"Show the current active change.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: ChangeTargetOptions) => {\n const json = options.json ?? false;\n await runAction(json, async () => {\n await withNotices({ commandName: \"change-current\", json }, async () => {\n const result = await currentChange({ cwd: process.cwd() });\n return { json: result, text: result.message };\n });\n });\n });\n\n command\n .command(\"status\")\n .description(\"Show active change status and branch alignment.\")\n .argument(\"[change]\", \"change reference to inspect without switching\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (change: string | undefined, options: ChangeStatusOptions) => {\n const json = options.json ?? false;\n await runAction(json, async () => {\n await withNotices({ commandName: \"change-status\", json }, async () => {\n const result = await statusChange({\n cwd: process.cwd(),\n change,\n });\n return { json: result, text: result.message };\n });\n });\n });\n\n command\n .command(\"progress\")\n .description(\"Record lifecycle progress for the active change.\")\n .argument(\"<lane>\", \"lane: exploration, prd, architecture, or issues\", parseChangeStage)\n .option(\"--source <source>\", \"source dependency: exploration, prd, architecture, discussion, sessions, or codebase\", collectValues, [])\n .option(\"--no-invalidate\", \"suppress all downstream stale propagation\")\n .option(\n \"--invalidate <lanes>\",\n \"mark only this comma-separated subset of dependent lanes stale (e.g. issues,prd)\",\n )\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (stage: ChangeStage, options: ChangeProgressOptions) => {\n await runAction(options.json ?? false, async () => {\n const invalidate = options.invalidate;\n const result = await progressChange({\n cwd: process.cwd(),\n stage,\n sources: options.source,\n noInvalidate: invalidate === false,\n invalidateOnly: typeof invalidate === \"string\" ? parseInvalidateList(invalidate) : undefined,\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n command\n .command(\"clear-stale\")\n .description(\"Explicitly clear a stale lane flag after content-sync verification.\")\n .argument(\"<lane>\", \"lane: exploration, prd, architecture, or issues\", parseChangeStage)\n .option(\"--reason <reason>\", \"one-sentence verification rationale recorded in stale_history\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (lane: ChangeStage, options: ChangeClearStaleOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await clearChangeStaleness({\n cwd: process.cwd(),\n lane,\n reason: options.reason,\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n command\n .command(\"knowledge\")\n .description(\"Record knowledge freshness for the active change.\")\n .argument(\"<status>\", \"knowledge status: pending, stale, updated, or none\", parseKnowledgeStatus)\n .option(\"--domain <domain>\", \"affected knowledge domain\", collectValues)\n .option(\"--shared <shared>\", \"affected shared behavior area\", collectValues)\n .option(\"--file <file>\", \"touched or authoritative knowledge file\", collectValues)\n .option(\"--delta <delta>\", \"change-local knowledge delta file\")\n .option(\"--reason <reason>\", \"reason for the knowledge status\")\n .option(\"--invalidated-by <source>\", \"source that invalidated knowledge freshness\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (status: KnowledgeStatus, options: ChangeKnowledgeOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await knowledgeChange({\n cwd: process.cwd(),\n status,\n domains: options.domain,\n shared: options.shared,\n files: options.file,\n delta: options.delta,\n reason: options.reason,\n invalidatedBy: options.invalidatedBy,\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n command\n .command(\"switch\")\n .description(\"Switch to an existing change.\")\n .argument(\"<change>\", \"change id, token, slug, or title substring\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (change: string, options: ChangeTargetOptions) => {\n await runAction(options.json ?? false, async () => {\n const result = await switchChange({\n cwd: process.cwd(),\n change,\n });\n writeResult(result, options.json ?? false);\n });\n });\n\n return command;\n}\n\nfunction parseKnowledgeStatus(value: string): KnowledgeStatus {\n if (isKnowledgeStatus(value)) {\n return value;\n }\n\n throw new InvalidArgumentError(`Unsupported knowledge status: ${value}. Expected ${knowledgeStatuses.join(\", \")}`);\n}\n\nfunction parseChangeStage(value: string): ChangeStage {\n if (isChangeStage(value)) {\n return value;\n }\n\n throw new InvalidArgumentError(`Unsupported change stage: ${value}. Expected ${changeStages.join(\", \")}`);\n}\n\nfunction parseInvalidateList(raw: string | undefined): ChangeStage[] | undefined {\n if (raw === undefined) return undefined;\n const trimmed = raw.trim();\n if (trimmed.length === 0) return [];\n const parts = trimmed.split(\",\").map((part) => part.trim()).filter(Boolean);\n for (const part of parts) {\n if (!isChangeStage(part)) {\n throw new InvalidArgumentError(\n `Unsupported lane in --invalidate: ${part}. Expected ${changeStages.join(\", \")}`,\n );\n }\n }\n return parts as ChangeStage[];\n}\n\nfunction parseChangeType(value: string): ChangeType {\n if ((changeTypes as string[]).includes(value)) {\n return value as ChangeType;\n }\n\n throw new InvalidArgumentError(`Unsupported change type: ${value}`);\n}\n\nfunction collectValues(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nfunction writeResult(\n result:\n | ChangeOperationResult\n | ChangeListResult\n | CurrentChangeResult\n | StatusChangeResult\n | SwitchChangeResult\n | ProgressChangeResult\n | KnowledgeChangeResult\n | ClearChangeStalenessResult,\n json: boolean,\n): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n process.stdout.write(`${result.message}\\n`);\n}\n\nasync function runAction(json: boolean, action: () => Promise<void>): Promise<void> {\n try {\n await action();\n } catch (error) {\n if (json) {\n process.stdout.write(`${JSON.stringify(errorResult(error), null, 2)}\\n`);\n } else {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n }\n process.exitCode = 1;\n }\n}\n\nfunction errorResult(error: unknown): { status: \"error\"; code: string; message: string; details?: unknown } {\n if (error instanceof ChangeCommandError) {\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n details: error.details,\n };\n }\n\n return {\n status: \"error\",\n code: \"unknown_error\",\n message: error instanceof Error ? error.message : String(error),\n };\n}\n","import { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { readFile } from \"node:fs/promises\";\nimport { pathExists } from \"./files.js\";\nimport { gatherNotices, type Notice } from \"./notices.js\";\nimport { getNpmVersionInfo } from \"./npm-version.js\";\n\nexport interface CommandOutput {\n json: unknown;\n text: string;\n exitCode?: number;\n}\n\nexport interface WithNoticesOptions {\n commandName: string;\n json: boolean;\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n packageVersion?: string;\n}\n\nexport async function withNotices(\n options: WithNoticesOptions,\n action: () => Promise<CommandOutput>,\n): Promise<void> {\n const cwd = options.cwd ?? process.cwd();\n const env = options.env ?? process.env;\n const packageVersion = options.packageVersion ?? (await readPackageVersion());\n\n const noticesPromise = gatherNoticesSafely({ cwd, packageVersion, env });\n const actionResult = await action();\n const notices = await noticesPromise;\n\n if (options.json) {\n const payload = mergeNoticesIntoJson(actionResult.json, notices);\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`);\n } else {\n process.stdout.write(`${actionResult.text}\\n`);\n if (shouldShowFooter(notices, env)) {\n process.stderr.write(renderFooter(notices));\n }\n }\n\n if (actionResult.exitCode !== undefined && actionResult.exitCode !== 0) {\n process.exitCode = actionResult.exitCode;\n }\n}\n\nasync function gatherNoticesSafely(opts: {\n cwd: string;\n packageVersion: string;\n env: NodeJS.ProcessEnv;\n}): Promise<Notice[]> {\n try {\n const npmInfo = await getNpmVersionInfo({\n packageVersion: opts.packageVersion,\n env: opts.env,\n });\n return await gatherNotices({\n cwd: opts.cwd,\n packageVersion: opts.packageVersion,\n npmLatest: npmInfo.cachedLatest,\n env: opts.env,\n });\n } catch {\n return [];\n }\n}\n\nfunction mergeNoticesIntoJson(json: unknown, notices: Notice[]): unknown {\n if (json && typeof json === \"object\" && !Array.isArray(json)) {\n return { ...(json as Record<string, unknown>), notices };\n }\n return { result: json, notices };\n}\n\nfunction shouldShowFooter(notices: Notice[], env: NodeJS.ProcessEnv): boolean {\n if (notices.length === 0) return false;\n if (env.WEAVE_NO_NOTICES === \"1\") return false;\n if (env.CI && env.CI !== \"\" && env.CI !== \"false\" && env.CI !== \"0\") return false;\n if (!process.stdout.isTTY) return false;\n return true;\n}\n\nfunction renderFooter(notices: Notice[]): string {\n return `weave-it: ${notices.length} notice(s) - run 'weave status' for details\\n`;\n}\n\nasync function readPackageVersion(): Promise<string> {\n let current = dirname(fileURLToPath(import.meta.url));\n while (true) {\n const candidate = join(current, \"package.json\");\n if (await pathExists(candidate)) {\n try {\n const parsed = JSON.parse(await readFile(candidate, \"utf8\")) as { version?: string };\n if (typeof parsed?.version === \"string\") return parsed.version;\n } catch {\n // walk up\n }\n }\n const parent = dirname(current);\n if (parent === current) return \"0.0.0\";\n current = parent;\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n type AgentName,\n type AgentsManifest,\n type DefaultSkill,\n listDefaultSkills,\n loadAgentsManifest,\n} from \"./agent-skills.js\";\n\nexport type NoticeKind = \"package_outdated\" | \"skills_outdated\" | \"skills_modified\";\n\nexport interface NoticeSkillRef {\n agent: AgentName;\n name: string;\n kind: \"skill\" | \"command\";\n}\n\nexport interface OutdatedSkillRef extends NoticeSkillRef {\n installed_from: string | null;\n current: string;\n}\n\nexport interface Notice {\n kind: NoticeKind;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface GatherNoticesOptions {\n cwd: string;\n packageVersion: string;\n npmLatest?: string | null;\n templatesDir?: string;\n env?: NodeJS.ProcessEnv;\n}\n\nexport async function gatherNotices(options: GatherNoticesOptions): Promise<Notice[]> {\n const env = options.env ?? process.env;\n if (env.WEAVE_NO_NOTICES === \"1\") {\n return [];\n }\n\n const notices: Notice[] = [];\n\n if (options.npmLatest && isNewerVersion(options.npmLatest, options.packageVersion)) {\n notices.push({\n kind: \"package_outdated\",\n message: `weave-it ${options.npmLatest} is available (installed ${options.packageVersion}). Run 'weave status' for details.`,\n details: {\n installed: options.packageVersion,\n latest: options.npmLatest,\n },\n });\n }\n\n const drift = await detectSkillDrift({\n cwd: options.cwd,\n templatesDir: options.templatesDir,\n });\n\n if (drift.modified.length > 0) {\n notices.push({\n kind: \"skills_modified\",\n message: `${drift.modified.length} installed skill file(s) have been modified locally. Run 'weave status' for details.`,\n details: { skills: drift.modified },\n });\n }\n\n if (drift.outdated.length > 0) {\n notices.push({\n kind: \"skills_outdated\",\n message: `${drift.outdated.length} installed skill file(s) are out of date. Run 'weave agent update --all' or 'weave status' for details.`,\n details: { skills: drift.outdated },\n });\n }\n\n return notices;\n}\n\nexport interface SkillDrift {\n modified: NoticeSkillRef[];\n outdated: OutdatedSkillRef[];\n}\n\nexport async function detectSkillDrift(options: {\n cwd: string;\n templatesDir?: string;\n}): Promise<SkillDrift> {\n const manifest = await loadAgentsManifest(options.cwd);\n const templates = await safeListDefaultSkills(options.templatesDir);\n const templatesByName = new Map(templates.map((skill) => [skill.name, skill]));\n\n const modified: NoticeSkillRef[] = [];\n const outdated: OutdatedSkillRef[] = [];\n\n for (const [agentKey, buckets] of Object.entries(manifest.installed) as [\n AgentName,\n AgentsManifest[\"installed\"][AgentName],\n ][]) {\n if (!buckets) continue;\n const skillEntries = buckets.skills ?? {};\n for (const [name, entry] of Object.entries(skillEntries)) {\n const absolutePath = join(options.cwd, entry.path);\n const diskHash = await safeHashFile(absolutePath);\n if (diskHash === null) {\n continue;\n }\n\n if (diskHash !== entry.installed_hash) {\n modified.push({ agent: agentKey, name, kind: \"skill\" });\n continue;\n }\n\n const template = templatesByName.get(name);\n if (!template) continue;\n\n if (entry.installed_from !== template.lastChangedIn) {\n outdated.push({\n agent: agentKey,\n name,\n kind: \"skill\",\n installed_from: entry.installed_from,\n current: template.lastChangedIn,\n });\n }\n }\n }\n\n modified.sort(compareSkillRefs);\n outdated.sort(compareSkillRefs);\n\n return { modified, outdated };\n}\n\nasync function safeListDefaultSkills(templatesDir?: string): Promise<DefaultSkill[]> {\n try {\n return await listDefaultSkills({ templatesDir });\n } catch {\n return [];\n }\n}\n\nasync function safeHashFile(path: string): Promise<string | null> {\n try {\n const content = await readFile(path, \"utf8\");\n return `sha256:${createHash(\"sha256\").update(content).digest(\"hex\")}`;\n } catch {\n return null;\n }\n}\n\nfunction compareSkillRefs(left: NoticeSkillRef, right: NoticeSkillRef): number {\n const agentCompare = left.agent.localeCompare(right.agent);\n if (agentCompare !== 0) return agentCompare;\n return left.name.localeCompare(right.name);\n}\n\nexport function isNewerVersion(candidate: string, baseline: string): boolean {\n const parsedCandidate = parseSemver(candidate);\n const parsedBaseline = parseSemver(baseline);\n if (!parsedCandidate || !parsedBaseline) {\n return false;\n }\n for (let index = 0; index < 3; index++) {\n if (parsedCandidate[index] > parsedBaseline[index]) return true;\n if (parsedCandidate[index] < parsedBaseline[index]) return false;\n }\n return false;\n}\n\nfunction parseSemver(value: string): [number, number, number] | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(value);\n if (!match) return null;\n return [Number(match[1]), Number(match[2]), Number(match[3])];\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function getUserHome(env: NodeJS.ProcessEnv = process.env): string {\n return env.WEAVE_USER_HOME || homedir();\n}\n\nexport function getUserWeaveDir(env: NodeJS.ProcessEnv = process.env): string {\n return join(getUserHome(env), \".weave\");\n}\n\nexport function getUserCacheDir(env: NodeJS.ProcessEnv = process.env): string {\n return join(getUserWeaveDir(env), \"cache\");\n}\n\nexport function getNpmVersionCachePath(env: NodeJS.ProcessEnv = process.env): string {\n return join(getUserCacheDir(env), \"npm-version.json\");\n}\n","import { readJsonCache, writeJsonCache } from \"./files.js\";\nimport { getNpmVersionCachePath } from \"./user-paths.js\";\n\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/weave-it/latest\";\nconst FETCH_TIMEOUT_MS = 3_000;\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1_000;\n\nexport interface NpmVersionCache {\n latest: string;\n fetched_at: string;\n}\n\nexport interface NpmVersionInfo {\n cachedLatest: string | null;\n isStale: boolean;\n fetchedAt: Date | null;\n}\n\nexport interface GetNpmVersionInfoOptions {\n now?: Date;\n fetchImpl?: typeof fetch;\n cachePath?: string;\n env?: NodeJS.ProcessEnv;\n packageVersion: string;\n}\n\nexport async function getNpmVersionInfo(options: GetNpmVersionInfoOptions): Promise<NpmVersionInfo> {\n const env = options.env ?? process.env;\n if (env.NO_UPDATE_NOTIFIER === \"1\" || env.WEAVE_NO_NOTICES === \"1\") {\n return { cachedLatest: null, isStale: true, fetchedAt: null };\n }\n\n const now = options.now ?? new Date();\n const cachePath = options.cachePath ?? getNpmVersionCachePath(env);\n const cache = await readJsonCache<NpmVersionCache>(cachePath);\n\n let cachedLatest: string | null = null;\n let fetchedAt: Date | null = null;\n let isStale = true;\n\n if (cache && typeof cache.latest === \"string\" && typeof cache.fetched_at === \"string\") {\n const parsed = Date.parse(cache.fetched_at);\n if (!Number.isNaN(parsed)) {\n cachedLatest = cache.latest;\n fetchedAt = new Date(parsed);\n isStale = now.getTime() - parsed > CACHE_TTL_MS;\n }\n }\n\n if (isStale) {\n void refreshNpmVersionCache({\n cachePath,\n now,\n fetchImpl: options.fetchImpl ?? fetch,\n packageVersion: options.packageVersion,\n });\n }\n\n return { cachedLatest, isStale, fetchedAt };\n}\n\ninterface RefreshOptions {\n cachePath: string;\n now: Date;\n fetchImpl: typeof fetch;\n packageVersion: string;\n}\n\nasync function refreshNpmVersionCache(opts: RefreshOptions): Promise<void> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n\n try {\n const response = await opts.fetchImpl(NPM_REGISTRY_URL, {\n signal: controller.signal,\n headers: { \"user-agent\": `weave-it/${opts.packageVersion}` },\n });\n if (!response.ok) return;\n const parsed = (await response.json()) as { version?: unknown };\n if (typeof parsed?.version !== \"string\") return;\n\n await writeJsonCache<NpmVersionCache>(opts.cachePath, {\n latest: parsed.version,\n fetched_at: opts.now.toISOString(),\n });\n } catch {\n // Swallow network / abort / parse / write errors; the cache simply stays stale.\n } finally {\n clearTimeout(timeout);\n }\n}\n","import { Command } from \"commander\";\nimport { initWorkspace } from \"../lib/init-workspace.js\";\n\nexport function initCommand(): Command {\n return new Command(\"init\")\n .description(\"Initialize Weave in repo mode or workspace mode and start a new session.\")\n .option(\"--id <id>\", \"folder id\")\n .option(\"--kind <kind>\", \"folder kind\", \"app\")\n .option(\"--mode <mode>\", \"init mode: repo or workspace; defaults to repo with --yes\")\n .option(\"--workspace-name <name>\", \"workspace name for workspace mode\")\n .option(\"--workspace-path <path>\", \"workspace path for workspace mode outside a git repo\")\n .option(\"--yes\", \"accept defaults and skip prompts\")\n .action(\n async (options: {\n id?: string;\n kind?: string;\n mode?: string;\n workspaceName?: string;\n workspacePath?: string;\n yes?: boolean;\n }) => {\n const result = await initWorkspace({\n cwd: process.cwd(),\n folderId: options.id,\n folderKind: options.kind,\n mode: options.mode,\n workspaceName: options.workspaceName,\n workspacePath: options.workspacePath,\n yes: options.yes ?? false,\n interactive: true,\n });\n\n process.stdout.write(`${result.message}\\n`);\n\n if (result.status === \"cancelled\") {\n process.exitCode = 1;\n }\n },\n );\n}\n","import * as prompts from \"@clack/prompts\";\nimport { readFile, realpath } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { createDirExclusive, isDirectoryEmpty, movePath, pathExists, writeFileIfMissing } from \"./files.js\";\nimport { type ResolvedFolder, resolveFolder } from \"./folders.js\";\nimport { findGitRoot, getGitRemote, runGitRequired } from \"./git.js\";\nimport { slugify, titleFromSlug } from \"./ids.js\";\nimport { loadCurrentSession, saveCurrentSession, createCurrentSession, defaultSessionPath } from \"./session-state.js\";\nimport { ensureWeaveScaffold } from \"./weave-scaffold.js\";\nimport { registerRepoIntoWorkspace, workspaceGitignoreBaseTemplate } from \"./workspace-repos.js\";\n\nexport type InitStatus = \"initialized\" | \"cancelled\";\nexport type InitMode = \"repo\" | \"workspace\";\n\nexport type InitWorkspaceOptions = {\n cwd?: string;\n folderId?: string;\n folderKind?: string;\n mode?: InitMode | string;\n workspaceName?: string;\n workspacePath?: string;\n yes?: boolean;\n interactive?: boolean;\n now?: Date;\n sessionPath?: string;\n};\n\nexport type InitWorkspaceResult = {\n status: InitStatus;\n message: string;\n folderPath: string;\n wikiDir: string;\n metadataDir: string;\n sessionPath: string;\n mode?: InitMode;\n commitCreated?: boolean;\n warning?: string;\n};\n\nexport async function initWorkspace(options: InitWorkspaceOptions = {}): Promise<InitWorkspaceResult> {\n const cwd = options.cwd ?? process.cwd();\n const now = options.now ?? new Date();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const existingSession = await loadCurrentSession(sessionPath);\n\n if (existingSession && !(await shouldReplaceSession(options))) {\n return {\n status: \"cancelled\",\n message: \"Cancelled. Existing Weave session was not replaced.\",\n folderPath: cwd,\n wikiDir: \"\",\n metadataDir: \"\",\n sessionPath,\n };\n }\n\n const mode = await selectInitMode(options);\n if (mode === \"cancelled\") {\n return {\n status: \"cancelled\",\n message: \"Cancelled. Weave was not initialized.\",\n folderPath: cwd,\n wikiDir: \"\",\n metadataDir: \"\",\n sessionPath,\n };\n }\n\n if (mode === \"workspace\") {\n return initWorkspaceMode({ ...options, cwd, now, sessionPath });\n }\n\n return initRepoMode({ ...options, cwd, now, sessionPath });\n}\n\nasync function initRepoMode(\n options: InitWorkspaceOptions & { cwd: string; now: Date; sessionPath: string },\n): Promise<InitWorkspaceResult> {\n const folder = await resolveFolder({\n cwd: options.cwd,\n id: options.folderId,\n kind: options.folderKind,\n });\n const scaffold = await ensureWeaveScaffold({ folder });\n const workspaceMetadata = await writeRepoWorkspaceMetadata(folder);\n if (workspaceMetadata) {\n scaffold.created.push(\".weave/workspace.yml\");\n }\n const session = createCurrentSession(folder, options.now);\n await saveCurrentSession(session, options.sessionPath);\n\n return {\n status: \"initialized\",\n mode: \"repo\",\n message: initializedMessage({\n mode: \"repo\",\n folderId: folder.id,\n folderPath: folder.path,\n created: scaffold.created,\n sessionPath: options.sessionPath,\n }),\n folderPath: folder.path,\n wikiDir: scaffold.wikiDir,\n metadataDir: scaffold.metadataDir,\n sessionPath: options.sessionPath,\n };\n}\n\nasync function initWorkspaceMode(\n options: InitWorkspaceOptions & { cwd: string; now: Date; sessionPath: string },\n): Promise<InitWorkspaceResult> {\n const gitRoot = await findGitRoot(options.cwd);\n\n if (gitRoot) {\n return initWorkspaceFromGitRepo(options, await realpath(gitRoot));\n }\n\n return initWorkspaceWithoutGitRepo(options);\n}\n\nasync function initWorkspaceFromGitRepo(\n options: InitWorkspaceOptions & { cwd: string; now: Date; sessionPath: string },\n gitRoot: string,\n): Promise<InitWorkspaceResult> {\n const repoDirectoryName = path.basename(gitRoot);\n const defaultWorkspaceName = `${repoDirectoryName}-workspace`;\n if ((options.yes || options.interactive === false) && !options.workspacePath && (await isWeaveSourceRepo(gitRoot))) {\n throw new Error(\n \"Refusing to adopt the Weave source repo without --workspace-path. Run this command from a disposable test repo, or pass an explicit workspace path.\",\n );\n }\n\n const workspaceName = await resolveWorkspaceName(options, defaultWorkspaceName);\n if (workspaceName === \"cancelled\") {\n return cancelledWorkspace(options.cwd, options.sessionPath);\n }\n\n const workspacePath = options.workspacePath\n ? path.resolve(options.cwd, options.workspacePath)\n : path.join(path.dirname(gitRoot), slugify(workspaceName, \"workspace\"));\n const repoTargetPath = path.join(workspacePath, repoDirectoryName);\n\n await assertPathMissing(workspacePath, \"Workspace path already exists\");\n await assertPathMissing(repoTargetPath, \"Repo target path already exists\");\n\n const remote = await getGitRemote(gitRoot);\n await createDirExclusive(workspacePath);\n await movePath(gitRoot, repoTargetPath);\n const resolvedWorkspacePath = await realpath(workspacePath);\n\n const created = await scaffoldWorkspace({\n workspacePath: resolvedWorkspacePath,\n workspaceName,\n repos: {\n [slugify(repoDirectoryName, \"repo\")]: {\n path: repoDirectoryName,\n kind: options.folderKind ?? \"app\",\n ...(remote ? { remote } : {}),\n },\n },\n });\n\n const folder = workspaceFolder(resolvedWorkspacePath, workspaceName, options.folderId);\n const commitCreated = await createInitialWorkspaceCommit(resolvedWorkspacePath);\n const session = createCurrentSession(folder, options.now);\n await saveCurrentSession(session, options.sessionPath);\n\n return {\n status: \"initialized\",\n mode: \"workspace\",\n message: initializedMessage({\n mode: \"workspace\",\n folderId: folder.id,\n folderPath: folder.path,\n created,\n sessionPath: options.sessionPath,\n oldRepoPath: gitRoot,\n newRepoPath: repoTargetPath,\n commitCreated,\n }),\n folderPath: folder.path,\n wikiDir: path.join(resolvedWorkspacePath, \"wiki\"),\n metadataDir: path.join(resolvedWorkspacePath, \".weave\"),\n sessionPath: options.sessionPath,\n commitCreated,\n warning: commitCreated ? undefined : \"Initial workspace commit was not created. Run git status in the workspace to recover.\",\n };\n}\n\nasync function initWorkspaceWithoutGitRepo(\n options: InitWorkspaceOptions & { cwd: string; now: Date; sessionPath: string },\n): Promise<InitWorkspaceResult> {\n const workspacePath = await resolveWorkspacePath(options);\n if (workspacePath === \"cancelled\") {\n return cancelledWorkspace(options.cwd, options.sessionPath);\n }\n\n const workspaceName = await resolveWorkspaceName(options, path.basename(workspacePath));\n if (workspaceName === \"cancelled\") {\n return cancelledWorkspace(options.cwd, options.sessionPath);\n }\n\n const workspacePathExists = await pathExists(workspacePath);\n if (workspacePathExists) {\n const currentPath = await realpath(options.cwd);\n const targetPath = await realpath(workspacePath);\n const isCurrentPath = currentPath === targetPath;\n\n if (!isCurrentPath || !(await isDirectoryEmpty(workspacePath))) {\n throw new Error(`Workspace path already exists and is not an empty current directory: ${workspacePath}`);\n }\n } else {\n await createDirExclusive(workspacePath);\n }\n\n const created = await scaffoldWorkspace({\n workspacePath,\n workspaceName,\n repos: {},\n });\n\n const folder = workspaceFolder(await realpath(workspacePath), workspaceName, options.folderId);\n const commitCreated = await createInitialWorkspaceCommit(folder.path);\n const session = createCurrentSession(folder, options.now);\n await saveCurrentSession(session, options.sessionPath);\n\n return {\n status: \"initialized\",\n mode: \"workspace\",\n message: initializedMessage({\n mode: \"workspace\",\n folderId: folder.id,\n folderPath: folder.path,\n created,\n sessionPath: options.sessionPath,\n commitCreated,\n }),\n folderPath: folder.path,\n wikiDir: path.join(folder.path, \"wiki\"),\n metadataDir: path.join(folder.path, \".weave\"),\n sessionPath: options.sessionPath,\n commitCreated,\n warning: commitCreated ? undefined : \"Initial workspace commit was not created. Run git status in the workspace to recover.\",\n };\n}\n\nasync function selectInitMode(options: InitWorkspaceOptions): Promise<InitMode | \"cancelled\"> {\n if (options.mode) {\n if (options.mode === \"repo\" || options.mode === \"workspace\") {\n return options.mode;\n }\n\n throw new Error(`Unsupported init mode: ${options.mode}. Expected \"repo\" or \"workspace\".`);\n }\n\n if (options.yes || options.interactive === false) {\n return \"repo\";\n }\n\n const answer = await prompts.select({\n message: \"How should Weave initialize this folder?\",\n options: [\n {\n value: \"repo\",\n label: \"Repo mode\",\n hint: \"Use this when you want to code/reference only this repo.\",\n },\n {\n value: \"workspace\",\n label: \"Workspace mode\",\n hint: \"Use this when you work across multiple repos or folders.\",\n },\n ],\n initialValue: \"repo\",\n });\n\n if (prompts.isCancel(answer)) {\n prompts.cancel(\"Cancelled.\");\n return \"cancelled\";\n }\n\n return answer as InitMode;\n}\n\nasync function shouldReplaceSession(options: InitWorkspaceOptions): Promise<boolean> {\n if (options.yes || options.interactive === false) {\n return true;\n }\n\n const answer = await prompts.confirm({\n message: \"A Weave session already exists. Start a new session from this folder?\",\n initialValue: true,\n });\n\n if (prompts.isCancel(answer)) {\n prompts.cancel(\"Cancelled.\");\n return false;\n }\n\n return answer;\n}\n\nasync function resolveWorkspaceName(\n options: InitWorkspaceOptions,\n defaultName: string,\n): Promise<string | \"cancelled\"> {\n if (options.workspaceName) {\n return options.workspaceName;\n }\n\n if (options.yes || options.interactive === false) {\n return defaultName;\n }\n\n const answer = await prompts.text({\n message: \"Workspace name\",\n placeholder: defaultName,\n defaultValue: defaultName,\n });\n\n if (prompts.isCancel(answer)) {\n prompts.cancel(\"Cancelled.\");\n return \"cancelled\";\n }\n\n return String(answer).trim() || defaultName;\n}\n\nasync function resolveWorkspacePath(\n options: InitWorkspaceOptions & { cwd: string },\n): Promise<string | \"cancelled\"> {\n if (options.workspacePath) {\n return path.resolve(options.cwd, options.workspacePath);\n }\n\n if (options.yes || options.interactive === false) {\n throw new Error(\"Workspace path is required for workspace mode outside a git repo.\");\n }\n\n const answer = await prompts.text({\n message: \"Workspace path\",\n placeholder: path.join(path.dirname(options.cwd), \"my-workspace\"),\n });\n\n if (prompts.isCancel(answer)) {\n prompts.cancel(\"Cancelled.\");\n return \"cancelled\";\n }\n\n const value = String(answer).trim();\n if (!value) {\n throw new Error(\"Workspace path is required for workspace mode outside a git repo.\");\n }\n\n return path.resolve(options.cwd, value);\n}\n\nasync function writeRepoWorkspaceMetadata(folder: ResolvedFolder): Promise<boolean> {\n return writeFileIfMissing(\n path.join(folder.path, \".weave\", \"workspace.yml\"),\n workspaceMetadataTemplate({\n mode: \"repo\",\n name: folder.name,\n repos: {},\n }),\n );\n}\n\nasync function scaffoldWorkspace(input: {\n workspacePath: string;\n workspaceName: string;\n repos: Record<string, { path: string; kind: string; remote?: string }>;\n}): Promise<string[]> {\n await runGitRequired([\"init\"], input.workspacePath);\n const folder = workspaceFolder(input.workspacePath, input.workspaceName);\n const scaffold = await ensureWeaveScaffold({ folder });\n const created = [...scaffold.created];\n\n if (\n await writeFileIfMissing(\n path.join(input.workspacePath, \".weave\", \"workspace.yml\"),\n workspaceMetadataTemplate({\n mode: \"workspace\",\n name: input.workspaceName,\n repos: {},\n }),\n )\n ) {\n created.push(\".weave/workspace.yml\");\n }\n\n if (\n await writeFileIfMissing(\n path.join(input.workspacePath, \".gitignore\"),\n workspaceGitignoreBaseTemplate(),\n )\n ) {\n created.push(\".gitignore\");\n }\n\n for (const [id, repo] of Object.entries(input.repos)) {\n await registerRepoIntoWorkspace({\n workspacePath: input.workspacePath,\n id,\n relativePath: repo.path,\n kind: repo.kind,\n remote: repo.remote,\n });\n }\n\n return created;\n}\n\nasync function createInitialWorkspaceCommit(workspacePath: string): Promise<boolean> {\n try {\n await runGitRequired([\"add\", \".\"], workspacePath);\n await runGitRequired([\"commit\", \"-m\", \"Initialize Weave workspace\"], workspacePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction workspaceFolder(workspacePath: string, workspaceName: string, folderId?: string): ResolvedFolder {\n const id = folderId ?? slugify(workspaceName, \"workspace\");\n\n return {\n id,\n path: workspacePath,\n name: titleFromSlug(id) || workspaceName,\n kind: \"workspace\",\n };\n}\n\nasync function assertPathMissing(targetPath: string, message: string): Promise<void> {\n if (await pathExists(targetPath)) {\n throw new Error(`${message}: ${targetPath}`);\n }\n}\n\nasync function isWeaveSourceRepo(gitRoot: string): Promise<boolean> {\n try {\n const manifest = JSON.parse(await readFile(path.join(gitRoot, \"package.json\"), \"utf8\")) as { name?: string };\n return manifest.name === \"weave-it\";\n } catch {\n return false;\n }\n}\n\nfunction workspaceMetadataTemplate(input: {\n mode: InitMode;\n name: string;\n repos: Record<string, { path: string; kind: string; remote?: string }>;\n}): string {\n return YAML.stringify({\n version: 1,\n mode: input.mode,\n name: input.name,\n repos: input.repos,\n });\n}\n\nfunction cancelledWorkspace(folderPath: string, sessionPath: string): InitWorkspaceResult {\n return {\n status: \"cancelled\",\n message: \"Cancelled. Weave workspace was not initialized.\",\n folderPath,\n wikiDir: \"\",\n metadataDir: \"\",\n sessionPath,\n };\n}\n\nfunction initializedMessage(input: {\n mode: InitMode;\n folderId: string;\n folderPath: string;\n created: string[];\n sessionPath: string;\n oldRepoPath?: string;\n newRepoPath?: string;\n commitCreated?: boolean;\n}): string {\n const createdText = input.created.length > 0 ? input.created.join(\"\\n \") : \"No repo files changed\";\n const modeText = input.mode === \"workspace\" ? \"workspace mode\" : \"repo mode\";\n const repoMoveText =\n input.oldRepoPath && input.newRepoPath\n ? `\nAdopted repo:\n From: ${input.oldRepoPath}\n To: ${input.newRepoPath}\n`\n : \"\";\n const commitText =\n input.mode === \"workspace\"\n ? `\nInitial workspace commit:\n ${input.commitCreated ? \"Created\" : \"Not created - run git status in the workspace to recover\"}\n`\n : \"\";\n const nextText =\n input.mode === \"workspace\"\n ? `Open this workspace path in your editor:\n ${input.folderPath}\n\nThen run:\n weave workspace`\n : `weave add <path>\n weave workspace`;\n\n return `Initialized Weave in ${modeText} for folder: ${input.folderId}\n\nFolder:\n ${input.folderPath}\n\nCreated:\n ${createdText}\n${repoMoveText}${commitText}\n\nStarted current session:\n ${input.folderId}\n\nSession state:\n ${input.sessionPath}\n\nNext:\n ${nextText}`;\n}\n","import { Command } from \"commander\";\nimport { listDefaultSkills, readDefaultSkill } from \"../lib/agent-skills.js\";\n\nexport function skillsCommand(): Command {\n const command = new Command(\"skills\").description(\"List Weave skills.\");\n\n command\n .command(\"list\")\n .description(\"List default skills shipped with Weave.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: { json?: boolean }) => {\n await runAction(async () => {\n const skills = await listDefaultSkills();\n\n if (options.json) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n\n process.stdout.write(\n `${skills.map((skill) => `${skill.name}\\t${skill.description}`).join(\"\\n\")}\\n`,\n );\n });\n });\n\n return command;\n}\n\nexport function skillCommand(): Command {\n const command = new Command(\"skill\").description(\"Show Weave skill content.\");\n\n command\n .command(\"show\")\n .description(\"Print a default skill shipped with Weave.\")\n .argument(\"<name>\", \"skill name\")\n .action(async (name: string) => {\n await runAction(async () => {\n const skill = await readDefaultSkill(name);\n process.stdout.write(skill.content);\n if (!skill.content.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n });\n });\n\n return command;\n}\n\nasync function runAction(action: () => Promise<void>): Promise<void> {\n try {\n await action();\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n }\n}\n","import { Command } from \"commander\";\nimport { buildStatus } from \"../lib/status.js\";\nimport { withNotices } from \"../lib/with-notices.js\";\n\nexport function statusCommand(): Command {\n return new Command(\"status\")\n .description(\"Show installed weave-it package and skill version state.\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: { json?: boolean }) => {\n await withNotices(\n { commandName: \"status\", json: options.json ?? false },\n async () => {\n const result = await buildStatus({ cwd: process.cwd() });\n const { message: _message, notices: _notices, ...rest } = result;\n return {\n json: rest,\n text: result.message,\n };\n },\n );\n });\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { type AgentName, listDefaultSkills, loadAgentsManifest } from \"./agent-skills.js\";\nimport { pathExists } from \"./files.js\";\nimport { gatherNotices, type Notice } from \"./notices.js\";\nimport { getNpmVersionInfo } from \"./npm-version.js\";\n\nconst agentOrder: AgentName[] = [\"claude\", \"codex\", \"cursor\", \"opencode\"];\n\nexport interface StatusSkillRow {\n agent: AgentName;\n name: string;\n installed_from: string | null;\n current: string;\n state: \"current\" | \"outdated\" | \"modified\" | \"missing\";\n}\n\nexport interface StatusResult {\n status: \"ok\";\n packageVersion: string;\n cwd: string;\n inRepo: boolean;\n skills: StatusSkillRow[];\n notices: Notice[];\n message: string;\n}\n\nexport interface BuildStatusOptions {\n cwd: string;\n packageVersion?: string;\n npmLatest?: string | null;\n templatesDir?: string;\n env?: NodeJS.ProcessEnv;\n}\n\nexport async function buildStatus(options: BuildStatusOptions): Promise<StatusResult> {\n const packageVersion = options.packageVersion ?? (await readPackageVersion());\n const inRepo = await pathExists(join(options.cwd, \".weave\", \"agents.yml\"));\n const skills = inRepo ? await collectSkillRows(options) : [];\n const npmLatest =\n options.npmLatest === undefined\n ? (await getNpmVersionInfo({ packageVersion, env: options.env })).cachedLatest\n : options.npmLatest;\n const notices = await gatherNotices({\n cwd: options.cwd,\n packageVersion,\n npmLatest: npmLatest ?? null,\n templatesDir: options.templatesDir,\n env: options.env,\n });\n\n return {\n status: \"ok\",\n packageVersion,\n cwd: options.cwd,\n inRepo,\n skills,\n notices,\n message: renderStatusMessage({\n packageVersion,\n cwd: options.cwd,\n inRepo,\n skills,\n notices,\n npmLatest: npmLatest ?? null,\n }),\n };\n}\n\nasync function collectSkillRows(options: BuildStatusOptions): Promise<StatusSkillRow[]> {\n const manifest = await loadAgentsManifest(options.cwd);\n const templates = await listDefaultSkills({ templatesDir: options.templatesDir }).catch(() => []);\n const templatesByName = new Map(templates.map((skill) => [skill.name, skill]));\n\n const rows: StatusSkillRow[] = [];\n\n for (const agent of agentOrder) {\n const buckets = manifest.installed[agent];\n if (!buckets) continue;\n const skills = buckets.skills ?? {};\n for (const [name, entry] of Object.entries(skills)) {\n const template = templatesByName.get(name);\n const current = template?.lastChangedIn ?? \"unknown\";\n const absolutePath = join(options.cwd, entry.path);\n const fileExists = await pathExists(absolutePath);\n\n let state: StatusSkillRow[\"state\"] = \"current\";\n if (!fileExists) {\n state = \"missing\";\n } else {\n const diskContent = await readFile(absolutePath, \"utf8\").catch(() => \"\");\n const diskHash = `sha256:${createHash(\"sha256\").update(diskContent).digest(\"hex\")}`;\n if (diskHash !== entry.installed_hash) {\n state = \"modified\";\n } else if (template && entry.installed_from !== template.lastChangedIn) {\n state = \"outdated\";\n }\n }\n\n rows.push({\n agent,\n name,\n installed_from: entry.installed_from,\n current,\n state,\n });\n }\n }\n\n return rows;\n}\n\nfunction renderStatusMessage(opts: {\n packageVersion: string;\n cwd: string;\n inRepo: boolean;\n skills: StatusSkillRow[];\n notices: Notice[];\n npmLatest: string | null;\n}): string {\n const lines: string[] = [];\n lines.push(`weave-it ${opts.packageVersion}`);\n lines.push(`cwd: ${opts.cwd}`);\n if (opts.npmLatest) {\n lines.push(`npm latest (cached): ${opts.npmLatest}`);\n } else {\n lines.push(`npm latest (cached): unknown`);\n }\n\n if (!opts.inRepo) {\n lines.push(\"\");\n lines.push(\"Not inside a Weave-managed repo (no .weave/agents.yml).\");\n } else if (opts.skills.length === 0) {\n lines.push(\"\");\n lines.push(\"No skills installed.\");\n } else {\n lines.push(\"\");\n lines.push(\"Installed skills:\");\n const header = [\"agent\", \"skill\", \"state\", \"installed_from\", \"current\"];\n const rows = opts.skills.map((row) => [\n row.agent,\n row.name,\n row.state,\n row.installed_from ?? \"unknown\",\n row.current,\n ]);\n const widths = header.map((cell, index) =>\n Math.max(cell.length, ...rows.map((row) => row[index].length)),\n );\n const renderRow = (cells: string[]) =>\n cells.map((cell, index) => cell.padEnd(widths[index])).join(\" \").trimEnd();\n lines.push(renderRow(header));\n lines.push(widths.map((width) => \"-\".repeat(width)).join(\" \").trimEnd());\n for (const row of rows) {\n lines.push(renderRow(row));\n }\n }\n\n lines.push(\"\");\n if (opts.notices.length === 0) {\n lines.push(\"Notices: none.\");\n } else {\n lines.push(`Notices (${opts.notices.length}):`);\n for (const notice of opts.notices) {\n lines.push(`- [${notice.kind}] ${notice.message}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nasync function readPackageVersion(): Promise<string> {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n let current = moduleDir;\n while (true) {\n const candidate = join(current, \"package.json\");\n if (await pathExists(candidate)) {\n try {\n const parsed = JSON.parse(await readFile(candidate, \"utf8\")) as { version?: string };\n if (typeof parsed?.version === \"string\") {\n return parsed.version;\n }\n } catch {\n // ignore malformed package.json and keep walking up\n }\n }\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return \"0.0.0\";\n}\n","import { Command, InvalidArgumentError } from \"commander\";\nimport { ChangeCommandError } from \"../lib/changes.js\";\nimport { prepareTasks, type PrepareResult } from \"../lib/task-prepare.js\";\nimport type { TaskSelector } from \"../lib/tasks.js\";\n\ninterface TaskPrepareOptions {\n scope?: string;\n all?: boolean;\n json?: boolean;\n}\n\nexport function taskCommand(): Command {\n const command = new Command(\"task\").description(\"Prepare and inspect Weave local tasks.\");\n\n command\n .command(\"prepare\")\n .description(\"Prepare local branches for selected tasks.\")\n .argument(\"[tasks...]\", \"task ids, e.g. T1 T3\")\n .option(\"--scope <scope>\", \"prepare repos referenced by tasks with this scope\")\n .option(\"--all\", \"prepare repos referenced by all T# tasks\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (tasks: string[], options: TaskPrepareOptions) => {\n await runAction(options.json ?? false, async () => {\n const selector = parsePrepareSelector(tasks, options);\n const result = await prepareTasks({ cwd: process.cwd(), selector });\n writeResult(result, options.json ?? false);\n if (result.status === \"blocked\") {\n process.exitCode = 1;\n }\n });\n });\n\n return command;\n}\n\nfunction parsePrepareSelector(tasks: string[], options: TaskPrepareOptions): TaskSelector {\n const hasTasks = tasks.length > 0;\n const hasScope = typeof options.scope === \"string\" && options.scope.trim().length > 0;\n const hasAll = options.all === true;\n const modes = [hasTasks, hasScope, hasAll].filter(Boolean).length;\n if (modes !== 1) {\n throw new InvalidArgumentError(\"Provide exactly one selector: task ids, --scope <scope>, or --all.\");\n }\n if (hasAll) {\n return { type: \"all\" };\n }\n if (hasScope) {\n return { type: \"scope\", scope: options.scope?.trim() ?? \"\" };\n }\n return { type: \"tasks\", ids: tasks.map((task) => task.toUpperCase()) };\n}\n\nfunction writeResult(result: PrepareResult, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n process.stdout.write(`${result.message}\\n`);\n}\n\nasync function runAction(json: boolean, action: () => Promise<void>): Promise<void> {\n try {\n await action();\n } catch (error) {\n if (json) {\n process.stdout.write(`${JSON.stringify(errorResult(error), null, 2)}\\n`);\n } else {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n }\n process.exitCode = 1;\n }\n}\n\nfunction errorResult(error: unknown): { status: \"error\"; code: string; message: string; details?: unknown } {\n if (error instanceof ChangeCommandError) {\n return {\n status: \"error\",\n code: error.code,\n message: error.message,\n details: error.details,\n };\n }\n if (error instanceof InvalidArgumentError) {\n return {\n status: \"error\",\n code: \"invalid_arguments\",\n message: error.message,\n };\n }\n\n return {\n status: \"error\",\n code: \"unknown_error\",\n message: error instanceof Error ? error.message : String(error),\n };\n}\n","import { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { activeChangeContext, ChangeCommandError } from \"./changes.js\";\nimport { pathExists } from \"./files.js\";\nimport {\n branchExists,\n checkoutBranch,\n createBranch,\n currentBranch,\n currentHead,\n findGitRoot,\n isWorktreeDirty,\n} from \"./git.js\";\nimport { loadTasksForChange, deriveTaskRepoIds, selectTasks, type ParsedTask, type TaskSelector } from \"./tasks.js\";\nimport { readWorkspaceMetadata } from \"./workspace-repos.js\";\n\nexport type PrepareStatus = \"ok\" | \"blocked\";\nexport type PrepareBranchStatus = \"created\" | \"checked_out\" | \"already_active\" | \"skipped_not_git\";\nexport type PrepareRepoState = \"prepared\" | \"skipped\";\n\nexport type PrepareOptions = {\n cwd: string;\n selector: TaskSelector;\n now?: Date;\n sessionPath?: string;\n};\n\nexport type PrepareRepoResult = {\n id: string;\n path: string;\n mode: \"repo\" | \"workspace\";\n state: PrepareRepoState;\n branch_status: PrepareBranchStatus;\n branch: string;\n prepared_head?: string;\n};\n\nexport type PrepareBlocker = {\n target: string;\n reason: string;\n};\n\nexport type PrepareResult = {\n status: PrepareStatus;\n change: { id: string; branch: string; path: string };\n selector: { type: \"tasks\" | \"scope\" | \"all\"; values?: string[]; value?: string };\n mode: \"repo\" | \"workspace\";\n tasks: Array<{ id: string; title: string; scope?: string }>;\n repos: PrepareRepoResult[];\n blockers: PrepareBlocker[];\n message: string;\n};\n\ntype RepoTarget = {\n id: string;\n absolutePath: string;\n relativePath: string;\n mode: \"repo\" | \"workspace\";\n};\n\ntype RepoPlan = RepoTarget & {\n state: PrepareRepoState;\n branchStatus: PrepareBranchStatus;\n};\n\nexport async function prepareTasks(options: PrepareOptions): Promise<PrepareResult> {\n const now = options.now ?? new Date();\n const context = await activeChangeContext({ cwd: options.cwd, now, sessionPath: options.sessionPath });\n const branch = context.change.branch;\n const tasks = await loadTasksForChange(context.change.changePath);\n const selection = selectTasks(tasks, options.selector);\n const selector = formatSelector(options.selector);\n const selectedTasks = selection.tasks.map((task) => ({ id: task.id, title: task.title, scope: task.scope }));\n\n const blockers: PrepareBlocker[] = [];\n const emptySelectionBlocker = selectionBlocker(selection.tasks.length, options.selector);\n if (emptySelectionBlocker) {\n blockers.push(emptySelectionBlocker);\n }\n\n const artifactRootBlocker = await artifactRootBranchBlocker(context.target.path, branch);\n if (artifactRootBlocker) {\n blockers.push(artifactRootBlocker);\n }\n\n const targets = context.mode === \"repo\"\n ? repoModeTargets(context.target.path, selection.tasks)\n : await workspaceModeTargets(context.target.path, selection.tasks, blockers);\n\n const plans = blockers.length === 0 ? await preflightTargets(targets, branch, blockers) : [];\n if (blockers.length > 0) {\n return result({ status: \"blocked\", context, selector, tasks: selectedTasks, repos: [], blockers });\n }\n\n const repos = await applyPlans(plans, branch);\n if (repos.length > 0) {\n await writeExecutionState(context.change.changePath, branch, repos, now);\n }\n\n return result({ status: \"ok\", context, selector, tasks: selectedTasks, repos, blockers: [] });\n}\n\nfunction repoModeTargets(rootPath: string, tasks: ParsedTask[]): RepoTarget[] {\n if (tasks.length === 0) {\n return [];\n }\n return [{ id: \"root\", absolutePath: rootPath, relativePath: \".\", mode: \"repo\" }];\n}\n\nasync function workspaceModeTargets(rootPath: string, tasks: ParsedTask[], blockers: PrepareBlocker[]): Promise<RepoTarget[]> {\n const metadata = await readWorkspaceMetadata(rootPath);\n if (!metadata) {\n blockers.push({ target: rootPath, reason: \"Workspace metadata is missing or invalid.\" });\n return [];\n }\n\n const repoIds: string[] = [];\n for (const task of tasks) {\n const taskRepoIds = deriveTaskRepoIds(task).filter((repoId) => repoId.toLowerCase() !== \"workspace\");\n if (taskRepoIds.length === 0) {\n blockers.push({ target: task.id, reason: \"Task has no concrete repo metadata for workspace prepare.\" });\n continue;\n }\n for (const repoId of taskRepoIds) {\n if (!repoIds.includes(repoId)) {\n repoIds.push(repoId);\n }\n }\n }\n\n const targets: RepoTarget[] = [];\n for (const repoId of repoIds) {\n const entry = metadata.repos[repoId];\n if (!entry) {\n blockers.push({ target: repoId, reason: \"Task references a repo id that is not registered in workspace metadata.\" });\n continue;\n }\n const absolutePath = path.join(rootPath, entry.path);\n if (!(await pathExists(absolutePath))) {\n blockers.push({ target: repoId, reason: `Registered repo path does not exist: ${entry.path}` });\n continue;\n }\n targets.push({ id: repoId, absolutePath, relativePath: entry.path, mode: \"workspace\" });\n }\n\n return targets;\n}\n\nfunction selectionBlocker(taskCount: number, selector: TaskSelector): PrepareBlocker | undefined {\n if (taskCount > 0) {\n return undefined;\n }\n\n if (selector.type === \"scope\") {\n return { target: selector.scope, reason: \"No tasks matched the requested scope.\" };\n }\n\n if (selector.type === \"all\") {\n return { target: \"all\", reason: \"No T# tasks were found in tasks.md.\" };\n }\n\n return undefined;\n}\n\nasync function artifactRootBranchBlocker(rootPath: string, branch: string): Promise<PrepareBlocker | undefined> {\n const gitRoot = await findGitRoot(rootPath);\n if (!gitRoot) {\n return undefined;\n }\n const current = await currentBranch(rootPath);\n if (!current) {\n return { target: rootPath, reason: \"Artifact root is in detached HEAD or has no current branch.\" };\n }\n if (current !== branch) {\n return { target: rootPath, reason: `Artifact root branch is ${current}; expected ${branch}.` };\n }\n return undefined;\n}\n\nasync function preflightTargets(targets: RepoTarget[], branch: string, blockers: PrepareBlocker[]): Promise<RepoPlan[]> {\n const plans: RepoPlan[] = [];\n for (const target of targets) {\n const gitRoot = await findGitRoot(target.absolutePath);\n if (!gitRoot) {\n plans.push({ ...target, state: \"skipped\", branchStatus: \"skipped_not_git\" });\n continue;\n }\n\n const current = await currentBranch(target.absolutePath);\n if (!current) {\n blockers.push({ target: target.id, reason: \"Repo is in detached HEAD or has no current branch.\" });\n continue;\n }\n\n if (current === branch) {\n plans.push({ ...target, state: \"prepared\", branchStatus: \"already_active\" });\n continue;\n }\n\n if (await isWorktreeDirty(target.absolutePath)) {\n blockers.push({ target: target.id, reason: `Repo has uncommitted changes on ${current}; expected ${branch}.` });\n continue;\n }\n\n plans.push({\n ...target,\n state: \"prepared\",\n branchStatus: (await branchExists(target.absolutePath, branch)) ? \"checked_out\" : \"created\",\n });\n }\n return blockers.length > 0 ? [] : plans;\n}\n\nasync function applyPlans(plans: RepoPlan[], branch: string): Promise<PrepareRepoResult[]> {\n const repos: PrepareRepoResult[] = [];\n for (const plan of plans) {\n if (plan.branchStatus === \"checked_out\") {\n await checkoutBranch(plan.absolutePath, branch);\n } else if (plan.branchStatus === \"created\") {\n await createBranch(plan.absolutePath, branch);\n }\n\n const head = plan.state === \"prepared\" ? await currentHead(plan.absolutePath) : undefined;\n repos.push({\n id: plan.id,\n path: plan.relativePath,\n mode: plan.mode,\n state: plan.state,\n branch_status: plan.branchStatus,\n branch,\n ...(head ? { prepared_head: head } : {}),\n });\n }\n return repos;\n}\n\nasync function writeExecutionState(changePath: string, branch: string, repos: PrepareRepoResult[], now: Date): Promise<void> {\n const statusPath = path.join(changePath, \"status.yml\");\n const raw = YAML.parse(await readFile(statusPath, \"utf8\")) as Record<string, unknown>;\n const existingExecution = isRecord(raw.execution) ? raw.execution : undefined;\n const existingBranch = typeof existingExecution?.branch === \"string\" ? existingExecution.branch : undefined;\n const preserveExisting = existingBranch === branch && isRecord(existingExecution?.repos);\n const existingRepos = preserveExisting ? existingExecution?.repos as Record<string, unknown> : {};\n const nextRepos: Record<string, unknown> = { ...existingRepos };\n const timestamp = now.toISOString();\n\n for (const repo of repos) {\n const existing = isRecord(nextRepos[repo.id]) ? nextRepos[repo.id] as Record<string, unknown> : undefined;\n const existingPreparedAt = existing?.branch === branch && typeof existing.prepared_at === \"string\" ? existing.prepared_at : undefined;\n nextRepos[repo.id] = {\n path: repo.path,\n mode: repo.mode,\n branch: repo.branch,\n state: repo.state,\n branch_status: repo.branch_status,\n ...(repo.prepared_head ? { prepared_head: repo.prepared_head } : {}),\n prepared_at: existingPreparedAt ?? timestamp,\n verified_at: timestamp,\n };\n }\n\n raw.execution = {\n version: 1,\n branch,\n repos: nextRepos,\n };\n raw.updated_at = timestamp;\n await writeFile(statusPath, YAML.stringify(raw));\n}\n\nfunction result(input: {\n status: PrepareStatus;\n context: Awaited<ReturnType<typeof activeChangeContext>>;\n selector: PrepareResult[\"selector\"];\n tasks: PrepareResult[\"tasks\"];\n repos: PrepareRepoResult[];\n blockers: PrepareBlocker[];\n}): PrepareResult {\n const value: PrepareResult = {\n status: input.status,\n change: { id: input.context.change.id, branch: input.context.change.branch, path: input.context.change.path },\n selector: input.selector,\n mode: input.context.mode,\n tasks: input.tasks,\n repos: input.repos,\n blockers: input.blockers,\n message: \"\",\n };\n value.message = formatPrepareMessage(value);\n return value;\n}\n\nfunction formatSelector(selector: TaskSelector): PrepareResult[\"selector\"] {\n if (selector.type === \"all\") {\n return { type: \"all\" };\n }\n if (selector.type === \"scope\") {\n return { type: \"scope\", value: selector.scope };\n }\n return { type: \"tasks\", values: selector.ids };\n}\n\nfunction formatPrepareMessage(result: PrepareResult): string {\n const lines = [\n `Task prepare: ${result.change.id}`,\n `Branch: ${result.change.branch}`,\n `Mode: ${result.mode}`,\n `Status: ${result.status}`,\n ];\n if (result.tasks.length > 0) {\n lines.push(`Tasks: ${result.tasks.map((task) => task.id).join(\", \")}`);\n }\n if (result.repos.length > 0) {\n lines.push(\"\", \"Repos:\", ...result.repos.map((repo) => ` ${repo.id} ${repo.branch_status} ${repo.path}`));\n }\n if (result.blockers.length > 0) {\n lines.push(\"\", \"Blockers:\", ...result.blockers.map((blocker) => ` ${blocker.target}: ${blocker.reason}`));\n }\n return lines.join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { ChangeCommandError } from \"./changes.js\";\nimport { pathExists } from \"./files.js\";\n\nexport type TaskSelector =\n | { type: \"tasks\"; ids: string[] }\n | { type: \"scope\"; scope: string }\n | { type: \"all\" };\n\nexport type ParsedTask = {\n id: string;\n title: string;\n status?: string;\n type?: string;\n scope?: string;\n primaryRepo?: string;\n repos: string[];\n};\n\nexport type TaskSelection = {\n selector: TaskSelector;\n tasks: ParsedTask[];\n availableTaskIds: string[];\n availableScopes: string[];\n};\n\nexport async function loadTasksForChange(changePath: string): Promise<ParsedTask[]> {\n const tasksPath = path.join(changePath, \"tasks.md\");\n if (!(await pathExists(tasksPath))) {\n throw new ChangeCommandError(\"tasks_missing\", \"No tasks.md found for the active change. Run `weave-issues` first.\", { path: tasksPath });\n }\n\n return parseTasksMarkdown(await readFile(tasksPath, \"utf8\"));\n}\n\nexport function parseTasksMarkdown(content: string): ParsedTask[] {\n const headings = [...content.matchAll(/^## (T\\d+):\\s*(.+)$/gm)];\n const tasks: ParsedTask[] = [];\n\n for (let index = 0; index < headings.length; index += 1) {\n const heading = headings[index];\n const next = headings[index + 1];\n const id = heading[1];\n const title = heading[2].trim();\n const start = heading.index ?? 0;\n const end = next?.index ?? content.length;\n const block = content.slice(start, end);\n const fields = parseTaskFields(block);\n tasks.push({\n id,\n title,\n status: fields.get(\"status\"),\n type: fields.get(\"type\"),\n scope: fields.get(\"scope\"),\n primaryRepo: fields.get(\"primary repo\"),\n repos: parseRepoList(fields.get(\"repos\")),\n });\n }\n\n return tasks;\n}\n\nexport function selectTasks(tasks: ParsedTask[], selector: TaskSelector): TaskSelection {\n const availableTaskIds = tasks.map((task) => task.id);\n const availableScopes = unique(tasks.map((task) => task.scope).filter((scope): scope is string => Boolean(scope)));\n\n if (selector.type === \"all\") {\n return { selector, tasks, availableTaskIds, availableScopes };\n }\n\n if (selector.type === \"scope\") {\n const scope = selector.scope.toLowerCase();\n return {\n selector,\n tasks: tasks.filter((task) => task.scope?.toLowerCase() === scope),\n availableTaskIds,\n availableScopes,\n };\n }\n\n const normalized = selector.ids.map((id) => id.toUpperCase());\n const found = tasks.filter((task) => normalized.includes(task.id.toUpperCase()));\n const foundIds = new Set(found.map((task) => task.id.toUpperCase()));\n const missing = normalized.filter((id) => !foundIds.has(id));\n if (missing.length > 0) {\n throw new ChangeCommandError(\"task_not_found\", `No matching task found: ${missing.join(\", \")}`, { missing, availableTaskIds });\n }\n\n return { selector, tasks: found, availableTaskIds, availableScopes };\n}\n\nexport function deriveTaskRepoIds(task: ParsedTask): string[] {\n return unique([\n ...parseRepoList(task.primaryRepo),\n ...task.repos,\n ]);\n}\n\nfunction parseTaskFields(block: string): Map<string, string> {\n const fields = new Map<string, string>();\n for (const line of block.split(\"\\n\")) {\n const match = line.match(/^([A-Za-z][A-Za-z ]+):\\s*(.*)$/);\n if (!match) {\n continue;\n }\n fields.set(match[1].trim().toLowerCase(), cleanValue(match[2]));\n }\n return fields;\n}\n\nfunction parseRepoList(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n return value\n .split(\",\")\n .map((part) => cleanValue(part))\n .filter((part) => part.length > 0 && !isNoRepoValue(part));\n}\n\nfunction cleanValue(value: string): string {\n return value.trim().replace(/^`+|`+$/g, \"\").trim();\n}\n\nfunction isNoRepoValue(value: string): boolean {\n const normalized = value.toLowerCase();\n return normalized === \"none\" || normalized === \"n/a\" || normalized === \"not applicable\" || normalized === \"-\";\n}\n\nfunction unique(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (seen.has(value)) {\n continue;\n }\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n","import { Command } from \"commander\";\nimport { showWorkspace } from \"../lib/show-workspace.js\";\nimport { withNotices } from \"../lib/with-notices.js\";\n\nexport function workspaceCommand(): Command {\n return new Command(\"workspace\")\n .description(\"Show the current Weave workspace (workspace mode) or session folders (repo mode).\")\n .option(\"--json\", \"print machine-readable JSON\")\n .action(async (options: { json?: boolean }) => {\n await withNotices(\n { commandName: \"workspace\", json: options.json ?? false },\n async () => {\n const result = await showWorkspace({ cwd: process.cwd() });\n return {\n json: result.json,\n text: result.text,\n exitCode: result.status === \"no_session\" ? 1 : 0,\n };\n },\n );\n });\n}\n","import path from \"node:path\";\nimport { pathExists } from \"./files.js\";\nimport { defaultSessionPath, loadCurrentSession, type CurrentSession } from \"./session-state.js\";\nimport { findWorkspaceMode, isWorkspaceMode } from \"./workspace-mode.js\";\nimport { listReposForDisplay, readWorkspaceMetadata, type WorkspaceMetadata } from \"./workspace-repos.js\";\n\nexport type ShowWorkspaceOptions = {\n cwd?: string;\n json?: boolean;\n sessionPath?: string;\n};\n\nexport type ShowWorkspaceRepo = {\n id: string;\n path: string;\n kind: string;\n availability: \"present\" | \"missing\";\n remote?: string;\n};\n\nexport type ShowWorkspaceFolder = {\n id: string;\n path: string;\n kind: string;\n wiki: string;\n metadata: string;\n};\n\nexport type ShowWorkspaceSummary = {\n name: string;\n path: string;\n mode: \"workspace\";\n};\n\nexport type ShowWorkspaceSession = {\n status: \"active\";\n updated_at: string;\n};\n\nexport type ShowWorkspaceJson = {\n session: ShowWorkspaceSession | null;\n workspace: ShowWorkspaceSummary | null;\n repos: ShowWorkspaceRepo[];\n folders: ShowWorkspaceFolder[];\n};\n\nexport type ShowWorkspaceResult = {\n status: \"ok\" | \"no_session\";\n message: string;\n json: ShowWorkspaceJson;\n text: string;\n};\n\nexport async function showWorkspace(options: ShowWorkspaceOptions = {}): Promise<ShowWorkspaceResult> {\n const cwd = options.cwd ?? process.cwd();\n const sessionPath = options.sessionPath ?? defaultSessionPath();\n const session = await loadCurrentSession(sessionPath);\n const modeResult = await findWorkspaceMode(cwd);\n\n if (isWorkspaceMode(modeResult)) {\n return buildWorkspaceModeResult({\n workspacePath: modeResult.workspacePath,\n session,\n json: options.json ?? false,\n });\n }\n\n return buildRepoModeResult({ session, json: options.json ?? false });\n}\n\nasync function buildWorkspaceModeResult(input: {\n workspacePath: string;\n session: CurrentSession | undefined;\n json: boolean;\n}): Promise<ShowWorkspaceResult> {\n const metadata = await readWorkspaceMetadata(input.workspacePath);\n const summary = workspaceSummary(input.workspacePath, metadata);\n const repos = metadata ? await reposWithAvailability(input.workspacePath, listReposForDisplay(metadata)) : [];\n\n const json: ShowWorkspaceJson = {\n session: sessionJson(input.session),\n workspace: summary,\n repos,\n folders: [],\n };\n const text = workspaceText(summary, repos);\n\n return {\n status: \"ok\",\n message: input.json ? JSON.stringify(json, null, 2) : text,\n json,\n text,\n };\n}\n\nfunction buildRepoModeResult(input: {\n session: CurrentSession | undefined;\n json: boolean;\n}): ShowWorkspaceResult {\n if (!input.session) {\n const json: ShowWorkspaceJson = {\n session: null,\n workspace: null,\n repos: [],\n folders: [],\n };\n const text = \"No current Weave session found. Run `weave init` first.\";\n return {\n status: \"no_session\",\n message: input.json ? JSON.stringify(json, null, 2) : text,\n json,\n text,\n };\n }\n\n const folders = Object.entries(input.session.folders).map(([id, folder]) =>\n buildFolderOutput(id, folder.path, folder.kind),\n );\n\n const json: ShowWorkspaceJson = {\n session: sessionJson(input.session),\n workspace: null,\n repos: [],\n folders,\n };\n const text = repoText(folders);\n return {\n status: \"ok\",\n message: input.json ? JSON.stringify(json, null, 2) : text,\n json,\n text,\n };\n}\n\nfunction buildFolderOutput(id: string, folderPath: string, kind: string): ShowWorkspaceFolder {\n return {\n id,\n path: folderPath,\n kind,\n wiki: path.join(folderPath, \"wiki\"),\n metadata: path.join(folderPath, \".weave\"),\n };\n}\n\nfunction sessionJson(session: CurrentSession | undefined): ShowWorkspaceSession | null {\n if (!session) {\n return null;\n }\n return {\n status: \"active\",\n updated_at: session.updated_at,\n };\n}\n\nfunction workspaceSummary(workspacePath: string, metadata: WorkspaceMetadata | undefined): ShowWorkspaceSummary {\n return {\n name: metadata?.name ?? path.basename(workspacePath),\n path: workspacePath,\n mode: \"workspace\",\n };\n}\n\nasync function reposWithAvailability(\n workspacePath: string,\n repos: Array<Omit<ShowWorkspaceRepo, \"availability\">>,\n): Promise<ShowWorkspaceRepo[]> {\n return Promise.all(\n repos.map(async (repo) => ({\n ...repo,\n availability: (await pathExists(path.join(workspacePath, repo.path))) ? \"present\" : \"missing\",\n })),\n );\n}\n\nfunction workspaceText(summary: ShowWorkspaceSummary, repos: ShowWorkspaceRepo[]): string {\n const repoLines = repos.length === 0\n ? \" (no repos registered yet)\"\n : repos\n .map((repo) => {\n const remoteSuffix = repo.remote ? ` ${repo.remote}` : \"\";\n return ` ${repo.id} ${repo.path} ${repo.kind} ${repo.availability}${remoteSuffix}`;\n })\n .join(\"\\n\");\n\n return `Weave workspace: ${summary.name}\n\nPath:\n ${summary.path}\n\nRepos:\n${repoLines}\n\nNext:\n weave add <path|url>\n weave change new <title>`;\n}\n\nfunction repoText(folders: ShowWorkspaceFolder[]): string {\n const folderLines = folders\n .map((folder) => ` ${folder.id} ${folder.path} ${folder.kind}`)\n .join(\"\\n\");\n\n return `Current Weave session\n\nFolders:\n${folderLines}\n\nNext:\n weave add <path>\n weave init`;\n}\n"],"mappings":"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","names":["Command","path","realpath","stat","path","basename","path","readFile","path","readFile","basename","path","YAML","path","YAML","readFile","path","realpath","YAML","realpath","path","YAML","readFile","result","readFile","writeFile","path","realpath","YAML","realpath","relative","path","YAML","readFile","writeFile","basename","result","realpath","path","stat","result","Command","createHash","constants","access","mkdir","readdir","readFile","writeFile","dirname","YAML","readdir","readFile","dirname","writeFile","YAML","mkdir","path","createHash","access","constants","Command","result","Command","InvalidArgumentError","path","readFile","readdir","stat","path","path","readFile","path","readdir","stat","YAML","execFile","mkdir","readFile","readdir","writeFile","path","promisify","YAML","execFileAsync","promisify","execFile","mkdir","path","writeFile","currentBranch","YAML","readdir","isNodeError","readFile","currentBranch","path","YAML","git","execFileAsync","isNodeError","path","Command","runAction","result","InvalidArgumentError","Command","InvalidArgumentError","dirname","join","fileURLToPath","readFile","createHash","readFile","join","join","path","readFile","createHash","join","dirname","fileURLToPath","join","readFile","Command","runAction","result","writeResult","InvalidArgumentError","errorResult","Command","readFile","realpath","path","YAML","realpath","path","readFile","YAML","Command","result","Command","Command","runAction","Command","createHash","readFile","fileURLToPath","dirname","join","readPackageVersion","join","readFile","createHash","dirname","fileURLToPath","Command","result","Command","InvalidArgumentError","readFile","writeFile","path","YAML","readFile","path","path","readFile","result","path","YAML","readFile","isRecord","writeFile","Command","runAction","result","writeResult","InvalidArgumentError","errorResult","Command","path","text","json","path","Command","result","Command"]}