@gnsx/genesys.agent.cli 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bundle/launcher.js
CHANGED
|
@@ -496,7 +496,7 @@ async function main(argv) {
|
|
|
496
496
|
await resourceLoader.reload();
|
|
497
497
|
const extensionsResult = resourceLoader.getExtensions();
|
|
498
498
|
const authStorage = AuthStorage.create(join2(agentDir, "auth.json"));
|
|
499
|
-
const modelRegistry =
|
|
499
|
+
const modelRegistry = ModelRegistry.create(authStorage, join2(agentDir, "models.json"));
|
|
500
500
|
for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {
|
|
501
501
|
try {
|
|
502
502
|
modelRegistry.registerProvider(name, config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../extensions/src/internal/providers/dashscope.ts","../../../extensions/src/internal/providers/index.ts","../../../extensions/src/internal/context-resolver.ts","../../../extensions/src/index.ts","../../../../../cli-utils/src/self-update.ts","../../../../../cli-utils/src/index.ts","../../src/args.ts","../../src/utils/package.ts","../../src/extensions/version-check.ts","../../src/cli.ts","../../src/launcher.ts"],"sourcesContent":["import { getModel } from '@mariozechner/pi-ai';\n\nimport type { ExtensionAPI, ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\nconst DASHSCOPE_BASE_URL_ANTHROPIC = 'https://coding.dashscope.aliyuncs.com/apps/anthropic';\n\nexport function createDashscopeExtension(): ExtensionFactory {\n return (pi: ExtensionAPI) => {\n const apiKey = process.env.DASHSCOPE_API_KEY;\n if (!apiKey) {\n return;\n }\n\n const qwen35PlusModel = getModel('openrouter', 'qwen/qwen3.5-plus-02-15');\n const qwen3MaxModel = getModel('openrouter', 'qwen/qwen3-max');\n const qwen3CoderNextModel = getModel('openrouter', 'qwen/qwen3-coder-next');\n const qwen3CoderPlusModel = getModel('openrouter', 'qwen/qwen3-coder-plus');\n const glm5Model = getModel('openrouter', 'z-ai/glm-5');\n const glm47Model = getModel('openrouter', 'z-ai/glm-4.7');\n const kimiK25Model = getModel('openrouter', 'moonshotai/kimi-k2.5');\n const minimaxM25Model = getModel('openrouter', 'minimax/minimax-m2.5');\n\n pi.registerProvider('dashscope', {\n baseUrl: DASHSCOPE_BASE_URL_ANTHROPIC,\n apiKey: apiKey,\n api: 'anthropic-messages',\n models: [\n // Qwen models (Alibaba Cloud)\n {\n id: 'qwen3.5-plus',\n name: 'Qwen 3.5 Plus',\n reasoning: qwen35PlusModel.reasoning,\n input: qwen35PlusModel.input,\n cost: qwen35PlusModel.cost,\n contextWindow: qwen35PlusModel.contextWindow,\n maxTokens: qwen35PlusModel.maxTokens,\n },\n {\n id: 'qwen3-max-2026-01-23',\n name: 'Qwen 3 Max',\n reasoning: qwen3MaxModel.reasoning,\n input: qwen3MaxModel.input,\n cost: qwen3MaxModel.cost,\n contextWindow: qwen3MaxModel.contextWindow,\n maxTokens: qwen3MaxModel.maxTokens,\n },\n {\n id: 'qwen3-coder-next',\n name: 'Qwen 3 Coder Next',\n reasoning: qwen3CoderNextModel.reasoning,\n input: qwen3CoderNextModel.input,\n cost: qwen3CoderNextModel.cost,\n contextWindow: qwen3CoderNextModel.contextWindow,\n maxTokens: qwen3CoderNextModel.maxTokens,\n },\n {\n id: 'qwen3-coder-plus',\n name: 'Qwen 3 Coder Plus',\n reasoning: qwen3CoderPlusModel.reasoning,\n input: qwen3CoderPlusModel.input,\n cost: qwen3CoderPlusModel.cost,\n contextWindow: qwen3CoderPlusModel.contextWindow,\n maxTokens: qwen3CoderPlusModel.maxTokens,\n },\n // GLM models (Zhipu AI)\n {\n id: 'glm-5',\n name: 'GLM 5',\n reasoning: glm5Model.reasoning,\n input: glm5Model.input,\n cost: glm5Model.cost,\n contextWindow: glm5Model.contextWindow,\n maxTokens: glm5Model.maxTokens,\n },\n {\n id: 'glm-4.7',\n name: 'GLM 4.7',\n reasoning: glm47Model.reasoning,\n input: glm47Model.input,\n cost: glm47Model.cost,\n contextWindow: glm47Model.contextWindow,\n maxTokens: glm47Model.maxTokens,\n },\n // Kimi models (Moonshot AI)\n {\n id: 'kimi-k2.5',\n name: 'Kimi K2.5',\n reasoning: kimiK25Model.reasoning,\n input: kimiK25Model.input,\n cost: kimiK25Model.cost,\n contextWindow: kimiK25Model.contextWindow,\n maxTokens: kimiK25Model.maxTokens,\n },\n // MiniMax models\n {\n id: 'MiniMax-M2.5',\n name: 'MiniMax M2.5',\n reasoning: minimaxM25Model.reasoning,\n input: minimaxM25Model.input,\n cost: minimaxM25Model.cost,\n contextWindow: minimaxM25Model.contextWindow,\n maxTokens: 32768,\n },\n ],\n });\n };\n}\n\n// Default instance uses env vars, skips silently if missing\nexport const dashscopeExtension = createDashscopeExtension();\n","export { createDashscopeExtension, dashscopeExtension } from './dashscope.js';\n","import { dashscopeExtension } from './providers/index.js';\n\nimport type { ExtensionContext, ExtensionSet } from '../types.js';\n\nexport function resolveExtensionSet(context: ExtensionContext): ExtensionSet {\n const extensions: ExtensionSet = [];\n\n switch (context) {\n case 'cli': {\n // CLI gets default extensions (env-based configuration)\n extensions.push(dashscopeExtension);\n // Add other CLI-appropriate extensions here\n break;\n }\n\n case 'embedded': {\n // Embedded gets the same extensions by default\n // Could add context-specific extensions here in the future\n extensions.push(dashscopeExtension);\n break;\n }\n\n default: {\n const _exhaustive: never = context;\n throw new Error(`Unknown extension context: ${_exhaustive}`);\n }\n }\n\n return extensions;\n}\n","import { resolveExtensionSet } from './internal/context-resolver.js';\n\nimport type { ExtensionContext, ExtensionSet } from './types.js';\n\nexport type { ExtensionContext, ExtensionSet } from './types.js';\nexport type { ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\n/**\n * Get the appropriate extension set for the given context.\n *\n * @param context - The context to get extensions for ('cli' | 'embedded')\n * @returns Array of extension factories ready to use\n *\n * @example\n * ```typescript\n * // CLI usage\n * import { getExtensions } from '@gnsx/genesys.agent.extensions';\n *\n * const extensions = getExtensions('cli');\n * const resourceLoader = new DefaultResourceLoader({\n * extensionFactories: extensions\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Embedded usage\n * import { getExtensions } from '@gnsx/genesys.agent.extensions';\n *\n * const agent = new EmbeddedAgent();\n * await agent.start({\n * cwd: '/project',\n * extensions: getExtensions('embedded')\n * });\n * ```\n */\nexport function getExtensions(context: ExtensionContext): ExtensionSet {\n return resolveExtensionSet(context);\n}\n","/**\n * Self-update functionality for Genesys CLI tools.\n *\n * Provides utilities for checking and performing CLI updates\n * via npm or pnpm package managers.\n */\n\nimport { execSync } from 'child_process';\nimport { fileURLToPath } from 'url';\nimport type { Command } from 'commander';\n\n/**\n * Check if running from an installed package (not local development).\n * Returns true if the current file is inside node_modules.\n */\nexport function isInstalledPackage(): boolean {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n return currentFile.includes('node_modules');\n } catch {\n return false;\n }\n}\n\n/**\n * Detect which package manager was used to install the CLI.\n * Checks environment variables and execution path.\n *\n * @returns 'pnpm', 'npm', or 'unknown'\n */\nexport function detectPackageManager(): 'pnpm' | 'npm' | 'unknown' {\n // Check environment variables\n if (process.env.PNPM_PACKAGE_NAME) return 'pnpm';\n if (process.env.npm_execpath?.includes('pnpm')) return 'pnpm';\n\n // Check exec path\n const execPath = process.argv[1] || '';\n if (execPath.includes('pnpm')) return 'pnpm';\n if (execPath.includes('npm')) return 'npm';\n\n // Default to pnpm (monorepo preference)\n return 'pnpm';\n}\n\n/**\n * Compare semantic versions.\n * Returns true if latest is newer than current.\n */\nfunction isNewerVersion(latest: string, current: string): boolean {\n const latestParts = latest.split('.').map(Number);\n const currentParts = current.split('.').map(Number);\n\n for (let i = 0; i < 3; i++) {\n const latestPart = latestParts[i] || 0;\n const currentPart = currentParts[i] || 0;\n if (latestPart > currentPart) return true;\n if (latestPart < currentPart) return false;\n }\n\n return false;\n}\n\n/**\n * Check npm registry for the latest version of a package.\n *\n * @param packageName - The npm package name\n * @param currentVersion - The currently installed version\n * @returns Latest version string, or null if up-to-date or error\n */\nexport async function checkForUpdates(\n packageName: string,\n currentVersion: string\n): Promise<string | null> {\n try {\n if (!isInstalledPackage()) return null;\n\n const encodedName = encodeURIComponent(packageName);\n const response = await fetch(`https://registry.npmjs.org/${encodedName}/latest`, {\n signal: AbortSignal.timeout(10000),\n });\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latestVersion = data.version;\n\n if (!latestVersion || latestVersion === currentVersion) return null;\n if (!isNewerVersion(latestVersion, currentVersion)) return null;\n\n return latestVersion;\n } catch {\n return null;\n }\n}\n\n/**\n * Perform the update using the detected package manager.\n *\n * @param packageName - The npm package name\n * @param packageManager - The package manager to use ('pnpm' or 'npm')\n * @param currentVersion - The current installed version\n * @param latestVersion - The latest available version\n * @returns true on success, false on failure\n */\nexport function performUpdate(\n packageName: string,\n packageManager: 'pnpm' | 'npm',\n currentVersion: string,\n latestVersion: string\n): boolean {\n console.log(`\\nUpdating ${packageName}...`);\n console.log(` Current: v${currentVersion}`);\n console.log(` Latest: v${latestVersion}\\n`);\n\n try {\n const updateCommand = packageManager === 'pnpm'\n ? `pnpm remove -g ${packageName} && pnpm add -g ${packageName}@latest`\n : `npm uninstall -g ${packageName} && npm install -g ${packageName}@latest`;\n\n // Run in shell for cross-platform compatibility (&& works on Unix, needs shell on Windows)\n execSync(updateCommand, { stdio: 'inherit' } as import('child_process').ExecSyncOptions);\n\n console.log(`\\n✅ Update complete! ${packageName} has been updated to v${latestVersion}.`);\n return true;\n } catch (error) {\n console.error(`\\n❌ Update failed. Please try running the commands manually:`);\n if (packageManager === 'pnpm') {\n console.error(` pnpm remove -g ${packageName}`);\n console.error(` pnpm add -g ${packageName}@latest`);\n } else {\n console.error(` npm uninstall -g ${packageName}`);\n console.error(` npm install -g ${packageName}@latest`);\n }\n return false;\n }\n}\n\n/**\n * Callback fired when the update command is invoked.\n */\nexport type UpdateCommandCallback = () => void;\n\n/**\n * Add 'update' subcommand to a Commander.js program.\n *\n * @param program - The Commander.js program\n * @param packageName - The npm package name\n * @param currentVersion - The current installed version\n * @param onUpdate - Optional callback fired when the update command is invoked\n */\nexport function addUpdateCommand(\n program: Command,\n packageName: string,\n currentVersion: string,\n onUpdate?: UpdateCommandCallback\n): void {\n program\n .command('update')\n .description('Check for updates and install the latest version')\n .action(async () => {\n // Notify caller that update command is being handled\n onUpdate?.();\n\n // Skip if running from local development\n if (!isInstalledPackage()) {\n console.log('Skipping update check - running from local development.');\n process.exit(0);\n }\n\n console.log('Checking for updates...');\n\n const latestVersion = await checkForUpdates(packageName, currentVersion);\n\n if (!latestVersion) {\n console.log(`You are already using the latest version (v${currentVersion}).`);\n process.exit(0);\n }\n\n console.log(`\\n📦 Update available: v${currentVersion} → v${latestVersion}`);\n\n const packageManager = detectPackageManager();\n\n if (packageManager === 'unknown') {\n console.error('\\n❌ Could not detect package manager. Please update manually:');\n console.error(` pnpm remove -g ${packageName} && pnpm add -g ${packageName}@latest`);\n console.error(` or`);\n console.error(` npm uninstall -g ${packageName} && npm install -g ${packageName}@latest`);\n process.exit(1);\n }\n\n const success = performUpdate(packageName, packageManager, currentVersion, latestVersion);\n process.exit(success ? 0 : 1);\n });\n}\n","export * from './self-update.js';\n","/**\n * CLI argument definitions for the Genesys Agent v2 CLI.\n *\n * Intentionally minimal — model selection, session management and tool\n * configuration are delegated to pi's own machinery via createAgentSession.\n */\n\nimport { addUpdateCommand } from '@gnsx/cli-utils';\nimport { Command } from 'commander';\n\nimport type { ThinkingLevel } from '@mariozechner/pi-agent-core';\n\nexport interface Args {\n /** Working directory (default: process.cwd()) */\n cwd?: string;\n\n /** Model identifier, e.g. \"anthropic/claude-opus-4-5\" or \"claude-opus-4-5\" */\n model?: string;\n\n /** LLM provider, e.g. \"anthropic\". Used together with --model. */\n provider?: string;\n\n /** Thinking/reasoning level */\n thinking?: ThinkingLevel;\n\n /**\n * Print mode: send a single prompt, output the response, exit.\n * When true, `messages[0]` is used as the prompt.\n */\n print: boolean;\n\n /**\n * Disable session persistence (in-memory only).\n */\n noSession: boolean;\n\n /**\n * Continue the most recent session for the current working directory.\n */\n continue: boolean;\n\n /** Positional arguments / prompt text (used in print mode) */\n messages: string[];\n}\n\nexport interface ParseArgsResult {\n args: Args;\n program: Command;\n /** True if a subcommand (e.g., update) was invoked and the caller should exit early */\n commandHandled: boolean;\n}\n\nconst THINKING_LEVELS: ThinkingLevel[] = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh'];\n\nfunction isThinkingLevel(value: string): value is ThinkingLevel {\n return THINKING_LEVELS.includes(value as ThinkingLevel);\n}\n\nfunction parseModel(value: string): { provider?: string; model: string } {\n // Support \"provider/model\" shorthand\n if (value.includes('/')) {\n const slash = value.indexOf('/');\n return {\n provider: value.slice(0, slash),\n model: value.slice(slash + 1),\n };\n }\n return { model: value };\n}\n\nexport function parseArgs(argv: string[], version: string, packageName: string): ParseArgsResult {\n let commandHandled = false;\n\n const program = new Command();\n const args: Args = {\n print: false,\n noSession: false,\n continue: false,\n messages: [],\n };\n\n program\n .name('genesys')\n .description('Genesys Agent v2 CLI - AI-powered coding assistant')\n .version(version, '-v, --version')\n .usage('[options] [prompt]')\n .action(() => {\n // Default action: agent session will run (commandHandled remains false)\n });\n\n // Add update command - callback sets flag when invoked\n addUpdateCommand(program, packageName, version, () => {\n commandHandled = true;\n });\n\n program\n .option('-p, --print', 'print mode: send prompt, output response, exit', false)\n .option('-c, --continue', 'continue the most recent session', false)\n .option('--no-session', 'disable session persistence (in-memory only)', false)\n .option('-m, --model <model>', 'model to use, e.g. \"anthropic/claude-opus-4-5\"')\n .option('--provider <name>', 'provider name (used with --model)')\n .option('--thinking <level>', `thinking level: ${THINKING_LEVELS.join(', ')}`)\n .option('--cwd <dir>', 'working directory (default: current directory)')\n .argument('[prompt...]', 'initial prompt text')\n .parse(argv, { from: 'user' });\n\n const opts = program.opts();\n const cliArgs = program.processedArgs as string[][];\n\n // Handle model parsing with provider/model shorthand\n if (opts.model) {\n const parsed = parseModel(opts.model);\n args.model = parsed.model;\n if (parsed.provider) {\n args.provider = parsed.provider;\n }\n }\n // Provider can be overridden explicitly\n if (opts.provider) {\n args.provider = opts.provider;\n }\n\n // Validate thinking level\n if (opts.thinking) {\n if (!isThinkingLevel(opts.thinking)) {\n console.error(`--thinking must be one of: ${THINKING_LEVELS.join(', ')}`);\n process.exit(1);\n }\n args.thinking = opts.thinking;\n }\n\n args.print = opts.print ?? false;\n args.noSession = opts.noSession ?? false;\n args.continue = opts.continue ?? false;\n args.cwd = opts.cwd;\n\n // Collect positional arguments as messages\n if (cliArgs.length > 0 && cliArgs[0]) {\n args.messages = cliArgs[0];\n }\n\n return { args, program, commandHandled };\n}\n","/**\n * Returns the parsed package.json for the nearest package by traversing\n * up from the current module's directory.\n */\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getPackageJson<T = { name: string; version: string }>(): T {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n let currentDir = __dirname;\n\n while (true) {\n const pkgPath = join(currentDir, 'package.json');\n if (existsSync(pkgPath)) {\n const content = readFileSync(pkgPath, 'utf-8');\n return JSON.parse(content) as T;\n }\n\n const parentDir = dirname(currentDir);\n // Stop at filesystem root\n if (parentDir === currentDir) {\n throw new Error('Could not find package.json');\n }\n currentDir = parentDir;\n }\n}\n","/**\n * Extension that checks for updates to @gnsx/genesys.agent.cli\n * and shows a notification if a newer version is available.\n */\nimport { getPackageJson } from '../utils/package.js';\n\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\nconst pkg = getPackageJson();\nconst PACKAGE_NAME = pkg.name;\nconst CURRENT_VERSION = pkg.version;\n\nasync function checkForNewVersion(): Promise<string | undefined> {\n if (process.env.PI_OFFLINE) {\n return undefined;\n }\n\n try {\n const encodedName = encodeURIComponent(PACKAGE_NAME);\n const response = await fetch(`https://registry.npmjs.org/${encodedName}/latest`, {\n signal: AbortSignal.timeout(10000),\n });\n if (!response.ok) {\n return undefined;\n }\n\n const data = (await response.json()) as { version?: string };\n const latestVersion = data.version;\n\n if (latestVersion && latestVersion !== CURRENT_VERSION) {\n return latestVersion;\n }\n return undefined;\n } catch (err) {\n return undefined;\n }\n}\n\nconst versionCheckExtension: ExtensionFactory = (pi: ExtensionAPI) => {\n // Listen for session start to check version\n pi.on('session_start', async (_event, ctx: ExtensionContext) => {\n // Run version check asynchronously (don't block startup)\n checkForNewVersion().then((newVersion) => {\n if (newVersion) {\n // ANSI color codes: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\n const yellow = '\\x1b[33m';\n const cyan = '\\x1b[36m';\n const reset = '\\x1b[0m';\n ctx.ui.notify(\n `Update available: ${yellow}${newVersion}${reset} (current: ${yellow}${CURRENT_VERSION}${reset}). Run: ${cyan}pnpm add -g ${PACKAGE_NAME}${reset}`,\n 'info'\n );\n }\n });\n });\n};\n\nexport default versionCheckExtension;\n","#!/usr/bin/env node\n/**\n * Genesys Agent v2 CLI entry point.\n *\n * Thin wrapper around pi's createAgentSession + InteractiveMode / runPrintMode.\n * All session persistence, model selection, tool management and compaction are\n * handled by the pi framework.\n */\n\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { getExtensions } from '@gnsx/genesys.agent.extensions';\nimport { getModel, setBedrockProviderModule } from '@mariozechner/pi-ai';\nimport { bedrockProviderModule } from '@mariozechner/pi-ai/bedrock-provider';\nimport {\n AuthStorage,\n createAgentSession,\n DefaultResourceLoader,\n getAgentDir,\n InteractiveMode,\n ModelRegistry,\n runPrintMode,\n SessionManager,\n SettingsManager,\n} from '@mariozechner/pi-coding-agent';\n\nimport { parseArgs } from './args.js';\nimport versionCheckExtension from './extensions/version-check.js';\nimport { getPackageJson } from './utils/package.js';\n\n/**\n * Read all data from stdin if available.\n * Returns null if stdin is not piped/redirected.\n */\nasync function readStdin(): Promise<string | null> {\n if (process.stdin.isTTY) {\n // stdin is a terminal (not piped)\n return null;\n }\n\n return new Promise((resolve, reject) => {\n let data = '';\n process.stdin.setEncoding('utf-8');\n\n process.stdin.on('data', (chunk) => {\n data += chunk;\n });\n\n process.stdin.on('end', () => {\n resolve(data.trim() || null);\n });\n\n process.stdin.on('error', (err) => {\n reject(err);\n });\n\n // Resume stdin to start reading\n process.stdin.resume();\n });\n}\n\n// Register Bedrock provider so AWS users can use it without extra setup\nsetBedrockProviderModule(bedrockProviderModule);\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nasync function main(argv: string[]): Promise<void> {\n const pkg = getPackageJson();\n const { args, commandHandled } = parseArgs(argv, pkg.version, pkg.name);\n\n // If a subcommand (e.g., update) was invoked, skip the agent session logic\n if (commandHandled) {\n return;\n }\n\n const cwd = args.cwd ? resolve(args.cwd) : process.cwd();\n\n // -------------------------------------------------------------------------\n // Session manager\n // -------------------------------------------------------------------------\n let sessionManager: SessionManager | undefined;\n\n if (args.noSession) {\n sessionManager = SessionManager.inMemory();\n } else if (args.continue) {\n sessionManager = SessionManager.continueRecent(cwd);\n }\n // undefined → createAgentSession creates a new persisted session\n\n // -------------------------------------------------------------------------\n // Model resolution (only when --model is passed; pi picks from settings /\n // env vars automatically otherwise)\n // -------------------------------------------------------------------------\n let model: ReturnType<typeof getModel> | undefined;\n\n if (args.model) {\n const provider = (args.provider ?? 'anthropic') as Parameters<typeof getModel>[0];\n try {\n model = getModel(provider, args.model as Parameters<typeof getModel>[1]);\n } catch {\n console.warn(`Warning: unknown model \"${provider}/${args.model}\", falling back to default.`);\n }\n }\n\n // -------------------------------------------------------------------------\n // Create custom resource loader with shared extensions + CLI-specific extensions\n // -------------------------------------------------------------------------\n const agentDir = getAgentDir();\n const settingsManager = SettingsManager.create(cwd, agentDir);\n\n // Get shared extensions from the extensions package + CLI-specific version check\n const sharedExtensions = getExtensions('cli');\n const extensionFactories = [...sharedExtensions, versionCheckExtension];\n\n const resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n extensionFactories,\n });\n await resourceLoader.reload();\n\n // -------------------------------------------------------------------------\n // Apply extension provider registrations\n // -------------------------------------------------------------------------\n const extensionsResult = resourceLoader.getExtensions();\n const authStorage = AuthStorage.create(join(agentDir, 'auth.json'));\n const modelRegistry = new ModelRegistry(authStorage, join(agentDir, 'models.json'));\n\n // Apply pending provider registrations from extensions so they're available\n // for model resolution before AgentSession is created\n for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n try {\n modelRegistry.registerProvider(name, config);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Extension \"${extensionPath}\" failed to register provider \"${name}\": ${message}`);\n }\n }\n extensionsResult.runtime.pendingProviderRegistrations = [];\n\n // -------------------------------------------------------------------------\n // Create session\n // -------------------------------------------------------------------------\n const { session, modelFallbackMessage } = await createAgentSession({\n cwd,\n modelRegistry,\n ...(model ? { model } : {}),\n ...(args.thinking ? { thinkingLevel: args.thinking } : {}),\n ...(sessionManager ? { sessionManager } : {}),\n settingsManager,\n resourceLoader,\n });\n\n if (modelFallbackMessage) {\n console.warn(`Warning: ${modelFallbackMessage}`);\n }\n\n // -------------------------------------------------------------------------\n // Run mode\n // -------------------------------------------------------------------------\n\n // Read from stdin if -p flag is set but no prompt provided\n let initialMessage = args.messages[0];\n if (args.print && !initialMessage) {\n const stdinContent = await readStdin();\n if (stdinContent) {\n initialMessage = stdinContent;\n }\n }\n\n if (args.print) {\n await runPrintMode(session, {\n mode: 'text',\n initialMessage,\n messages: args.messages.slice(1),\n });\n process.exit(0);\n } else {\n const mode = new InteractiveMode(session, {\n initialMessage,\n initialMessages: args.messages.slice(1),\n });\n await mode.run();\n }\n}\n\nmain(process.argv.slice(2)).catch((err) => {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n","#!/usr/bin/env node\n/**\n * Genesys Agent v2 CLI launcher.\n *\n * Sets environment variables before importing the main CLI to ensure\n * pi-coding-agent reads the correct configuration during initialization.\n */\n\nimport { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Find the first directory containing package.json, starting from the given\n * directory and walking upward.\n */\nfunction findPackageDir(startDir: string): string | undefined {\n let dir = startDir;\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, 'package.json'))) {\n return dir;\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\n// Set PI_PACKAGE_DIR to the first directory with package.json\n// This MUST be set before importing @mariozechner/pi-coding-agent so that\n// packages/coding-agent/src/config.ts can read it during initialization\nconst packageDir = findPackageDir(__dirname);\nif (packageDir) {\n process.env.PI_PACKAGE_DIR = packageDir;\n}\n\n// Disable pi-coding-agent's built-in version check (we use an extension)\nprocess.env.PI_SKIP_VERSION_CHECK = '1';\n\n// Now import and run the actual CLI\nawait import('./cli.js');\n"],"mappings":"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","names":["init_dist","init_dist","fileURLToPath","__dirname","dirname","join","fileURLToPath","getModel","resolve","pkg","existsSync","dirname","join","fileURLToPath","__filename","__dirname"]}
|
|
1
|
+
{"version":3,"sources":["../../../extensions/src/internal/providers/dashscope.ts","../../../extensions/src/internal/providers/index.ts","../../../extensions/src/internal/context-resolver.ts","../../../extensions/src/index.ts","../../../../../cli-utils/src/self-update.ts","../../../../../cli-utils/src/index.ts","../../src/args.ts","../../src/utils/package.ts","../../src/extensions/version-check.ts","../../src/cli.ts","../../src/launcher.ts"],"sourcesContent":["import { getModel } from '@mariozechner/pi-ai';\n\nimport type { ExtensionAPI, ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\nconst DASHSCOPE_BASE_URL_ANTHROPIC = 'https://coding.dashscope.aliyuncs.com/apps/anthropic';\n\nexport function createDashscopeExtension(): ExtensionFactory {\n return (pi: ExtensionAPI) => {\n const apiKey = process.env.DASHSCOPE_API_KEY;\n if (!apiKey) {\n return;\n }\n\n const qwen35PlusModel = getModel('openrouter', 'qwen/qwen3.5-plus-02-15');\n const qwen3MaxModel = getModel('openrouter', 'qwen/qwen3-max');\n const qwen3CoderNextModel = getModel('openrouter', 'qwen/qwen3-coder-next');\n const qwen3CoderPlusModel = getModel('openrouter', 'qwen/qwen3-coder-plus');\n const glm5Model = getModel('openrouter', 'z-ai/glm-5');\n const glm47Model = getModel('openrouter', 'z-ai/glm-4.7');\n const kimiK25Model = getModel('openrouter', 'moonshotai/kimi-k2.5');\n const minimaxM25Model = getModel('openrouter', 'minimax/minimax-m2.5');\n\n pi.registerProvider('dashscope', {\n baseUrl: DASHSCOPE_BASE_URL_ANTHROPIC,\n apiKey: apiKey,\n api: 'anthropic-messages',\n models: [\n // Qwen models (Alibaba Cloud)\n {\n id: 'qwen3.5-plus',\n name: 'Qwen 3.5 Plus',\n reasoning: qwen35PlusModel.reasoning,\n input: qwen35PlusModel.input,\n cost: qwen35PlusModel.cost,\n contextWindow: qwen35PlusModel.contextWindow,\n maxTokens: qwen35PlusModel.maxTokens,\n },\n {\n id: 'qwen3-max-2026-01-23',\n name: 'Qwen 3 Max',\n reasoning: qwen3MaxModel.reasoning,\n input: qwen3MaxModel.input,\n cost: qwen3MaxModel.cost,\n contextWindow: qwen3MaxModel.contextWindow,\n maxTokens: qwen3MaxModel.maxTokens,\n },\n {\n id: 'qwen3-coder-next',\n name: 'Qwen 3 Coder Next',\n reasoning: qwen3CoderNextModel.reasoning,\n input: qwen3CoderNextModel.input,\n cost: qwen3CoderNextModel.cost,\n contextWindow: qwen3CoderNextModel.contextWindow,\n maxTokens: qwen3CoderNextModel.maxTokens,\n },\n {\n id: 'qwen3-coder-plus',\n name: 'Qwen 3 Coder Plus',\n reasoning: qwen3CoderPlusModel.reasoning,\n input: qwen3CoderPlusModel.input,\n cost: qwen3CoderPlusModel.cost,\n contextWindow: qwen3CoderPlusModel.contextWindow,\n maxTokens: qwen3CoderPlusModel.maxTokens,\n },\n // GLM models (Zhipu AI)\n {\n id: 'glm-5',\n name: 'GLM 5',\n reasoning: glm5Model.reasoning,\n input: glm5Model.input,\n cost: glm5Model.cost,\n contextWindow: glm5Model.contextWindow,\n maxTokens: glm5Model.maxTokens,\n },\n {\n id: 'glm-4.7',\n name: 'GLM 4.7',\n reasoning: glm47Model.reasoning,\n input: glm47Model.input,\n cost: glm47Model.cost,\n contextWindow: glm47Model.contextWindow,\n maxTokens: glm47Model.maxTokens,\n },\n // Kimi models (Moonshot AI)\n {\n id: 'kimi-k2.5',\n name: 'Kimi K2.5',\n reasoning: kimiK25Model.reasoning,\n input: kimiK25Model.input,\n cost: kimiK25Model.cost,\n contextWindow: kimiK25Model.contextWindow,\n maxTokens: kimiK25Model.maxTokens,\n },\n // MiniMax models\n {\n id: 'MiniMax-M2.5',\n name: 'MiniMax M2.5',\n reasoning: minimaxM25Model.reasoning,\n input: minimaxM25Model.input,\n cost: minimaxM25Model.cost,\n contextWindow: minimaxM25Model.contextWindow,\n maxTokens: 32768,\n },\n ],\n });\n };\n}\n\n// Default instance uses env vars, skips silently if missing\nexport const dashscopeExtension = createDashscopeExtension();\n","export { createDashscopeExtension, dashscopeExtension } from './dashscope.js';\n","import { dashscopeExtension } from './providers/index.js';\n\nimport type { ExtensionContext, ExtensionSet } from '../types.js';\n\nexport function resolveExtensionSet(context: ExtensionContext): ExtensionSet {\n const extensions: ExtensionSet = [];\n\n switch (context) {\n case 'cli': {\n // CLI gets default extensions (env-based configuration)\n extensions.push(dashscopeExtension);\n // Add other CLI-appropriate extensions here\n break;\n }\n\n case 'embedded': {\n // Embedded gets the same extensions by default\n // Could add context-specific extensions here in the future\n extensions.push(dashscopeExtension);\n break;\n }\n\n default: {\n const _exhaustive: never = context;\n throw new Error(`Unknown extension context: ${_exhaustive}`);\n }\n }\n\n return extensions;\n}\n","import { resolveExtensionSet } from './internal/context-resolver.js';\n\nimport type { ExtensionContext, ExtensionSet } from './types.js';\n\nexport type { ExtensionContext, ExtensionSet } from './types.js';\nexport type { ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\n/**\n * Get the appropriate extension set for the given context.\n *\n * @param context - The context to get extensions for ('cli' | 'embedded')\n * @returns Array of extension factories ready to use\n *\n * @example\n * ```typescript\n * // CLI usage\n * import { getExtensions } from '@gnsx/genesys.agent.extensions';\n *\n * const extensions = getExtensions('cli');\n * const resourceLoader = new DefaultResourceLoader({\n * extensionFactories: extensions\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Embedded usage\n * import { getExtensions } from '@gnsx/genesys.agent.extensions';\n *\n * const agent = new EmbeddedAgent();\n * await agent.start({\n * cwd: '/project',\n * extensions: getExtensions('embedded')\n * });\n * ```\n */\nexport function getExtensions(context: ExtensionContext): ExtensionSet {\n return resolveExtensionSet(context);\n}\n","/**\n * Self-update functionality for Genesys CLI tools.\n *\n * Provides utilities for checking and performing CLI updates\n * via npm or pnpm package managers.\n */\n\nimport { execSync } from 'child_process';\nimport { fileURLToPath } from 'url';\nimport type { Command } from 'commander';\n\n/**\n * Check if running from an installed package (not local development).\n * Returns true if the current file is inside node_modules.\n */\nexport function isInstalledPackage(): boolean {\n try {\n const currentFile = fileURLToPath(import.meta.url);\n return currentFile.includes('node_modules');\n } catch {\n return false;\n }\n}\n\n/**\n * Detect which package manager was used to install the CLI.\n * Checks environment variables and execution path.\n *\n * @returns 'pnpm', 'npm', or 'unknown'\n */\nexport function detectPackageManager(): 'pnpm' | 'npm' | 'unknown' {\n // Check environment variables\n if (process.env.PNPM_PACKAGE_NAME) return 'pnpm';\n if (process.env.npm_execpath?.includes('pnpm')) return 'pnpm';\n\n // Check exec path\n const execPath = process.argv[1] || '';\n if (execPath.includes('pnpm')) return 'pnpm';\n if (execPath.includes('npm')) return 'npm';\n\n // Default to pnpm (monorepo preference)\n return 'pnpm';\n}\n\n/**\n * Compare semantic versions.\n * Returns true if latest is newer than current.\n */\nfunction isNewerVersion(latest: string, current: string): boolean {\n const latestParts = latest.split('.').map(Number);\n const currentParts = current.split('.').map(Number);\n\n for (let i = 0; i < 3; i++) {\n const latestPart = latestParts[i] || 0;\n const currentPart = currentParts[i] || 0;\n if (latestPart > currentPart) return true;\n if (latestPart < currentPart) return false;\n }\n\n return false;\n}\n\n/**\n * Check npm registry for the latest version of a package.\n *\n * @param packageName - The npm package name\n * @param currentVersion - The currently installed version\n * @returns Latest version string, or null if up-to-date or error\n */\nexport async function checkForUpdates(\n packageName: string,\n currentVersion: string\n): Promise<string | null> {\n try {\n if (!isInstalledPackage()) return null;\n\n const encodedName = encodeURIComponent(packageName);\n const response = await fetch(`https://registry.npmjs.org/${encodedName}/latest`, {\n signal: AbortSignal.timeout(10000),\n });\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latestVersion = data.version;\n\n if (!latestVersion || latestVersion === currentVersion) return null;\n if (!isNewerVersion(latestVersion, currentVersion)) return null;\n\n return latestVersion;\n } catch {\n return null;\n }\n}\n\n/**\n * Perform the update using the detected package manager.\n *\n * @param packageName - The npm package name\n * @param packageManager - The package manager to use ('pnpm' or 'npm')\n * @param currentVersion - The current installed version\n * @param latestVersion - The latest available version\n * @returns true on success, false on failure\n */\nexport function performUpdate(\n packageName: string,\n packageManager: 'pnpm' | 'npm',\n currentVersion: string,\n latestVersion: string\n): boolean {\n console.log(`\\nUpdating ${packageName}...`);\n console.log(` Current: v${currentVersion}`);\n console.log(` Latest: v${latestVersion}\\n`);\n\n try {\n const updateCommand = packageManager === 'pnpm'\n ? `pnpm remove -g ${packageName} && pnpm add -g ${packageName}@latest`\n : `npm uninstall -g ${packageName} && npm install -g ${packageName}@latest`;\n\n // Run in shell for cross-platform compatibility (&& works on Unix, needs shell on Windows)\n execSync(updateCommand, { stdio: 'inherit' } as import('child_process').ExecSyncOptions);\n\n console.log(`\\n✅ Update complete! ${packageName} has been updated to v${latestVersion}.`);\n return true;\n } catch (error) {\n console.error(`\\n❌ Update failed. Please try running the commands manually:`);\n if (packageManager === 'pnpm') {\n console.error(` pnpm remove -g ${packageName}`);\n console.error(` pnpm add -g ${packageName}@latest`);\n } else {\n console.error(` npm uninstall -g ${packageName}`);\n console.error(` npm install -g ${packageName}@latest`);\n }\n return false;\n }\n}\n\n/**\n * Callback fired when the update command is invoked.\n */\nexport type UpdateCommandCallback = () => void;\n\n/**\n * Add 'update' subcommand to a Commander.js program.\n *\n * @param program - The Commander.js program\n * @param packageName - The npm package name\n * @param currentVersion - The current installed version\n * @param onUpdate - Optional callback fired when the update command is invoked\n */\nexport function addUpdateCommand(\n program: Command,\n packageName: string,\n currentVersion: string,\n onUpdate?: UpdateCommandCallback\n): void {\n program\n .command('update')\n .description('Check for updates and install the latest version')\n .action(async () => {\n // Notify caller that update command is being handled\n onUpdate?.();\n\n // Skip if running from local development\n if (!isInstalledPackage()) {\n console.log('Skipping update check - running from local development.');\n process.exit(0);\n }\n\n console.log('Checking for updates...');\n\n const latestVersion = await checkForUpdates(packageName, currentVersion);\n\n if (!latestVersion) {\n console.log(`You are already using the latest version (v${currentVersion}).`);\n process.exit(0);\n }\n\n console.log(`\\n📦 Update available: v${currentVersion} → v${latestVersion}`);\n\n const packageManager = detectPackageManager();\n\n if (packageManager === 'unknown') {\n console.error('\\n❌ Could not detect package manager. Please update manually:');\n console.error(` pnpm remove -g ${packageName} && pnpm add -g ${packageName}@latest`);\n console.error(` or`);\n console.error(` npm uninstall -g ${packageName} && npm install -g ${packageName}@latest`);\n process.exit(1);\n }\n\n const success = performUpdate(packageName, packageManager, currentVersion, latestVersion);\n process.exit(success ? 0 : 1);\n });\n}\n","export * from './self-update.js';\n","/**\n * CLI argument definitions for the Genesys Agent v2 CLI.\n *\n * Intentionally minimal — model selection, session management and tool\n * configuration are delegated to pi's own machinery via createAgentSession.\n */\n\nimport { addUpdateCommand } from '@gnsx/cli-utils';\nimport { Command } from 'commander';\n\nimport type { ThinkingLevel } from '@mariozechner/pi-agent-core';\n\nexport interface Args {\n /** Working directory (default: process.cwd()) */\n cwd?: string;\n\n /** Model identifier, e.g. \"anthropic/claude-opus-4-5\" or \"claude-opus-4-5\" */\n model?: string;\n\n /** LLM provider, e.g. \"anthropic\". Used together with --model. */\n provider?: string;\n\n /** Thinking/reasoning level */\n thinking?: ThinkingLevel;\n\n /**\n * Print mode: send a single prompt, output the response, exit.\n * When true, `messages[0]` is used as the prompt.\n */\n print: boolean;\n\n /**\n * Disable session persistence (in-memory only).\n */\n noSession: boolean;\n\n /**\n * Continue the most recent session for the current working directory.\n */\n continue: boolean;\n\n /** Positional arguments / prompt text (used in print mode) */\n messages: string[];\n}\n\nexport interface ParseArgsResult {\n args: Args;\n program: Command;\n /** True if a subcommand (e.g., update) was invoked and the caller should exit early */\n commandHandled: boolean;\n}\n\nconst THINKING_LEVELS: ThinkingLevel[] = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh'];\n\nfunction isThinkingLevel(value: string): value is ThinkingLevel {\n return THINKING_LEVELS.includes(value as ThinkingLevel);\n}\n\nfunction parseModel(value: string): { provider?: string; model: string } {\n // Support \"provider/model\" shorthand\n if (value.includes('/')) {\n const slash = value.indexOf('/');\n return {\n provider: value.slice(0, slash),\n model: value.slice(slash + 1),\n };\n }\n return { model: value };\n}\n\nexport function parseArgs(argv: string[], version: string, packageName: string): ParseArgsResult {\n let commandHandled = false;\n\n const program = new Command();\n const args: Args = {\n print: false,\n noSession: false,\n continue: false,\n messages: [],\n };\n\n program\n .name('genesys')\n .description('Genesys Agent v2 CLI - AI-powered coding assistant')\n .version(version, '-v, --version')\n .usage('[options] [prompt]')\n .action(() => {\n // Default action: agent session will run (commandHandled remains false)\n });\n\n // Add update command - callback sets flag when invoked\n addUpdateCommand(program, packageName, version, () => {\n commandHandled = true;\n });\n\n program\n .option('-p, --print', 'print mode: send prompt, output response, exit', false)\n .option('-c, --continue', 'continue the most recent session', false)\n .option('--no-session', 'disable session persistence (in-memory only)', false)\n .option('-m, --model <model>', 'model to use, e.g. \"anthropic/claude-opus-4-5\"')\n .option('--provider <name>', 'provider name (used with --model)')\n .option('--thinking <level>', `thinking level: ${THINKING_LEVELS.join(', ')}`)\n .option('--cwd <dir>', 'working directory (default: current directory)')\n .argument('[prompt...]', 'initial prompt text')\n .parse(argv, { from: 'user' });\n\n const opts = program.opts();\n const cliArgs = program.processedArgs as string[][];\n\n // Handle model parsing with provider/model shorthand\n if (opts.model) {\n const parsed = parseModel(opts.model);\n args.model = parsed.model;\n if (parsed.provider) {\n args.provider = parsed.provider;\n }\n }\n // Provider can be overridden explicitly\n if (opts.provider) {\n args.provider = opts.provider;\n }\n\n // Validate thinking level\n if (opts.thinking) {\n if (!isThinkingLevel(opts.thinking)) {\n console.error(`--thinking must be one of: ${THINKING_LEVELS.join(', ')}`);\n process.exit(1);\n }\n args.thinking = opts.thinking;\n }\n\n args.print = opts.print ?? false;\n args.noSession = opts.noSession ?? false;\n args.continue = opts.continue ?? false;\n args.cwd = opts.cwd;\n\n // Collect positional arguments as messages\n if (cliArgs.length > 0 && cliArgs[0]) {\n args.messages = cliArgs[0];\n }\n\n return { args, program, commandHandled };\n}\n","/**\n * Returns the parsed package.json for the nearest package by traversing\n * up from the current module's directory.\n */\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getPackageJson<T = { name: string; version: string }>(): T {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n let currentDir = __dirname;\n\n while (true) {\n const pkgPath = join(currentDir, 'package.json');\n if (existsSync(pkgPath)) {\n const content = readFileSync(pkgPath, 'utf-8');\n return JSON.parse(content) as T;\n }\n\n const parentDir = dirname(currentDir);\n // Stop at filesystem root\n if (parentDir === currentDir) {\n throw new Error('Could not find package.json');\n }\n currentDir = parentDir;\n }\n}\n","/**\n * Extension that checks for updates to @gnsx/genesys.agent.cli\n * and shows a notification if a newer version is available.\n */\nimport { getPackageJson } from '../utils/package.js';\n\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory } from '@mariozechner/pi-coding-agent';\n\nconst pkg = getPackageJson();\nconst PACKAGE_NAME = pkg.name;\nconst CURRENT_VERSION = pkg.version;\n\nasync function checkForNewVersion(): Promise<string | undefined> {\n if (process.env.PI_OFFLINE) {\n return undefined;\n }\n\n try {\n const encodedName = encodeURIComponent(PACKAGE_NAME);\n const response = await fetch(`https://registry.npmjs.org/${encodedName}/latest`, {\n signal: AbortSignal.timeout(10000),\n });\n if (!response.ok) {\n return undefined;\n }\n\n const data = (await response.json()) as { version?: string };\n const latestVersion = data.version;\n\n if (latestVersion && latestVersion !== CURRENT_VERSION) {\n return latestVersion;\n }\n return undefined;\n } catch (err) {\n return undefined;\n }\n}\n\nconst versionCheckExtension: ExtensionFactory = (pi: ExtensionAPI) => {\n // Listen for session start to check version\n pi.on('session_start', async (_event, ctx: ExtensionContext) => {\n // Run version check asynchronously (don't block startup)\n checkForNewVersion().then((newVersion) => {\n if (newVersion) {\n // ANSI color codes: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\n const yellow = '\\x1b[33m';\n const cyan = '\\x1b[36m';\n const reset = '\\x1b[0m';\n ctx.ui.notify(\n `Update available: ${yellow}${newVersion}${reset} (current: ${yellow}${CURRENT_VERSION}${reset}). Run: ${cyan}pnpm add -g ${PACKAGE_NAME}${reset}`,\n 'info'\n );\n }\n });\n });\n};\n\nexport default versionCheckExtension;\n","#!/usr/bin/env node\n/**\n * Genesys Agent v2 CLI entry point.\n *\n * Thin wrapper around pi's createAgentSession + InteractiveMode / runPrintMode.\n * All session persistence, model selection, tool management and compaction are\n * handled by the pi framework.\n */\n\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { getExtensions } from '@gnsx/genesys.agent.extensions';\nimport { getModel, setBedrockProviderModule } from '@mariozechner/pi-ai';\nimport { bedrockProviderModule } from '@mariozechner/pi-ai/bedrock-provider';\nimport {\n AuthStorage,\n createAgentSession,\n DefaultResourceLoader,\n getAgentDir,\n InteractiveMode,\n ModelRegistry,\n runPrintMode,\n SessionManager,\n SettingsManager,\n} from '@mariozechner/pi-coding-agent';\n\nimport { parseArgs } from './args.js';\nimport versionCheckExtension from './extensions/version-check.js';\nimport { getPackageJson } from './utils/package.js';\n\n/**\n * Read all data from stdin if available.\n * Returns null if stdin is not piped/redirected.\n */\nasync function readStdin(): Promise<string | null> {\n if (process.stdin.isTTY) {\n // stdin is a terminal (not piped)\n return null;\n }\n\n return new Promise((resolve, reject) => {\n let data = '';\n process.stdin.setEncoding('utf-8');\n\n process.stdin.on('data', (chunk) => {\n data += chunk;\n });\n\n process.stdin.on('end', () => {\n resolve(data.trim() || null);\n });\n\n process.stdin.on('error', (err) => {\n reject(err);\n });\n\n // Resume stdin to start reading\n process.stdin.resume();\n });\n}\n\n// Register Bedrock provider so AWS users can use it without extra setup\nsetBedrockProviderModule(bedrockProviderModule);\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nasync function main(argv: string[]): Promise<void> {\n const pkg = getPackageJson();\n const { args, commandHandled } = parseArgs(argv, pkg.version, pkg.name);\n\n // If a subcommand (e.g., update) was invoked, skip the agent session logic\n if (commandHandled) {\n return;\n }\n\n const cwd = args.cwd ? resolve(args.cwd) : process.cwd();\n\n // -------------------------------------------------------------------------\n // Session manager\n // -------------------------------------------------------------------------\n let sessionManager: SessionManager | undefined;\n\n if (args.noSession) {\n sessionManager = SessionManager.inMemory();\n } else if (args.continue) {\n sessionManager = SessionManager.continueRecent(cwd);\n }\n // undefined → createAgentSession creates a new persisted session\n\n // -------------------------------------------------------------------------\n // Model resolution (only when --model is passed; pi picks from settings /\n // env vars automatically otherwise)\n // -------------------------------------------------------------------------\n let model: ReturnType<typeof getModel> | undefined;\n\n if (args.model) {\n const provider = (args.provider ?? 'anthropic') as Parameters<typeof getModel>[0];\n try {\n model = getModel(provider, args.model as Parameters<typeof getModel>[1]);\n } catch {\n console.warn(`Warning: unknown model \"${provider}/${args.model}\", falling back to default.`);\n }\n }\n\n // -------------------------------------------------------------------------\n // Create custom resource loader with shared extensions + CLI-specific extensions\n // -------------------------------------------------------------------------\n const agentDir = getAgentDir();\n const settingsManager = SettingsManager.create(cwd, agentDir);\n\n // Get shared extensions from the extensions package + CLI-specific version check\n const sharedExtensions = getExtensions('cli');\n const extensionFactories = [...sharedExtensions, versionCheckExtension];\n\n const resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n extensionFactories,\n });\n await resourceLoader.reload();\n\n // -------------------------------------------------------------------------\n // Apply extension provider registrations\n // -------------------------------------------------------------------------\n const extensionsResult = resourceLoader.getExtensions();\n const authStorage = AuthStorage.create(join(agentDir, 'auth.json'));\n const modelRegistry = ModelRegistry.create(authStorage, join(agentDir, 'models.json'));\n\n // Apply pending provider registrations from extensions so they're available\n // for model resolution before AgentSession is created\n for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n try {\n modelRegistry.registerProvider(name, config);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Extension \"${extensionPath}\" failed to register provider \"${name}\": ${message}`);\n }\n }\n extensionsResult.runtime.pendingProviderRegistrations = [];\n\n // -------------------------------------------------------------------------\n // Create session\n // -------------------------------------------------------------------------\n const { session, modelFallbackMessage } = await createAgentSession({\n cwd,\n modelRegistry,\n ...(model ? { model } : {}),\n ...(args.thinking ? { thinkingLevel: args.thinking } : {}),\n ...(sessionManager ? { sessionManager } : {}),\n settingsManager,\n resourceLoader,\n });\n\n if (modelFallbackMessage) {\n console.warn(`Warning: ${modelFallbackMessage}`);\n }\n\n // -------------------------------------------------------------------------\n // Run mode\n // -------------------------------------------------------------------------\n\n // Read from stdin if -p flag is set but no prompt provided\n let initialMessage = args.messages[0];\n if (args.print && !initialMessage) {\n const stdinContent = await readStdin();\n if (stdinContent) {\n initialMessage = stdinContent;\n }\n }\n\n if (args.print) {\n await runPrintMode(session, {\n mode: 'text',\n initialMessage,\n messages: args.messages.slice(1),\n });\n process.exit(0);\n } else {\n const mode = new InteractiveMode(session, {\n initialMessage,\n initialMessages: args.messages.slice(1),\n });\n await mode.run();\n }\n}\n\nmain(process.argv.slice(2)).catch((err) => {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n","#!/usr/bin/env node\n/**\n * Genesys Agent v2 CLI launcher.\n *\n * Sets environment variables before importing the main CLI to ensure\n * pi-coding-agent reads the correct configuration during initialization.\n */\n\nimport { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Find the first directory containing package.json, starting from the given\n * directory and walking upward.\n */\nfunction findPackageDir(startDir: string): string | undefined {\n let dir = startDir;\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, 'package.json'))) {\n return dir;\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\n// Set PI_PACKAGE_DIR to the first directory with package.json\n// This MUST be set before importing @mariozechner/pi-coding-agent so that\n// packages/coding-agent/src/config.ts can read it during initialization\nconst packageDir = findPackageDir(__dirname);\nif (packageDir) {\n process.env.PI_PACKAGE_DIR = packageDir;\n}\n\n// Disable pi-coding-agent's built-in version check (we use an extension)\nprocess.env.PI_SKIP_VERSION_CHECK = '1';\n\n// Now import and run the actual CLI\nawait import('./cli.js');\n"],"mappings":"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","names":["init_dist","init_dist","fileURLToPath","__dirname","dirname","join","fileURLToPath","getModel","resolve","pkg","existsSync","dirname","join","fileURLToPath","__filename","__dirname"]}
|
package/dist/src/cli.js
CHANGED
|
@@ -97,7 +97,7 @@ async function main(argv) {
|
|
|
97
97
|
// -------------------------------------------------------------------------
|
|
98
98
|
const extensionsResult = resourceLoader.getExtensions();
|
|
99
99
|
const authStorage = AuthStorage.create(join(agentDir, 'auth.json'));
|
|
100
|
-
const modelRegistry =
|
|
100
|
+
const modelRegistry = ModelRegistry.create(authStorage, join(agentDir, 'models.json'));
|
|
101
101
|
// Apply pending provider registrations from extensions so they're available
|
|
102
102
|
// for model resolution before AgentSession is created
|
|
103
103
|
for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;GAGG;AACH,KAAK,UAAU,SAAS;IACtB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,kCAAkC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;AAEhD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAExE,2EAA2E;IAC3E,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzD,4EAA4E;IAC5E,kBAAkB;IAClB,4EAA4E;IAC5E,IAAI,cAA0C,CAAC;IAE/C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,cAAc,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,iEAAiE;IAEjE,4EAA4E;IAC5E,0EAA0E;IAC1E,oCAAoC;IACpC,4EAA4E;IAC5E,IAAI,KAA8C,CAAC;IAEnD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAmC,CAAC;QAClF,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAuC,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,2BAA2B,QAAQ,IAAI,IAAI,CAAC,KAAK,6BAA6B,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,iFAAiF;IACjF,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE9D,iFAAiF;IACjF,MAAM,gBAAgB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,CAAC,GAAG,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IAExE,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;QAC/C,GAAG;QACH,QAAQ;QACR,eAAe;QACf,kBAAkB;KACnB,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;IAE9B,4EAA4E;IAC5E,yCAAyC;IACzC,4EAA4E;IAC5E,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|