mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
67 lines
2.4 KiB
TypeScript
67 lines
2.4 KiB
TypeScript
import { join } from "node:path";
|
|
import { getGlobalLogsDir } from "./config-paths";
|
|
import { discoverGlobalNodeModulesRoot } from "./node-modules-discovery";
|
|
|
|
/**
|
|
* Immutable path constants derived from `agentDir` at construction time.
|
|
*
|
|
* Computed once at startup in `computeExtensionPaths()` and embedded into
|
|
* `ExtensionRuntime`. Later refactorings (#129 PermissionSession, #130
|
|
* handler classes) consume this as a single dep instead of individual fields.
|
|
*/
|
|
export interface ExtensionPaths {
|
|
readonly agentDir: string;
|
|
readonly sessionsDir: string;
|
|
readonly subagentSessionsDir: string;
|
|
readonly forwardingDir: string;
|
|
readonly globalLogsDir: string;
|
|
/**
|
|
* Static Pi infrastructure directories used for external-directory
|
|
* read auto-allow. Computed once from `agentDir`,
|
|
* `discoverGlobalNodeModulesRoot()`, and (when provided) Pi's own
|
|
* install directory (`getPackageDir()`). Config-based extras
|
|
* (`piInfrastructureReadPaths`) are read from `runtime.config` at
|
|
* call time in the handler so they pick up config reloads.
|
|
*/
|
|
readonly piInfrastructureDirs: readonly string[];
|
|
}
|
|
|
|
/**
|
|
* Compute all immutable path constants from `agentDir`.
|
|
*
|
|
* Calls `discoverGlobalNodeModulesRoot()` internally so the result is
|
|
* self-contained. Call this once at extension startup, not at module scope.
|
|
*
|
|
* `piPackageDir` is Pi's own install directory (from the coding-agent
|
|
* `getPackageDir()` API, resolved at the composition root). When provided it is
|
|
* auto-allowed for read-only tools so the agent can read Pi's bundled docs and
|
|
* examples regardless of install layout. It is strictly narrower than the
|
|
* discovered global `node_modules` root already included here.
|
|
*/
|
|
export function computeExtensionPaths(
|
|
agentDir: string,
|
|
piPackageDir?: string,
|
|
): ExtensionPaths {
|
|
const sessionsDir = join(agentDir, "sessions");
|
|
const subagentSessionsDir = join(agentDir, "subagent-sessions");
|
|
const forwardingDir = join(sessionsDir, "permission-forwarding");
|
|
const globalLogsDir = getGlobalLogsDir(agentDir);
|
|
|
|
const globalNodeModulesRoot = discoverGlobalNodeModulesRoot();
|
|
const piInfrastructureDirs: string[] = [
|
|
agentDir,
|
|
join(agentDir, "git"),
|
|
...(globalNodeModulesRoot ? [globalNodeModulesRoot] : []),
|
|
...(piPackageDir ? [piPackageDir] : []),
|
|
];
|
|
|
|
return {
|
|
agentDir,
|
|
sessionsDir,
|
|
subagentSessionsDir,
|
|
forwardingDir,
|
|
globalLogsDir,
|
|
piInfrastructureDirs,
|
|
};
|
|
}
|