consortium
Version:
Remote control and session sharing CLI for AI coding agents
104 lines (101 loc) • 3.12 kB
JavaScript
import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
import { join } from 'node:path';
import { homedir } from 'node:os';
import { l as logger } from './types-vIstUf63.mjs';
import { D as DEFAULT_PI_MODEL, g as getDefaultPiProvider, P as PI_CODING_AGENT_DIR_ENV } from './index-Ucc63AlK.mjs';
import 'axios';
import 'chalk';
import 'fs';
import 'node:events';
import 'socket.io-client';
import 'zod';
import 'node:crypto';
import 'tweetnacl';
import 'node:module';
import 'child_process';
import 'util';
import 'fs/promises';
import 'os';
import 'crypto';
import 'path';
import 'url';
import 'node:child_process';
import 'node:fs/promises';
import 'node:util';
import 'http';
import 'net';
import 'expo-server-sdk';
import 'node:net';
import 'node:readline';
import 'ink';
import 'react';
import 'node:url';
import 'node:http';
import 'node:https';
import 'node:stream/promises';
import 'tar';
import 'ps-list';
import 'cross-spawn';
import 'tmp';
import 'qrcode-terminal';
import 'open';
import 'fastify';
import 'fastify-type-provider-zod';
import 'ws';
import 'playwright-core';
import 'imapflow';
import 'mailparser';
import 'yaml';
import '@modelcontextprotocol/sdk/client/index.js';
import '@modelcontextprotocol/sdk/client/streamableHttp.js';
import 'readline';
import '@modelcontextprotocol/sdk/server/mcp.js';
import '@modelcontextprotocol/sdk/server/streamableHttp.js';
import 'libsodium-wrappers';
import 'pixelmatch';
import 'pngjs';
function getPiAgentDir() {
const envDir = process.env[PI_CODING_AGENT_DIR_ENV];
if (envDir && envDir.trim().length > 0) return envDir;
return join(homedir(), ".pi", "agent");
}
function getSettingsPath() {
return join(getPiAgentDir(), "settings.json");
}
function readPiSettings() {
const path = getSettingsPath();
if (!existsSync(path)) return {};
try {
return JSON.parse(readFileSync(path, "utf-8"));
} catch (err) {
logger.debug(`[Pi] Failed to parse settings at ${path}:`, err);
return {};
}
}
function getInitialPiProviderAndModel() {
const settings = readPiSettings();
return {
provider: settings.defaultProvider ?? getDefaultPiProvider(),
model: settings.defaultModel ?? DEFAULT_PI_MODEL,
thinking: settings.defaultThinking
};
}
function savePiDefaults(patch) {
const dir = getPiAgentDir();
const path = getSettingsPath();
try {
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
const current = readPiSettings();
const next = {
...current,
...patch.provider !== void 0 && { defaultProvider: patch.provider },
...patch.model !== void 0 && { defaultModel: patch.model }
};
if (patch.thinking) next.defaultThinking = patch.thinking;
writeFileSync(path, JSON.stringify(next, null, 2), "utf-8");
logger.debug(`[Pi] Saved defaults to ${path}: ${patch.provider ?? "(unchanged)"}/${patch.model ?? "(unchanged)"}${patch.thinking ? `/${patch.thinking}` : ""}`);
} catch (err) {
logger.debug(`[Pi] Failed to save defaults to ${path}:`, err);
}
}
export { getInitialPiProviderAndModel, getPiAgentDir, readPiSettings, savePiDefaults };