agent-vision 0.0.1

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 ADDED
@@ -0,0 +1,103 @@
1
+ # Agent Vision CLI
2
+
3
+ A CLI tool for image analysis using AI vision, powered by **Puter** and **Kimi K2.5**.
4
+
5
+ **Note: Kimi K2.5 is currently FREE on Puter for a limited time!**
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install -g agent-vision
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ```bash
16
+ # First, authenticate
17
+ agent-vision login
18
+
19
+ # Analyze an image
20
+ agent-vision analyze screenshot.png
21
+ agent-vision analyze photo.jpg "What objects are in this image?"
22
+ ```
23
+
24
+ ## Commands
25
+
26
+ ### `agent-vision login`
27
+
28
+ Opens your browser to authenticate with Puter. Your token is stored securely in your config directory.
29
+
30
+ ### `agent-vision logout`
31
+
32
+ Removes your stored authentication token.
33
+
34
+ ### `agent-vision analyze <image> [prompt]`
35
+
36
+ Analyzes an image using AI vision.
37
+
38
+ **Arguments:**
39
+ - `image` - Path to image file (png, jpg, jpeg, gif, webp)
40
+ - `prompt` - Optional custom prompt (default: "Describe what you see in this image.")
41
+
42
+ **Options:**
43
+ - `-d, --debug` - Enable debug output
44
+ - `-m, --model <model>` - AI model to use (default: kimi-k2.5)
45
+
46
+ ## Environment Variables
47
+
48
+ - `PUTER_TOKEN` - Set token directly for CI/CD or automation (skips stored token)
49
+
50
+ ## Examples
51
+
52
+ ```bash
53
+ # Basic usage
54
+ agent-vision analyze screenshot.png
55
+
56
+ # Custom prompt
57
+ agent-vision analyze diagram.png "Explain this technical diagram"
58
+ agent-vision analyze photo.jpg "What objects are visible?"
59
+
60
+ # Debug mode
61
+ agent-vision analyze --debug photo.jpg
62
+
63
+ # CI/CD usage (no stored token needed)
64
+ PUTER_TOKEN=xxx agent-vision analyze image.png "Describe this"
65
+ ```
66
+
67
+ ## For Agents & Automation
68
+
69
+ This tool outputs clean text responses suitable for programmatic consumption.
70
+
71
+ **Error handling for automation:**
72
+
73
+ When no token is configured, the CLI fails with a clear error message:
74
+
75
+ ```
76
+ Error: No authentication token found.
77
+
78
+ To authenticate, run:
79
+ agent-vision login
80
+
81
+ For CI/CD or automation, set the PUTER_TOKEN environment variable:
82
+ PUTER_TOKEN=xxx agent-vision analyze image.png
83
+
84
+ Get your token from: https://puter.com
85
+ ```
86
+
87
+ ## Token Storage
88
+
89
+ Tokens are stored in platform-appropriate config directories:
90
+
91
+ - **Linux**: `~/.config/agent-vision/token` (respects `$XDG_CONFIG_HOME`)
92
+ - **macOS**: `~/Library/Application Support/agent-vision/token`
93
+ - **Windows**: `%APPDATA%/agent-vision/token`
94
+
95
+ ## Backend
96
+
97
+ Powered by:
98
+ - **Puter** (https://puter.com) - Cloud platform providing the API
99
+ - **Kimi K2.5** - 1T parameter multimodal AI with MoonViT vision encoder
100
+
101
+ ## License
102
+
103
+ MIT
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js');
package/dist/auth.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare function getToken(): string | null;
2
+ export declare function saveToken(token: string): void;
3
+ export declare function deleteToken(): void;
4
+ export declare function hasToken(): boolean;
5
+ export declare function getTokenPath(): string;
6
+ export declare function getConfigPath(): string;
package/dist/auth.js ADDED
@@ -0,0 +1,47 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
2
+ import { join } from 'path';
3
+ function getConfigDir() {
4
+ if (process.platform === 'win32') {
5
+ return join(process.env.APPDATA || process.env.USERPROFILE || '', 'agent-vision');
6
+ }
7
+ if (process.platform === 'darwin') {
8
+ return join(process.env.HOME || '', 'Library', 'Application Support', 'agent-vision');
9
+ }
10
+ return process.env.XDG_CONFIG_HOME
11
+ ? join(process.env.XDG_CONFIG_HOME, 'agent-vision')
12
+ : join(process.env.HOME || '', '.config', 'agent-vision');
13
+ }
14
+ const CONFIG_DIR = getConfigDir();
15
+ const TOKEN_FILE = join(CONFIG_DIR, 'token');
16
+ export function getToken() {
17
+ if (process.env.PUTER_TOKEN) {
18
+ return process.env.PUTER_TOKEN;
19
+ }
20
+ if (existsSync(TOKEN_FILE)) {
21
+ const token = readFileSync(TOKEN_FILE, 'utf-8').trim();
22
+ if (token && token.length > 10) {
23
+ return token;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ export function saveToken(token) {
29
+ if (!existsSync(CONFIG_DIR)) {
30
+ mkdirSync(CONFIG_DIR, { recursive: true });
31
+ }
32
+ writeFileSync(TOKEN_FILE, token, { mode: 0o600 });
33
+ }
34
+ export function deleteToken() {
35
+ if (existsSync(TOKEN_FILE)) {
36
+ unlinkSync(TOKEN_FILE);
37
+ }
38
+ }
39
+ export function hasToken() {
40
+ return getToken() !== null;
41
+ }
42
+ export function getTokenPath() {
43
+ return TOKEN_FILE;
44
+ }
45
+ export function getConfigPath() {
46
+ return CONFIG_DIR;
47
+ }
@@ -0,0 +1,6 @@
1
+ interface AnalyzeOptions {
2
+ debug?: boolean;
3
+ model?: string;
4
+ }
5
+ export declare function analyzeCommand(imagePath: string, prompt: string, options?: AnalyzeOptions): Promise<void>;
6
+ export {};
@@ -0,0 +1,53 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { init } from '@heyputer/puter.js/src/init.cjs';
3
+ import { getToken } from '../auth.js';
4
+ const AUTH_ERROR = `Error: No authentication token found.
5
+
6
+ To authenticate, run:
7
+ agent-vision login
8
+
9
+ For CI/CD or automation, set the PUTER_TOKEN environment variable:
10
+ PUTER_TOKEN=xxx agent-vision analyze image.png
11
+
12
+ Get your token from: https://puter.com`;
13
+ export async function analyzeCommand(imagePath, prompt, options = {}) {
14
+ const debug = (msg) => options.debug && console.error(`[${new Date().toISOString()}] ${msg}`);
15
+ if (!existsSync(imagePath)) {
16
+ console.error(`Error: Image not found: ${imagePath}`);
17
+ process.exit(1);
18
+ }
19
+ const authToken = getToken();
20
+ if (!authToken) {
21
+ console.error(AUTH_ERROR);
22
+ process.exit(1);
23
+ }
24
+ debug('Starting...');
25
+ debug('Initializing puter...');
26
+ const puter = init(authToken);
27
+ debug('Reading image...');
28
+ const imageBuffer = readFileSync(imagePath);
29
+ const ext = imagePath.toLowerCase().split('.').pop();
30
+ const mimeTypes = {
31
+ png: 'image/png',
32
+ jpg: 'image/jpeg',
33
+ jpeg: 'image/jpeg',
34
+ gif: 'image/gif',
35
+ webp: 'image/webp'
36
+ };
37
+ const mimeType = mimeTypes[ext || ''] || 'image/png';
38
+ const imageDataUrl = `data:${mimeType};base64,${imageBuffer.toString('base64')}`;
39
+ const model = options.model || 'kimi-k2.5';
40
+ debug(`Using model: ${model}`);
41
+ debug('Calling puter.ai.chat...');
42
+ try {
43
+ const response = await puter.ai.chat(prompt, imageDataUrl, { model });
44
+ debug('Got response');
45
+ console.log(response?.message?.content || response);
46
+ debug('Exiting');
47
+ process.exit(0);
48
+ }
49
+ catch (err) {
50
+ console.error('Error:', err?.message || err);
51
+ process.exit(1);
52
+ }
53
+ }
@@ -0,0 +1 @@
1
+ export declare function loginCommand(): Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { getAuthToken } from '@heyputer/puter.js/src/init.cjs';
2
+ import { saveToken, getTokenPath } from '../auth.js';
3
+ export async function loginCommand() {
4
+ console.error('Opening browser for authentication...');
5
+ console.error('Please complete the login in your browser.');
6
+ try {
7
+ const token = await getAuthToken();
8
+ if (!token) {
9
+ console.error('Error: No token received from authentication.');
10
+ process.exit(1);
11
+ }
12
+ saveToken(token);
13
+ console.error('Authentication successful!');
14
+ console.error('Token saved to:', getTokenPath());
15
+ }
16
+ catch (error) {
17
+ console.error('Authentication failed:', error?.message || error);
18
+ process.exit(1);
19
+ }
20
+ }
@@ -0,0 +1 @@
1
+ export declare function logoutCommand(): void;
@@ -0,0 +1,10 @@
1
+ import { deleteToken, hasToken, getTokenPath } from '../auth.js';
2
+ export function logoutCommand() {
3
+ if (!hasToken()) {
4
+ console.error('No stored token found.');
5
+ return;
6
+ }
7
+ deleteToken();
8
+ console.error('Token removed from:', getTokenPath());
9
+ console.error('Logged out successfully.');
10
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env node
2
+ import{createRequire as H$}from"node:module";var Y$=Object.create;var{getPrototypeOf:Z$,defineProperty:D,getOwnPropertyNames:ZT,getOwnPropertyDescriptor:G$}=Object,GT=Object.prototype.hasOwnProperty;var x=(T,$,R)=>{R=T!=null?Y$(Z$(T)):{};let z=$||!T||!T.__esModule?D(R,"default",{value:T,enumerable:!0}):R;for(let _ of ZT(T))if(!GT.call(z,_))D(z,_,{get:()=>T[_],enumerable:!0});return z},YT=new WeakMap,X$=(T)=>{var $=YT.get(T),R;if($)return $;if($=D({},"__esModule",{value:!0}),T&&typeof T==="object"||typeof T==="function")ZT(T).map((z)=>!GT.call($,z)&&D($,z,{get:()=>T[z],enumerable:!(R=G$(T,z))||R.enumerable}));return YT.set(T,$),$},M=(T,$)=>()=>($||T(($={exports:{}}).exports,$),$.exports);var U$=(T,$)=>{for(var R in $)D(T,R,{get:$[R],enumerable:!0,configurable:!0,set:(z)=>$[R]=()=>z})};var S=(T,$)=>()=>(T&&($=T(T=0)),$);var K=H$(import.meta.url);var F=M((S$)=>{class b extends Error{constructor(T,$,R){super(R);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=T,this.nestedError=void 0}}class XT extends b{constructor(T){super(1,"commander.invalidArgument",T);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}S$.CommanderError=b;S$.InvalidArgumentError=XT});var A=M((B$)=>{var{InvalidArgumentError:M$}=F();class UT{constructor(T,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,T[0]){case"<":this.required=!0,this._name=T.slice(1,-1);break;case"[":this.required=!1,this._name=T.slice(1,-1);break;default:this.required=!0,this._name=T;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(T,$){if($===this.defaultValue||!Array.isArray($))return[T];return $.push(T),$}default(T,$){return this.defaultValue=T,this.defaultValueDescription=$,this}argParser(T){return this.parseArg=T,this}choices(T){return this.argChoices=T.slice(),this.parseArg=($,R)=>{if(!this.argChoices.includes($))throw new M$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,R);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function L$(T){let $=T.name()+(T.variadic===!0?"...":"");return T.required?"<"+$+">":"["+$+"]"}B$.Argument=UT;B$.humanReadableArgName=L$});var v=M((V$)=>{var{humanReadableArgName:W$}=A();class HT{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(T){this.helpWidth=this.helpWidth??T.helpWidth??80}visibleCommands(T){let $=T.commands.filter((z)=>!z._hidden),R=T._getHelpCommand();if(R&&!R._hidden)$.push(R);if(this.sortSubcommands)$.sort((z,_)=>{return z.name().localeCompare(_.name())});return $}compareOptions(T,$){let R=(z)=>{return z.short?z.short.replace(/^-/,""):z.long.replace(/^--/,"")};return R(T).localeCompare(R($))}visibleOptions(T){let $=T.options.filter((z)=>!z.hidden),R=T._getHelpOption();if(R&&!R.hidden){let z=R.short&&T._findOption(R.short),_=R.long&&T._findOption(R.long);if(!z&&!_)$.push(R);else if(R.long&&!_)$.push(T.createOption(R.long,R.description));else if(R.short&&!z)$.push(T.createOption(R.short,R.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(T){if(!this.showGlobalOptions)return[];let $=[];for(let R=T.parent;R;R=R.parent){let z=R.options.filter((_)=>!_.hidden);$.push(...z)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(T){if(T._argsDescription)T.registeredArguments.forEach(($)=>{$.description=$.description||T._argsDescription[$.name()]||""});if(T.registeredArguments.find(($)=>$.description))return T.registeredArguments;return[]}subcommandTerm(T){let $=T.registeredArguments.map((R)=>W$(R)).join(" ");return T._name+(T._aliases[0]?"|"+T._aliases[0]:"")+(T.options.length?" [options]":"")+($?" "+$:"")}optionTerm(T){return T.flags}argumentTerm(T){return T.name()}longestSubcommandTermLength(T,$){return $.visibleCommands(T).reduce((R,z)=>{return Math.max(R,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(z))))},0)}longestOptionTermLength(T,$){return $.visibleOptions(T).reduce((R,z)=>{return Math.max(R,this.displayWidth($.styleOptionTerm($.optionTerm(z))))},0)}longestGlobalOptionTermLength(T,$){return $.visibleGlobalOptions(T).reduce((R,z)=>{return Math.max(R,this.displayWidth($.styleOptionTerm($.optionTerm(z))))},0)}longestArgumentTermLength(T,$){return $.visibleArguments(T).reduce((R,z)=>{return Math.max(R,this.displayWidth($.styleArgumentTerm($.argumentTerm(z))))},0)}commandUsage(T){let $=T._name;if(T._aliases[0])$=$+"|"+T._aliases[0];let R="";for(let z=T.parent;z;z=z.parent)R=z.name()+" "+R;return R+$+" "+T.usage()}commandDescription(T){return T.description()}subcommandDescription(T){return T.summary()||T.description()}optionDescription(T){let $=[];if(T.argChoices)$.push(`choices: ${T.argChoices.map((R)=>JSON.stringify(R)).join(", ")}`);if(T.defaultValue!==void 0){if(T.required||T.optional||T.isBoolean()&&typeof T.defaultValue==="boolean")$.push(`default: ${T.defaultValueDescription||JSON.stringify(T.defaultValue)}`)}if(T.presetArg!==void 0&&T.optional)$.push(`preset: ${JSON.stringify(T.presetArg)}`);if(T.envVar!==void 0)$.push(`env: ${T.envVar}`);if($.length>0){let R=`(${$.join(", ")})`;if(T.description)return`${T.description} ${R}`;return R}return T.description}argumentDescription(T){let $=[];if(T.argChoices)$.push(`choices: ${T.argChoices.map((R)=>JSON.stringify(R)).join(", ")}`);if(T.defaultValue!==void 0)$.push(`default: ${T.defaultValueDescription||JSON.stringify(T.defaultValue)}`);if($.length>0){let R=`(${$.join(", ")})`;if(T.description)return`${T.description} ${R}`;return R}return T.description}formatItemList(T,$,R){if($.length===0)return[];return[R.styleTitle(T),...$,""]}groupItems(T,$,R){let z=new Map;return T.forEach((_)=>{let q=R(_);if(!z.has(q))z.set(q,[])}),$.forEach((_)=>{let q=R(_);if(!z.has(q))z.set(q,[]);z.get(q).push(_)}),z}formatHelp(T,$){let R=$.padWidth(T,$),z=$.helpWidth??80;function _(Z,X){return $.formatItem(Z,R,X,$)}let q=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(T))}`,""],J=$.commandDescription(T);if(J.length>0)q=q.concat([$.boxWrap($.styleCommandDescription(J),z),""]);let Q=$.visibleArguments(T).map((Z)=>{return _($.styleArgumentTerm($.argumentTerm(Z)),$.styleArgumentDescription($.argumentDescription(Z)))});if(q=q.concat(this.formatItemList("Arguments:",Q,$)),this.groupItems(T.options,$.visibleOptions(T),(Z)=>Z.helpGroupHeading??"Options:").forEach((Z,X)=>{let H=Z.map((I)=>{return _($.styleOptionTerm($.optionTerm(I)),$.styleOptionDescription($.optionDescription(I)))});q=q.concat(this.formatItemList(X,H,$))}),$.showGlobalOptions){let Z=$.visibleGlobalOptions(T).map((X)=>{return _($.styleOptionTerm($.optionTerm(X)),$.styleOptionDescription($.optionDescription(X)))});q=q.concat(this.formatItemList("Global Options:",Z,$))}return this.groupItems(T.commands,$.visibleCommands(T),(Z)=>Z.helpGroup()||"Commands:").forEach((Z,X)=>{let H=Z.map((I)=>{return _($.styleSubcommandTerm($.subcommandTerm(I)),$.styleSubcommandDescription($.subcommandDescription(I)))});q=q.concat(this.formatItemList(X,H,$))}),q.join(`
3
+ `)}displayWidth(T){return ST(T).length}styleTitle(T){return T}styleUsage(T){return T.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(T){return this.styleDescriptionText(T)}styleOptionDescription(T){return this.styleDescriptionText(T)}styleSubcommandDescription(T){return this.styleDescriptionText(T)}styleArgumentDescription(T){return this.styleDescriptionText(T)}styleDescriptionText(T){return T}styleOptionTerm(T){return this.styleOptionText(T)}styleSubcommandTerm(T){return T.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(T){return this.styleArgumentText(T)}styleOptionText(T){return T}styleArgumentText(T){return T}styleSubcommandText(T){return T}styleCommandText(T){return T}padWidth(T,$){return Math.max($.longestOptionTermLength(T,$),$.longestGlobalOptionTermLength(T,$),$.longestSubcommandTermLength(T,$),$.longestArgumentTermLength(T,$))}preformatted(T){return/\n[^\S\r\n]/.test(T)}formatItem(T,$,R,z){let q=" ".repeat(2);if(!R)return q+T;let J=T.padEnd($+T.length-z.displayWidth(T)),Q=2,Y=(this.helpWidth??80)-$-Q-2,Z;if(Y<this.minWidthToWrap||z.preformatted(R))Z=R;else Z=z.boxWrap(R,Y).replace(/\n/g,`
4
+ `+" ".repeat($+Q));return q+J+" ".repeat(Q)+Z.replace(/\n/g,`
5
+ ${q}`)}boxWrap(T,$){if($<this.minWidthToWrap)return T;let R=T.split(/\r\n|\n/),z=/[\s]*[^\s]+/g,_=[];return R.forEach((q)=>{let J=q.match(z);if(J===null){_.push("");return}let Q=[J.shift()],G=this.displayWidth(Q[0]);J.forEach((Y)=>{let Z=this.displayWidth(Y);if(G+Z<=$){Q.push(Y),G+=Z;return}_.push(Q.join(""));let X=Y.trimStart();Q=[X],G=this.displayWidth(X)}),_.push(Q.join(""))}),_.join(`
6
+ `)}}function ST(T){let $=/\x1b\[\d*(;\d*)*m/g;return T.replace($,"")}V$.Help=HT;V$.stripColor=ST});var h=M((y$)=>{var{InvalidArgumentError:D$}=F();class ET{constructor(T,$){this.flags=T,this.description=$||"",this.required=T.includes("<"),this.optional=T.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(T),this.mandatory=!1;let R=F$(T);if(this.short=R.shortFlag,this.long=R.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(T,$){return this.defaultValue=T,this.defaultValueDescription=$,this}preset(T){return this.presetArg=T,this}conflicts(T){return this.conflictsWith=this.conflictsWith.concat(T),this}implies(T){let $=T;if(typeof T==="string")$={[T]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(T){return this.envVar=T,this}argParser(T){return this.parseArg=T,this}makeOptionMandatory(T=!0){return this.mandatory=!!T,this}hideHelp(T=!0){return this.hidden=!!T,this}_collectValue(T,$){if($===this.defaultValue||!Array.isArray($))return[T];return $.push(T),$}choices(T){return this.argChoices=T.slice(),this.parseArg=($,R)=>{if(!this.argChoices.includes($))throw new D$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,R);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return KT(this.name().replace(/^no-/,""));return KT(this.name())}helpGroup(T){return this.helpGroupHeading=T,this}is(T){return this.short===T||this.long===T}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class MT{constructor(T){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,T.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,R)=>{if(this.positiveOptions.has(R))this.dualOptions.add(R)})}valueFromOption(T,$){let R=$.attributeName();if(!this.dualOptions.has(R))return!0;let z=this.negativeOptions.get(R).presetArg,_=z!==void 0?z:!1;return $.negate===(_===T)}}function KT(T){return T.split("-").reduce(($,R)=>{return $+R[0].toUpperCase()+R.slice(1)})}function F$(T){let $,R,z=/^-[^-]$/,_=/^--[^-]/,q=T.split(/[ |,]+/).concat("guard");if(z.test(q[0]))$=q.shift();if(_.test(q[0]))R=q.shift();if(!$&&z.test(q[0]))$=q.shift();if(!$&&_.test(q[0]))$=R,R=q.shift();if(q[0].startsWith("-")){let J=q[0],Q=`option creation failed due to '${J}' in option flags '${T}'`;if(/^-[^-][^-]/.test(J))throw Error(`${Q}
7
+ - a short flag is a single dash and a single character
8
+ - either use a single dash and a single character (for a short flag)
9
+ - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(z.test(J))throw Error(`${Q}
10
+ - too many short flags`);if(_.test(J))throw Error(`${Q}
11
+ - too many long flags`);throw Error(`${Q}
12
+ - unrecognised flag format`)}if($===void 0&&R===void 0)throw Error(`option creation failed due to no flags found in '${T}'.`);return{shortFlag:$,longFlag:R}}y$.Option=ET;y$.DualOptions=MT});var LT=M((C$)=>{function w$(T,$){if(Math.abs(T.length-$.length)>3)return Math.max(T.length,$.length);let R=[];for(let z=0;z<=T.length;z++)R[z]=[z];for(let z=0;z<=$.length;z++)R[0][z]=z;for(let z=1;z<=$.length;z++)for(let _=1;_<=T.length;_++){let q=1;if(T[_-1]===$[z-1])q=0;else q=1;if(R[_][z]=Math.min(R[_-1][z]+1,R[_][z-1]+1,R[_-1][z-1]+q),_>1&&z>1&&T[_-1]===$[z-2]&&T[_-2]===$[z-1])R[_][z]=Math.min(R[_][z],R[_-2][z-2]+1)}return R[T.length][$.length]}function O$(T,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let R=T.startsWith("--");if(R)T=T.slice(2),$=$.map((J)=>J.slice(2));let z=[],_=3,q=0.4;if($.forEach((J)=>{if(J.length<=1)return;let Q=w$(T,J),G=Math.max(T.length,J.length);if((G-Q)/G>q){if(Q<_)_=Q,z=[J];else if(Q===_)z.push(J)}}),z.sort((J,Q)=>J.localeCompare(Q)),R)z=z.map((J)=>`--${J}`);if(z.length>1)return`
13
+ (Did you mean one of ${z.join(", ")}?)`;if(z.length===1)return`
14
+ (Did you mean ${z[0]}?)`;return""}C$.suggestSimilar=O$});var WT=M((c$)=>{var x$=K("node:events").EventEmitter,u=K("node:child_process"),E=K("node:path"),w=K("node:fs"),U=K("node:process"),{Argument:b$,humanReadableArgName:v$}=A(),{CommanderError:g}=F(),{Help:h$,stripColor:u$}=v(),{Option:BT,DualOptions:g$}=h(),{suggestSimilar:jT}=LT();class l extends x${constructor(T){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=T||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>U.stdout.write($),writeErr:($)=>U.stderr.write($),outputError:($,R)=>R($),getOutHelpWidth:()=>U.stdout.isTTY?U.stdout.columns:void 0,getErrHelpWidth:()=>U.stderr.isTTY?U.stderr.columns:void 0,getOutHasColors:()=>c()??(U.stdout.isTTY&&U.stdout.hasColors?.()),getErrHasColors:()=>c()??(U.stderr.isTTY&&U.stderr.hasColors?.()),stripColor:($)=>u$($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(T){return this._outputConfiguration=T._outputConfiguration,this._helpOption=T._helpOption,this._helpCommand=T._helpCommand,this._helpConfiguration=T._helpConfiguration,this._exitCallback=T._exitCallback,this._storeOptionsAsProperties=T._storeOptionsAsProperties,this._combineFlagAndOptionalValue=T._combineFlagAndOptionalValue,this._allowExcessArguments=T._allowExcessArguments,this._enablePositionalOptions=T._enablePositionalOptions,this._showHelpAfterError=T._showHelpAfterError,this._showSuggestionAfterError=T._showSuggestionAfterError,this}_getCommandAndAncestors(){let T=[];for(let $=this;$;$=$.parent)T.push($);return T}command(T,$,R){let z=$,_=R;if(typeof z==="object"&&z!==null)_=z,z=null;_=_||{};let[,q,J]=T.match(/([^ ]+) *(.*)/),Q=this.createCommand(q);if(z)Q.description(z),Q._executableHandler=!0;if(_.isDefault)this._defaultCommandName=Q._name;if(Q._hidden=!!(_.noHelp||_.hidden),Q._executableFile=_.executableFile||null,J)Q.arguments(J);if(this._registerCommand(Q),Q.parent=this,Q.copyInheritedSettings(this),z)return this;return Q}createCommand(T){return new l(T)}createHelp(){return Object.assign(new h$,this.configureHelp())}configureHelp(T){if(T===void 0)return this._helpConfiguration;return this._helpConfiguration=T,this}configureOutput(T){if(T===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...T},this}showHelpAfterError(T=!0){if(typeof T!=="string")T=!!T;return this._showHelpAfterError=T,this}showSuggestionAfterError(T=!0){return this._showSuggestionAfterError=!!T,this}addCommand(T,$){if(!T._name)throw Error(`Command passed to .addCommand() must have a name
15
+ - specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=T._name;if($.noHelp||$.hidden)T._hidden=!0;return this._registerCommand(T),T.parent=this,T._checkForBrokenPassThrough(),this}createArgument(T,$){return new b$(T,$)}argument(T,$,R,z){let _=this.createArgument(T,$);if(typeof R==="function")_.default(z).argParser(R);else _.default(R);return this.addArgument(_),this}arguments(T){return T.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(T){let $=this.registeredArguments.slice(-1)[0];if($?.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(T.required&&T.defaultValue!==void 0&&T.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${T.name()}'`);return this.registeredArguments.push(T),this}helpCommand(T,$){if(typeof T==="boolean"){if(this._addImplicitHelpCommand=T,T&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let R=T??"help [command]",[,z,_]=R.match(/([^ ]+) *(.*)/),q=$??"display help for command",J=this.createCommand(z);if(J.helpOption(!1),_)J.arguments(_);if(q)J.description(q);if(this._addImplicitHelpCommand=!0,this._helpCommand=J,T||$)this._initCommandGroup(J);return this}addHelpCommand(T,$){if(typeof T!=="object")return this.helpCommand(T,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=T,this._initCommandGroup(T),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(T,$){let R=["preSubcommand","preAction","postAction"];if(!R.includes(T))throw Error(`Unexpected value for event passed to hook : '${T}'.
16
+ Expecting one of '${R.join("', '")}'`);if(this._lifeCycleHooks[T])this._lifeCycleHooks[T].push($);else this._lifeCycleHooks[T]=[$];return this}exitOverride(T){if(T)this._exitCallback=T;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(T,$,R){if(this._exitCallback)this._exitCallback(new g(T,$,R));U.exit(T)}action(T){let $=(R)=>{let z=this.registeredArguments.length,_=R.slice(0,z);if(this._storeOptionsAsProperties)_[z]=this;else _[z]=this.opts();return _.push(this),T.apply(this,_)};return this._actionHandler=$,this}createOption(T,$){return new BT(T,$)}_callParseArg(T,$,R,z){try{return T.parseArg($,R)}catch(_){if(_.code==="commander.invalidArgument"){let q=`${z} ${_.message}`;this.error(q,{exitCode:_.exitCode,code:_.code})}throw _}}_registerOption(T){let $=T.short&&this._findOption(T.short)||T.long&&this._findOption(T.long);if($){let R=T.long&&this._findOption(T.long)?T.long:T.short;throw Error(`Cannot add option '${T.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${R}'
17
+ - already used by option '${$.flags}'`)}this._initOptionGroup(T),this.options.push(T)}_registerCommand(T){let $=(z)=>{return[z.name()].concat(z.aliases())},R=$(T).find((z)=>this._findCommand(z));if(R){let z=$(this._findCommand(R)).join("|"),_=$(T).join("|");throw Error(`cannot add command '${_}' as already have command '${z}'`)}this._initCommandGroup(T),this.commands.push(T)}addOption(T){this._registerOption(T);let $=T.name(),R=T.attributeName();if(T.negate){let _=T.long.replace(/^--no-/,"--");if(!this._findOption(_))this.setOptionValueWithSource(R,T.defaultValue===void 0?!0:T.defaultValue,"default")}else if(T.defaultValue!==void 0)this.setOptionValueWithSource(R,T.defaultValue,"default");let z=(_,q,J)=>{if(_==null&&T.presetArg!==void 0)_=T.presetArg;let Q=this.getOptionValue(R);if(_!==null&&T.parseArg)_=this._callParseArg(T,_,Q,q);else if(_!==null&&T.variadic)_=T._collectValue(_,Q);if(_==null)if(T.negate)_=!1;else if(T.isBoolean()||T.optional)_=!0;else _="";this.setOptionValueWithSource(R,_,J)};if(this.on("option:"+$,(_)=>{let q=`error: option '${T.flags}' argument '${_}' is invalid.`;z(_,q,"cli")}),T.envVar)this.on("optionEnv:"+$,(_)=>{let q=`error: option '${T.flags}' value '${_}' from env '${T.envVar}' is invalid.`;z(_,q,"env")});return this}_optionEx(T,$,R,z,_){if(typeof $==="object"&&$ instanceof BT)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let q=this.createOption($,R);if(q.makeOptionMandatory(!!T.mandatory),typeof z==="function")q.default(_).argParser(z);else if(z instanceof RegExp){let J=z;z=(Q,G)=>{let Y=J.exec(Q);return Y?Y[0]:G},q.default(_).argParser(z)}else q.default(z);return this.addOption(q)}option(T,$,R,z){return this._optionEx({},T,$,R,z)}requiredOption(T,$,R,z){return this._optionEx({mandatory:!0},T,$,R,z)}combineFlagAndOptionalValue(T=!0){return this._combineFlagAndOptionalValue=!!T,this}allowUnknownOption(T=!0){return this._allowUnknownOption=!!T,this}allowExcessArguments(T=!0){return this._allowExcessArguments=!!T,this}enablePositionalOptions(T=!0){return this._enablePositionalOptions=!!T,this}passThroughOptions(T=!0){return this._passThroughOptions=!!T,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(T=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!T,this}getOptionValue(T){if(this._storeOptionsAsProperties)return this[T];return this._optionValues[T]}setOptionValue(T,$){return this.setOptionValueWithSource(T,$,void 0)}setOptionValueWithSource(T,$,R){if(this._storeOptionsAsProperties)this[T]=$;else this._optionValues[T]=$;return this._optionValueSources[T]=R,this}getOptionValueSource(T){return this._optionValueSources[T]}getOptionValueSourceWithGlobals(T){let $;return this._getCommandAndAncestors().forEach((R)=>{if(R.getOptionValueSource(T)!==void 0)$=R.getOptionValueSource(T)}),$}_prepareUserArgs(T,$){if(T!==void 0&&!Array.isArray(T))throw Error("first parameter to parse must be array or undefined");if($=$||{},T===void 0&&$.from===void 0){if(U.versions?.electron)$.from="electron";let z=U.execArgv??[];if(z.includes("-e")||z.includes("--eval")||z.includes("-p")||z.includes("--print"))$.from="eval"}if(T===void 0)T=U.argv;this.rawArgs=T.slice();let R;switch($.from){case void 0:case"node":this._scriptPath=T[1],R=T.slice(2);break;case"electron":if(U.defaultApp)this._scriptPath=T[1],R=T.slice(2);else R=T.slice(1);break;case"user":R=T.slice(0);break;case"eval":R=T.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",R}parse(T,$){this._prepareForParse();let R=this._prepareUserArgs(T,$);return this._parseCommand([],R),this}async parseAsync(T,$){this._prepareForParse();let R=this._prepareUserArgs(T,$);return await this._parseCommand([],R),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
18
+ - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(T,$,R){if(w.existsSync(T))return;let z=$?`searched for local subcommand relative to directory '${$}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",_=`'${T}' does not exist
19
+ - if '${R}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
20
+ - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
21
+ - ${z}`;throw Error(_)}_executeSubCommand(T,$){$=$.slice();let R=!1,z=[".js",".ts",".tsx",".mjs",".cjs"];function _(Y,Z){let X=E.resolve(Y,Z);if(w.existsSync(X))return X;if(z.includes(E.extname(Z)))return;let H=z.find((I)=>w.existsSync(`${X}${I}`));if(H)return`${X}${H}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let q=T._executableFile||`${this._name}-${T._name}`,J=this._executableDir||"";if(this._scriptPath){let Y;try{Y=w.realpathSync(this._scriptPath)}catch{Y=this._scriptPath}J=E.resolve(E.dirname(Y),J)}if(J){let Y=_(J,q);if(!Y&&!T._executableFile&&this._scriptPath){let Z=E.basename(this._scriptPath,E.extname(this._scriptPath));if(Z!==this._name)Y=_(J,`${Z}-${T._name}`)}q=Y||q}R=z.includes(E.extname(q));let Q;if(U.platform!=="win32")if(R)$.unshift(q),$=IT(U.execArgv).concat($),Q=u.spawn(U.argv[0],$,{stdio:"inherit"});else Q=u.spawn(q,$,{stdio:"inherit"});else this._checkForMissingExecutable(q,J,T._name),$.unshift(q),$=IT(U.execArgv).concat($),Q=u.spawn(U.execPath,$,{stdio:"inherit"});if(!Q.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((Z)=>{U.on(Z,()=>{if(Q.killed===!1&&Q.exitCode===null)Q.kill(Z)})});let G=this._exitCallback;Q.on("close",(Y)=>{if(Y=Y??1,!G)U.exit(Y);else G(new g(Y,"commander.executeSubCommandAsync","(close)"))}),Q.on("error",(Y)=>{if(Y.code==="ENOENT")this._checkForMissingExecutable(q,J,T._name);else if(Y.code==="EACCES")throw Error(`'${q}' not executable`);if(!G)U.exit(1);else{let Z=new g(1,"commander.executeSubCommandAsync","(error)");Z.nestedError=Y,G(Z)}}),this.runningCommand=Q}_dispatchSubcommand(T,$,R){let z=this._findCommand(T);if(!z)this.help({error:!0});z._prepareForParse();let _;return _=this._chainOrCallSubCommandHook(_,z,"preSubcommand"),_=this._chainOrCall(_,()=>{if(z._executableHandler)this._executeSubCommand(z,$.concat(R));else return z._parseCommand($,R)}),_}_dispatchHelpCommand(T){if(!T)this.help();let $=this._findCommand(T);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(T,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((T,$)=>{if(T.required&&this.args[$]==null)this.missingArgument(T.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let T=(R,z,_)=>{let q=z;if(z!==null&&R.parseArg){let J=`error: command-argument value '${z}' is invalid for argument '${R.name()}'.`;q=this._callParseArg(R,z,_,J)}return q};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((R,z)=>{let _=R.defaultValue;if(R.variadic){if(z<this.args.length){if(_=this.args.slice(z),R.parseArg)_=_.reduce((q,J)=>{return T(R,J,q)},R.defaultValue)}else if(_===void 0)_=[]}else if(z<this.args.length){if(_=this.args[z],R.parseArg)_=T(R,_,R.defaultValue)}$[z]=_}),this.processedArgs=$}_chainOrCall(T,$){if(T?.then&&typeof T.then==="function")return T.then(()=>$());return $()}_chainOrCallHooks(T,$){let R=T,z=[];if(this._getCommandAndAncestors().reverse().filter((_)=>_._lifeCycleHooks[$]!==void 0).forEach((_)=>{_._lifeCycleHooks[$].forEach((q)=>{z.push({hookedCommand:_,callback:q})})}),$==="postAction")z.reverse();return z.forEach((_)=>{R=this._chainOrCall(R,()=>{return _.callback(_.hookedCommand,this)})}),R}_chainOrCallSubCommandHook(T,$,R){let z=T;if(this._lifeCycleHooks[R]!==void 0)this._lifeCycleHooks[R].forEach((_)=>{z=this._chainOrCall(z,()=>{return _(this,$)})});return z}_parseCommand(T,$){let R=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),T=T.concat(R.operands),$=R.unknown,this.args=T.concat($),T&&this._findCommand(T[0]))return this._dispatchSubcommand(T[0],T.slice(1),$);if(this._getHelpCommand()&&T[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(T[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,T,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(R.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let z=()=>{if(R.unknown.length>0)this.unknownOption(R.unknown[0])},_=`command:${this.name()}`;if(this._actionHandler){z(),this._processArguments();let q;if(q=this._chainOrCallHooks(q,"preAction"),q=this._chainOrCall(q,()=>this._actionHandler(this.processedArgs)),this.parent)q=this._chainOrCall(q,()=>{this.parent.emit(_,T,$)});return q=this._chainOrCallHooks(q,"postAction"),q}if(this.parent?.listenerCount(_))z(),this._processArguments(),this.parent.emit(_,T,$);else if(T.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",T,$);if(this.listenerCount("command:*"))this.emit("command:*",T,$);else if(this.commands.length)this.unknownCommand();else z(),this._processArguments()}else if(this.commands.length)z(),this.help({error:!0});else z(),this._processArguments()}_findCommand(T){if(!T)return;return this.commands.find(($)=>$._name===T||$._aliases.includes(T))}_findOption(T){return this.options.find(($)=>$.is(T))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((T)=>{T.options.forEach(($)=>{if($.mandatory&&T.getOptionValue($.attributeName())===void 0)T.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let T=this.options.filter((R)=>{let z=R.attributeName();if(this.getOptionValue(z)===void 0)return!1;return this.getOptionValueSource(z)!=="default"});T.filter((R)=>R.conflictsWith.length>0).forEach((R)=>{let z=T.find((_)=>R.conflictsWith.includes(_.attributeName()));if(z)this._conflictingOption(R,z)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((T)=>{T._checkForConflictingLocalOptions()})}parseOptions(T){let $=[],R=[],z=$;function _(Y){return Y.length>1&&Y[0]==="-"}let q=(Y)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(Y))return!1;return!this._getCommandAndAncestors().some((Z)=>Z.options.map((X)=>X.short).some((X)=>/^-\d$/.test(X)))},J=null,Q=null,G=0;while(G<T.length||Q){let Y=Q??T[G++];if(Q=null,Y==="--"){if(z===R)z.push(Y);z.push(...T.slice(G));break}if(J&&(!_(Y)||q(Y))){this.emit(`option:${J.name()}`,Y);continue}if(J=null,_(Y)){let Z=this._findOption(Y);if(Z){if(Z.required){let X=T[G++];if(X===void 0)this.optionMissingArgument(Z);this.emit(`option:${Z.name()}`,X)}else if(Z.optional){let X=null;if(G<T.length&&(!_(T[G])||q(T[G])))X=T[G++];this.emit(`option:${Z.name()}`,X)}else this.emit(`option:${Z.name()}`);J=Z.variadic?Z:null;continue}}if(Y.length>2&&Y[0]==="-"&&Y[1]!=="-"){let Z=this._findOption(`-${Y[1]}`);if(Z){if(Z.required||Z.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${Z.name()}`,Y.slice(2));else this.emit(`option:${Z.name()}`),Q=`-${Y.slice(2)}`;continue}}if(/^--[^=]+=/.test(Y)){let Z=Y.indexOf("="),X=this._findOption(Y.slice(0,Z));if(X&&(X.required||X.optional)){this.emit(`option:${X.name()}`,Y.slice(Z+1));continue}}if(z===$&&_(Y)&&!(this.commands.length===0&&q(Y)))z=R;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&R.length===0){if(this._findCommand(Y)){$.push(Y),R.push(...T.slice(G));break}else if(this._getHelpCommand()&&Y===this._getHelpCommand().name()){$.push(Y,...T.slice(G));break}else if(this._defaultCommandName){R.push(Y,...T.slice(G));break}}if(this._passThroughOptions){z.push(Y,...T.slice(G));break}z.push(Y)}return{operands:$,unknown:R}}opts(){if(this._storeOptionsAsProperties){let T={},$=this.options.length;for(let R=0;R<$;R++){let z=this.options[R].attributeName();T[z]=z===this._versionOptionName?this._version:this[z]}return T}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((T,$)=>Object.assign(T,$.opts()),{})}error(T,$){if(this._outputConfiguration.outputError(`${T}
22
+ `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
23
+ `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
24
+ `),this.outputHelp({error:!0});let R=$||{},z=R.exitCode||1,_=R.code||"commander.error";this._exit(z,_,T)}_parseOptionsEnv(){this.options.forEach((T)=>{if(T.envVar&&T.envVar in U.env){let $=T.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(T.required||T.optional)this.emit(`optionEnv:${T.name()}`,U.env[T.envVar]);else this.emit(`optionEnv:${T.name()}`)}})}_parseOptionsImplied(){let T=new g$(this.options),$=(R)=>{return this.getOptionValue(R)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(R))};this.options.filter((R)=>R.implied!==void 0&&$(R.attributeName())&&T.valueFromOption(this.getOptionValue(R.attributeName()),R)).forEach((R)=>{Object.keys(R.implied).filter((z)=>!$(z)).forEach((z)=>{this.setOptionValueWithSource(z,R.implied[z],"implied")})})}missingArgument(T){let $=`error: missing required argument '${T}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(T){let $=`error: option '${T.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(T){let $=`error: required option '${T.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(T,$){let R=(q)=>{let J=q.attributeName(),Q=this.getOptionValue(J),G=this.options.find((Z)=>Z.negate&&J===Z.attributeName()),Y=this.options.find((Z)=>!Z.negate&&J===Z.attributeName());if(G&&(G.presetArg===void 0&&Q===!1||G.presetArg!==void 0&&Q===G.presetArg))return G;return Y||q},z=(q)=>{let J=R(q),Q=J.attributeName();if(this.getOptionValueSource(Q)==="env")return`environment variable '${J.envVar}'`;return`option '${J.flags}'`},_=`error: ${z(T)} cannot be used with ${z($)}`;this.error(_,{code:"commander.conflictingOption"})}unknownOption(T){if(this._allowUnknownOption)return;let $="";if(T.startsWith("--")&&this._showSuggestionAfterError){let z=[],_=this;do{let q=_.createHelp().visibleOptions(_).filter((J)=>J.long).map((J)=>J.long);z=z.concat(q),_=_.parent}while(_&&!_._enablePositionalOptions);$=jT(T,z)}let R=`error: unknown option '${T}'${$}`;this.error(R,{code:"commander.unknownOption"})}_excessArguments(T){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,R=$===1?"":"s",_=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${R} but got ${T.length}.`;this.error(_,{code:"commander.excessArguments"})}unknownCommand(){let T=this.args[0],$="";if(this._showSuggestionAfterError){let z=[];this.createHelp().visibleCommands(this).forEach((_)=>{if(z.push(_.name()),_.alias())z.push(_.alias())}),$=jT(T,z)}let R=`error: unknown command '${T}'${$}`;this.error(R,{code:"commander.unknownCommand"})}version(T,$,R){if(T===void 0)return this._version;this._version=T,$=$||"-V, --version",R=R||"output the version number";let z=this.createOption($,R);return this._versionOptionName=z.attributeName(),this._registerOption(z),this.on("option:"+z.name(),()=>{this._outputConfiguration.writeOut(`${T}
25
+ `),this._exit(0,"commander.version",T)}),this}description(T,$){if(T===void 0&&$===void 0)return this._description;if(this._description=T,$)this._argsDescription=$;return this}summary(T){if(T===void 0)return this._summary;return this._summary=T,this}alias(T){if(T===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(T===$._name)throw Error("Command alias can't be the same as its name");let R=this.parent?._findCommand(T);if(R){let z=[R.name()].concat(R.aliases()).join("|");throw Error(`cannot add alias '${T}' to command '${this.name()}' as already have command '${z}'`)}return $._aliases.push(T),this}aliases(T){if(T===void 0)return this._aliases;return T.forEach(($)=>this.alias($)),this}usage(T){if(T===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((R)=>{return v$(R)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=T,this}name(T){if(T===void 0)return this._name;return this._name=T,this}helpGroup(T){if(T===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=T,this}commandsGroup(T){if(T===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=T,this}optionsGroup(T){if(T===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=T,this}_initOptionGroup(T){if(this._defaultOptionGroup&&!T.helpGroupHeading)T.helpGroup(this._defaultOptionGroup)}_initCommandGroup(T){if(this._defaultCommandGroup&&!T.helpGroup())T.helpGroup(this._defaultCommandGroup)}nameFromFilename(T){return this._name=E.basename(T,E.extname(T)),this}executableDir(T){if(T===void 0)return this._executableDir;return this._executableDir=T,this}helpInformation(T){let $=this.createHelp(),R=this._getOutputContext(T);$.prepareContext({error:R.error,helpWidth:R.helpWidth,outputHasColors:R.hasColors});let z=$.formatHelp(this,$);if(R.hasColors)return z;return this._outputConfiguration.stripColor(z)}_getOutputContext(T){T=T||{};let $=!!T.error,R,z,_;if($)R=(J)=>this._outputConfiguration.writeErr(J),z=this._outputConfiguration.getErrHasColors(),_=this._outputConfiguration.getErrHelpWidth();else R=(J)=>this._outputConfiguration.writeOut(J),z=this._outputConfiguration.getOutHasColors(),_=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(J)=>{if(!z)J=this._outputConfiguration.stripColor(J);return R(J)},hasColors:z,helpWidth:_}}outputHelp(T){let $;if(typeof T==="function")$=T,T=void 0;let R=this._getOutputContext(T),z={error:R.error,write:R.write,command:this};this._getCommandAndAncestors().reverse().forEach((q)=>q.emit("beforeAllHelp",z)),this.emit("beforeHelp",z);let _=this.helpInformation({error:R.error});if($){if(_=$(_),typeof _!=="string"&&!Buffer.isBuffer(_))throw Error("outputHelp callback must return a string or a Buffer")}if(R.write(_),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",z),this._getCommandAndAncestors().forEach((q)=>q.emit("afterAllHelp",z))}helpOption(T,$){if(typeof T==="boolean"){if(T){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(T??"-h, --help",$??"display help for command"),T||$)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(T){return this._helpOption=T,this._initOptionGroup(T),this}help(T){this.outputHelp(T);let $=Number(U.exitCode??0);if($===0&&T&&typeof T!=="function"&&T.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(T,$){let R=["beforeAll","before","after","afterAll"];if(!R.includes(T))throw Error(`Unexpected value for position to addHelpText.
26
+ Expecting one of '${R.join("', '")}'`);let z=`${T}Help`;return this.on(z,(_)=>{let q;if(typeof $==="function")q=$({error:_.error,command:_.command});else q=$;if(q)_.write(`${q}
27
+ `)}),this}_outputHelpIfRequested(T){let $=this._getHelpOption();if($&&T.find((z)=>$.is(z)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function IT(T){return T.map(($)=>{if(!$.startsWith("--inspect"))return $;let R,z="127.0.0.1",_="9229",q;if((q=$.match(/^(--inspect(-brk)?)$/))!==null)R=q[1];else if((q=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(R=q[1],/^\d+$/.test(q[3]))_=q[3];else z=q[3];else if((q=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)R=q[1],z=q[3],_=q[4];if(R&&_!=="0")return`${R}=${z}:${parseInt(_)+1}`;return $})}function c(){if(U.env.NO_COLOR||U.env.FORCE_COLOR==="0"||U.env.FORCE_COLOR==="false")return!1;if(U.env.FORCE_COLOR||U.env.CLICOLOR_FORCE!==void 0)return!0;return}c$.Command=l;c$.useColor=c});var DT=M((i$)=>{var{Argument:VT}=A(),{Command:m}=WT(),{CommanderError:d$,InvalidArgumentError:NT}=F(),{Help:p$}=v(),{Option:PT}=h();i$.program=new m;i$.createCommand=(T)=>new m(T);i$.createOption=(T,$)=>new PT(T,$);i$.createArgument=(T,$)=>new VT(T,$);i$.Command=m;i$.Option=PT;i$.Argument=VT;i$.Help=p$;i$.CommanderError=d$;i$.InvalidArgumentError=NT;i$.InvalidOptionArgumentError=NT});import kT from"node:fs";function _R(){try{return kT.statSync("/.dockerenv"),!0}catch{return!1}}function qR(){try{return kT.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function p(){if(d===void 0)d=_R()||qR();return d}var d;var AT=()=>{};import JR from"node:fs";function W(){if(i===void 0)i=QR()||p();return i}var i,QR=()=>{try{return JR.statSync("/run/.containerenv"),!0}catch{return!1}};var s=S(()=>{AT()});import OT from"node:process";import YR from"node:os";import r from"node:fs";var wT=()=>{if(OT.platform!=="linux")return!1;if(YR.release().toLowerCase().includes("microsoft")){if(W())return!1;return!0}try{if(r.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!W()}catch{}if(r.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||r.existsSync("/run/WSL"))return!W();return!1},L;var t=S(()=>{s();L=OT.env.__IS_WSL_TEST__?wT:wT()});import CT from"node:process";import fT,{constants as ZR}from"node:fs/promises";var GR,XR=async()=>{return`${await GR()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`},n=async()=>{if(L)return XR();return`${CT.env.SYSTEMROOT||CT.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`};var xT=S(()=>{t();t();GR=(()=>{let $;return async function(){if($)return $;let R="/etc/wsl.conf",z=!1;try{await fT.access(R,ZR.F_OK),z=!0}catch{}if(!z)return"/mnt/";let _=await fT.readFile(R,{encoding:"utf8"}),q=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(_);if(!q)return"/mnt/";return $=q.groups.mountPoint.trim(),$=$.endsWith("/")?$:`${$}/`,$}})()});function B(T,$,R){let z=(_)=>Object.defineProperty(T,$,{value:_,enumerable:!0,writable:!0});return Object.defineProperty(T,$,{configurable:!0,enumerable:!0,get(){let _=R();return z(_),_},set(_){z(_)}}),T}import{promisify as HR}from"node:util";import SR from"node:process";import{execFile as KR}from"node:child_process";async function a(){if(SR.platform!=="darwin")throw Error("macOS only");let{stdout:T}=await ER("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),R=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(T)?.groups.id??"com.apple.Safari";if(R==="com.apple.safari")return"com.apple.Safari";return R}var ER;var bT=S(()=>{ER=HR(KR)});import MR from"node:process";import{promisify as LR}from"node:util";import{execFile as BR,execFileSync as u0}from"node:child_process";async function vT(T,{humanReadableOutput:$=!0,signal:R}={}){if(MR.platform!=="darwin")throw Error("macOS only");let z=$?[]:["-ss"],_={};if(R)_.signal=R;let{stdout:q}=await jR("osascript",["-e",T,z],_);return q.trim()}var jR;var hT=S(()=>{jR=LR(BR)});async function o(T){return vT(`tell application "Finder" to set app_path to application file id "${T}" as string
28
+ tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}var uT=S(()=>{hT()});import{promisify as IR}from"node:util";import{execFile as WR}from"node:child_process";async function e(T=VR){let{stdout:$}=await T("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),R=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec($);if(!R)throw new gT(`Cannot find Windows browser in stdout: ${JSON.stringify($)}`);let{id:z}=R.groups,_=z.lastIndexOf("."),q=z.lastIndexOf("-"),J=_===-1?void 0:z.slice(0,_),Q=q===-1?void 0:z.slice(0,q);return O[z]??O[J]??O[Q]??{name:z,id:z}}var VR,O,p0,gT;var cT=S(()=>{VR=IR(WR),O={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},p0=new Map(Object.entries(O));gT=class gT extends Error{}});import{promisify as NR}from"node:util";import TT from"node:process";import{execFile as PR}from"node:child_process";async function $T(){if(TT.platform==="darwin"){let T=await a();return{name:await o(T),id:T}}if(TT.platform==="linux"){let{stdout:T}=await DR("xdg-mime",["query","default","x-scheme-handler/http"]),$=T.trim();return{name:FR($.replace(/.desktop$/,"").replace("-"," ")),id:$}}if(TT.platform==="win32")return e();throw Error("Only macOS, Linux, and Windows are supported")}var DR,FR=(T)=>T.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,($)=>$.toUpperCase());var lT=S(()=>{bT();uT();cT();DR=NR(PR)});var nT={};U$(nT,{openApp:()=>xR,default:()=>bR,apps:()=>j});import RT from"node:process";import{Buffer as sT}from"node:buffer";import rT from"node:path";import{fileURLToPath as yR}from"node:url";import{promisify as kR}from"node:util";import tT from"node:child_process";import AR,{constants as wR}from"node:fs/promises";async function CR(){let T=await n(),$=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,R=sT.from($,"utf16le").toString("base64"),{stdout:z}=await OR(T,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",R],{encoding:"utf8"}),_=z.trim(),q={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return q[_]?{id:q[_]}:{}}function iT(T){if(typeof T==="string"||Array.isArray(T))return T;let{[dT]:$}=T;if(!$)throw Error(`${dT} is not supported`);return $}function C({[V]:T},{wsl:$}){if($&&L)return iT($);if(!T)throw Error(`${V} is not supported`);return iT(T)}var OR,zT,mT,V,dT,pT=async(T,$)=>{let R;for(let z of T)try{return await $(z)}catch(_){R=_}throw R},y=async(T)=>{if(T={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...T},Array.isArray(T.app))return pT(T.app,(Q)=>y({...T,app:Q}));let{name:$,arguments:R=[]}=T.app??{};if(R=[...R],Array.isArray($))return pT($,(Q)=>y({...T,app:{name:Q,arguments:R}}));if($==="browser"||$==="browserPrivate"){let Q={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},G={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},Y=L?await CR():await $T();if(Y.id in Q){let Z=Q[Y.id];if($==="browserPrivate")R.push(G[Z]);return y({...T,app:{name:j[Z],arguments:R}})}throw Error(`${Y.name} is not supported as a default browser`)}let z,_=[],q={};if(V==="darwin"){if(z="open",T.wait)_.push("--wait-apps");if(T.background)_.push("--background");if(T.newInstance)_.push("--new");if($)_.push("-a",$)}else if(V==="win32"||L&&!W()&&!$){if(z=await n(),_.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),!L)q.windowsVerbatimArguments=!0;let Q=["Start"];if(T.wait)Q.push("-Wait");if($){if(Q.push(`"\`"${$}\`""`),T.target)R.push(T.target)}else if(T.target)Q.push(`"${T.target}"`);if(R.length>0)R=R.map((G)=>`"\`"${G}\`""`),Q.push("-ArgumentList",R.join(","));T.target=sT.from(Q.join(" "),"utf16le").toString("base64")}else{if($)z=$;else{let Q=!zT||zT==="/",G=!1;try{await AR.access(mT,wR.X_OK),G=!0}catch{}z=RT.versions.electron??(V==="android"||Q||!G)?"xdg-open":mT}if(R.length>0)_.push(...R);if(!T.wait)q.stdio="ignore",q.detached=!0}if(V==="darwin"&&R.length>0)_.push("--args",...R);if(T.target)_.push(T.target);let J=tT.spawn(z,_,q);if(T.wait)return new Promise((Q,G)=>{J.once("error",G),J.once("close",(Y)=>{if(!T.allowNonzeroExitCode&&Y>0){G(Error(`Exited with code ${Y}`));return}Q(J)})});return J.unref(),J},fR=(T,$)=>{if(typeof T!=="string")throw TypeError("Expected a `target`");return y({...$,target:T})},xR=(T,$)=>{if(typeof T!=="string"&&!Array.isArray(T))throw TypeError("Expected a valid `name`");let{arguments:R=[]}=$??{};if(R!==void 0&&R!==null&&!Array.isArray(R))throw TypeError("Expected `appArguments` as Array type");return y({...$,app:{name:T,arguments:R}})},j,bR;var aT=S(()=>{xT();lT();s();OR=kR(tT.execFile),zT=rT.dirname(yR(import.meta.url)),mT=rT.join(zT,"xdg-open"),{platform:V,arch:dT}=RT;j={};B(j,"chrome",()=>C({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));B(j,"brave",()=>C({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));B(j,"firefox",()=>C({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));B(j,"edge",()=>C({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));B(j,"browser",()=>"browser");B(j,"browserPrivate",()=>"browserPrivate");bR=fR});var _T=M((U5,eT)=>{var __filename="/home/pc/Desktop/opencode-sandbox/agent-vision/node_modules/@heyputer/puter.js/src/init.cjs",{readFileSync:vR}=K("node:fs"),oT=K("node:vm"),{resolve:hR}=K("node:path"),{IncomingMessage:X5}=K("node:http"),uR=(aT(),X$(nT)),gR=(T)=>{let $={PUTER_API_ORIGIN:globalThis.PUTER_API_ORIGIN,PUTER_ORIGIN:globalThis.PUTER_ORIGIN};Object.getOwnPropertyNames(globalThis).forEach((_)=>{try{$[_]=globalThis[_]}catch{}}),$.globalThis=$;let R=vR(`${hR(__filename,"..")}/../dist/puter.cjs`,"utf8"),z=oT.createContext($);if(oT.runInNewContext(R,z),T)$.puter.setAuthToken(T);return $.puter},cR=(T="https://puter.com")=>{let $=K("http");return new Promise((R)=>{let z=function(q,J){J.writeHead(200,{"Content-Type":"text/html"}),J.end(`<!DOCTYPE html>
29
+ <html lang="en">
30
+ <head>
31
+ <meta charset="UTF-8">
32
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
33
+ <title>Authentication Successful - Puter</title>
34
+ <style>
35
+ * {
36
+ margin: 0;
37
+ padding: 0;
38
+ box-sizing: border-box;
39
+ }
40
+ body {
41
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
42
+ background: #404C71;
43
+ min-height: 100vh;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ }
48
+ .container {
49
+ background: white;
50
+ border-radius: 16px;
51
+ padding: 48px;
52
+ text-align: center;
53
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
54
+ max-width: 420px;
55
+ margin: 20px;
56
+ }
57
+ .checkmark {
58
+ width: 80px;
59
+ height: 80px;
60
+ background: linear-gradient(135deg, #00c853 0%, #00e676 100%);
61
+ border-radius: 50%;
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ margin: 0 auto 24px;
66
+ animation: scaleIn 0.5s ease-out;
67
+ }
68
+ .checkmark svg {
69
+ width: 40px;
70
+ height: 40px;
71
+ stroke: white;
72
+ stroke-width: 3;
73
+ fill: none;
74
+ animation: drawCheck 0.6s ease-out 0.3s forwards;
75
+ stroke-dasharray: 50;
76
+ stroke-dashoffset: 50;
77
+ }
78
+ @keyframes scaleIn {
79
+ 0% { transform: scale(0); }
80
+ 50% { transform: scale(1.2); }
81
+ 100% { transform: scale(1); }
82
+ }
83
+ @keyframes drawCheck {
84
+ to { stroke-dashoffset: 0; }
85
+ }
86
+ h1 {
87
+ color: #1a1a2e;
88
+ font-size: 24px;
89
+ font-weight: 600;
90
+ margin-bottom: 12px;
91
+ }
92
+ p {
93
+ color: #64748b;
94
+ font-size: 16px;
95
+ line-height: 1.6;
96
+ }
97
+ .puter-logo {
98
+ margin-top: 32px;
99
+ opacity: 0.6;
100
+ font-size: 14px;
101
+ color: #94a3b8;
102
+ }
103
+ </style>
104
+ </head>
105
+ <body>
106
+ <div class="container">
107
+ <div class="checkmark">
108
+ <svg viewBox="0 0 24 24">
109
+ <polyline points="20 6 9 17 4 12"></polyline>
110
+ </svg>
111
+ </div>
112
+ <h1>Authentication Successful</h1>
113
+ <p>You're all set! You may now close this window and return to your terminal.</p>
114
+ <div class="puter-logo">Powered by Puter</div>
115
+ </div>
116
+ </body>
117
+ </html>`),R(new URL(q.url,"http://localhost/").searchParams.get("token"))};$.createServer(z).listen(0,function(){let q=`${T}/?action=authme&redirectURL=${encodeURIComponent("http://localhost:")+this.address().port}`;uR.default(q)})})};eT.exports={init:gR,getAuthToken:cR}});var FT=x(DT(),1),{program:q0,createCommand:J0,createArgument:Q0,createOption:Y0,CommanderError:Z0,InvalidArgumentError:G0,InvalidOptionArgumentError:X0,Command:yT,Argument:U0,Option:H0,Help:S0}=FT.default;var z$=x(_T(),1);import{readFileSync as sR,existsSync as rR}from"fs";import{existsSync as JT,mkdirSync as lR,readFileSync as mR,writeFileSync as dR,unlinkSync as pR}from"fs";import{join as k}from"path";function iR(){if(process.platform==="win32")return k(process.env.APPDATA||process.env.USERPROFILE||"","agent-vision");if(process.platform==="darwin")return k(process.env.HOME||"","Library","Application Support","agent-vision");return process.env.XDG_CONFIG_HOME?k(process.env.XDG_CONFIG_HOME,"agent-vision"):k(process.env.HOME||"",".config","agent-vision")}var qT=iR(),N=k(qT,"token");function QT(){if(process.env.PUTER_TOKEN)return process.env.PUTER_TOKEN;if(JT(N)){let T=mR(N,"utf-8").trim();if(T&&T.length>10)return T}return null}function T$(T){if(!JT(qT))lR(qT,{recursive:!0});dR(N,T,{mode:384})}function $$(){if(JT(N))pR(N)}function R$(){return QT()!==null}function f(){return N}var tR=`Error: No authentication token found.
118
+
119
+ To authenticate, run:
120
+ agent-vision login
121
+
122
+ For CI/CD or automation, set the PUTER_TOKEN environment variable:
123
+ PUTER_TOKEN=xxx agent-vision analyze image.png
124
+
125
+ Get your token from: https://puter.com`;async function _$(T,$,R={}){let z=(H)=>R.debug&&console.error(`[${new Date().toISOString()}] ${H}`);if(!rR(T))console.error(`Error: Image not found: ${T}`),process.exit(1);let _=QT();if(!_)console.error(tR),process.exit(1);z("Starting..."),z("Initializing puter...");let q=z$.init(_);z("Reading image...");let J=sR(T),Q=T.toLowerCase().split(".").pop(),Z=`data:${{png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"}[Q||""]||"image/png"};base64,${J.toString("base64")}`,X=R.model||"kimi-k2.5";z(`Using model: ${X}`),z("Calling puter.ai.chat...");try{let H=await q.ai.chat($,Z,{model:X});z("Got response"),console.log(H?.message?.content||H),z("Exiting"),process.exit(0)}catch(H){console.error("Error:",H?.message||H),process.exit(1)}}var q$=x(_T(),1);async function J$(){console.error("Opening browser for authentication..."),console.error("Please complete the login in your browser.");try{let T=await q$.getAuthToken();if(!T)console.error("Error: No token received from authentication."),process.exit(1);T$(T),console.error("Authentication successful!"),console.error("Token saved to:",f())}catch(T){console.error("Authentication failed:",T?.message||T),process.exit(1)}}function Q$(){if(!R$()){console.error("No stored token found.");return}$$(),console.error("Token removed from:",f()),console.error("Logged out successfully.")}var P=new yT;P.name("agent-vision").description("Analyze images using AI vision (powered by Puter + Kimi K2.5)").version("0.0.1");P.command("analyze <image>").description("Analyze an image with AI vision").argument("[prompt]","custom prompt","Describe what you see in this image.").option("-d, --debug","enable debug output",!1).option("-m, --model <model>","AI model to use","kimi-k2.5").action(async(T,$,R)=>{await _$(T,$,R)});P.command("login").description("Authenticate with Puter (opens browser)").action(async()=>{await J$()});P.command("logout").description("Remove stored authentication token").action(()=>{Q$()});P.addHelpText("after",`
126
+ Environment:
127
+ PUTER_TOKEN Set token directly for CI/CD (skips stored token)
128
+
129
+ Examples:
130
+ $ agent-vision login
131
+ $ agent-vision analyze screenshot.png
132
+ $ agent-vision analyze photo.jpg "What objects are in this image?"
133
+ $ PUTER_TOKEN=xxx agent-vision analyze diagram.png "Explain this diagram"
134
+ $ agent-vision analyze --debug photo.jpg
135
+
136
+ Powered by Puter (https://puter.com) and Kimi K2.5 AI.
137
+ Note: Kimi K2.5 is currently FREE on Puter for a limited time!
138
+ `);P.parse();
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "agent-vision",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "Analyze images using AI vision (powered by Puter + Kimi K2.5)",
6
+ "bin": {
7
+ "agent-vision": "./bin/agent-vision.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "files": [
11
+ "bin",
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "bun build src/index.ts --outdir dist --target node --minify",
16
+ "dev": "bun run src/index.ts",
17
+ "prepublishOnly": "bun run build"
18
+ },
19
+ "keywords": [
20
+ "cli",
21
+ "vision",
22
+ "ai",
23
+ "image-analysis",
24
+ "puter",
25
+ "kimi"
26
+ ],
27
+ "author": "",
28
+ "license": "MIT",
29
+ "engines": {
30
+ "node": ">=18"
31
+ },
32
+ "devDependencies": {
33
+ "@types/bun": "latest",
34
+ "@types/node": "^22.0.0",
35
+ "typescript": "^5"
36
+ },
37
+ "dependencies": {
38
+ "@heyputer/puter.js": "^2.2.10",
39
+ "commander": "^14.0.3"
40
+ }
41
+ }