@oagi/oagi 0.1.3 → 0.1.4
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/README.md +7 -7
- package/dist/{chunk-SDBYP57G.js → chunk-JVNTVY6W.js} +28 -17
- package/dist/chunk-JVNTVY6W.js.map +1 -0
- package/dist/cli.cjs +29 -18
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +27 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -6
- package/dist/index.d.ts +13 -6
- package/dist/index.js +1 -1
- package/package.json +5 -6
- package/dist/chunk-SDBYP57G.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
createAgent,
|
|
15
15
|
listAgentModes,
|
|
16
16
|
logger_default
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JVNTVY6W.js";
|
|
18
18
|
|
|
19
19
|
// src/cli/main.ts
|
|
20
20
|
import { Command } from "commander";
|
|
@@ -138,7 +138,7 @@ Get your API key at ${API_KEY_HELP_URL}
|
|
|
138
138
|
process.exitCode = 1;
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
141
|
-
const
|
|
141
|
+
const baseURL = opts.oagiBaseUrl ?? process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL;
|
|
142
142
|
const mode = opts.mode ?? MODE_ACTOR;
|
|
143
143
|
const stepDelay = opts.stepDelay ?? DEFAULT_STEP_DELAY;
|
|
144
144
|
const exportFormat = opts.export;
|
|
@@ -147,7 +147,7 @@ Get your API key at ${API_KEY_HELP_URL}
|
|
|
147
147
|
const agentObserver = exportFormat ? new AsyncAgentObserver() : null;
|
|
148
148
|
const createOpts = {
|
|
149
149
|
apiKey,
|
|
150
|
-
|
|
150
|
+
baseURL,
|
|
151
151
|
stepObserver: stepTracker.chain(agentObserver),
|
|
152
152
|
stepDelay
|
|
153
153
|
};
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/main.ts","../src/cli/display.ts","../src/cli/tracking.ts","../src/cli/agent.ts","../src/cli/utils.ts","../src/cli/config.ts","../src/cli/version.ts","../src/cli.ts"],"sourcesContent":["/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport { Command } from 'commander';\nimport { addAgentCommand } from './agent.js';\nimport { addConfigCommand } from './config.js';\nimport { addVersionCommand } from './version.js';\nimport { setupLogging } from './utils.js';\n\nexport const createProgram = (): Command => {\n const program = new Command();\n\n program\n .name('oagi')\n .description('OAGI SDK Command Line Interface')\n .option('-v, --verbose', 'Enable verbose (debug) logging');\n\n addAgentCommand(program);\n addVersionCommand(program);\n addConfigCommand(program);\n\n return program;\n};\n\nexport const main = async (argv: string[] = process.argv): Promise<void> => {\n const program = createProgram();\n\n try {\n program.hook('preAction', (thisCommand: any) => {\n const opts = thisCommand.opts();\n setupLogging(Boolean(opts?.verbose));\n });\n\n await program.parseAsync(argv);\n } catch (err) {\n if (err instanceof Error && err.name === 'CommanderError') {\n process.exitCode = 1;\n return;\n }\n\n if (err instanceof Error && err.message === 'Interrupted') {\n process.exitCode = 130;\n return;\n }\n\n process.stderr.write(`Unexpected error: ${String(err)}\\n`);\n process.exitCode = 1;\n }\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport Table from 'cli-table3';\nimport type { StepData } from './tracking.js';\n\nexport const displayStepTable = (\n steps: StepData[],\n success: boolean,\n durationSeconds?: number,\n): void => {\n const table = new Table({\n head: ['Step', 'Reasoning', 'Actions', 'Status'],\n colWidths: [6, 60, 40, 10],\n wordWrap: true,\n });\n\n for (const step of steps) {\n const reason = step.reasoning ?? 'N/A';\n\n const actionsDisplay: string[] = [];\n for (const action of step.actions.slice(0, 3)) {\n const arg = action.argument ? String(action.argument).slice(0, 20) : '';\n const countStr =\n action.count && action.count > 1 ? ` x${action.count}` : '';\n actionsDisplay.push(`${action.type}(${arg})${countStr}`);\n }\n\n let actionsStr = actionsDisplay.join(', ');\n if (step.actions.length > 3) {\n actionsStr += ` (+${step.actions.length - 3} more)`;\n }\n\n const statusDisplay = step.status === 'completed' ? 'ok' : step.status;\n\n table.push([String(step.step_num), reason, actionsStr, statusDisplay]);\n }\n\n process.stdout.write(String(table) + '\\n');\n\n const statusText = success ? 'Success' : 'Failed/Interrupted';\n process.stdout.write(\n `\\nTotal Steps: ${steps.length} | Status: ${statusText}\\n`,\n );\n\n if (typeof durationSeconds === 'number') {\n process.stdout.write(`Duration: ${durationSeconds.toFixed(2)}s\\n`);\n }\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport {\n StepObserver,\n type Action,\n type ActionEvent,\n type ObserverEvent,\n type StepEvent,\n} from '../types/index.js';\n\nexport type StepData = {\n step_num: number;\n timestamp: Date;\n reasoning: string | null;\n actions: Action[];\n action_count: number;\n status: string;\n};\n\nexport class StepTracker extends StepObserver {\n /** Tracks agent step execution by implementing AsyncObserver protocol. */\n\n steps: StepData[] = [];\n\n async onEvent(event: ObserverEvent): Promise<void> {\n switch (event.type) {\n case 'step': {\n const e = event as StepEvent;\n this.steps.push({\n step_num: e.step_num,\n timestamp: e.timestamp,\n reasoning: e.step.reason ?? null,\n actions: e.step.actions,\n action_count: e.step.actions.length,\n status: 'running',\n });\n return;\n }\n case 'action': {\n const e = event as ActionEvent;\n for (const step of this.steps) {\n if (step.step_num === e.step_num) {\n step.status = e.error ? 'error' : 'completed';\n break;\n }\n }\n return;\n }\n default:\n return;\n }\n }\n}\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { AsyncAgentObserver } from '../agent/observer/agent_observer.js';\nimport { createAgent, listAgentModes } from '../agent/index.js';\nimport {\n API_KEY_HELP_URL,\n DEFAULT_BASE_URL,\n DEFAULT_MAX_STEPS_THINKER,\n DEFAULT_STEP_DELAY,\n MODE_ACTOR,\n MODEL_THINKER,\n} from '../consts.js';\nimport { DefaultActionHandler, ScreenshotMaker } from '../handler.js';\nimport getLogger from '../logger.js';\nimport { displayStepTable } from './display.js';\nimport { StepTracker } from './tracking.js';\nimport macPerm from '@hurdlegroup/node-mac-permissions';\nimport { AgentCreateOptions } from '../agent/registry.js';\n\nconst logger = getLogger('cli.agent');\n\nconst checkPermissions = async (): Promise<void> => {\n if (process.platform !== 'darwin') {\n process.stdout.write(\n 'Warning: Permission check is only applicable on macOS.\\n',\n );\n process.stdout.write(\n 'On other platforms, no special permissions are required.\\n',\n );\n return;\n }\n\n const screenPermission = macPerm.getAuthStatus('screen');\n const accessibilityPermission = macPerm.getAuthStatus('accessibility');\n\n console.log('Checking permissions...');\n console.log(` ${screenPermission ? '[OK]' : '[MISSING]'} Screen Recording`);\n console.log(\n ` ${accessibilityPermission ? '[OK]' : '[MISSING]'} Accessibility`,\n );\n\n if (!screenPermission) {\n macPerm.askForScreenCaptureAccess(true);\n }\n if (!accessibilityPermission) {\n macPerm.askForAccessibilityAccess();\n }\n\n if (screenPermission && accessibilityPermission) {\n console.log('All permissions granted. You can run the agent.');\n } else {\n console.log('After granting, run this command again to continue.');\n console.log(\n 'Note: You may need to restart your terminal after granting permissions.',\n );\n process.exitCode = 1;\n return;\n }\n};\n\ntype AgentRunOptions = {\n model?: string;\n maxSteps?: number;\n temperature?: number;\n mode: string;\n oagiApiKey?: string;\n oagiBaseUrl?: string;\n export?: 'markdown' | 'html' | 'json';\n exportFile?: string;\n stepDelay?: number;\n};\n\nconst runAgent = async (\n instruction: string,\n opts: AgentRunOptions,\n): Promise<void> => {\n const apiKey = opts.oagiApiKey ?? process.env.OAGI_API_KEY;\n if (!apiKey) {\n process.stderr.write(\n 'Error: OAGI API key not provided.\\n' +\n 'Set OAGI_API_KEY environment variable or use --oagi-api-key flag.\\n' +\n `Get your API key at ${API_KEY_HELP_URL}\\n`,\n );\n process.exitCode = 1;\n return;\n }\n\n const baseUrl =\n opts.oagiBaseUrl ?? process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL;\n const mode = opts.mode ?? MODE_ACTOR;\n const stepDelay = opts.stepDelay ?? DEFAULT_STEP_DELAY;\n\n const exportFormat = opts.export;\n const exportFile = opts.exportFile;\n\n const stepTracker = new StepTracker();\n const agentObserver = exportFormat ? new AsyncAgentObserver() : null;\n\n const createOpts: AgentCreateOptions = {\n apiKey,\n baseUrl,\n stepObserver: stepTracker.chain(agentObserver),\n stepDelay,\n };\n\n if (opts.model) {\n createOpts.model = opts.model;\n if (opts.model === MODEL_THINKER && !opts.maxSteps) {\n createOpts.maxSteps = DEFAULT_MAX_STEPS_THINKER;\n }\n }\n if (typeof opts.maxSteps === 'number') {\n createOpts.maxSteps = opts.maxSteps;\n }\n if (typeof opts.temperature === 'number') {\n createOpts.temperature = opts.temperature;\n }\n\n const agent = createAgent(mode, createOpts);\n\n let actionHandler: DefaultActionHandler;\n let imageProvider: ScreenshotMaker;\n try {\n actionHandler = new DefaultActionHandler();\n imageProvider = new ScreenshotMaker();\n } catch (e) {\n process.stderr.write(\n `Error: desktop automation dependencies failed to load: ${String(e)}\\n` +\n \"If you're using pnpm and robotjs is installed, you may need to run: pnpm approve-builds\\n\",\n );\n process.exitCode = 1;\n return;\n }\n\n if (instruction) {\n process.stdout.write(`Starting agent with instruction: ${instruction}\\n`);\n } else {\n process.stdout.write(\n `Starting agent with mode: ${mode} (using pre-configured instruction)\\n`,\n );\n }\n process.stdout.write(`Mode: ${mode}\\n`);\n process.stdout.write('-'.repeat(60) + '\\n');\n\n const start = Date.now();\n let success = false;\n let interrupted = false;\n\n const onSigint = () => {\n interrupted = true;\n process.stdout.write('\\nAgent execution interrupted by user (Ctrl+C)\\n');\n };\n\n process.once('SIGINT', onSigint);\n\n try {\n if (interrupted) throw new Error('Interrupted');\n success = await agent.execute(instruction, actionHandler, imageProvider);\n } catch (err) {\n if (interrupted) {\n process.exitCode = 130;\n } else {\n logger.error(`Error during agent execution: ${String(err)}`);\n process.exitCode = 1;\n }\n } finally {\n process.off('SIGINT', onSigint);\n const durationSeconds = (Date.now() - start) / 1000;\n\n if (stepTracker.steps.length) {\n process.stdout.write('\\n' + '='.repeat(60) + '\\n');\n displayStepTable(stepTracker.steps, success, durationSeconds);\n } else {\n process.stdout.write('\\nNo steps were executed.\\n');\n }\n\n if (exportFormat && agentObserver) {\n const extMap: Record<string, string> = {\n markdown: 'md',\n html: 'html',\n json: 'json',\n };\n\n const outputPath =\n exportFile ?? `execution_report.${extMap[exportFormat]}`;\n try {\n agentObserver.export(exportFormat, outputPath);\n process.stdout.write(\n `\\nExecution history exported to: ${outputPath}\\n`,\n );\n } catch (e) {\n process.stderr.write(\n `\\nError exporting execution history: ${String(e)}\\n`,\n );\n }\n }\n\n if (interrupted) {\n process.exitCode = 130;\n } else if (!success && !process.exitCode) {\n process.exitCode = 1;\n }\n }\n};\n\nexport const addAgentCommand = (program: Command): void => {\n const agent = program\n .command('agent')\n .description('Agent execution commands');\n\n agent\n .command('run')\n .description('Run an agent with the given instruction')\n .argument('[instruction]', 'Task instruction for the agent to execute')\n .option('--model <model>', 'Model to use (default: determined by mode)')\n .option(\n '--max-steps <number>',\n 'Maximum number of steps (default: determined by mode)',\n (v: string) => Number(v),\n )\n .option(\n '--temperature <number>',\n 'Sampling temperature (default: determined by mode)',\n (v: string) => Number(v),\n )\n .option(\n '--mode <mode>',\n `Agent mode to use (default: ${MODE_ACTOR})`,\n MODE_ACTOR,\n )\n .option(\n '--oagi-api-key <key>',\n 'OAGI API key (default: OAGI_API_KEY env var)',\n )\n .option(\n '--oagi-base-url <url>',\n `OAGI base URL (default: ${DEFAULT_BASE_URL}, or OAGI_BASE_URL env var)`,\n )\n .option(\n '--export <format>',\n 'Export execution history to file (markdown, html, or json)',\n )\n .option(\n '--export-file <path>',\n 'Output file path for export (default: execution_report.[md|html|json])',\n )\n .option(\n '--step-delay <number>',\n `Delay in seconds after each step before next screenshot (default: ${DEFAULT_STEP_DELAY})`,\n (v: string) => Number(v),\n )\n .action(async (instruction: string | undefined, options: any) => {\n await runAgent(instruction ?? '', {\n model: options.model,\n maxSteps: options.maxSteps,\n temperature: options.temperature,\n mode: options.mode,\n oagiApiKey: options.oagiApiKey,\n oagiBaseUrl: options.oagiBaseUrl,\n export: options.export,\n exportFile: options.exportFile,\n stepDelay: options.stepDelay,\n });\n });\n\n agent\n .command('modes')\n .description('List available agent modes')\n .action(() => {\n const modes = listAgentModes();\n process.stdout.write('Available agent modes:\\n');\n for (const m of modes) process.stdout.write(` - ${m}\\n`);\n });\n\n agent\n .command('permission')\n .description(\n 'Check macOS permissions for screen recording and accessibility',\n )\n .action(async () => {\n await checkPermissions();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nexport const setupLogging = (verbose: boolean): void => {\n if (verbose) {\n process.env.OAGI_LOG = 'debug';\n }\n};\n\nexport const maskApiKey = (value: string): string => {\n if (!value) return '';\n return value.length > 8 ? `${value.slice(0, 8)}...` : '***';\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { DEFAULT_BASE_URL, MODEL_ACTOR } from '../consts.js';\nimport { maskApiKey } from './utils.js';\n\nconst displayConfig = (): void => {\n const configVars: Record<string, string> = {\n OAGI_API_KEY: process.env.OAGI_API_KEY ?? '',\n OAGI_BASE_URL: process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL,\n OAGI_DEFAULT_MODEL: process.env.OAGI_DEFAULT_MODEL ?? MODEL_ACTOR,\n OAGI_LOG: process.env.OAGI_LOG ?? 'info',\n OAGI_MAX_STEPS: process.env.OAGI_MAX_STEPS ?? '30',\n };\n\n process.stdout.write('Current Configuration:\\n');\n process.stdout.write('-'.repeat(50) + '\\n');\n\n for (const [key, value] of Object.entries(configVars)) {\n if (key === 'OAGI_API_KEY' && value) {\n process.stdout.write(`${key}: ${maskApiKey(value)}\\n`);\n } else {\n const displayValue = value ? value : '(not set)';\n process.stdout.write(`${key}: ${displayValue}\\n`);\n }\n }\n};\n\nexport const addConfigCommand = (program: Command): void => {\n const config = program\n .command('config')\n .description('Configuration management');\n\n config\n .command('show')\n .description('Display current configuration')\n .action(() => {\n displayConfig();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { createRequire } from 'module';\n\nconst getSdkVersion = (): string => {\n try {\n const require = createRequire(import.meta.url);\n\n // In dist, files may live under dist/*, so try both\n for (const p of ['../package.json', '../../package.json']) {\n try {\n const pkg = require(p) as { version?: string };\n if (pkg.version && pkg.version !== '0.0.0') return pkg.version;\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n return 'unknown';\n};\n\nconst displayVersion = (): void => {\n const sdkVersion = getSdkVersion();\n\n process.stdout.write(`OAGI SDK version: ${sdkVersion}\\n`);\n process.stdout.write(`Node version: ${process.version}\\n`);\n process.stdout.write(`Platform: ${process.platform}\\n`);\n};\n\nexport const addVersionCommand = (program: Command): void => {\n program\n .command('version')\n .description('Show SDK version and environment info')\n .action(() => {\n displayVersion();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport { main } from './cli/main.js';\n\nmain().catch(err => {\n process.stderr.write(`Unexpected error: ${String(err)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAUA,SAAS,eAAe;;;ACAxB,OAAO,WAAW;AAGX,IAAM,mBAAmB,CAC9B,OACA,SACA,oBACS;AACT,QAAM,QAAQ,IAAI,MAAM;AAAA,IACtB,MAAM,CAAC,QAAQ,aAAa,WAAW,QAAQ;AAAA,IAC/C,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,IACzB,UAAU;AAAA,EACZ,CAAC;AAED,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,KAAK,aAAa;AAEjC,UAAM,iBAA2B,CAAC;AAClC,eAAW,UAAU,KAAK,QAAQ,MAAM,GAAG,CAAC,GAAG;AAC7C,YAAM,MAAM,OAAO,WAAW,OAAO,OAAO,QAAQ,EAAE,MAAM,GAAG,EAAE,IAAI;AACrE,YAAM,WACJ,OAAO,SAAS,OAAO,QAAQ,IAAI,KAAK,OAAO,KAAK,KAAK;AAC3D,qBAAe,KAAK,GAAG,OAAO,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE;AAAA,IACzD;AAEA,QAAI,aAAa,eAAe,KAAK,IAAI;AACzC,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,oBAAc,MAAM,KAAK,QAAQ,SAAS,CAAC;AAAA,IAC7C;AAEA,UAAM,gBAAgB,KAAK,WAAW,cAAc,OAAO,KAAK;AAEhE,UAAM,KAAK,CAAC,OAAO,KAAK,QAAQ,GAAG,QAAQ,YAAY,aAAa,CAAC;AAAA,EACvE;AAEA,UAAQ,OAAO,MAAM,OAAO,KAAK,IAAI,IAAI;AAEzC,QAAM,aAAa,UAAU,YAAY;AACzC,UAAQ,OAAO;AAAA,IACb;AAAA,eAAkB,MAAM,MAAM,cAAc,UAAU;AAAA;AAAA,EACxD;AAEA,MAAI,OAAO,oBAAoB,UAAU;AACvC,YAAQ,OAAO,MAAM,aAAa,gBAAgB,QAAQ,CAAC,CAAC;AAAA,CAAK;AAAA,EACnE;AACF;;;AC5BO,IAAM,cAAN,cAA0B,aAAa;AAAA;AAAA,EAG5C,QAAoB,CAAC;AAAA,EAErB,MAAM,QAAQ,OAAqC;AACjD,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK,QAAQ;AACX,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAAA,UACd,UAAU,EAAE;AAAA,UACZ,WAAW,EAAE;AAAA,UACb,WAAW,EAAE,KAAK,UAAU;AAAA,UAC5B,SAAS,EAAE,KAAK;AAAA,UAChB,cAAc,EAAE,KAAK,QAAQ;AAAA,UAC7B,QAAQ;AAAA,QACV,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,cAAM,IAAI;AACV,mBAAW,QAAQ,KAAK,OAAO;AAC7B,cAAI,KAAK,aAAa,EAAE,UAAU;AAChC,iBAAK,SAAS,EAAE,QAAQ,UAAU;AAClC;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACA;AACE;AAAA,IACJ;AAAA,EACF;AACF;;;ACnCA,OAAO,aAAa;AAGpB,IAAM,SAAS,eAAU,WAAW;AAEpC,IAAM,mBAAmB,YAA2B;AAClD,MAAI,QAAQ,aAAa,UAAU;AACjC,YAAQ,OAAO;AAAA,MACb;AAAA,IACF;AACA,YAAQ,OAAO;AAAA,MACb;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,mBAAmB,QAAQ,cAAc,QAAQ;AACvD,QAAM,0BAA0B,QAAQ,cAAc,eAAe;AAErE,UAAQ,IAAI,yBAAyB;AACrC,UAAQ,IAAI,KAAK,mBAAmB,SAAS,WAAW,mBAAmB;AAC3E,UAAQ;AAAA,IACN,KAAK,0BAA0B,SAAS,WAAW;AAAA,EACrD;AAEA,MAAI,CAAC,kBAAkB;AACrB,YAAQ,0BAA0B,IAAI;AAAA,EACxC;AACA,MAAI,CAAC,yBAAyB;AAC5B,YAAQ,0BAA0B;AAAA,EACpC;AAEA,MAAI,oBAAoB,yBAAyB;AAC/C,YAAQ,IAAI,iDAAiD;AAAA,EAC/D,OAAO;AACL,YAAQ,IAAI,qDAAqD;AACjE,YAAQ;AAAA,MACN;AAAA,IACF;AACA,YAAQ,WAAW;AACnB;AAAA,EACF;AACF;AAcA,IAAM,WAAW,OACf,aACA,SACkB;AAClB,QAAM,SAAS,KAAK,cAAc,QAAQ,IAAI;AAC9C,MAAI,CAAC,QAAQ;AACX,YAAQ,OAAO;AAAA,MACb;AAAA;AAAA,sBAEyB,gBAAgB;AAAA;AAAA,IAC3C;AACA,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UACJ,KAAK,eAAe,QAAQ,IAAI,iBAAiB;AACnD,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,YAAY,KAAK,aAAa;AAEpC,QAAM,eAAe,KAAK;AAC1B,QAAM,aAAa,KAAK;AAExB,QAAM,cAAc,IAAI,YAAY;AACpC,QAAM,gBAAgB,eAAe,IAAI,mBAAmB,IAAI;AAEhE,QAAM,aAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA,cAAc,YAAY,MAAM,aAAa;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,KAAK,OAAO;AACd,eAAW,QAAQ,KAAK;AACxB,QAAI,KAAK,UAAU,iBAAiB,CAAC,KAAK,UAAU;AAClD,iBAAW,WAAW;AAAA,IACxB;AAAA,EACF;AACA,MAAI,OAAO,KAAK,aAAa,UAAU;AACrC,eAAW,WAAW,KAAK;AAAA,EAC7B;AACA,MAAI,OAAO,KAAK,gBAAgB,UAAU;AACxC,eAAW,cAAc,KAAK;AAAA,EAChC;AAEA,QAAM,QAAQ,YAAY,MAAM,UAAU;AAE1C,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,oBAAgB,IAAI,qBAAqB;AACzC,oBAAgB,IAAI,gBAAgB;AAAA,EACtC,SAAS,GAAG;AACV,YAAQ,OAAO;AAAA,MACb,0DAA0D,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,IAErE;AACA,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI,aAAa;AACf,YAAQ,OAAO,MAAM,oCAAoC,WAAW;AAAA,CAAI;AAAA,EAC1E,OAAO;AACL,YAAQ,OAAO;AAAA,MACb,6BAA6B,IAAI;AAAA;AAAA,IACnC;AAAA,EACF;AACA,UAAQ,OAAO,MAAM,SAAS,IAAI;AAAA,CAAI;AACtC,UAAQ,OAAO,MAAM,IAAI,OAAO,EAAE,IAAI,IAAI;AAE1C,QAAM,QAAQ,KAAK,IAAI;AACvB,MAAI,UAAU;AACd,MAAI,cAAc;AAElB,QAAM,WAAW,MAAM;AACrB,kBAAc;AACd,YAAQ,OAAO,MAAM,kDAAkD;AAAA,EACzE;AAEA,UAAQ,KAAK,UAAU,QAAQ;AAE/B,MAAI;AACF,QAAI,YAAa,OAAM,IAAI,MAAM,aAAa;AAC9C,cAAU,MAAM,MAAM,QAAQ,aAAa,eAAe,aAAa;AAAA,EACzE,SAAS,KAAK;AACZ,QAAI,aAAa;AACf,cAAQ,WAAW;AAAA,IACrB,OAAO;AACL,aAAO,MAAM,iCAAiC,OAAO,GAAG,CAAC,EAAE;AAC3D,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,UAAE;AACA,YAAQ,IAAI,UAAU,QAAQ;AAC9B,UAAM,mBAAmB,KAAK,IAAI,IAAI,SAAS;AAE/C,QAAI,YAAY,MAAM,QAAQ;AAC5B,cAAQ,OAAO,MAAM,OAAO,IAAI,OAAO,EAAE,IAAI,IAAI;AACjD,uBAAiB,YAAY,OAAO,SAAS,eAAe;AAAA,IAC9D,OAAO;AACL,cAAQ,OAAO,MAAM,6BAA6B;AAAA,IACpD;AAEA,QAAI,gBAAgB,eAAe;AACjC,YAAM,SAAiC;AAAA,QACrC,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAEA,YAAM,aACJ,cAAc,oBAAoB,OAAO,YAAY,CAAC;AACxD,UAAI;AACF,sBAAc,OAAO,cAAc,UAAU;AAC7C,gBAAQ,OAAO;AAAA,UACb;AAAA,iCAAoC,UAAU;AAAA;AAAA,QAChD;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,OAAO;AAAA,UACb;AAAA,qCAAwC,OAAO,CAAC,CAAC;AAAA;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa;AACf,cAAQ,WAAW;AAAA,IACrB,WAAW,CAAC,WAAW,CAAC,QAAQ,UAAU;AACxC,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,CAAC,YAA2B;AACzD,QAAM,QAAQ,QACX,QAAQ,OAAO,EACf,YAAY,0BAA0B;AAEzC,QACG,QAAQ,KAAK,EACb,YAAY,yCAAyC,EACrD,SAAS,iBAAiB,2CAA2C,EACrE,OAAO,mBAAmB,4CAA4C,EACtE;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,MAAc,OAAO,CAAC;AAAA,EACzB,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,MAAc,OAAO,CAAC;AAAA,EACzB,EACC;AAAA,IACC;AAAA,IACA,+BAA+B,UAAU;AAAA,IACzC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA,2BAA2B,gBAAgB;AAAA,EAC7C,EACC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA,qEAAqE,kBAAkB;AAAA,IACvF,CAAC,MAAc,OAAO,CAAC;AAAA,EACzB,EACC,OAAO,OAAO,aAAiC,YAAiB;AAC/D,UAAM,SAAS,eAAe,IAAI;AAAA,MAChC,OAAO,QAAQ;AAAA,MACf,UAAU,QAAQ;AAAA,MAClB,aAAa,QAAQ;AAAA,MACrB,MAAM,QAAQ;AAAA,MACd,YAAY,QAAQ;AAAA,MACpB,aAAa,QAAQ;AAAA,MACrB,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB,CAAC;AAAA,EACH,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,4BAA4B,EACxC,OAAO,MAAM;AACZ,UAAM,QAAQ,eAAe;AAC7B,YAAQ,OAAO,MAAM,0BAA0B;AAC/C,eAAW,KAAK,MAAO,SAAQ,OAAO,MAAM,OAAO,CAAC;AAAA,CAAI;AAAA,EAC1D,CAAC;AAEH,QACG,QAAQ,YAAY,EACpB;AAAA,IACC;AAAA,EACF,EACC,OAAO,YAAY;AAClB,UAAM,iBAAiB;AAAA,EACzB,CAAC;AACL;;;ACzRO,IAAM,eAAe,CAAC,YAA2B;AACtD,MAAI,SAAS;AACX,YAAQ,IAAI,WAAW;AAAA,EACzB;AACF;AAEO,IAAM,aAAa,CAAC,UAA0B;AACnD,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,SAAS,IAAI,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ;AACxD;;;ACLA,IAAM,gBAAgB,MAAY;AAChC,QAAM,aAAqC;AAAA,IACzC,cAAc,QAAQ,IAAI,gBAAgB;AAAA,IAC1C,eAAe,QAAQ,IAAI,iBAAiB;AAAA,IAC5C,oBAAoB,QAAQ,IAAI,sBAAsB;AAAA,IACtD,UAAU,QAAQ,IAAI,YAAY;AAAA,IAClC,gBAAgB,QAAQ,IAAI,kBAAkB;AAAA,EAChD;AAEA,UAAQ,OAAO,MAAM,0BAA0B;AAC/C,UAAQ,OAAO,MAAM,IAAI,OAAO,EAAE,IAAI,IAAI;AAE1C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,QAAI,QAAQ,kBAAkB,OAAO;AACnC,cAAQ,OAAO,MAAM,GAAG,GAAG,KAAK,WAAW,KAAK,CAAC;AAAA,CAAI;AAAA,IACvD,OAAO;AACL,YAAM,eAAe,QAAQ,QAAQ;AACrC,cAAQ,OAAO,MAAM,GAAG,GAAG,KAAK,YAAY;AAAA,CAAI;AAAA,IAClD;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB,CAAC,YAA2B;AAC1D,QAAM,SAAS,QACZ,QAAQ,QAAQ,EAChB,YAAY,0BAA0B;AAEzC,SACG,QAAQ,MAAM,EACd,YAAY,+BAA+B,EAC3C,OAAO,MAAM;AACZ,kBAAc;AAAA,EAChB,CAAC;AACL;;;ACpCA,SAAS,qBAAqB;AAE9B,IAAM,gBAAgB,MAAc;AAClC,MAAI;AACF,UAAMA,WAAU,cAAc,YAAY,GAAG;AAG7C,eAAW,KAAK,CAAC,mBAAmB,oBAAoB,GAAG;AACzD,UAAI;AACF,cAAM,MAAMA,SAAQ,CAAC;AACrB,YAAI,IAAI,WAAW,IAAI,YAAY,QAAS,QAAO,IAAI;AAAA,MACzD,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAEA,IAAM,iBAAiB,MAAY;AACjC,QAAM,aAAa,cAAc;AAEjC,UAAQ,OAAO,MAAM,qBAAqB,UAAU;AAAA,CAAI;AACxD,UAAQ,OAAO,MAAM,iBAAiB,QAAQ,OAAO;AAAA,CAAI;AACzD,UAAQ,OAAO,MAAM,aAAa,QAAQ,QAAQ;AAAA,CAAI;AACxD;AAEO,IAAM,oBAAoB,CAAC,YAA2B;AAC3D,UACG,QAAQ,SAAS,EACjB,YAAY,uCAAuC,EACnD,OAAO,MAAM;AACZ,mBAAe;AAAA,EACjB,CAAC;AACL;;;ANhCO,IAAM,gBAAgB,MAAe;AAC1C,QAAM,UAAU,IAAI,QAAQ;AAE5B,UACG,KAAK,MAAM,EACX,YAAY,iCAAiC,EAC7C,OAAO,iBAAiB,gCAAgC;AAE3D,kBAAgB,OAAO;AACvB,oBAAkB,OAAO;AACzB,mBAAiB,OAAO;AAExB,SAAO;AACT;AAEO,IAAM,OAAO,OAAO,OAAiB,QAAQ,SAAwB;AAC1E,QAAM,UAAU,cAAc;AAE9B,MAAI;AACF,YAAQ,KAAK,aAAa,CAAC,gBAAqB;AAC9C,YAAM,OAAO,YAAY,KAAK;AAC9B,mBAAa,QAAQ,MAAM,OAAO,CAAC;AAAA,IACrC,CAAC;AAED,UAAM,QAAQ,WAAW,IAAI;AAAA,EAC/B,SAAS,KAAK;AACZ,QAAI,eAAe,SAAS,IAAI,SAAS,kBAAkB;AACzD,cAAQ,WAAW;AACnB;AAAA,IACF;AAEA,QAAI,eAAe,SAAS,IAAI,YAAY,eAAe;AACzD,cAAQ,WAAW;AACnB;AAAA,IACF;AAEA,YAAQ,OAAO,MAAM,qBAAqB,OAAO,GAAG,CAAC;AAAA,CAAI;AACzD,YAAQ,WAAW;AAAA,EACrB;AACF;;;AO3CA,KAAK,EAAE,MAAM,SAAO;AAClB,UAAQ,OAAO,MAAM,qBAAqB,OAAO,GAAG,CAAC;AAAA,CAAI;AACzD,UAAQ,WAAW;AACrB,CAAC;","names":["require"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/main.ts","../src/cli/display.ts","../src/cli/tracking.ts","../src/cli/agent.ts","../src/cli/utils.ts","../src/cli/config.ts","../src/cli/version.ts","../src/cli.ts"],"sourcesContent":["/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport { Command } from 'commander';\nimport { addAgentCommand } from './agent.js';\nimport { addConfigCommand } from './config.js';\nimport { addVersionCommand } from './version.js';\nimport { setupLogging } from './utils.js';\n\nexport const createProgram = (): Command => {\n const program = new Command();\n\n program\n .name('oagi')\n .description('OAGI SDK Command Line Interface')\n .option('-v, --verbose', 'Enable verbose (debug) logging');\n\n addAgentCommand(program);\n addVersionCommand(program);\n addConfigCommand(program);\n\n return program;\n};\n\nexport const main = async (argv: string[] = process.argv): Promise<void> => {\n const program = createProgram();\n\n try {\n program.hook('preAction', (thisCommand: any) => {\n const opts = thisCommand.opts();\n setupLogging(Boolean(opts?.verbose));\n });\n\n await program.parseAsync(argv);\n } catch (err) {\n if (err instanceof Error && err.name === 'CommanderError') {\n process.exitCode = 1;\n return;\n }\n\n if (err instanceof Error && err.message === 'Interrupted') {\n process.exitCode = 130;\n return;\n }\n\n process.stderr.write(`Unexpected error: ${String(err)}\\n`);\n process.exitCode = 1;\n }\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport Table from 'cli-table3';\nimport type { StepData } from './tracking.js';\n\nexport const displayStepTable = (\n steps: StepData[],\n success: boolean,\n durationSeconds?: number,\n): void => {\n const table = new Table({\n head: ['Step', 'Reasoning', 'Actions', 'Status'],\n colWidths: [6, 60, 40, 10],\n wordWrap: true,\n });\n\n for (const step of steps) {\n const reason = step.reasoning ?? 'N/A';\n\n const actionsDisplay: string[] = [];\n for (const action of step.actions.slice(0, 3)) {\n const arg = action.argument ? String(action.argument).slice(0, 20) : '';\n const countStr =\n action.count && action.count > 1 ? ` x${action.count}` : '';\n actionsDisplay.push(`${action.type}(${arg})${countStr}`);\n }\n\n let actionsStr = actionsDisplay.join(', ');\n if (step.actions.length > 3) {\n actionsStr += ` (+${step.actions.length - 3} more)`;\n }\n\n const statusDisplay = step.status === 'completed' ? 'ok' : step.status;\n\n table.push([String(step.step_num), reason, actionsStr, statusDisplay]);\n }\n\n process.stdout.write(String(table) + '\\n');\n\n const statusText = success ? 'Success' : 'Failed/Interrupted';\n process.stdout.write(\n `\\nTotal Steps: ${steps.length} | Status: ${statusText}\\n`,\n );\n\n if (typeof durationSeconds === 'number') {\n process.stdout.write(`Duration: ${durationSeconds.toFixed(2)}s\\n`);\n }\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport {\n StepObserver,\n type Action,\n type ActionEvent,\n type ObserverEvent,\n type StepEvent,\n} from '../types/index.js';\n\nexport type StepData = {\n step_num: number;\n timestamp: Date;\n reasoning: string | null;\n actions: Action[];\n action_count: number;\n status: string;\n};\n\nexport class StepTracker extends StepObserver {\n /** Tracks agent step execution by implementing AsyncObserver protocol. */\n\n steps: StepData[] = [];\n\n async onEvent(event: ObserverEvent): Promise<void> {\n switch (event.type) {\n case 'step': {\n const e = event as StepEvent;\n this.steps.push({\n step_num: e.step_num,\n timestamp: e.timestamp,\n reasoning: e.step.reason ?? null,\n actions: e.step.actions,\n action_count: e.step.actions.length,\n status: 'running',\n });\n return;\n }\n case 'action': {\n const e = event as ActionEvent;\n for (const step of this.steps) {\n if (step.step_num === e.step_num) {\n step.status = e.error ? 'error' : 'completed';\n break;\n }\n }\n return;\n }\n default:\n return;\n }\n }\n}\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { AsyncAgentObserver } from '../agent/observer/agent_observer.js';\nimport { createAgent, listAgentModes } from '../agent/index.js';\nimport {\n API_KEY_HELP_URL,\n DEFAULT_BASE_URL,\n DEFAULT_MAX_STEPS_THINKER,\n DEFAULT_STEP_DELAY,\n MODE_ACTOR,\n MODEL_THINKER,\n} from '../consts.js';\nimport { DefaultActionHandler, ScreenshotMaker } from '../handler.js';\nimport getLogger from '../logger.js';\nimport { displayStepTable } from './display.js';\nimport { StepTracker } from './tracking.js';\nimport macPerm from '@hurdlegroup/node-mac-permissions';\nimport { AgentCreateOptions } from '../agent/registry.js';\n\nconst logger = getLogger('cli.agent');\n\nconst checkPermissions = async (): Promise<void> => {\n if (process.platform !== 'darwin') {\n process.stdout.write(\n 'Warning: Permission check is only applicable on macOS.\\n',\n );\n process.stdout.write(\n 'On other platforms, no special permissions are required.\\n',\n );\n return;\n }\n\n const screenPermission = macPerm.getAuthStatus('screen');\n const accessibilityPermission = macPerm.getAuthStatus('accessibility');\n\n console.log('Checking permissions...');\n console.log(` ${screenPermission ? '[OK]' : '[MISSING]'} Screen Recording`);\n console.log(\n ` ${accessibilityPermission ? '[OK]' : '[MISSING]'} Accessibility`,\n );\n\n if (!screenPermission) {\n macPerm.askForScreenCaptureAccess(true);\n }\n if (!accessibilityPermission) {\n macPerm.askForAccessibilityAccess();\n }\n\n if (screenPermission && accessibilityPermission) {\n console.log('All permissions granted. You can run the agent.');\n } else {\n console.log('After granting, run this command again to continue.');\n console.log(\n 'Note: You may need to restart your terminal after granting permissions.',\n );\n process.exitCode = 1;\n return;\n }\n};\n\ntype AgentRunOptions = {\n model?: string;\n maxSteps?: number;\n temperature?: number;\n mode: string;\n oagiApiKey?: string;\n oagiBaseUrl?: string;\n export?: 'markdown' | 'html' | 'json';\n exportFile?: string;\n stepDelay?: number;\n};\n\nconst runAgent = async (\n instruction: string,\n opts: AgentRunOptions,\n): Promise<void> => {\n const apiKey = opts.oagiApiKey ?? process.env.OAGI_API_KEY;\n if (!apiKey) {\n process.stderr.write(\n 'Error: OAGI API key not provided.\\n' +\n 'Set OAGI_API_KEY environment variable or use --oagi-api-key flag.\\n' +\n `Get your API key at ${API_KEY_HELP_URL}\\n`,\n );\n process.exitCode = 1;\n return;\n }\n\n const baseURL =\n opts.oagiBaseUrl ?? process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL;\n const mode = opts.mode ?? MODE_ACTOR;\n const stepDelay = opts.stepDelay ?? DEFAULT_STEP_DELAY;\n\n const exportFormat = opts.export;\n const exportFile = opts.exportFile;\n\n const stepTracker = new StepTracker();\n const agentObserver = exportFormat ? new AsyncAgentObserver() : null;\n\n const createOpts: AgentCreateOptions = {\n apiKey,\n baseURL,\n stepObserver: stepTracker.chain(agentObserver),\n stepDelay,\n };\n\n if (opts.model) {\n createOpts.model = opts.model;\n if (opts.model === MODEL_THINKER && !opts.maxSteps) {\n createOpts.maxSteps = DEFAULT_MAX_STEPS_THINKER;\n }\n }\n if (typeof opts.maxSteps === 'number') {\n createOpts.maxSteps = opts.maxSteps;\n }\n if (typeof opts.temperature === 'number') {\n createOpts.temperature = opts.temperature;\n }\n\n const agent = createAgent(mode, createOpts);\n\n let actionHandler: DefaultActionHandler;\n let imageProvider: ScreenshotMaker;\n try {\n actionHandler = new DefaultActionHandler();\n imageProvider = new ScreenshotMaker();\n } catch (e) {\n process.stderr.write(\n `Error: desktop automation dependencies failed to load: ${String(e)}\\n` +\n \"If you're using pnpm and robotjs is installed, you may need to run: pnpm approve-builds\\n\",\n );\n process.exitCode = 1;\n return;\n }\n\n if (instruction) {\n process.stdout.write(`Starting agent with instruction: ${instruction}\\n`);\n } else {\n process.stdout.write(\n `Starting agent with mode: ${mode} (using pre-configured instruction)\\n`,\n );\n }\n process.stdout.write(`Mode: ${mode}\\n`);\n process.stdout.write('-'.repeat(60) + '\\n');\n\n const start = Date.now();\n let success = false;\n let interrupted = false;\n\n const onSigint = () => {\n interrupted = true;\n process.stdout.write('\\nAgent execution interrupted by user (Ctrl+C)\\n');\n };\n\n process.once('SIGINT', onSigint);\n\n try {\n if (interrupted) throw new Error('Interrupted');\n success = await agent.execute(instruction, actionHandler, imageProvider);\n } catch (err) {\n if (interrupted) {\n process.exitCode = 130;\n } else {\n logger.error(`Error during agent execution: ${String(err)}`);\n process.exitCode = 1;\n }\n } finally {\n process.off('SIGINT', onSigint);\n const durationSeconds = (Date.now() - start) / 1000;\n\n if (stepTracker.steps.length) {\n process.stdout.write('\\n' + '='.repeat(60) + '\\n');\n displayStepTable(stepTracker.steps, success, durationSeconds);\n } else {\n process.stdout.write('\\nNo steps were executed.\\n');\n }\n\n if (exportFormat && agentObserver) {\n const extMap: Record<string, string> = {\n markdown: 'md',\n html: 'html',\n json: 'json',\n };\n\n const outputPath =\n exportFile ?? `execution_report.${extMap[exportFormat]}`;\n try {\n agentObserver.export(exportFormat, outputPath);\n process.stdout.write(\n `\\nExecution history exported to: ${outputPath}\\n`,\n );\n } catch (e) {\n process.stderr.write(\n `\\nError exporting execution history: ${String(e)}\\n`,\n );\n }\n }\n\n if (interrupted) {\n process.exitCode = 130;\n } else if (!success && !process.exitCode) {\n process.exitCode = 1;\n }\n }\n};\n\nexport const addAgentCommand = (program: Command): void => {\n const agent = program\n .command('agent')\n .description('Agent execution commands');\n\n agent\n .command('run')\n .description('Run an agent with the given instruction')\n .argument('[instruction]', 'Task instruction for the agent to execute')\n .option('--model <model>', 'Model to use (default: determined by mode)')\n .option(\n '--max-steps <number>',\n 'Maximum number of steps (default: determined by mode)',\n (v: string) => Number(v),\n )\n .option(\n '--temperature <number>',\n 'Sampling temperature (default: determined by mode)',\n (v: string) => Number(v),\n )\n .option(\n '--mode <mode>',\n `Agent mode to use (default: ${MODE_ACTOR})`,\n MODE_ACTOR,\n )\n .option(\n '--oagi-api-key <key>',\n 'OAGI API key (default: OAGI_API_KEY env var)',\n )\n .option(\n '--oagi-base-url <url>',\n `OAGI base URL (default: ${DEFAULT_BASE_URL}, or OAGI_BASE_URL env var)`,\n )\n .option(\n '--export <format>',\n 'Export execution history to file (markdown, html, or json)',\n )\n .option(\n '--export-file <path>',\n 'Output file path for export (default: execution_report.[md|html|json])',\n )\n .option(\n '--step-delay <number>',\n `Delay in seconds after each step before next screenshot (default: ${DEFAULT_STEP_DELAY})`,\n (v: string) => Number(v),\n )\n .action(async (instruction: string | undefined, options: any) => {\n await runAgent(instruction ?? '', {\n model: options.model,\n maxSteps: options.maxSteps,\n temperature: options.temperature,\n mode: options.mode,\n oagiApiKey: options.oagiApiKey,\n oagiBaseUrl: options.oagiBaseUrl,\n export: options.export,\n exportFile: options.exportFile,\n stepDelay: options.stepDelay,\n });\n });\n\n agent\n .command('modes')\n .description('List available agent modes')\n .action(() => {\n const modes = listAgentModes();\n process.stdout.write('Available agent modes:\\n');\n for (const m of modes) process.stdout.write(` - ${m}\\n`);\n });\n\n agent\n .command('permission')\n .description(\n 'Check macOS permissions for screen recording and accessibility',\n )\n .action(async () => {\n await checkPermissions();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nexport const setupLogging = (verbose: boolean): void => {\n if (verbose) {\n process.env.OAGI_LOG = 'debug';\n }\n};\n\nexport const maskApiKey = (value: string): string => {\n if (!value) return '';\n return value.length > 8 ? `${value.slice(0, 8)}...` : '***';\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { DEFAULT_BASE_URL, MODEL_ACTOR } from '../consts.js';\nimport { maskApiKey } from './utils.js';\n\nconst displayConfig = (): void => {\n const configVars: Record<string, string> = {\n OAGI_API_KEY: process.env.OAGI_API_KEY ?? '',\n OAGI_BASE_URL: process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL,\n OAGI_DEFAULT_MODEL: process.env.OAGI_DEFAULT_MODEL ?? MODEL_ACTOR,\n OAGI_LOG: process.env.OAGI_LOG ?? 'info',\n OAGI_MAX_STEPS: process.env.OAGI_MAX_STEPS ?? '30',\n };\n\n process.stdout.write('Current Configuration:\\n');\n process.stdout.write('-'.repeat(50) + '\\n');\n\n for (const [key, value] of Object.entries(configVars)) {\n if (key === 'OAGI_API_KEY' && value) {\n process.stdout.write(`${key}: ${maskApiKey(value)}\\n`);\n } else {\n const displayValue = value ? value : '(not set)';\n process.stdout.write(`${key}: ${displayValue}\\n`);\n }\n }\n};\n\nexport const addConfigCommand = (program: Command): void => {\n const config = program\n .command('config')\n .description('Configuration management');\n\n config\n .command('show')\n .description('Display current configuration')\n .action(() => {\n displayConfig();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport type { Command } from 'commander';\nimport { createRequire } from 'module';\n\nconst getSdkVersion = (): string => {\n try {\n const require = createRequire(import.meta.url);\n\n // In dist, files may live under dist/*, so try both\n for (const p of ['../package.json', '../../package.json']) {\n try {\n const pkg = require(p) as { version?: string };\n if (pkg.version && pkg.version !== '0.0.0') return pkg.version;\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n return 'unknown';\n};\n\nconst displayVersion = (): void => {\n const sdkVersion = getSdkVersion();\n\n process.stdout.write(`OAGI SDK version: ${sdkVersion}\\n`);\n process.stdout.write(`Node version: ${process.version}\\n`);\n process.stdout.write(`Platform: ${process.platform}\\n`);\n};\n\nexport const addVersionCommand = (program: Command): void => {\n program\n .command('version')\n .description('Show SDK version and environment info')\n .action(() => {\n displayVersion();\n });\n};\n","/**\n * -----------------------------------------------------------------------------\n * Copyright (c) OpenAGI Foundation\n * All rights reserved.\n *\n * This file is part of the official API project.\n * Licensed under the MIT License.\n * -----------------------------------------------------------------------------\n */\n\nimport { main } from './cli/main.js';\n\nmain().catch(err => {\n process.stderr.write(`Unexpected error: ${String(err)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":["require"]}
|
package/dist/index.cjs
CHANGED
|
@@ -397,8 +397,18 @@ ${taskDescription}
|
|
|
397
397
|
// src/client.ts
|
|
398
398
|
var logger2 = logger_default("client");
|
|
399
399
|
var _Client = class _Client {
|
|
400
|
-
|
|
401
|
-
|
|
400
|
+
baseURL;
|
|
401
|
+
apiKey;
|
|
402
|
+
timeout = HTTP_CLIENT_TIMEOUT;
|
|
403
|
+
client;
|
|
404
|
+
constructor(baseURL, apiKey, maxRetries) {
|
|
405
|
+
if (typeof baseURL === "object") {
|
|
406
|
+
({ baseURL, apiKey, maxRetries } = baseURL);
|
|
407
|
+
}
|
|
408
|
+
baseURL ??= process.env.OAGI_BASE_URL ?? DEFAULT_BASE_URL;
|
|
409
|
+
apiKey ??= process.env.OAGI_API_KEY;
|
|
410
|
+
maxRetries ??= DEFAULT_MAX_RETRIES;
|
|
411
|
+
this.baseURL = baseURL;
|
|
402
412
|
this.apiKey = apiKey;
|
|
403
413
|
if (!apiKey) {
|
|
404
414
|
throw new ConfigurationError(
|
|
@@ -406,19 +416,17 @@ var _Client = class _Client {
|
|
|
406
416
|
);
|
|
407
417
|
}
|
|
408
418
|
this.client = new import_openai.default({
|
|
409
|
-
baseURL: new URL("./v1",
|
|
419
|
+
baseURL: new URL("./v1", baseURL).href,
|
|
410
420
|
apiKey,
|
|
411
421
|
maxRetries
|
|
412
422
|
});
|
|
413
|
-
logger2.info(`Client initialized with base_url: ${
|
|
423
|
+
logger2.info(`Client initialized with base_url: ${baseURL}`);
|
|
414
424
|
}
|
|
415
|
-
timeout = HTTP_CLIENT_TIMEOUT;
|
|
416
|
-
client;
|
|
417
425
|
fetch(input, init) {
|
|
418
426
|
if (typeof input === "string" || input instanceof URL) {
|
|
419
|
-
input = new URL(input, this.
|
|
427
|
+
input = new URL(input, this.baseURL);
|
|
420
428
|
} else {
|
|
421
|
-
input = new URL(input.url, this.
|
|
429
|
+
input = new URL(input.url, this.baseURL);
|
|
422
430
|
}
|
|
423
431
|
init ??= {};
|
|
424
432
|
const signal = AbortSignal.timeout(this.timeout * 1e3);
|
|
@@ -487,7 +495,10 @@ var _Client = class _Client {
|
|
|
487
495
|
task_id: taskId
|
|
488
496
|
});
|
|
489
497
|
const rawOutput = response.choices[0].message.content ?? "";
|
|
490
|
-
const step =
|
|
498
|
+
const step = {
|
|
499
|
+
...parseRawOutput(rawOutput),
|
|
500
|
+
usage: response.usage
|
|
501
|
+
};
|
|
491
502
|
taskId = response.task_id;
|
|
492
503
|
const task = taskId ? `task_id: ${taskId}, ` : "";
|
|
493
504
|
const usage = response.usage ? `, tokens: ${response.usage.prompt_tokens}+${response.usage.completion_tokens}` : "";
|
|
@@ -641,10 +652,10 @@ var Client = _Client;
|
|
|
641
652
|
// src/actor.ts
|
|
642
653
|
var logger3 = logger_default("task");
|
|
643
654
|
var Actor = class {
|
|
644
|
-
constructor(apiKey,
|
|
655
|
+
constructor(apiKey, baseURL, model = MODEL_ACTOR, temperature) {
|
|
645
656
|
this.model = model;
|
|
646
657
|
this.temperature = temperature;
|
|
647
|
-
this.client = new Client(
|
|
658
|
+
this.client = new Client(baseURL, apiKey);
|
|
648
659
|
}
|
|
649
660
|
/**
|
|
650
661
|
* Client-side generated UUID
|
|
@@ -809,7 +820,7 @@ var DefaultAgent = class {
|
|
|
809
820
|
async execute(instruction, action_handler, image_provider) {
|
|
810
821
|
const actor = new Actor(this.api_key, this.base_url, this.model);
|
|
811
822
|
logger4.info(`Starting async task execution: ${instruction}`);
|
|
812
|
-
|
|
823
|
+
actor.initTask(instruction, this.max_steps);
|
|
813
824
|
resetHandler(action_handler);
|
|
814
825
|
for (let i = 0; i < this.max_steps; i++) {
|
|
815
826
|
const step_num = i + 1;
|
|
@@ -888,7 +899,7 @@ var asyncAgentRegister = (mode) => {
|
|
|
888
899
|
asyncAgentRegister("actor")((options = {}) => {
|
|
889
900
|
const {
|
|
890
901
|
apiKey,
|
|
891
|
-
|
|
902
|
+
baseURL,
|
|
892
903
|
model = MODEL_ACTOR,
|
|
893
904
|
maxSteps = DEFAULT_MAX_STEPS,
|
|
894
905
|
temperature = DEFAULT_TEMPERATURE_LOW,
|
|
@@ -897,7 +908,7 @@ asyncAgentRegister("actor")((options = {}) => {
|
|
|
897
908
|
} = options;
|
|
898
909
|
return new DefaultAgent(
|
|
899
910
|
apiKey,
|
|
900
|
-
|
|
911
|
+
baseURL,
|
|
901
912
|
model,
|
|
902
913
|
maxSteps,
|
|
903
914
|
temperature,
|
|
@@ -908,7 +919,7 @@ asyncAgentRegister("actor")((options = {}) => {
|
|
|
908
919
|
asyncAgentRegister("thinker")((options = {}) => {
|
|
909
920
|
const {
|
|
910
921
|
apiKey,
|
|
911
|
-
|
|
922
|
+
baseURL,
|
|
912
923
|
model = MODEL_THINKER,
|
|
913
924
|
maxSteps = DEFAULT_MAX_STEPS_THINKER,
|
|
914
925
|
temperature = DEFAULT_TEMPERATURE_LOW,
|
|
@@ -917,7 +928,7 @@ asyncAgentRegister("thinker")((options = {}) => {
|
|
|
917
928
|
} = options;
|
|
918
929
|
return new DefaultAgent(
|
|
919
930
|
apiKey,
|
|
920
|
-
|
|
931
|
+
baseURL,
|
|
921
932
|
model,
|
|
922
933
|
maxSteps,
|
|
923
934
|
temperature,
|