pi config update
This commit is contained in:
@@ -118,11 +118,11 @@ function killOtherSessions(pids: number[]): number {
|
||||
function statusLabel(account: Account | "unknown"): string {
|
||||
switch (account) {
|
||||
case "personal":
|
||||
return "🏠 personal";
|
||||
return " personal";
|
||||
case "work":
|
||||
return "💼 work";
|
||||
return " work";
|
||||
default:
|
||||
return "❓ claude";
|
||||
return " claude";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,13 +132,29 @@ export default function (pi: ExtensionAPI) {
|
||||
let currentAccount: Account | "unknown" = "unknown";
|
||||
|
||||
pi.on("session_start", async (_event, ctx) => {
|
||||
// Proper-lockfile creates auth.json.lock as a *directory* (atomic mkdir).
|
||||
// If a regular file exists at that path (e.g. left by an older pi version),
|
||||
// rmdir fails with ENOTDIR → lock acquisition throws → loadError is set →
|
||||
// credentials are never persisted after /login. Delete the stale file and
|
||||
// reload so this session has working auth persistence.
|
||||
const lockPath = AUTH_JSON + ".lock";
|
||||
try {
|
||||
const stat = fs.statSync(lockPath);
|
||||
if (stat.isFile()) {
|
||||
fs.unlinkSync(lockPath);
|
||||
ctx.modelRegistry.authStorage.reload();
|
||||
}
|
||||
} catch {
|
||||
// lock doesn't exist or we can't stat it — nothing to fix
|
||||
}
|
||||
|
||||
currentAccount = getCurrentAccount();
|
||||
ctx.ui.setStatus("claude-account", statusLabel(currentAccount));
|
||||
});
|
||||
|
||||
pi.registerCommand("switch-claude", {
|
||||
description:
|
||||
"Switch between personal (🏠) and work (💼) Claude accounts. Use 'save <name>' to save current login as a profile.",
|
||||
"Switch between personal () and work () Claude accounts. Use 'save <name>' to save current login as a profile.",
|
||||
handler: async (args, ctx) => {
|
||||
const authStorage = ctx.modelRegistry.authStorage;
|
||||
const trimmed = args?.trim() ?? "";
|
||||
@@ -178,15 +194,15 @@ export default function (pi: ExtensionAPI) {
|
||||
if (trimmed === "personal" || trimmed === "work") {
|
||||
newAccount = trimmed;
|
||||
} else if (trimmed === "") {
|
||||
const personalLabel = `🏠 personal${currentAccount === "personal" ? " ← current" : ""}${!hasProfile("personal") ? " (no profile saved)" : ""}`;
|
||||
const workLabel = `💼 work${currentAccount === "work" ? " ← current" : ""}${!hasProfile("work") ? " (no profile saved)" : ""}`;
|
||||
const personalLabel = ` personal${currentAccount === "personal" ? " ← current" : ""}${!hasProfile("personal") ? " (no profile saved)" : ""}`;
|
||||
const workLabel = ` work${currentAccount === "work" ? " ← current" : ""}${!hasProfile("work") ? " (no profile saved)" : ""}`;
|
||||
|
||||
const accountChoice = await ctx.ui.select(
|
||||
"Switch Claude account:",
|
||||
[personalLabel, workLabel],
|
||||
);
|
||||
if (accountChoice === undefined) return;
|
||||
newAccount = accountChoice.startsWith("🏠") ? "personal" : "work";
|
||||
newAccount = accountChoice.startsWith("") ? "personal" : "work";
|
||||
} else {
|
||||
ctx.ui.notify(
|
||||
"Usage: /switch-claude [personal|work|save <name>]",
|
||||
@@ -276,6 +292,7 @@ export default function (pi: ExtensionAPI) {
|
||||
currentAccount = newAccount;
|
||||
setMarker(currentAccount);
|
||||
ctx.ui.setStatus("claude-account", statusLabel(currentAccount));
|
||||
pi.events.emit("claude-account:switched", { account: newAccount });
|
||||
ctx.ui.notify(
|
||||
`Switched to ${statusLabel(newAccount)} ✓`,
|
||||
"info",
|
||||
|
||||
Reference in New Issue
Block a user