π File detail
utils/crossProjectResume.ts
π― Use case
This file lives under βutils/β, which covers cross-cutting helpers (shell, tempfiles, settings, messages, process input, β¦). On the API surface it exposes CrossProjectResumeResult and checkCrossProjectResume β mainly functions, hooks, or classes. Dependencies touch Node path helpers. It composes internal code from bootstrap, types, bash, and sessionStorage (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { sep } from 'path' import { getOriginalCwd } from '../bootstrap/state.js' import type { LogOption } from '../types/logs.js' import { quote } from './bash/shellQuote.js' import { getSessionIdFromLog } from './sessionStorage.js'
π€ Exports (heuristic)
CrossProjectResumeResultcheckCrossProjectResume
π External import roots
Package roots from from "β¦" (relative paths omitted).
path
π₯οΈ Source preview
import { sep } from 'path'
import { getOriginalCwd } from '../bootstrap/state.js'
import type { LogOption } from '../types/logs.js'
import { quote } from './bash/shellQuote.js'
import { getSessionIdFromLog } from './sessionStorage.js'
export type CrossProjectResumeResult =
| {
isCrossProject: false
}
| {
isCrossProject: true
isSameRepoWorktree: true
projectPath: string
}
| {
isCrossProject: true
isSameRepoWorktree: false
command: string
projectPath: string
}
/**
* Check if a log is from a different project directory and determine
* whether it's a related worktree or a completely different project.
*
* For same-repo worktrees, we can resume directly without requiring cd.
* For different projects, we generate the cd command.
*/
export function checkCrossProjectResume(
log: LogOption,
showAllProjects: boolean,
worktreePaths: string[],
): CrossProjectResumeResult {
const currentCwd = getOriginalCwd()
if (!showAllProjects || !log.projectPath || log.projectPath === currentCwd) {
return { isCrossProject: false }
}
// Gate worktree detection to ants only for staged rollout
if (process.env.USER_TYPE !== 'ant') {
const sessionId = getSessionIdFromLog(log)
const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
return {
isCrossProject: true,
isSameRepoWorktree: false,
command,
projectPath: log.projectPath,
}
}
// Check if log.projectPath is under a worktree of the same repo
const isSameRepo = worktreePaths.some(
wt => log.projectPath === wt || log.projectPath!.startsWith(wt + sep),
)
if (isSameRepo) {
return {
isCrossProject: true,
isSameRepoWorktree: true,
projectPath: log.projectPath,
}
}
// Different repo - generate cd command
const sessionId = getSessionIdFromLog(log)
const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
return {
isCrossProject: true,
isSameRepoWorktree: false,
command,
projectPath: log.projectPath,
}
}