nia-wizard 0.1.25 → 0.1.27

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
@@ -1,4 +1,4 @@
1
- # @nia/wizard
1
+ # nia-wizard
2
2
 
3
3
  CLI wizard to install Nia to your coding agents via Nia CLI, Skills, or direct agent setup.
4
4
 
@@ -24,7 +24,7 @@ This will:
24
24
  npx nia-wizard
25
25
  ```
26
26
 
27
- Press Enter to continue with the recommended default setup, which signs you in and installs `nia-cli`, or use the arrow keys to choose advanced or manual setup.
27
+ Press Enter to continue with the recommended default setup, which signs you in and installs or updates `nia-cli` to the latest version, or use the arrow keys to choose advanced or manual setup.
28
28
 
29
29
  ### With API Key
30
30
 
@@ -41,20 +41,20 @@ npx nia-wizard nk_your_api_key
41
41
  If you already have an API key:
42
42
 
43
43
  ```bash
44
- npx @nia/wizard nk_your_api_key_here
44
+ npx nia-wizard nk_your_api_key_here
45
45
  ```
46
46
 
47
47
  ### MCP Commands
48
48
 
49
49
  ```bash
50
50
  # Add Nia MCP server
51
- npx @nia/wizard mcp add
51
+ npx nia-wizard mcp add
52
52
 
53
53
  # Add with API key and local mode
54
- npx @nia/wizard mcp add --api-key nk_xxx --local
54
+ npx nia-wizard mcp add --api-key nk_xxx --local
55
55
 
56
56
  # Remove Nia MCP server
57
- npx @nia/wizard mcp remove
57
+ npx nia-wizard mcp remove
58
58
  ```
59
59
 
60
60
  ### Skills Installation
@@ -68,7 +68,7 @@ npx nia-wizard
68
68
 
69
69
  The wizard stores your API key at `~/.config/nia/api_key`.
70
70
 
71
- - Select `Install Nia CLI (recommended)` to auto-install `@nozomioai/nia`, run `nia auth login --api-key ...`, and then run `nia skill`.
71
+ - Select `Install Nia CLI (recommended)` to auto-install or update `@nozomioai/nia` to the latest version, run `nia auth login --api-key ...`, and then run `nia skill`.
72
72
  - Select `Install Nia Skill` to use the existing `skills` CLI flow.
73
73
  - Select `Install via add-mcp` for a quick install to supported agents.
74
74
 
@@ -144,7 +144,7 @@ This is the fastest way to get started - no manual copying required!
144
144
  If you prefer, you can:
145
145
 
146
146
  - Get your API key from [app.trynia.ai](https://app.trynia.ai)
147
- - Pass it directly: `npx @nia/wizard nk_xxx`
147
+ - Pass it directly: `npx nia-wizard nk_xxx`
148
148
  - Or select "Enter API key manually" when prompted
149
149
 
150
150
  ## Supported Coding Agents
package/dist/bin.js CHANGED
@@ -8,11 +8,12 @@ import {
8
8
  runWizard,
9
9
  shutdown,
10
10
  track
11
- } from "./chunk-SEOYYWQT.js";
11
+ } from "./chunk-ZAV3ACJJ.js";
12
12
 
13
13
  // src/bin.ts
14
14
  import yargs from "yargs";
15
15
  import { hideBin } from "yargs/helpers";
16
+ var isInteractive = Boolean(process.stdin.isTTY);
16
17
  function printCliError(error) {
17
18
  if (error instanceof Error) {
18
19
  console.error(`Error: ${error.message}`);
@@ -42,12 +43,17 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
42
43
  description: "CI mode (skip prompts)"
43
44
  }),
44
45
  async (argv) => {
46
+ const ci = argv.ci || !isInteractive;
47
+ if (!isInteractive && !argv.ci) {
48
+ console.log("Non-interactive terminal detected, running in CI mode.");
49
+ console.log("For the full interactive experience, run: npx nia-wizard\n");
50
+ }
45
51
  try {
46
52
  await runWizard({
47
53
  apiKey: argv["api-key"],
48
54
  local: argv.local ?? (argv.remote ? false : void 0),
49
55
  debug: argv.debug,
50
- ci: argv.ci
56
+ ci
51
57
  });
52
58
  } catch (error) {
53
59
  track("cli_wizard_error", { error_type: "wizard", error_message: error instanceof Error ? error.message : String(error) });
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';\nimport { runSkillAdd } from './skill.js';\nimport { printAgentGuide } from './agent-guide.js';\nimport { track, shutdown } from './utils/analytics.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 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 track('cli_wizard_error', { error_type: 'wizard', error_message: error instanceof Error ? error.message : String(error) });\n await shutdown();\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 direct agent setup',\n (yargs) =>\n yargs\n .command(\n 'add',\n 'Add Nia 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 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":";;;;;;;;;;;;;AAEA,OAAO,WAAW;AAClB,SAAS,eAAe;AAOxB,SAAS,cAAc,OAAsB;AAC3C,MAAI,iBAAiB,OAAO;AAC1B,YAAQ,MAAM,UAAU,MAAM,OAAO,EAAE;AACvC;AAAA,EACF;AAEA,UAAQ,MAAM,UAAU,KAAK;AAC/B;AAEA,IAAM,MAAM,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACpC,WAAW,YAAY,EACvB,MAAM,wBAAwB,EAC9B,MAAM,sBAAsB,EAC5B,MAAM,yBAAyB,EAC/B,MAAM,wBAAwB,EAC9B,MAAM,gBAAgB,EACtB;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,YAAM,oBAAoB,EAAE,YAAY,UAAU,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AACzH,YAAM,SAAS;AACf,oBAAc,KAAK;AACnB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EAAC;AAAA,EACP,MAAM;AACJ,oBAAgB;AAAA,EAClB;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,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,cAAc;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,OAAO;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,mBAAmB;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,QAAQ;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,MACT,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,YAAY;AAAA,UAChB,QAAQ,KAAK,SAAS;AAAA,UACtB,QAAQ,KAAK;AAAA,UACb,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK,YAAY;AAAA,UAC5B,QAAQ,KAAK;AAAA,UACb,KAAK,KAAK;AAAA,UACV,gBAAgB,KAAK,iBAAiB;AAAA,UACtC,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,IAAI,KAAK;AAAA,QACX,CAAC;AAAA,MACH,SAAS,OAAO;AACd,sBAAc,KAAK;AACnB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF,EACC,cAAc,GAAG,qCAAqC;AAAA,EAC3D,MAAM;AAAA,EAAC;AACT,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,sBAAc,KAAK;AACnB,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,sBAAc,KAAK;AACnB,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';\nimport { track, shutdown } from './utils/analytics.js';\n\nconst isInteractive = Boolean(process.stdin.isTTY);\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 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 const ci = argv.ci || !isInteractive;\n if (!isInteractive && !argv.ci) {\n console.log('Non-interactive terminal detected, running in CI mode.');\n console.log('For the full interactive experience, run: npx nia-wizard\\n');\n }\n try {\n await runWizard({\n apiKey: argv['api-key'],\n local: argv.local ?? (argv.remote ? false : undefined),\n debug: argv.debug,\n ci,\n });\n } catch (error) {\n track('cli_wizard_error', { error_type: 'wizard', error_message: error instanceof Error ? error.message : String(error) });\n await shutdown();\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 direct agent setup',\n (yargs) =>\n yargs\n .command(\n 'add',\n 'Add Nia 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 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":";;;;;;;;;;;;;AAEA,OAAO,WAAW;AAClB,SAAS,eAAe;AAOxB,IAAM,gBAAgB,QAAQ,QAAQ,MAAM,KAAK;AAEjD,SAAS,cAAc,OAAsB;AAC3C,MAAI,iBAAiB,OAAO;AAC1B,YAAQ,MAAM,UAAU,MAAM,OAAO,EAAE;AACvC;AAAA,EACF;AAEA,UAAQ,MAAM,UAAU,KAAK;AAC/B;AAEA,IAAM,MAAM,MAAM,QAAQ,QAAQ,IAAI,CAAC,EACpC,WAAW,YAAY,EACvB,MAAM,wBAAwB,EAC9B,MAAM,sBAAsB,EAC5B,MAAM,yBAAyB,EAC/B,MAAM,wBAAwB,EAC9B,MAAM,gBAAgB,EACtB;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,UAAM,KAAK,KAAK,MAAM,CAAC;AACvB,QAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI;AAC9B,cAAQ,IAAI,wDAAwD;AACpE,cAAQ,IAAI,4DAA4D;AAAA,IAC1E;AACA,QAAI;AACF,YAAM,UAAU;AAAA,QACd,QAAQ,KAAK,SAAS;AAAA,QACtB,OAAO,KAAK,UAAU,KAAK,SAAS,QAAQ;AAAA,QAC5C,OAAO,KAAK;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,oBAAoB,EAAE,YAAY,UAAU,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC;AACzH,YAAM,SAAS;AACf,oBAAc,KAAK;AACnB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EAAC;AAAA,EACP,MAAM;AACJ,oBAAgB;AAAA,EAClB;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,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,cAAc;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,UAAU;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC,EACA,OAAO,OAAO;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,mBAAmB;AAAA,MACzB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC,EACA,OAAO,QAAQ;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,MACT,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,YAAY;AAAA,UAChB,QAAQ,KAAK,SAAS;AAAA,UACtB,QAAQ,KAAK;AAAA,UACb,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK,YAAY;AAAA,UAC5B,QAAQ,KAAK;AAAA,UACb,KAAK,KAAK;AAAA,UACV,gBAAgB,KAAK,iBAAiB;AAAA,UACtC,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,IAAI,KAAK;AAAA,QACX,CAAC;AAAA,MACH,SAAS,OAAO;AACd,sBAAc,KAAK;AACnB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF,EACC,cAAc,GAAG,qCAAqC;AAAA,EAC3D,MAAM;AAAA,EAAC;AACT,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,sBAAc,KAAK;AACnB,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,sBAAc,KAAK;AACnB,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"]}
@@ -9,8 +9,9 @@ var require_package = __commonJS({
9
9
  "package.json"(exports, module) {
10
10
  module.exports = {
11
11
  name: "nia-wizard",
12
- version: "0.1.25",
12
+ version: "0.1.27",
13
13
  description: "CLI wizard to install Nia to your coding agents",
14
+ packageManager: "pnpm@10.30.3",
14
15
  type: "module",
15
16
  main: "dist/index.js",
16
17
  bin: {
@@ -18,10 +19,13 @@ var require_package = __commonJS({
18
19
  },
19
20
  scripts: {
20
21
  build: "tsup",
22
+ changeset: "changeset",
21
23
  dev: "tsup --watch",
22
24
  start: "node dist/bin.js",
23
25
  try: "pnpm build && node dist/bin.js",
24
26
  typecheck: "tsc --noEmit",
27
+ "version-packages": "changeset version",
28
+ release: "pnpm build && changeset publish",
25
29
  lint: "eslint src --ext .ts",
26
30
  prepublishOnly: "pnpm build"
27
31
  },
@@ -43,7 +47,11 @@ var require_package = __commonJS({
43
47
  license: "MIT",
44
48
  repository: {
45
49
  type: "git",
46
- url: "https://github.com/nozomio/nia-wizard"
50
+ url: "git+https://github.com/nozomio-labs/nia-wizard.git"
51
+ },
52
+ homepage: "https://github.com/nozomio-labs/nia-wizard",
53
+ bugs: {
54
+ url: "https://github.com/nozomio-labs/nia-wizard/issues"
47
55
  },
48
56
  dependencies: {
49
57
  "@clack/prompts": "^0.9.1",
@@ -55,6 +63,7 @@ var require_package = __commonJS({
55
63
  zod: "^3.24.0"
56
64
  },
57
65
  devDependencies: {
66
+ "@changesets/cli": "^2.30.0",
58
67
  "@types/node": "^22.10.0",
59
68
  "@types/yargs": "^17.0.33",
60
69
  tsup: "^8.3.5",
@@ -483,6 +492,18 @@ async function getApiKey(providedKey, options = {}) {
483
492
  track("cli_auth_completed", { auth_method: authMethod, duration_ms: Date.now() - authStartTime });
484
493
  return apiKey;
485
494
  }
495
+ function printManualOnboardingFallback() {
496
+ console.log("");
497
+ clack_default.note(
498
+ `${chalk.bold("Finish setup at:")}
499
+
500
+ ${chalk.cyan(NIA_APP_URL)}
501
+
502
+ Once signed in, go to ${chalk.bold("Settings \u2192 API Keys")} to create a key.
503
+ Then re-run: ${chalk.yellow("npx nia-wizard <your-api-key>")}`,
504
+ "Manual Setup"
505
+ );
506
+ }
486
507
  async function runDeviceFlow() {
487
508
  const spinner = clack_default.spinner();
488
509
  spinner.start("Connecting to Nia...");
@@ -499,6 +520,7 @@ async function runDeviceFlow() {
499
520
  clack_default.log.error("Failed to connect to Nia servers. Check your internet connection.");
500
521
  debug(`Device flow error: ${error}`);
501
522
  }
523
+ printManualOnboardingFallback();
502
524
  clack_default.log.info("Falling back to manual API key entry.");
503
525
  return await promptForManualApiKey();
504
526
  }
@@ -544,7 +566,8 @@ async function waitForAuthorizationAndExchange(session) {
544
566
  while (true) {
545
567
  if (!isSessionValid(session)) {
546
568
  spinner.stop("Session expired");
547
- clack_default.log.error("Session has expired. Please start over.");
569
+ clack_default.log.error("Authorization session expired before completing.");
570
+ printManualOnboardingFallback();
548
571
  return abort("Session expired", 1);
549
572
  }
550
573
  try {
@@ -560,8 +583,8 @@ async function waitForAuthorizationAndExchange(session) {
560
583
  break;
561
584
  case "expired":
562
585
  spinner.stop("Session expired");
563
- clack_default.log.error("Session has expired.");
564
- clack_default.log.info("Please run the wizard again to start a new session.");
586
+ clack_default.log.error("Authorization session expired.");
587
+ printManualOnboardingFallback();
565
588
  return abort("Session expired", 1);
566
589
  case "consumed":
567
590
  spinner.stop("Session already used");
@@ -571,21 +594,21 @@ async function waitForAuthorizationAndExchange(session) {
571
594
  case "invalid":
572
595
  spinner.stop("Invalid session");
573
596
  clack_default.log.error(error.message);
574
- clack_default.log.info("Please run the wizard again to start a new session.");
597
+ printManualOnboardingFallback();
575
598
  return abort("Invalid session", 1);
576
599
  case "network":
577
600
  consecutiveNetworkErrors++;
578
601
  if (consecutiveNetworkErrors >= MAX_NETWORK_ERRORS) {
579
602
  spinner.stop("Connection failed");
580
603
  clack_default.log.error(`Failed to reach Nia servers after ${MAX_NETWORK_ERRORS} attempts.`);
581
- clack_default.log.info("Falling back to manual API key entry.");
604
+ printManualOnboardingFallback();
582
605
  return await promptForManualApiKey();
583
606
  }
584
607
  break;
585
608
  default:
586
609
  spinner.stop("Error");
587
610
  clack_default.log.error(error.message);
588
- clack_default.log.info("Falling back to manual API key entry.");
611
+ printManualOnboardingFallback();
589
612
  return await promptForManualApiKey();
590
613
  }
591
614
  } else {
@@ -594,7 +617,7 @@ async function waitForAuthorizationAndExchange(session) {
594
617
  spinner.stop("Connection failed");
595
618
  clack_default.log.error("Lost connection to Nia servers.");
596
619
  debug(`Exchange error: ${error}`);
597
- clack_default.log.info("Falling back to manual API key entry.");
620
+ printManualOnboardingFallback();
598
621
  return await promptForManualApiKey();
599
622
  }
600
623
  }
@@ -604,6 +627,10 @@ async function waitForAuthorizationAndExchange(session) {
604
627
  }
605
628
  }
606
629
  async function promptForManualApiKey() {
630
+ if (!process.stdin.isTTY) {
631
+ printManualOnboardingFallback();
632
+ return abort("No interactive terminal available. Please re-run with an API key.", 1);
633
+ }
607
634
  const shouldOpen = await abortIfCancelled(
608
635
  clack_default.confirm({
609
636
  message: `Open ${chalk.cyan(NIA_APP_URL)} to get your API key?`,
@@ -3313,32 +3340,62 @@ function dependenciesReady() {
3313
3340
  // src/utils/nia-cli.ts
3314
3341
  import { spawnSync as spawnSync5 } from "child_process";
3315
3342
  var NIA_CLI_PACKAGE = "@nozomioai/nia";
3343
+ var LATEST_NIA_CLI_PACKAGE = `${NIA_CLI_PACKAGE}@latest`;
3316
3344
  function npmCommand() {
3317
3345
  return process.platform === "win32" ? "npm.cmd" : "npm";
3318
3346
  }
3347
+ function bunCommand() {
3348
+ return process.platform === "win32" ? "bun.exe" : "bun";
3349
+ }
3319
3350
  function npxCommand() {
3320
3351
  return process.platform === "win32" ? "npx.cmd" : "npx";
3321
3352
  }
3322
- function niaCommand() {
3323
- return process.platform === "win32" ? "nia.cmd" : "nia";
3353
+ function bunxCommand() {
3354
+ return process.platform === "win32" ? "bunx.exe" : "bunx";
3324
3355
  }
3325
- function isNiaCliInstalled() {
3326
- const result = spawnSync5(niaCommand(), ["--version"], {
3356
+ function hasCommand(command, args = ["--version"]) {
3357
+ const result = spawnSync5(command, args, {
3327
3358
  stdio: "pipe",
3328
3359
  encoding: "utf-8",
3329
3360
  shell: false
3330
3361
  });
3331
- debug("nia --version status", result.status);
3362
+ debug(`${command} ${args.join(" ")} status`, result.status);
3363
+ return result.status === 0;
3364
+ }
3365
+ function isNiaCliInstalled() {
3366
+ return hasCommand(process.platform === "win32" ? "nia.cmd" : "nia");
3367
+ }
3368
+ function hasBun() {
3369
+ return hasCommand(bunCommand());
3370
+ }
3371
+ function runLatestNia(args) {
3372
+ if (hasBun()) {
3373
+ const result2 = spawnSync5(bunxCommand(), ["-p", LATEST_NIA_CLI_PACKAGE, "nia", ...args], {
3374
+ stdio: "inherit",
3375
+ shell: false
3376
+ });
3377
+ return result2.status === 0;
3378
+ }
3379
+ const result = spawnSync5(npxCommand(), ["-y", "-p", LATEST_NIA_CLI_PACKAGE, "nia", ...args], {
3380
+ stdio: "inherit",
3381
+ shell: false
3382
+ });
3332
3383
  return result.status === 0;
3333
3384
  }
3334
3385
  function ensureNiaCliInstalled() {
3386
+ const bunAvailable = hasBun();
3387
+ const installSpinner = clack_default.spinner();
3335
3388
  if (isNiaCliInstalled()) {
3336
- return true;
3389
+ clack_default.log.info(`Updating ${LATEST_NIA_CLI_PACKAGE} globally with ${bunAvailable ? "bun" : "npm"}...`);
3390
+ } else {
3391
+ clack_default.log.info(`Installing ${LATEST_NIA_CLI_PACKAGE} globally with ${bunAvailable ? "bun" : "npm"}...`);
3337
3392
  }
3338
- clack_default.log.info("Installing @nozomioai/nia globally with npm...");
3339
- const installSpinner = clack_default.spinner();
3340
- installSpinner.start("Installing @nozomioai/nia...");
3341
- const installResult = spawnSync5(npmCommand(), ["install", "-g", NIA_CLI_PACKAGE], {
3393
+ installSpinner.start(`Installing ${LATEST_NIA_CLI_PACKAGE}...`);
3394
+ const installResult = bunAvailable ? spawnSync5(bunCommand(), ["add", "-g", LATEST_NIA_CLI_PACKAGE], {
3395
+ stdio: "pipe",
3396
+ encoding: "utf-8",
3397
+ shell: false
3398
+ }) : spawnSync5(npmCommand(), ["install", "-g", LATEST_NIA_CLI_PACKAGE], {
3342
3399
  stdio: "pipe",
3343
3400
  encoding: "utf-8",
3344
3401
  shell: false
@@ -3350,53 +3407,27 @@ function ensureNiaCliInstalled() {
3350
3407
  clack_default.log.error(installOutput);
3351
3408
  }
3352
3409
  clack_default.log.error("Could not install @nozomioai/nia automatically.");
3353
- clack_default.log.info("Install manually: npm install -g @nozomioai/nia");
3410
+ clack_default.log.info(
3411
+ `Install manually: ${bunAvailable ? "bun add -g" : "npm install -g"} ${LATEST_NIA_CLI_PACKAGE}`
3412
+ );
3354
3413
  return false;
3355
3414
  }
3356
3415
  if (!isNiaCliInstalled()) {
3357
3416
  installSpinner.stop("Installed @nozomioai/nia, but `nia` is not available");
3358
3417
  clack_default.log.error("The `nia` command is still unavailable in your PATH.");
3359
- clack_default.log.info("Open a new terminal or run: npm install -g @nozomioai/nia");
3418
+ clack_default.log.info(
3419
+ `Open a new terminal or run: ${bunAvailable ? "bun add -g" : "npm install -g"} ${LATEST_NIA_CLI_PACKAGE}`
3420
+ );
3360
3421
  return false;
3361
3422
  }
3362
- installSpinner.stop("@nozomioai/nia installed!");
3423
+ installSpinner.stop(`${LATEST_NIA_CLI_PACKAGE} ready!`);
3363
3424
  return true;
3364
3425
  }
3365
3426
  function runNiaSkill() {
3366
- const runResult = spawnSync5(niaCommand(), ["skill", "--all"], {
3367
- stdio: "inherit",
3368
- shell: false
3369
- });
3370
- if (runResult.status === 0) {
3371
- return true;
3372
- }
3373
- debug("nia skill --all failed, falling back to npx @nozomioai/nia skill --all", runResult.status);
3374
- clack_default.log.warn("`nia skill --all` failed. Trying `npx -y @nozomioai/nia skill --all`...");
3375
- const fallbackResult = spawnSync5(npxCommand(), ["-y", NIA_CLI_PACKAGE, "skill", "--all"], {
3376
- stdio: "inherit",
3377
- shell: false
3378
- });
3379
- return fallbackResult.status === 0;
3427
+ return runLatestNia(["skill", "--all"]);
3380
3428
  }
3381
3429
  function runNiaAuthLogin(apiKey) {
3382
- const authResult = spawnSync5(niaCommand(), ["auth", "login", "--api-key", apiKey], {
3383
- stdio: "inherit",
3384
- shell: false
3385
- });
3386
- if (authResult.status === 0) {
3387
- return true;
3388
- }
3389
- debug("nia auth login failed, falling back to npx @nozomioai/nia auth login", authResult.status);
3390
- clack_default.log.warn("`nia auth login` failed. Trying `npx -y @nozomioai/nia auth login`...");
3391
- const fallbackResult = spawnSync5(
3392
- npxCommand(),
3393
- ["-y", NIA_CLI_PACKAGE, "auth", "login", "--api-key", apiKey],
3394
- {
3395
- stdio: "inherit",
3396
- shell: false
3397
- }
3398
- );
3399
- return fallbackResult.status === 0;
3430
+ return runLatestNia(["auth", "login", "--api-key", apiKey]);
3400
3431
  }
3401
3432
 
3402
3433
  // src/run.ts
@@ -3405,7 +3436,7 @@ async function runAddMcpInstall(apiKey) {
3405
3436
  const result = spawnSync6(
3406
3437
  "npx",
3407
3438
  [
3408
- "add-mcp",
3439
+ "add-mcp@latest",
3409
3440
  REMOTE_MCP_URL,
3410
3441
  "--header",
3411
3442
  `"Authorization: Bearer ${apiKey}"`,
@@ -3422,7 +3453,7 @@ async function runAddMcpInstall(apiKey) {
3422
3453
  }
3423
3454
  async function runSkillsInstall() {
3424
3455
  clack_default.log.info("Launching Nia skill installer...\n");
3425
- const result = spawnSync6("npx", ["skills", "add", "nozomio-labs/nia-skill"], {
3456
+ const result = spawnSync6("npx", ["skills@latest", "add", "nozomio-labs/nia-skill"], {
3426
3457
  stdio: "inherit",
3427
3458
  shell: true
3428
3459
  });
@@ -4072,4 +4103,4 @@ export {
4072
4103
  runSkillAdd,
4073
4104
  printAgentGuide
4074
4105
  };
4075
- //# sourceMappingURL=chunk-SEOYYWQT.js.map
4106
+ //# sourceMappingURL=chunk-ZAV3ACJJ.js.map