@talos-org/cli 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import {select,input}from'@inquirer/prompts';import k from'cli-spinners';import {execa}from'execa';import {readFile}from'fs/promises';import $ from'ora';import F from'path';import a from'zod';import B from'os';var v=new Command("hello").description("Say hello to the user!").option("-n, --name <name>","Name to greet","World").action(n=>N(n));async function N(n){console.log(`Hello, ${n.name}`);}var b={version:"0.1.17"};var L=a.object({name:a.string(),options:a.array(a.string()),args:a.array(a.string()),action:a.string()}),R=a.object({version:a.string(),commands:a.array(L)}),w=a.object({name:a.string(),body:a.array(R)});var C=F.join(B.homedir(),"Documents","talos","commands");var A=new Command("e").description("Execute a command").argument("<name>","Name of the command").argument("[extras...]","Additional arguments and options").allowUnknownOption().passThroughOptions().action((n,r,i)=>q(n,i,r));async function q(n,r,i){let h=await select({message:"Where does Talos need to look for the command?",choices:[{name:"Local",value:"local"},{name:"Internet",value:"internet"}]});await U(n,h,{...r,extras:i});}async function U(n,r,i){r==="local"?await K(n,i):r==="internet"&&console.log(`Looking for ${n} on the internet...`);}async function K(n,r={}){let i=$({text:"Looking for command locally...",spinner:{frames:k.circleHalves.frames,interval:80}}).start();await new Promise(e=>setTimeout(e,1e3));let h=F.join(C,`${n}.json`),E=await readFile(h,"utf-8"),P=JSON.parse(E),m=w.parse(P);if(!m){i.fail("Command not found locally.");return}if(i.succeed("Command found locally."),m.body.length<=0){i.fail("No versions found for this command.");return}let l=m.body[0];m.body.length>1&&(l=await select({message:"Select a command version to execute:",choices:m.body.map(c=>({name:c.version,value:c}))})||l);let p=[],T=Array.isArray(r.extras)?r.extras:[],W=new Set(l.commands.flatMap(e=>e.options)),f=H(T,W),z=new Set(f.flags.map(e=>e.flag));for(let e of f.flags)p.push(e.flag),e.value!==null&&p.push(e.value);p.push(...f.unknownTokens),p.push(...f.positionals);for(let e of l.commands){let c=[],g=e.args.filter(o=>x(o)),d=e.args.filter(o=>!x(o));for(let o of g){let t=o.replace(/[\[\]<>]/g,"").trim()||"value",s=await input({message:`What argument are you gonna send? (${t})`});c.push(s);}c.unshift(...d);let u=[...p];if(e.options.length>0&&!e.options.some(t=>z.has(t))){let t=e.options[0],s=await input({message:`What do you want to use for "${t}" argument?`,default:""});s!==""&&u.push(t,s);}for(let o of l.commands){let t=$({text:`Executing command: ${o.name}...`,spinner:{frames:k.circleHalves.frames,interval:80}}).start();try{t.stop();let s=[...c,...u];console.log(`
3
- $ ${o.action} ${s.join(" ")}
4
- `),await execa(o.action,s,{stdio:"inherit"}),console.log(),t.succeed(`Executed command: ${o.name}`);}catch(s){t.fail(`Failed to execute command: ${o.name}`),s instanceof Error&&console.error(`Error: ${s.message}`);}}}function x(e){return /^<[^>]+>$/.test(e)||/^\[[^\]]+\]$/.test(e)}function H(e,c){let g=[],d=[],u=[];for(let o=0;o<e.length;o+=1){let t=e[o];if(t.startsWith("-")){let s=e[o+1],y=s!==void 0&&!s.startsWith("-"),I=y?s:null;c.has(t)?g.push({flag:t,value:I}):(d.push(t),y&&d.push(s)),y&&(o+=1);continue}u.push(t);}return {flags:g,unknownTokens:d,positionals:u}}}process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function X(){let n=new Command().name("talos").description("Manage everything.").version(b.version,"-v, --version","display the version number").enablePositionalOptions();n.addCommand(v),n.addCommand(A),n.parse();}X();//# sourceMappingURL=index.js.map
2
+ import {Command}from'commander';import {select,input,confirm}from'@inquirer/prompts';import A from'cli-spinners';import {execa}from'execa';import F from'ora';import*as d from'fs/promises';import I from'os';import y from'path';import r,{z}from'zod';var b=new Command("hello").description("Say hello to the user!").option("-n, --name <name>","Name to greet","World").action(e=>N(e));async function N(e){console.log(`Hello, ${e.name}`);}var C={version:"0.1.19"};var W=r.object({name:r.string(),options:r.array(r.string()),args:r.array(r.string()),action:r.string()}),H=r.object({label:r.string().optional(),version:r.string(),commands:r.array(W)}),$=r.object({name:r.string(),body:r.array(H)});var V=".talos";function k(){return y.join(I.homedir(),V)}function B(e){return y.join(k(),e)}async function E(e){try{return await d.access(e),(await d.stat(e)).isDirectory()}catch{return false}}async function x(e,n=false){let t=k();if(!await E(t)){if(n&&!await confirm({message:`The .talos directory does not exist in your home folder. Do you want to create it at ${t}?`,default:true}))return null;await d.mkdir(t,{recursive:true});}{let o=B(e);if(!await E(o)){if(n&&!await confirm({message:`The .talos/${e} directory does not exist. Do you want to create it?`,default:true}))return null;await d.mkdir(o,{recursive:true});}return o}}async function P(e){let n=await x("commands",false);if(!n)throw new Error("Commands directory is not available");let t=y.join(n,`${e}.json`);try{await d.access(t);}catch{return}try{let o=await d.readFile(t,"utf-8"),a=JSON.parse(o);return $.parse(a)}catch(o){throw o instanceof SyntaxError?new Error(`Command file "${e}.json" contains invalid JSON: ${o.message}`):o instanceof z.ZodError?new Error(`Command file "${e}.json" has invalid schema: ${o.issues.map(a=>a.message).join(", ")}`):new Error(`Failed to read command file "${e}.json": ${o instanceof Error?o.message:String(o)}`)}}function w(e){return /^<[^>]+>$/.test(e)||/^\[[^\]]+\]$/.test(e)}function T(e,n){let t=[],o=[],a=[];for(let c=0;c<e.length;c+=1){let u=e[c];if(u.startsWith("-")){let g=e[c+1],p=g!==void 0&&!g.startsWith("-"),h=p?g:null;n.has(u)?t.push({flag:u,value:h}):(o.push(u),p&&o.push(g)),p&&(c+=1);continue}a.push(u);}return {flags:t,unknownTokens:o,positionals:a}}var O=new Command("e").description("Execute a command").argument("<name>","Name of the command").argument("[extras...]","Additional arguments and options").allowUnknownOption().passThroughOptions().action((e,n,t)=>q(e,t,n));async function q(e,n,t){let o=await select({message:"Where does Talos need to look for the command?",choices:[{name:"Local",value:"local"},{name:"Internet",value:"internet"}]});await U(e,o,{...n,extras:t});}async function U(e,n,t){if(n==="local"){if(!await x("commands",true)){console.error(`
3
+ \u274C Cannot proceed without the .talos/commands directory.`);return}await Z(e,t);}n==="internet"&&console.log(`Looking for ${e} on the internet...`);}async function Z(e,n={}){let t=F({text:"Looking for command locally...",spinner:{frames:A.circleHalves.frames,interval:80}}).start();await new Promise(o=>setTimeout(o,1e3));try{let o=await P(e);if(!o){t.fail(`Command "${e}" not found.`);return}if(t.succeed(`Command "${e}" found locally.`),o.body.length<=0){t.fail(`Command "${e}" exists but has no registered versions.`);return}let a=o.body[0];o.body.length>1&&(a=await select({message:"Select a command version to execute:",choices:o.body.map(f=>({name:`${f.version}${f.label?` - ${f.label}`:""}`,value:f}))})||a);let c=[],u=Array.isArray(n.extras)?n.extras:[],g=new Set(a.commands.flatMap(s=>s.options)),p=T(u,g),h=new Set(p.flags.map(s=>s.flag));for(let s of p.flags)c.push(s.flag),s.value!==null&&c.push(s.value);c.push(...p.unknownTokens),c.push(...p.positionals);for(let s of a.commands){let f=[],z=s.args.filter(i=>w(i)),D=s.args.filter(i=>!w(i));for(let i of z){let m=i.replace(/[\[\]<>]/g,"").trim()||"value",l=await input({message:`What argument are you gonna send? (${m})`});f.push(l);}f.unshift(...D);let v=[...c];if(s.options.length>0&&!s.options.some(m=>h.has(m))){let m=s.options[0],l=await input({message:`What do you want to use for "${m}" argument?`,default:""});l!==""&&v.push(m,l);}for(let i of a.commands){let m=F({text:`Executing command: ${i.name}...`,spinner:{frames:A.circleHalves.frames,interval:80}}).start();try{m.stop();let l=[...f,...v];console.log(`
4
+ $ ${i.action} ${l.join(" ")}
5
+ `),await execa(i.action,l,{stdio:"inherit"}),console.log(),m.succeed(`Executed command: ${i.name}`);}catch(l){m.fail(`Failed to execute command: ${i.name}`),l instanceof Error&&console.error(`Error: ${l.message}`);}}}}catch(o){t.fail("Failed to load command"),o instanceof Error?console.error(`
6
+ \u274C ${o.message}
7
+ `):console.error(`
8
+ \u274C An unexpected error occurred: ${String(o)}
9
+ `);}}process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function Q(){let e=new Command().name("talos").description("Manage everything.").version(C.version,"-v, --version","display the version number").enablePositionalOptions();e.addCommand(b),e.addCommand(O),e.parse();}Q();//# sourceMappingURL=index.js.map
5
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/hello.ts","../package.json","../src/types/schema.ts","../src/utils/commandsPath.ts","../src/commands/e.ts","../src/index.ts"],"names":["helloCommand","Command","opts","helloHandler","options","package_default","CommandSchema","z","CommandBodySchema","RegistrySchema","commandsPath","path","os","executeCommand","name","extras","executeHandler","environment","select","findCommand","findLocalCommand","cliOptions","searchCommandSpinner","ora","cliSpinners","resolve","filePath","raw","readFile","parsedCommand","file","selectedVersion","cmd","baseCliArgs","knownOptions","parsed","parseExtras","existingFlags","item","filledArgs","placeholders","arg","isPlaceholder","defaults","placeholder","label","value","input","cmdCliArgs","option","primaryOption","commandSpinner","mergedArgs","execa","error","flags","unknownTokens","positionals","i","token","next","hasValue","main","program"],"mappings":"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","file":"index.js","sourcesContent":["import { Command } from \"commander\";\n\nexport const helloCommand = new Command(\"hello\")\n .description(\"Say hello to the user!\")\n .option(\"-n, --name <name>\", \"Name to greet\", \"World\")\n .action((opts) => helloHandler(opts));\n\nexport async function helloHandler(options: { name?: string }) {\n console.log(`Hello, ${options.name}`);\n}\n","{\n \"name\": \"@talos-org/cli\",\n \"version\": \"0.1.17\",\n \"description\": \"\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"sergiocortes-dll\",\n \"url\": \"https://x.com/sergiocortes-dll\"\n },\n \"files\": [\n \"dist\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Vandlee/talos-cli.git\"\n },\n \"keywords\": [],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"talos\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"talos\": \"pnpm start:dev\",\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"node dist/index.js\",\n \"start:dev\": \"node dist/index.js\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\"\n },\n \"packageManager\": \"pnpm@10.28.2\",\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.2.0\",\n \"chalk\": \"^5.6.2\",\n \"cli-spinners\": \"^3.4.0\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.2.4\",\n \"execa\": \"^9.6.1\",\n \"ora\": \"^9.3.0\",\n \"pino\": \"^10.3.0\",\n \"vite-tsconfig-paths\": \"^6.0.5\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.2.1\",\n \"eslint\": \"^10.0.0\",\n \"prettier\": \"^3.8.1\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n }\n}\n","import z from \"zod\";\n\nexport const CommandSchema = z.object({\n name: z.string(),\n options: z.array(z.string()),\n args: z.array(z.string()),\n action: z.string(),\n});\n\nexport const CommandBodySchema = z.object({\n version: z.string(),\n commands: z.array(CommandSchema),\n});\n\nexport const RegistrySchema = z.object({\n name: z.string(),\n body: z.array(CommandBodySchema),\n});\n\nexport type Command = z.infer<typeof CommandSchema>;\nexport type CommandBody = z.infer<typeof CommandBodySchema>;\nexport type registrySchema = z.infer<typeof RegistrySchema>;\n","import os from \"os\";\nimport path from \"path\";\n\nexport const commandsPath = path.join(\n os.homedir(),\n \"Documents\",\n \"talos\",\n \"commands\",\n);\n","import { input, select } from \"@inquirer/prompts\";\nimport cliSpinners from \"cli-spinners\";\nimport { Command } from \"commander\";\nimport { execa } from \"execa\";\nimport { readFile } from \"fs/promises\";\nimport ora from \"ora\";\nimport path from \"path\";\nimport { RegistrySchema } from \"../types/schema\";\nimport { commandsPath } from \"../utils/commandsPath\";\n\nexport const executeCommand = new Command(\"e\")\n .description(\"Execute a command\")\n .argument(\"<name>\", \"Name of the command\")\n .argument(\"[extras...]\", \"Additional arguments and options\")\n .allowUnknownOption()\n .passThroughOptions()\n .action((name, extras, opts) => executeHandler(name, opts, extras));\n\nexport async function executeHandler(\n name: string,\n options: any,\n extras?: string[],\n) {\n const environment = await select({\n message: \"Where does Talos need to look for the command?\",\n choices: [\n { name: \"Local\", value: \"local\" },\n { name: \"Internet\", value: \"internet\" },\n ],\n });\n\n await findCommand(name, environment, { ...options, extras });\n}\n\nasync function findCommand(name: string, environment: string, options: any) {\n if (environment === \"local\") {\n await findLocalCommand(name, options);\n } else if (environment === \"internet\") {\n console.log(`Looking for ${name} on the internet...`);\n // Implement internet command lookup logic here\n }\n}\n\nasync function findLocalCommand(name: string, cliOptions: any = {}) {\n const searchCommandSpinner = ora({\n text: \"Looking for command locally...\",\n spinner: {\n frames: cliSpinners.circleHalves.frames,\n interval: 80,\n },\n }).start();\n\n await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate async operation\n\n const filePath = path.join(commandsPath, `${name}.json`);\n\n const raw = await readFile(filePath, \"utf-8\");\n const parsedCommand = JSON.parse(raw);\n\n const file = RegistrySchema.parse(parsedCommand);\n\n if (!file) {\n searchCommandSpinner.fail(\"Command not found locally.\");\n return;\n }\n\n searchCommandSpinner.succeed(\"Command found locally.\");\n\n if (file.body.length <= 0) {\n searchCommandSpinner.fail(\"No versions found for this command.\");\n return;\n }\n\n let selectedVersion = file.body[0]; // Default to the first version\n\n if (file.body.length > 1) {\n const version = await select({\n message: \"Select a command version to execute:\",\n choices: file.body.map((cmd) => ({ name: cmd.version, value: cmd })),\n });\n\n selectedVersion = version || selectedVersion;\n }\n\n // Build CLI args from extras while prompting for missing values defined in the registry.\n const baseCliArgs: string[] = [];\n const extras = Array.isArray(cliOptions.extras) ? cliOptions.extras : [];\n\n const knownOptions = new Set(\n selectedVersion.commands.flatMap((cmd) => cmd.options),\n );\n const parsed = parseExtras(extras, knownOptions);\n\n // Preserve provided flags, unknown flags, and positional args as-is.\n const existingFlags = new Set(parsed.flags.map((item) => item.flag));\n for (const item of parsed.flags) {\n baseCliArgs.push(item.flag);\n if (item.value !== null) {\n baseCliArgs.push(item.value);\n }\n }\n baseCliArgs.push(...parsed.unknownTokens);\n baseCliArgs.push(...parsed.positionals);\n\n for (const cmd of selectedVersion.commands) {\n // Prompt for missing positional args (placeholders like <host> or [host]).\n const filledArgs: string[] = [];\n const placeholders = cmd.args.filter((arg) => isPlaceholder(arg));\n const defaults = cmd.args.filter((arg) => !isPlaceholder(arg));\n\n for (const placeholder of placeholders) {\n const label = placeholder.replace(/[\\[\\]<>]/g, \"\").trim() || \"value\";\n const value = await input({\n message: `What argument are you gonna send? (${label})`,\n });\n filledArgs.push(value);\n }\n\n filledArgs.unshift(...defaults);\n\n // Prompt for known options that are missing in the CLI.\n const cmdCliArgs = [...baseCliArgs];\n\n if (cmd.options.length > 0) {\n const hasProvided = cmd.options.some((option) =>\n existingFlags.has(option),\n );\n if (!hasProvided) {\n const primaryOption = cmd.options[0];\n const value = await input({\n message: `What do you want to use for \"${primaryOption}\" argument?`,\n default: \"\",\n });\n\n if (value !== \"\") {\n cmdCliArgs.push(primaryOption, value);\n }\n }\n }\n\n for (const cmd of selectedVersion.commands) {\n const commandSpinner = ora({\n text: `Executing command: ${cmd.name}...`,\n spinner: {\n frames: cliSpinners.circleHalves.frames,\n interval: 80,\n },\n }).start();\n\n try {\n commandSpinner.stop();\n\n // Merge JSON args with CLI args\n const mergedArgs = [...filledArgs, ...cmdCliArgs];\n\n console.log(`\\n$ ${cmd.action} ${mergedArgs.join(\" \")}\\n`);\n\n await execa(cmd.action, mergedArgs, { stdio: \"inherit\" });\n\n console.log();\n commandSpinner.succeed(`Executed command: ${cmd.name}`);\n } catch (error) {\n commandSpinner.fail(`Failed to execute command: ${cmd.name}`);\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n }\n }\n }\n }\n\n function isPlaceholder(value: string) {\n return /^<[^>]+>$/.test(value) || /^\\[[^\\]]+\\]$/.test(value);\n }\n\n function parseExtras(extras: string[], knownOptions: Set<string>) {\n const flags: Array<{ flag: string; value: string | null }> = [];\n const unknownTokens: string[] = [];\n const positionals: string[] = [];\n\n for (let i = 0; i < extras.length; i += 1) {\n const token = extras[i];\n\n if (token.startsWith(\"-\")) {\n const next = extras[i + 1];\n const hasValue = next !== undefined && !next.startsWith(\"-\");\n const value = hasValue ? next : null;\n\n if (knownOptions.has(token)) {\n flags.push({ flag: token, value });\n } else {\n unknownTokens.push(token);\n if (hasValue) {\n unknownTokens.push(next);\n }\n }\n\n if (hasValue) {\n i += 1;\n }\n\n continue;\n }\n\n positionals.push(token);\n }\n\n return { flags, unknownTokens, positionals };\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { helloCommand } from \"./commands/hello\";\n\nimport packageJson from \"../package.json\";\nimport { executeCommand } from \"./commands/e\";\n\nprocess.on(\"SIGINT\", () => process.exit(0));\nprocess.on(\"SIGTERM\", () => process.exit(0));\n\nasync function main() {\n const program = new Command()\n .name(\"talos\")\n .description(\"Manage everything.\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n )\n .enablePositionalOptions();\n\n program.addCommand(helloCommand);\n program.addCommand(executeCommand);\n\n program.parse();\n}\n\nmain();\n"]}
1
+ {"version":3,"sources":["../src/commands/hello.ts","../package.json","../src/types/schema.ts","../src/utils/files.ts","../src/utils/isPlaceholder.ts","../src/utils/parseExtras.ts","../src/commands/e.ts","../src/index.ts"],"names":["helloCommand","Command","opts","helloHandler","options","package_default","CommandSchema","z","CommandBodySchema","RegistrySchema","TALOS_FOLDER_NAME","getTalosPath","path","os","getTalosSubfolderPath","subFolder","directoryExists","dirPath","ensureTalosDirectory","askBeforeCreate","talosPath","confirm","subFolderPath","findLocalCommandFile","name","commandsFolder","filePath","raw","parsedCommand","error","e","isPlaceholder","value","parseExtras","extras","knownOptions","flags","unknownTokens","positionals","i","token","next","hasValue","executeCommand","executeHandler","environment","select","findCommand","findLocalCommand","cliOptions","searchCommandSpinner","ora","cliSpinners","resolve","file","selectedVersion","cmd","baseCliArgs","parsed","existingFlags","item","filledArgs","placeholders","arg","defaults","placeholder","label","input","cmdCliArgs","option","primaryOption","commandSpinner","mergedArgs","execa","main","program"],"mappings":"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","file":"index.js","sourcesContent":["import { Command } from \"commander\";\n\nexport const helloCommand = new Command(\"hello\")\n .description(\"Say hello to the user!\")\n .option(\"-n, --name <name>\", \"Name to greet\", \"World\")\n .action((opts) => helloHandler(opts));\n\nexport async function helloHandler(options: { name?: string }) {\n console.log(`Hello, ${options.name}`);\n}\n","{\n \"name\": \"@talos-org/cli\",\n \"version\": \"0.1.19\",\n \"description\": \"\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"sergiocortes-dll\",\n \"url\": \"https://x.com/sergiocortes-dll\"\n },\n \"files\": [\n \"dist\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Vandlee/talos-cli.git\"\n },\n \"keywords\": [],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"talos\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"talos\": \"pnpm start:dev\",\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"node dist/index.js\",\n \"start:dev\": \"node dist/index.js\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\"\n },\n \"packageManager\": \"pnpm@10.28.2\",\n \"dependencies\": {\n \"@inquirer/prompts\": \"^8.2.0\",\n \"chalk\": \"^5.6.2\",\n \"cli-spinners\": \"^3.4.0\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.2.4\",\n \"execa\": \"^9.6.1\",\n \"ora\": \"^9.3.0\",\n \"pino\": \"^10.3.0\",\n \"vite-tsconfig-paths\": \"^6.0.5\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.2.1\",\n \"eslint\": \"^10.0.0\",\n \"prettier\": \"^3.8.1\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n }\n}\n","import z from \"zod\";\n\nexport const CommandSchema = z.object({\n name: z.string(),\n options: z.array(z.string()),\n args: z.array(z.string()),\n action: z.string(),\n});\n\nexport const CommandBodySchema = z.object({\n label: z.string().optional(),\n version: z.string(),\n commands: z.array(CommandSchema),\n});\n\nexport const RegistrySchema = z.object({\n name: z.string(),\n body: z.array(CommandBodySchema),\n});\n\nexport type Command = z.infer<typeof CommandSchema>;\nexport type CommandBody = z.infer<typeof CommandBodySchema>;\nexport type registrySchema = z.infer<typeof RegistrySchema>;\n","import { confirm } from \"@inquirer/prompts\";\nimport * as fs from \"fs/promises\";\nimport os from \"os\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { RegistrySchema } from \"../types/schema\";\n\n// Constants\nconst TALOS_FOLDER_NAME = \".talos\";\n\n/**\n * Gets the path to the .talos directory in the user's home folder\n */\nfunction getTalosPath(): string {\n return path.join(os.homedir(), TALOS_FOLDER_NAME);\n}\n\n/**\n * Gets the path to a subfolder within .talos\n */\nfunction getTalosSubfolderPath(subFolder: string): string {\n return path.join(getTalosPath(), subFolder);\n}\n\n/**\n * Checks if a directory exists\n */\nasync function directoryExists(dirPath: string): Promise<boolean> {\n try {\n await fs.access(dirPath);\n const stats = await fs.stat(dirPath);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Ensures the .talos directory exists, and optionally a subfolder within it.\n * Creates them if they don't exist.\n * This function should be called before any local operations.\n *\n * @param subFolder - Optional subfolder name within .talos (e.g., \"commands\")\n * @param askBeforeCreate - If true, asks for confirmation before creating directories\n * @returns The path to the .talos directory or subfolder, or null if user declined creation\n */\nexport async function ensureTalosDirectory(\n subFolder?: string,\n askBeforeCreate = false,\n): Promise<string | null> {\n const talosPath = getTalosPath();\n\n // Ensure .talos folder exists\n if (!(await directoryExists(talosPath))) {\n if (askBeforeCreate) {\n const shouldCreate = await confirm({\n message: `The .talos directory does not exist in your home folder. Do you want to create it at ${talosPath}?`,\n default: true,\n });\n\n if (!shouldCreate) {\n return null;\n }\n }\n await fs.mkdir(talosPath, { recursive: true });\n }\n\n // If a subfolder is specified, ensure it exists too\n if (subFolder) {\n const subFolderPath = getTalosSubfolderPath(subFolder);\n if (!(await directoryExists(subFolderPath))) {\n if (askBeforeCreate) {\n const shouldCreate = await confirm({\n message: `The .talos/${subFolder} directory does not exist. Do you want to create it?`,\n default: true,\n });\n\n if (!shouldCreate) {\n return null;\n }\n }\n await fs.mkdir(subFolderPath, { recursive: true });\n }\n return subFolderPath;\n }\n\n return talosPath;\n}\n\n/**\n * @deprecated Use ensureTalosDirectory() instead\n */\nexport async function ensureTalosFolder() {\n await ensureTalosDirectory();\n}\n\n/**\n * Finds and reads a local command file from the .talos/commands directory\n *\n * @param name - The name of the command (without .json extension)\n * @returns The parsed command schema or undefined if not found\n * @throws Error with specific message about what went wrong\n */\nexport async function findLocalCommandFile(\n name: string,\n): Promise<z.infer<typeof RegistrySchema> | undefined> {\n const commandsFolder = await ensureTalosDirectory(\"commands\", false);\n\n if (!commandsFolder) {\n throw new Error(\"Commands directory is not available\");\n }\n\n const filePath = path.join(commandsFolder, `${name}.json`);\n\n try {\n await fs.access(filePath);\n } catch {\n return undefined;\n }\n\n try {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const parsedCommand = JSON.parse(raw);\n return RegistrySchema.parse(parsedCommand);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(\n `Command file \"${name}.json\" contains invalid JSON: ${error.message}`,\n );\n }\n if (error instanceof z.ZodError) {\n throw new Error(\n `Command file \"${name}.json\" has invalid schema: ${error.issues.map((e) => e.message).join(\", \")}`,\n );\n }\n throw new Error(\n `Failed to read command file \"${name}.json\": ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\n/**\n * Checks if the .talos folder exists\n *\n * @returns true if .talos exists, false otherwise\n */\nexport async function findTalosFolder(): Promise<boolean> {\n return directoryExists(getTalosPath());\n}\n\n/**\n * Finds a specific folder within .talos\n *\n * @param folderName - The name of the folder to find\n * @returns The full path to the folder or undefined if not found\n */\nexport async function findFolder(\n folderName: string,\n): Promise<string | undefined> {\n const folderPath = getTalosSubfolderPath(folderName);\n\n if (await directoryExists(folderPath)) {\n return folderPath;\n }\n\n return undefined;\n}\n","export function isPlaceholder(value: string) {\n return /^<[^>]+>$/.test(value) || /^\\[[^\\]]+\\]$/.test(value);\n}\n","export function parseExtras(extras: string[], knownOptions: Set<string>) {\n const flags: Array<{ flag: string; value: string | null }> = [];\n const unknownTokens: string[] = [];\n const positionals: string[] = [];\n\n for (let i = 0; i < extras.length; i += 1) {\n const token = extras[i];\n\n if (token.startsWith(\"-\")) {\n const next = extras[i + 1];\n const hasValue = next !== undefined && !next.startsWith(\"-\");\n const value = hasValue ? next : null;\n\n if (knownOptions.has(token)) {\n flags.push({ flag: token, value });\n } else {\n unknownTokens.push(token);\n if (hasValue) {\n unknownTokens.push(next);\n }\n }\n\n if (hasValue) {\n i += 1;\n }\n\n continue;\n }\n\n positionals.push(token);\n }\n\n return { flags, unknownTokens, positionals };\n}\n","import { input, select } from \"@inquirer/prompts\";\nimport cliSpinners from \"cli-spinners\";\nimport { Command } from \"commander\";\nimport { execa } from \"execa\";\nimport ora from \"ora\";\nimport { ensureTalosDirectory, findLocalCommandFile } from \"../utils/files\";\nimport { isPlaceholder } from \"../utils/isPlaceholder\";\nimport { parseExtras } from \"../utils/parseExtras\";\n\nexport const executeCommand = new Command(\"e\")\n .description(\"Execute a command\")\n .argument(\"<name>\", \"Name of the command\")\n .argument(\"[extras...]\", \"Additional arguments and options\")\n .allowUnknownOption()\n .passThroughOptions()\n .action((name, extras, opts) => executeHandler(name, opts, extras));\n\nexport async function executeHandler(\n name: string,\n options: any,\n extras?: string[],\n) {\n const environment = await select({\n message: \"Where does Talos need to look for the command?\",\n choices: [\n { name: \"Local\", value: \"local\" },\n { name: \"Internet\", value: \"internet\" },\n ],\n });\n\n await findCommand(name, environment, { ...options, extras });\n}\n\nasync function findCommand(name: string, environment: string, options: any) {\n if (environment === \"local\") {\n const commandsPath = await ensureTalosDirectory(\"commands\", true);\n\n if (!commandsPath) {\n console.error(\n \"\\n❌ Cannot proceed without the .talos/commands directory.\",\n );\n return;\n }\n\n await findLocalCommand(name, options);\n }\n\n if (environment === \"internet\") {\n console.log(`Looking for ${name} on the internet...`);\n // Implement internet command lookup logic here\n }\n}\n\nasync function findLocalCommand(name: string, cliOptions: any = {}) {\n const searchCommandSpinner = ora({\n text: \"Looking for command locally...\",\n spinner: {\n frames: cliSpinners.circleHalves.frames,\n interval: 80,\n },\n }).start();\n\n await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate async operation\n\n try {\n const file = await findLocalCommandFile(name);\n\n if (!file) {\n searchCommandSpinner.fail(`Command \"${name}\" not found.`);\n return;\n }\n\n searchCommandSpinner.succeed(`Command \"${name}\" found locally.`);\n\n if (file.body.length <= 0) {\n searchCommandSpinner.fail(\n `Command \"${name}\" exists but has no registered versions.`,\n );\n return;\n }\n\n let selectedVersion = file.body[0]; // Default to the first version\n\n if (file.body.length > 1) {\n const version = await select({\n message: \"Select a command version to execute:\",\n choices: file.body.map((cmd) => ({\n name: `${cmd.version}${cmd.label ? ` - ${cmd.label}` : \"\"}`,\n value: cmd,\n })),\n });\n\n selectedVersion = version || selectedVersion;\n }\n\n // Build CLI args from extras while prompting for missing values defined in the registry.\n const baseCliArgs: string[] = [];\n const extras = Array.isArray(cliOptions.extras) ? cliOptions.extras : [];\n\n const knownOptions = new Set(\n selectedVersion.commands.flatMap((cmd) => cmd.options),\n );\n const parsed = parseExtras(extras, knownOptions);\n\n // Preserve provided flags, unknown flags, and positional args as-is.\n const existingFlags = new Set(parsed.flags.map((item) => item.flag));\n for (const item of parsed.flags) {\n baseCliArgs.push(item.flag);\n if (item.value !== null) {\n baseCliArgs.push(item.value);\n }\n }\n baseCliArgs.push(...parsed.unknownTokens);\n baseCliArgs.push(...parsed.positionals);\n\n for (const cmd of selectedVersion.commands) {\n // Prompt for missing positional args (placeholders like <host> or [host]).\n const filledArgs: string[] = [];\n const placeholders = cmd.args.filter((arg) => isPlaceholder(arg));\n const defaults = cmd.args.filter((arg) => !isPlaceholder(arg));\n\n for (const placeholder of placeholders) {\n const label = placeholder.replace(/[\\[\\]<>]/g, \"\").trim() || \"value\";\n const value = await input({\n message: `What argument are you gonna send? (${label})`,\n });\n filledArgs.push(value);\n }\n\n filledArgs.unshift(...defaults);\n\n // Prompt for known options that are missing in the CLI.\n const cmdCliArgs = [...baseCliArgs];\n\n if (cmd.options.length > 0) {\n const hasProvided = cmd.options.some((option) =>\n existingFlags.has(option),\n );\n if (!hasProvided) {\n const primaryOption = cmd.options[0];\n const value = await input({\n message: `What do you want to use for \"${primaryOption}\" argument?`,\n default: \"\",\n });\n\n if (value !== \"\") {\n cmdCliArgs.push(primaryOption, value);\n }\n }\n }\n\n for (const cmd of selectedVersion.commands) {\n const commandSpinner = ora({\n text: `Executing command: ${cmd.name}...`,\n spinner: {\n frames: cliSpinners.circleHalves.frames,\n interval: 80,\n },\n }).start();\n\n try {\n commandSpinner.stop();\n\n // Merge JSON args with CLI args\n const mergedArgs = [...filledArgs, ...cmdCliArgs];\n\n console.log(`\\n$ ${cmd.action} ${mergedArgs.join(\" \")}\\n`);\n\n await execa(cmd.action, mergedArgs, { stdio: \"inherit\" });\n\n console.log();\n commandSpinner.succeed(`Executed command: ${cmd.name}`);\n } catch (error) {\n commandSpinner.fail(`Failed to execute command: ${cmd.name}`);\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n }\n }\n }\n }\n } catch (error) {\n searchCommandSpinner.fail(\"Failed to load command\");\n if (error instanceof Error) {\n console.error(`\\n❌ ${error.message}\\n`);\n } else {\n console.error(`\\n❌ An unexpected error occurred: ${String(error)}\\n`);\n }\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { helloCommand } from \"./commands/hello\";\n\nimport packageJson from \"../package.json\";\nimport { executeCommand } from \"./commands/e\";\n\nprocess.on(\"SIGINT\", () => process.exit(0));\nprocess.on(\"SIGTERM\", () => process.exit(0));\n\nasync function main() {\n const program = new Command()\n .name(\"talos\")\n .description(\"Manage everything.\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n )\n .enablePositionalOptions();\n\n program.addCommand(helloCommand);\n program.addCommand(executeCommand);\n\n program.parse();\n}\n\nmain();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talos-org/cli",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"