refactor: centralize home path shortening
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
import fs from "node:fs";
|
import fs from "node:fs";
|
||||||
import os from "node:os";
|
|
||||||
|
|
||||||
import { lookupContextTokens } from "../agents/context.js";
|
import { lookupContextTokens } from "../agents/context.js";
|
||||||
import {
|
import {
|
||||||
@@ -19,6 +18,7 @@ import {
|
|||||||
type SessionEntry,
|
type SessionEntry,
|
||||||
type SessionScope,
|
type SessionScope,
|
||||||
} from "../config/sessions.js";
|
} from "../config/sessions.js";
|
||||||
|
import { shortenHomePath } from "../utils.js";
|
||||||
import type { ThinkLevel, VerboseLevel } from "./thinking.js";
|
import type { ThinkLevel, VerboseLevel } from "./thinking.js";
|
||||||
|
|
||||||
type AgentConfig = NonNullable<ClawdisConfig["agent"]>;
|
type AgentConfig = NonNullable<ClawdisConfig["agent"]>;
|
||||||
@@ -53,13 +53,6 @@ const formatAge = (ms?: number | null) => {
|
|||||||
const formatKTokens = (value: number) =>
|
const formatKTokens = (value: number) =>
|
||||||
`${(value / 1000).toFixed(value >= 10_000 ? 0 : 1)}k`;
|
`${(value / 1000).toFixed(value >= 10_000 ? 0 : 1)}k`;
|
||||||
|
|
||||||
const abbreviatePath = (p?: string) => {
|
|
||||||
if (!p) return undefined;
|
|
||||||
const home = os.homedir();
|
|
||||||
if (p.startsWith(home)) return p.replace(home, "~");
|
|
||||||
return p;
|
|
||||||
};
|
|
||||||
|
|
||||||
const formatTokens = (
|
const formatTokens = (
|
||||||
total: number | null | undefined,
|
total: number | null | undefined,
|
||||||
contextTokens: number | null,
|
contextTokens: number | null,
|
||||||
@@ -187,7 +180,7 @@ export function buildStatusMessage(args: StatusArgs): string {
|
|||||||
entry?.updatedAt
|
entry?.updatedAt
|
||||||
? `updated ${formatAge(now - entry.updatedAt)}`
|
? `updated ${formatAge(now - entry.updatedAt)}`
|
||||||
: "no activity",
|
: "no activity",
|
||||||
args.storePath ? `store ${abbreviatePath(args.storePath)}` : undefined,
|
args.storePath ? `store ${shortenHomePath(args.storePath)}` : undefined,
|
||||||
]
|
]
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.join(" • ");
|
.join(" • ");
|
||||||
@@ -214,7 +207,7 @@ export function buildStatusMessage(args: StatusArgs): string {
|
|||||||
const agentLine = `Agent: embedded pi • ${modelLabel}`;
|
const agentLine = `Agent: embedded pi • ${modelLabel}`;
|
||||||
|
|
||||||
const workspaceLine = args.workspaceDir
|
const workspaceLine = args.workspaceDir
|
||||||
? `Workspace: ${abbreviatePath(args.workspaceDir)}`
|
? `Workspace: ${shortenHomePath(args.workspaceDir)}`
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const helpersLine = "Shortcuts: /new reset | /restart relink";
|
const helpersLine = "Shortcuts: /new reset | /restart relink";
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { shortenHomeInString, shortenHomePath } from "../utils.js";
|
||||||
|
|
||||||
export const TOOL_RESULT_DEBOUNCE_MS = 500;
|
export const TOOL_RESULT_DEBOUNCE_MS = 500;
|
||||||
export const TOOL_RESULT_FLUSH_COUNT = 5;
|
export const TOOL_RESULT_FLUSH_COUNT = 5;
|
||||||
|
|
||||||
@@ -23,17 +25,8 @@ function resolveToolEmoji(toolName?: string): string {
|
|||||||
return "🧩";
|
return "🧩";
|
||||||
}
|
}
|
||||||
|
|
||||||
function shortenHomeInString(input: string): string {
|
|
||||||
const home = process.env.HOME;
|
|
||||||
if (!home) return input;
|
|
||||||
return input.split(home).join("~");
|
|
||||||
}
|
|
||||||
|
|
||||||
export function shortenPath(p: string): string {
|
export function shortenPath(p: string): string {
|
||||||
const home = process.env.HOME;
|
return shortenHomePath(p);
|
||||||
if (home && (p === home || p.startsWith(`${home}/`)))
|
|
||||||
return p.replace(home, "~");
|
|
||||||
return p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function shortenMeta(meta: string): string {
|
export function shortenMeta(meta: string): string {
|
||||||
|
|||||||
29
src/utils.ts
29
src/utils.ts
@@ -104,5 +104,34 @@ export function resolveUserPath(input: string): string {
|
|||||||
return path.resolve(trimmed);
|
return path.resolve(trimmed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveHomeDir(): string | undefined {
|
||||||
|
const envHome = process.env.HOME?.trim();
|
||||||
|
if (envHome) return envHome;
|
||||||
|
const envProfile = process.env.USERPROFILE?.trim();
|
||||||
|
if (envProfile) return envProfile;
|
||||||
|
try {
|
||||||
|
const home = os.homedir();
|
||||||
|
return home?.trim() ? home : undefined;
|
||||||
|
} catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function shortenHomePath(input: string): string {
|
||||||
|
if (!input) return input;
|
||||||
|
const home = resolveHomeDir();
|
||||||
|
if (!home) return input;
|
||||||
|
if (input === home) return "~";
|
||||||
|
if (input.startsWith(`${home}/`)) return `~${input.slice(home.length)}`;
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function shortenHomeInString(input: string): string {
|
||||||
|
if (!input) return input;
|
||||||
|
const home = resolveHomeDir();
|
||||||
|
if (!home) return input;
|
||||||
|
return input.split(home).join("~");
|
||||||
|
}
|
||||||
|
|
||||||
// Fixed configuration root; legacy ~/.clawdis is no longer used.
|
// Fixed configuration root; legacy ~/.clawdis is no longer used.
|
||||||
export const CONFIG_DIR = path.join(os.homedir(), ".clawdis");
|
export const CONFIG_DIR = path.join(os.homedir(), ".clawdis");
|
||||||
|
|||||||
Reference in New Issue
Block a user