nia-wizard 0.1.15 → 0.1.16

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 CHANGED
@@ -65,6 +65,42 @@ npx nia-wizard
65
65
 
66
66
  This runs `npx skills add nozomio-labs/nia-skill` and stores your API key at `~/.config/nia/api_key`.
67
67
 
68
+ For deterministic agent/CI usage:
69
+
70
+ ```bash
71
+ npx nia-wizard skill add \
72
+ --api-key nk_xxx \
73
+ --source nozomio-labs/nia-skill \
74
+ --non-interactive \
75
+ --ci
76
+ ```
77
+
78
+ Install globally for all detected agents:
79
+
80
+ ```bash
81
+ npx nia-wizard skill add \
82
+ --api-key nk_xxx \
83
+ --all-agents \
84
+ --non-interactive \
85
+ --ci
86
+ ```
87
+
88
+ Optional target-specific installation:
89
+
90
+ ```bash
91
+ npx nia-wizard skill add \
92
+ --api-key nk_xxx \
93
+ --target codex \
94
+ --non-interactive \
95
+ --ci
96
+ ```
97
+
98
+ Print the headless onboarding guide for agents:
99
+
100
+ ```bash
101
+ npx nia-wizard agent-guide
102
+ ```
103
+
68
104
  ## Options
69
105
 
70
106
  | Option | Description |
@@ -74,6 +110,12 @@ This runs `npx skills add nozomio-labs/nia-skill` and stores your API key at `~/
74
110
  | `--debug` | Enable debug logging |
75
111
  | `--ci` | CI mode (skip prompts, use defaults) |
76
112
  | `--api-key`, `-k` | Nia API key |
113
+ | `--non-interactive` | Fail fast instead of waiting for prompts (skill command) |
114
+ | `--target` | Target coding agent for skill installation (skill command) |
115
+ | `--all-agents` | Install to all detected agents in global scope (skill command) |
116
+ | `--global` | Install to global user skills directories (skill command) |
117
+ | `--source` | Skill source path/repo (skill command) |
118
+ | `--json` | Print machine-readable result (skill command) |
77
119
 
78
120
  ## Authentication
79
121
 
package/dist/bin.js CHANGED
@@ -1,15 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
3
  import {
4
+ printAgentGuide,
4
5
  runMCPAdd,
5
6
  runMCPRemove,
7
+ runSkillAdd,
6
8
  runWizard
7
- } from "./chunk-QC5LWLXN.js";
9
+ } from "./chunk-JKF3ZFD5.js";
8
10
 
9
11
  // src/bin.ts
10
12
  import yargs from "yargs";
11
13
  import { hideBin } from "yargs/helpers";
12
- var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-key] [options]").usage("$0 mcp add [options]").usage("$0 mcp remove [options]").command(
14
+ function printCliError(error) {
15
+ if (error instanceof Error) {
16
+ console.error(`Error: ${error.message}`);
17
+ return;
18
+ }
19
+ console.error("Error:", error);
20
+ }
21
+ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-key] [options]").usage("$0 mcp add [options]").usage("$0 mcp remove [options]").usage("$0 skill add [options]").usage("$0 agent-guide").command(
13
22
  "$0 [api-key]",
14
23
  "Install Nia MCP server to your coding agents",
15
24
  (yargs2) => yargs2.positional("api-key", {
@@ -39,10 +48,85 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
39
48
  ci: argv.ci
40
49
  });
41
50
  } catch (error) {
42
- console.error("Error:", error);
51
+ printCliError(error);
43
52
  process.exit(1);
44
53
  }
45
54
  }
55
+ ).command(
56
+ "agent-guide",
57
+ "Print API-first agent onboarding guide in Markdown",
58
+ () => {
59
+ },
60
+ () => {
61
+ printAgentGuide();
62
+ }
63
+ ).command(
64
+ "skill <command>",
65
+ "Manage skill installation",
66
+ (yargs2) => yargs2.command(
67
+ "add",
68
+ "Add Nia skill",
69
+ (yargs3) => yargs3.option("api-key", {
70
+ type: "string",
71
+ alias: "k",
72
+ description: "Nia API key (nk_xxx)"
73
+ }).option("source", {
74
+ type: "string",
75
+ default: "nozomio-labs/nia-skill",
76
+ description: "Skill source to install"
77
+ }).option("target", {
78
+ type: "string",
79
+ description: "Target coding agent for skill installation"
80
+ }).option("all-agents", {
81
+ type: "boolean",
82
+ default: false,
83
+ description: "Install to all detected agents (non-interactive)"
84
+ }).option("global", {
85
+ type: "boolean",
86
+ description: "Install to global user skills directories"
87
+ }).option("yes", {
88
+ type: "boolean",
89
+ default: false,
90
+ description: "Auto-confirm prompts when supported by the skills CLI"
91
+ }).option("non-interactive", {
92
+ type: "boolean",
93
+ default: false,
94
+ description: "Fail fast instead of waiting for prompts"
95
+ }).option("json", {
96
+ type: "boolean",
97
+ default: false,
98
+ description: "Print machine-readable install result"
99
+ }).option("debug", {
100
+ type: "boolean",
101
+ default: false,
102
+ description: "Enable debug logging"
103
+ }).option("ci", {
104
+ type: "boolean",
105
+ default: false,
106
+ description: "CI mode (implies non-interactive behavior)"
107
+ }),
108
+ async (argv) => {
109
+ try {
110
+ await runSkillAdd({
111
+ apiKey: argv["api-key"],
112
+ source: argv.source,
113
+ target: argv.target,
114
+ allAgents: argv["all-agents"],
115
+ global: argv.global,
116
+ yes: argv.yes,
117
+ nonInteractive: argv["non-interactive"],
118
+ json: argv.json,
119
+ debug: argv.debug,
120
+ ci: argv.ci
121
+ });
122
+ } catch (error) {
123
+ printCliError(error);
124
+ process.exit(1);
125
+ }
126
+ }
127
+ ).demandCommand(1, "You need to specify a command (add)"),
128
+ () => {
129
+ }
46
130
  ).command(
47
131
  "mcp <command>",
48
132
  "Manage MCP server installation",
@@ -77,7 +161,7 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
77
161
  ci: argv.ci
78
162
  });
79
163
  } catch (error) {
80
- console.error("Error:", error);
164
+ printCliError(error);
81
165
  process.exit(1);
82
166
  }
83
167
  }
@@ -93,7 +177,7 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
93
177
  try {
94
178
  await runMCPRemove({ debug: argv.debug });
95
179
  } catch (error) {
96
- console.error("Error:", error);
180
+ printCliError(error);
97
181
  process.exit(1);
98
182
  }
99
183
  }
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { runWizard } from './run.js';\nimport { runMCPAdd, runMCPRemove } from './mcp.js';\n\nconst cli = yargs(hideBin(process.argv))\n .scriptName('nia-wizard')\n .usage('$0 [api-key] [options]')\n .usage('$0 mcp add [options]')\n .usage('$0 mcp remove [options]')\n .command(\n '$0 [api-key]',\n 'Install Nia MCP server to your coding agents',\n (yargs) =>\n yargs\n .positional('api-key', {\n type: 'string',\n description: 'Nia API key (nk_xxx)',\n })\n .option('local', {\n type: 'boolean',\n description: 'Use local mode (requires pipx)',\n })\n .option('remote', {\n type: 'boolean',\n description: 'Use remote mode (cloud)',\n })\n .option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n })\n .option('ci', {\n type: 'boolean',\n default: false,\n description: 'CI mode (skip prompts)',\n }),\n async (argv) => {\n try {\n await runWizard({\n apiKey: argv['api-key'],\n local: argv.local ?? (argv.remote ? false : undefined),\n debug: argv.debug,\n ci: argv.ci,\n });\n } catch (error) {\n console.error('Error:', error);\n process.exit(1);\n }\n },\n )\n .command(\n 'mcp <command>',\n 'Manage MCP server installation',\n (yargs) =>\n yargs\n .command(\n 'add',\n 'Add Nia MCP server to coding agents',\n (yargs) =>\n yargs\n .option('api-key', {\n type: 'string',\n alias: 'k',\n description: 'Nia API key (nk_xxx)',\n })\n .option('local', {\n type: 'boolean',\n description: 'Use local mode',\n })\n .option('remote', {\n type: 'boolean',\n description: 'Use remote mode',\n })\n .option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n })\n .option('ci', {\n type: 'boolean',\n default: false,\n description: 'CI mode (skip prompts)',\n }),\n async (argv) => {\n try {\n await runMCPAdd({\n apiKey: argv['api-key'],\n local: argv.local ?? (argv.remote ? false : undefined),\n debug: argv.debug,\n ci: argv.ci,\n });\n } catch (error) {\n console.error('Error:', error);\n process.exit(1);\n }\n },\n )\n .command(\n 'remove',\n 'Remove Nia MCP server from coding agents',\n (yargs) =>\n yargs.option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n }),\n async (argv) => {\n try {\n await runMCPRemove({ debug: argv.debug });\n } catch (error) {\n console.error('Error:', error);\n process.exit(1);\n }\n },\n )\n .demandCommand(1, 'You need to specify a command (add or remove)'),\n () => {},\n )\n .help()\n .version()\n .strict();\n\ncli.parse();\n"],"mappings":";;;;;;;;;AAEA,OAAO,WAAW;AAClB,SAAS,eAAe;AAIxB,IAAM,MAAM,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACpC,WAAW,YAAY,EACvB,MAAM,wBAAwB,EAC9B,MAAM,sBAAsB,EAC5B,MAAM,yBAAyB,EAC/B;AAAA,EACC;AAAA,EACA;AAAA,EACA,CAACA,WACCA,OACG,WAAW,WAAW;AAAA,IACrB,MAAM;AAAA,IACN,aAAa;AAAA,EACf,CAAC,EACA,OAAO,SAAS;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,EACf,CAAC,EACA,OAAO,UAAU;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,EACf,CAAC,EACA,OAAO,SAAS;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf,CAAC,EACA,OAAO,MAAM;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf,CAAC;AAAA,EACL,OAAO,SAAS;AACd,QAAI;AACF,YAAM,UAAU;AAAA,QACd,QAAQ,KAAK,SAAS;AAAA,QACtB,OAAO,KAAK,UAAU,KAAK,SAAS,QAAQ;AAAA,QAC5C,OAAO,KAAK;AAAA,QACZ,IAAI,KAAK;AAAA,MACX,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,MAAM,UAAU,KAAK;AAC7B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA,EACA,CAACA,WACCA,OACG;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAACA,WACCA,OACG,OAAO,WAAW;AAAA,MACjB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC,EACA,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,MAAM;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,IACL,OAAO,SAAS;AACd,UAAI;AACF,cAAM,UAAU;AAAA,UACd,QAAQ,KAAK,SAAS;AAAA,UACtB,OAAO,KAAK,UAAU,KAAK,SAAS,QAAQ;AAAA,UAC5C,OAAO,KAAK;AAAA,UACZ,IAAI,KAAK;AAAA,QACX,CAAC;AAAA,MACH,SAAS,OAAO;AACd,gBAAQ,MAAM,UAAU,KAAK;AAC7B,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAACA,WACCA,OAAM,OAAO,SAAS;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,IACH,OAAO,SAAS;AACd,UAAI;AACF,cAAM,aAAa,EAAE,OAAO,KAAK,MAAM,CAAC;AAAA,MAC1C,SAAS,OAAO;AACd,gBAAQ,MAAM,UAAU,KAAK;AAC7B,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF,EACC,cAAc,GAAG,+CAA+C;AAAA,EACrE,MAAM;AAAA,EAAC;AACT,EACC,KAAK,EACL,QAAQ,EACR,OAAO;AAEV,IAAI,MAAM;","names":["yargs"]}
1
+ {"version":3,"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { runWizard } from './run.js';\nimport { runMCPAdd, runMCPRemove } from './mcp.js';\nimport { runSkillAdd } from './skill.js';\nimport { printAgentGuide } from './agent-guide.js';\n\nfunction printCliError(error: unknown): void {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n return;\n }\n\n console.error('Error:', error);\n}\n\nconst cli = yargs(hideBin(process.argv))\n .scriptName('nia-wizard')\n .usage('$0 [api-key] [options]')\n .usage('$0 mcp add [options]')\n .usage('$0 mcp remove [options]')\n .usage('$0 skill add [options]')\n .usage('$0 agent-guide')\n .command(\n '$0 [api-key]',\n 'Install Nia MCP server to your coding agents',\n (yargs) =>\n yargs\n .positional('api-key', {\n type: 'string',\n description: 'Nia API key (nk_xxx)',\n })\n .option('local', {\n type: 'boolean',\n description: 'Use local mode (requires pipx)',\n })\n .option('remote', {\n type: 'boolean',\n description: 'Use remote mode (cloud)',\n })\n .option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n })\n .option('ci', {\n type: 'boolean',\n default: false,\n description: 'CI mode (skip prompts)',\n }),\n async (argv) => {\n try {\n await runWizard({\n apiKey: argv['api-key'],\n local: argv.local ?? (argv.remote ? false : undefined),\n debug: argv.debug,\n ci: argv.ci,\n });\n } catch (error) {\n printCliError(error);\n process.exit(1);\n }\n },\n )\n .command(\n 'agent-guide',\n 'Print API-first agent onboarding guide in Markdown',\n () => {},\n () => {\n printAgentGuide();\n },\n )\n .command(\n 'skill <command>',\n 'Manage skill installation',\n (yargs) =>\n yargs\n .command(\n 'add',\n 'Add Nia skill',\n (yargs) =>\n yargs\n .option('api-key', {\n type: 'string',\n alias: 'k',\n description: 'Nia API key (nk_xxx)',\n })\n .option('source', {\n type: 'string',\n default: 'nozomio-labs/nia-skill',\n description: 'Skill source to install',\n })\n .option('target', {\n type: 'string',\n description: 'Target coding agent for skill installation',\n })\n .option('all-agents', {\n type: 'boolean',\n default: false,\n description: 'Install to all detected agents (non-interactive)',\n })\n .option('global', {\n type: 'boolean',\n description: 'Install to global user skills directories',\n })\n .option('yes', {\n type: 'boolean',\n default: false,\n description: 'Auto-confirm prompts when supported by the skills CLI',\n })\n .option('non-interactive', {\n type: 'boolean',\n default: false,\n description: 'Fail fast instead of waiting for prompts',\n })\n .option('json', {\n type: 'boolean',\n default: false,\n description: 'Print machine-readable install result',\n })\n .option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n })\n .option('ci', {\n type: 'boolean',\n default: false,\n description: 'CI mode (implies non-interactive behavior)',\n }),\n async (argv) => {\n try {\n await runSkillAdd({\n apiKey: argv['api-key'],\n source: argv.source,\n target: argv.target,\n allAgents: argv['all-agents'],\n global: argv.global,\n yes: argv.yes,\n nonInteractive: argv['non-interactive'],\n json: argv.json,\n debug: argv.debug,\n ci: argv.ci,\n });\n } catch (error) {\n printCliError(error);\n process.exit(1);\n }\n },\n )\n .demandCommand(1, 'You need to specify a command (add)'),\n () => {},\n )\n .command(\n 'mcp <command>',\n 'Manage MCP server installation',\n (yargs) =>\n yargs\n .command(\n 'add',\n 'Add Nia MCP server to coding agents',\n (yargs) =>\n yargs\n .option('api-key', {\n type: 'string',\n alias: 'k',\n description: 'Nia API key (nk_xxx)',\n })\n .option('local', {\n type: 'boolean',\n description: 'Use local mode',\n })\n .option('remote', {\n type: 'boolean',\n description: 'Use remote mode',\n })\n .option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n })\n .option('ci', {\n type: 'boolean',\n default: false,\n description: 'CI mode (skip prompts)',\n }),\n async (argv) => {\n try {\n await runMCPAdd({\n apiKey: argv['api-key'],\n local: argv.local ?? (argv.remote ? false : undefined),\n debug: argv.debug,\n ci: argv.ci,\n });\n } catch (error) {\n printCliError(error);\n process.exit(1);\n }\n },\n )\n .command(\n 'remove',\n 'Remove Nia MCP server from coding agents',\n (yargs) =>\n yargs.option('debug', {\n type: 'boolean',\n default: false,\n description: 'Enable debug logging',\n }),\n async (argv) => {\n try {\n await runMCPRemove({ debug: argv.debug });\n } catch (error) {\n printCliError(error);\n process.exit(1);\n }\n },\n )\n .demandCommand(1, 'You need to specify a command (add or remove)'),\n () => {},\n )\n .help()\n .version()\n .strict();\n\ncli.parse();\n"],"mappings":"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","names":["yargs"]}
@@ -2932,9 +2932,6 @@ async function removeMCPServerFromClientsStep() {
2932
2932
  // src/run.ts
2933
2933
  import chalk3 from "chalk";
2934
2934
  import { spawnSync as spawnSync5 } from "child_process";
2935
- import * as fs33 from "fs";
2936
- import * as os32 from "os";
2937
- import * as path33 from "path";
2938
2935
 
2939
2936
  // src/utils/dependencies.ts
2940
2937
  import { execSync as execSync5, spawnSync as spawnSync4 } from "child_process";
@@ -3139,13 +3136,18 @@ function dependenciesReady() {
3139
3136
  return true;
3140
3137
  }
3141
3138
 
3142
- // src/run.ts
3139
+ // src/utils/api-key.ts
3140
+ import * as fs33 from "fs";
3141
+ import * as os32 from "os";
3142
+ import * as path33 from "path";
3143
+ var NIA_CONFIG_DIR = path33.join(os32.homedir(), ".config", "nia");
3144
+ var NIA_KEY_PATH = path33.join(NIA_CONFIG_DIR, "api_key");
3143
3145
  function storeApiKey(apiKey) {
3144
- const configDir = path33.join(os32.homedir(), ".config", "nia");
3145
- const keyPath = path33.join(configDir, "api_key");
3146
- fs33.mkdirSync(configDir, { recursive: true });
3147
- fs33.writeFileSync(keyPath, apiKey, { mode: 384 });
3146
+ fs33.mkdirSync(NIA_CONFIG_DIR, { recursive: true });
3147
+ fs33.writeFileSync(NIA_KEY_PATH, apiKey, { mode: 384 });
3148
3148
  }
3149
+
3150
+ // src/run.ts
3149
3151
  async function runAddMcpInstall(apiKey) {
3150
3152
  clack_default.log.info("Launching add-mcp installer...\n");
3151
3153
  const result = spawnSync5(
@@ -3452,6 +3454,301 @@ async function runMCPRemove(options = {}) {
3452
3454
  clack_default.outro(chalk4.green("Done!"));
3453
3455
  }
3454
3456
 
3457
+ // src/skill.ts
3458
+ import chalk5 from "chalk";
3459
+ import { spawnSync as spawnSync6 } from "child_process";
3460
+ var DEFAULT_SKILL_SOURCE = "nozomio-labs/nia-skill";
3461
+ var NON_INTERACTIVE_TIMEOUT_MS = 3e4;
3462
+ async function runSkillAdd(options) {
3463
+ if (options.debug) {
3464
+ enableDebug();
3465
+ }
3466
+ const nonInteractive = Boolean(options.nonInteractive || options.ci);
3467
+ const source = options.source || DEFAULT_SKILL_SOURCE;
3468
+ const allAgents = Boolean(options.allAgents);
3469
+ if (!options.json) {
3470
+ clack_default.intro(chalk5.bgCyan.black(" Nia Skill Installer "));
3471
+ }
3472
+ if (allAgents && options.target) {
3473
+ throw new Error("Use either `--target` or `--all-agents`, not both.");
3474
+ }
3475
+ if (nonInteractive && !options.apiKey) {
3476
+ throw new Error("`--api-key` is required when using `--non-interactive` or `--ci`.");
3477
+ }
3478
+ if (nonInteractive && options.apiKey && !options.apiKey.startsWith("nk_")) {
3479
+ throw new Error("Invalid API key format. Keys should start with `nk_`.");
3480
+ }
3481
+ const apiKey = nonInteractive ? options.apiKey : await getApiKey(options.apiKey);
3482
+ storeApiKey(apiKey);
3483
+ if (!options.json) {
3484
+ clack_default.log.success("API key saved");
3485
+ clack_default.log.info(`Installing skill source: ${source}`);
3486
+ }
3487
+ const capabilities = detectSkillsCapabilities();
3488
+ const installResult = runSkillsInstall2({
3489
+ source,
3490
+ target: options.target,
3491
+ allAgents,
3492
+ globalInstall: options.global ?? (nonInteractive || allAgents),
3493
+ nonInteractive,
3494
+ assumeYes: nonInteractive || Boolean(options.yes),
3495
+ jsonOutput: Boolean(options.json),
3496
+ capabilities
3497
+ });
3498
+ if (options.json) {
3499
+ console.log(
3500
+ JSON.stringify(
3501
+ {
3502
+ success: installResult.success,
3503
+ command: installResult.command,
3504
+ status: installResult.status,
3505
+ signal: installResult.signal,
3506
+ timedOut: installResult.timedOut,
3507
+ stdout: installResult.stdout,
3508
+ stderr: installResult.stderr
3509
+ },
3510
+ null,
3511
+ 2
3512
+ )
3513
+ );
3514
+ }
3515
+ if (!installResult.success) {
3516
+ if (installResult.timedOut) {
3517
+ throw new Error(
3518
+ "Skills installation timed out in non-interactive mode. Install manually or run without `--non-interactive` to inspect prompts."
3519
+ );
3520
+ }
3521
+ throw new Error(
3522
+ `Skills installation failed (${installResult.status ?? "no-exit-code"}). Use \`--debug\` to inspect command behavior.`
3523
+ );
3524
+ }
3525
+ if (!options.json) {
3526
+ clack_default.log.success("Nia skill installed!");
3527
+ clack_default.outro(chalk5.green("Done!"));
3528
+ }
3529
+ }
3530
+ function detectSkillsCapabilities() {
3531
+ const result = spawnSync6("npx", ["skills", "add", "--help"], {
3532
+ shell: false,
3533
+ stdio: "pipe",
3534
+ encoding: "utf-8",
3535
+ timeout: 8e3,
3536
+ env: {
3537
+ ...process.env,
3538
+ CI: "1",
3539
+ TERM: "dumb",
3540
+ FORCE_COLOR: "0",
3541
+ NO_COLOR: "1"
3542
+ }
3543
+ });
3544
+ const output = `${result.stdout ?? ""}
3545
+ ${result.stderr ?? ""}`.toLowerCase();
3546
+ if (result.status !== 0 || !output.trim()) {
3547
+ const fallback = {
3548
+ target: false,
3549
+ agent: true,
3550
+ all: true,
3551
+ globalLong: true,
3552
+ globalShort: true,
3553
+ yesLong: true,
3554
+ yesShort: true,
3555
+ nonInteractive: false,
3556
+ ci: false,
3557
+ json: false
3558
+ };
3559
+ debug("skills capabilities fallback", fallback);
3560
+ return fallback;
3561
+ }
3562
+ const capabilities = {
3563
+ target: output.includes("--target"),
3564
+ agent: output.includes("--agent"),
3565
+ all: output.includes("--all"),
3566
+ globalLong: output.includes("--global"),
3567
+ globalShort: output.includes(" -g") || output.includes(", -g"),
3568
+ yesLong: output.includes("--yes"),
3569
+ yesShort: output.includes(" -y") || output.includes(", -y"),
3570
+ nonInteractive: output.includes("--non-interactive"),
3571
+ ci: output.includes("--ci"),
3572
+ json: output.includes("--json")
3573
+ };
3574
+ debug("skills capabilities", capabilities);
3575
+ return capabilities;
3576
+ }
3577
+ function runSkillsInstall2(params) {
3578
+ const args = ["skills", "add", params.source];
3579
+ if (params.globalInstall) {
3580
+ if (params.capabilities.globalLong) {
3581
+ args.push("--global");
3582
+ } else if (params.capabilities.globalShort) {
3583
+ args.push("-g");
3584
+ } else if (params.nonInteractive) {
3585
+ throw new Error(
3586
+ "`skills add` in this environment does not advertise `--global`/`-g`; cannot enforce deterministic scope."
3587
+ );
3588
+ }
3589
+ }
3590
+ if (params.allAgents) {
3591
+ if (params.capabilities.all) {
3592
+ args.push("--all");
3593
+ } else if (params.capabilities.agent) {
3594
+ args.push("--agent", "*");
3595
+ } else {
3596
+ throw new Error(
3597
+ "`skills add` in this environment does not advertise `--all` or `--agent`; cannot target all agents."
3598
+ );
3599
+ }
3600
+ }
3601
+ if (params.target) {
3602
+ if (params.capabilities.target) {
3603
+ args.push("--target", params.target);
3604
+ } else if (params.capabilities.agent) {
3605
+ args.push("--agent", params.target);
3606
+ } else {
3607
+ throw new Error(
3608
+ "`skills add` in this environment does not advertise `--target` or `--agent`; cannot enforce target."
3609
+ );
3610
+ }
3611
+ }
3612
+ if (params.assumeYes) {
3613
+ if (params.capabilities.yesLong) {
3614
+ args.push("--yes");
3615
+ } else if (params.capabilities.yesShort) {
3616
+ args.push("-y");
3617
+ }
3618
+ }
3619
+ if (params.nonInteractive) {
3620
+ if (params.capabilities.nonInteractive) {
3621
+ args.push("--non-interactive");
3622
+ } else if (params.capabilities.ci) {
3623
+ args.push("--ci");
3624
+ }
3625
+ }
3626
+ if (params.jsonOutput && params.capabilities.json) {
3627
+ args.push("--json");
3628
+ }
3629
+ const command = `npx ${args.join(" ")}`;
3630
+ debug("running", command);
3631
+ const result = spawnSync6("npx", args, {
3632
+ shell: false,
3633
+ stdio: params.nonInteractive ? "pipe" : "inherit",
3634
+ encoding: params.nonInteractive ? "utf-8" : void 0,
3635
+ timeout: params.nonInteractive ? NON_INTERACTIVE_TIMEOUT_MS : void 0,
3636
+ env: {
3637
+ ...process.env,
3638
+ ...params.nonInteractive ? {
3639
+ CI: "1",
3640
+ TERM: "dumb",
3641
+ FORCE_COLOR: "0",
3642
+ NO_COLOR: "1"
3643
+ } : {}
3644
+ }
3645
+ });
3646
+ const timedOut = params.nonInteractive && Boolean(result.error && "code" in result.error && result.error.code === "ETIMEDOUT");
3647
+ const stdout = params.nonInteractive ? result.stdout || "" : "";
3648
+ const stderr = params.nonInteractive ? result.stderr || "" : "";
3649
+ if (stdout) {
3650
+ debug("skills stdout", stdout);
3651
+ }
3652
+ if (stderr) {
3653
+ debug("skills stderr", stderr);
3654
+ }
3655
+ if (result.error) {
3656
+ debug("skills error", result.error);
3657
+ }
3658
+ return {
3659
+ success: result.status === 0,
3660
+ command,
3661
+ status: result.status,
3662
+ signal: result.signal,
3663
+ timedOut,
3664
+ stdout,
3665
+ stderr
3666
+ };
3667
+ }
3668
+
3669
+ // src/agent-guide.ts
3670
+ var AGENT_GUIDE_MARKDOWN = [
3671
+ "# Nia Agent Onboarding (Headless)",
3672
+ "",
3673
+ "Use this flow when an agent cannot complete browser-based setup.",
3674
+ "",
3675
+ "## Base URL",
3676
+ "",
3677
+ "`https://apigcp.trynia.ai/v2`",
3678
+ "",
3679
+ "## New Account",
3680
+ "",
3681
+ "1. Create account + bootstrap token:",
3682
+ "",
3683
+ "```bash",
3684
+ 'curl -sS -X POST "https://apigcp.trynia.ai/v2/auth/signup" \\',
3685
+ ' -H "Content-Type: application/json" \\',
3686
+ ` -d '{"email":"agent@example.com","password":"strong-password-123","organization_name":"Agent Org"}'`,
3687
+ "```",
3688
+ "",
3689
+ "2. Exchange bootstrap token for API key:",
3690
+ "",
3691
+ "```bash",
3692
+ 'curl -sS -X POST "https://apigcp.trynia.ai/v2/auth/bootstrap-key" \\',
3693
+ ' -H "Content-Type: application/json" \\',
3694
+ ` -d '{"bootstrap_token":"<bootstrap-token>"}'`,
3695
+ "```",
3696
+ "",
3697
+ "## Existing Account",
3698
+ "",
3699
+ "Create API key directly with email/password:",
3700
+ "",
3701
+ "```bash",
3702
+ 'curl -sS -X POST "https://apigcp.trynia.ai/v2/auth/login-key" \\',
3703
+ ' -H "Content-Type: application/json" \\',
3704
+ ` -d '{"email":"agent@example.com","password":"strong-password-123"}'`,
3705
+ "```",
3706
+ "",
3707
+ "## Install Nia Skill (Non-Interactive)",
3708
+ "",
3709
+ "Install for all detected agents:",
3710
+ "",
3711
+ "```bash",
3712
+ "npx nia-wizard skill add \\",
3713
+ ' --api-key "<nk_api_key>" \\',
3714
+ " --source nozomio-labs/nia-skill \\",
3715
+ " --all-agents \\",
3716
+ " --non-interactive \\",
3717
+ " --ci",
3718
+ "```",
3719
+ "",
3720
+ "Install for one target agent:",
3721
+ "",
3722
+ "```bash",
3723
+ "npx nia-wizard skill add \\",
3724
+ ' --api-key "<nk_api_key>" \\',
3725
+ " --source nozomio-labs/nia-skill \\",
3726
+ " --non-interactive \\",
3727
+ " --ci",
3728
+ "```",
3729
+ "",
3730
+ "Target pinning example:",
3731
+ "",
3732
+ "```bash",
3733
+ 'npx nia-wizard skill add --api-key "<nk_api_key>" --target codex --non-interactive --ci',
3734
+ "```",
3735
+ "",
3736
+ "Supported `--target` values:",
3737
+ "",
3738
+ "`amp`, `kimi-cli`, `replit`, `universal`, `antigravity`, `augment`, `claude-code`, `openclaw`, `cline`, `codebuddy`, `codex`, `command-code`, `continue`, `cortex`, `crush`, `cursor`, `droid`, `gemini-cli`, `github-copilot`, `goose`, `junie`, `iflow-cli`, `kilo`, `kiro-cli`, `kode`, `mcpjam`, `mistral-vibe`, `mux`, `opencode`, `openhands`, `pi`, `qoder`, `qwen-code`, `roo`, `trae`, `trae-cn`, `windsurf`, `zencoder`, `neovate`, `pochi`, `adal`",
3739
+ "",
3740
+ "## Command",
3741
+ "",
3742
+ "Print this guide any time:",
3743
+ "",
3744
+ "```bash",
3745
+ "npx nia-wizard agent-guide",
3746
+ "```"
3747
+ ].join("\n");
3748
+ function printAgentGuide() {
3749
+ console.log(AGENT_GUIDE_MARKDOWN);
3750
+ }
3751
+
3455
3752
  export {
3456
3753
  startDeviceSession,
3457
3754
  exchangeForApiKey,
@@ -3465,6 +3762,8 @@ export {
3465
3762
  removeMCPServerFromClientsStep,
3466
3763
  runWizard,
3467
3764
  runMCPAdd,
3468
- runMCPRemove
3765
+ runMCPRemove,
3766
+ runSkillAdd,
3767
+ printAgentGuide
3469
3768
  };
3470
- //# sourceMappingURL=chunk-QC5LWLXN.js.map
3769
+ //# sourceMappingURL=chunk-JKF3ZFD5.js.map