nia-wizard 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/README.md +3 -2
- package/dist/bin.js +5 -5
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-XF23S5X2.js → chunk-MC6VAW7S.js} +68 -52
- package/dist/chunk-MC6VAW7S.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +12 -11
- package/dist/chunk-XF23S5X2.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @nia/wizard
|
|
2
2
|
|
|
3
|
-
CLI wizard to install Nia to your coding agents via
|
|
3
|
+
CLI wizard to install Nia to your coding agents via Nia CLI, Skills, or direct agent setup.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -66,8 +66,9 @@ npx nia-wizard
|
|
|
66
66
|
|
|
67
67
|
The wizard stores your API key at `~/.config/nia/api_key`.
|
|
68
68
|
|
|
69
|
+
- Select `Install Nia CLI (recommended)` to auto-install `nia-cli`, run `nia auth login --api-key ...`, and then run `nia skill`.
|
|
69
70
|
- Select `Install Nia Skill` to use the existing `skills` CLI flow.
|
|
70
|
-
- Select `Install
|
|
71
|
+
- Select `Install via add-mcp` for a quick install to supported agents.
|
|
71
72
|
|
|
72
73
|
For deterministic agent/CI usage:
|
|
73
74
|
|
package/dist/bin.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
runMCPRemove,
|
|
7
7
|
runSkillAdd,
|
|
8
8
|
runWizard
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MC6VAW7S.js";
|
|
10
10
|
|
|
11
11
|
// src/bin.ts
|
|
12
12
|
import yargs from "yargs";
|
|
@@ -20,7 +20,7 @@ function printCliError(error) {
|
|
|
20
20
|
}
|
|
21
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(
|
|
22
22
|
"$0 [api-key]",
|
|
23
|
-
"Install Nia
|
|
23
|
+
"Install Nia to your coding agents",
|
|
24
24
|
(yargs2) => yargs2.positional("api-key", {
|
|
25
25
|
type: "string",
|
|
26
26
|
description: "Nia API key (nk_xxx)"
|
|
@@ -129,10 +129,10 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
|
|
|
129
129
|
}
|
|
130
130
|
).command(
|
|
131
131
|
"mcp <command>",
|
|
132
|
-
"Manage
|
|
132
|
+
"Manage direct agent setup",
|
|
133
133
|
(yargs2) => yargs2.command(
|
|
134
134
|
"add",
|
|
135
|
-
"Add Nia
|
|
135
|
+
"Add Nia to coding agents",
|
|
136
136
|
(yargs3) => yargs3.option("api-key", {
|
|
137
137
|
type: "string",
|
|
138
138
|
alias: "k",
|
|
@@ -167,7 +167,7 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
|
|
|
167
167
|
}
|
|
168
168
|
).command(
|
|
169
169
|
"remove",
|
|
170
|
-
"Remove Nia
|
|
170
|
+
"Remove Nia from coding agents",
|
|
171
171
|
(yargs3) => yargs3.option("debug", {
|
|
172
172
|
type: "boolean",
|
|
173
173
|
default: false,
|
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';\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"]}
|
|
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 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 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;AAMxB,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,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"]}
|
|
@@ -15,13 +15,15 @@ function debug(...args) {
|
|
|
15
15
|
var BACKEND_URL = process.env.NIA_BACKEND_URL || "https://apigcp.trynia.ai";
|
|
16
16
|
var APP_URL = process.env.NIA_APP_URL || "";
|
|
17
17
|
var SESSION_TTL_MS = 15 * 60 * 1e3;
|
|
18
|
+
var FETCH_TIMEOUT_MS = 1e4;
|
|
18
19
|
async function startDeviceSession() {
|
|
19
20
|
debug("Starting device session...");
|
|
20
21
|
const response = await fetch(`${BACKEND_URL}/public/mcp-device/start`, {
|
|
21
22
|
method: "POST",
|
|
22
23
|
headers: {
|
|
23
24
|
"Content-Type": "application/json"
|
|
24
|
-
}
|
|
25
|
+
},
|
|
26
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
|
|
25
27
|
});
|
|
26
28
|
if (!response.ok) {
|
|
27
29
|
const errorText = await response.text().catch(() => "Unknown error");
|
|
@@ -62,7 +64,8 @@ async function exchangeForApiKey(session) {
|
|
|
62
64
|
body: JSON.stringify({
|
|
63
65
|
authorization_session_id: session.authorization_session_id,
|
|
64
66
|
user_code: session.user_code
|
|
65
|
-
})
|
|
67
|
+
}),
|
|
68
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
|
|
66
69
|
});
|
|
67
70
|
if (!response.ok) {
|
|
68
71
|
const errorData = await response.json().catch(() => ({ detail: "Unknown error" }));
|
|
@@ -296,9 +299,9 @@ async function abort(message, code = 1) {
|
|
|
296
299
|
}
|
|
297
300
|
function printWelcome() {
|
|
298
301
|
console.log("");
|
|
299
|
-
clack_default.intro(chalk.bgCyan.black(" Nia
|
|
302
|
+
clack_default.intro(chalk.bgCyan.black(" Nia Wizard "));
|
|
300
303
|
clack_default.note(
|
|
301
|
-
"This wizard
|
|
304
|
+
"This wizard installs Nia for your coding agents.\nGet external docs, code search, and research tools inside your agent."
|
|
302
305
|
);
|
|
303
306
|
}
|
|
304
307
|
async function getApiKey(providedKey) {
|
|
@@ -376,68 +379,81 @@ async function runDeviceFlow() {
|
|
|
376
379
|
console.log("");
|
|
377
380
|
clack_default.log.step(chalk.yellow("Complete these steps in your browser:"));
|
|
378
381
|
console.log(" 1. Sign in or create an account");
|
|
379
|
-
console.log(" 2.
|
|
382
|
+
console.log(" 2. Complete any setup steps shown");
|
|
383
|
+
console.log("");
|
|
384
|
+
clack_default.log.message(chalk.dim("The CLI will detect when you're done and continue automatically."));
|
|
380
385
|
console.log("");
|
|
381
386
|
return await waitForAuthorizationAndExchange(session);
|
|
382
387
|
}
|
|
388
|
+
function sleep(ms) {
|
|
389
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
390
|
+
}
|
|
383
391
|
async function waitForAuthorizationAndExchange(session) {
|
|
392
|
+
const spinner = clack_default.spinner();
|
|
393
|
+
spinner.start("Waiting for browser authorization...");
|
|
394
|
+
const POLL_INTERVAL_MS = 2e3;
|
|
395
|
+
const MAX_NETWORK_ERRORS = 5;
|
|
396
|
+
let consecutiveNetworkErrors = 0;
|
|
384
397
|
while (true) {
|
|
385
398
|
if (!isSessionValid(session)) {
|
|
399
|
+
spinner.stop("Session expired");
|
|
386
400
|
clack_default.log.error("Session has expired. Please start over.");
|
|
387
401
|
return abort("Session expired", 1);
|
|
388
402
|
}
|
|
389
|
-
const shouldContinue = await abortIfCancelled(
|
|
390
|
-
clack_default.confirm({
|
|
391
|
-
message: "Press Enter once you've signed in (or N to enter key manually)",
|
|
392
|
-
initialValue: true
|
|
393
|
-
})
|
|
394
|
-
);
|
|
395
|
-
if (!shouldContinue) {
|
|
396
|
-
return await promptForManualApiKey();
|
|
397
|
-
}
|
|
398
|
-
const spinner = clack_default.spinner();
|
|
399
|
-
spinner.start("Checking authorization...");
|
|
400
403
|
try {
|
|
401
404
|
const apiKey = await exchangeForApiKey(session);
|
|
402
405
|
spinner.stop(chalk.green("\u2713 Authorized!"));
|
|
403
406
|
clack_default.log.success("API key obtained successfully!");
|
|
404
407
|
return apiKey;
|
|
405
408
|
} catch (error) {
|
|
406
|
-
spinner.stop("Not ready yet");
|
|
407
409
|
if (isDeviceFlowError(error)) {
|
|
408
410
|
switch (error.type) {
|
|
409
411
|
case "not_ready":
|
|
410
|
-
|
|
411
|
-
console.log("");
|
|
412
|
-
clack_default.log.message(
|
|
413
|
-
chalk.dim("Make sure you have:\n") + " \u2022 Signed in to your Nia account\n \u2022 Completed any setup steps in the browser"
|
|
414
|
-
);
|
|
415
|
-
console.log("");
|
|
412
|
+
consecutiveNetworkErrors = 0;
|
|
416
413
|
break;
|
|
417
414
|
case "expired":
|
|
415
|
+
spinner.stop("Session expired");
|
|
418
416
|
clack_default.log.error("Session has expired.");
|
|
419
417
|
clack_default.log.info("Please run the wizard again to start a new session.");
|
|
420
418
|
return abort("Session expired", 1);
|
|
421
419
|
case "consumed":
|
|
420
|
+
spinner.stop("Session already used");
|
|
422
421
|
clack_default.log.error("This session was already used.");
|
|
423
422
|
clack_default.log.info("Please run the wizard again to start a new session.");
|
|
424
423
|
return abort("Session already used", 1);
|
|
425
424
|
case "invalid":
|
|
425
|
+
spinner.stop("Invalid session");
|
|
426
426
|
clack_default.log.error(error.message);
|
|
427
427
|
clack_default.log.info("Please run the wizard again to start a new session.");
|
|
428
428
|
return abort("Invalid session", 1);
|
|
429
|
+
case "network":
|
|
430
|
+
consecutiveNetworkErrors++;
|
|
431
|
+
if (consecutiveNetworkErrors >= MAX_NETWORK_ERRORS) {
|
|
432
|
+
spinner.stop("Connection failed");
|
|
433
|
+
clack_default.log.error(`Failed to reach Nia servers after ${MAX_NETWORK_ERRORS} attempts.`);
|
|
434
|
+
clack_default.log.info("Falling back to manual API key entry.");
|
|
435
|
+
return await promptForManualApiKey();
|
|
436
|
+
}
|
|
437
|
+
break;
|
|
429
438
|
default:
|
|
439
|
+
spinner.stop("Error");
|
|
430
440
|
clack_default.log.error(error.message);
|
|
431
441
|
clack_default.log.info("Falling back to manual API key entry.");
|
|
432
442
|
return await promptForManualApiKey();
|
|
433
443
|
}
|
|
434
444
|
} else {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
445
|
+
consecutiveNetworkErrors++;
|
|
446
|
+
if (consecutiveNetworkErrors >= MAX_NETWORK_ERRORS) {
|
|
447
|
+
spinner.stop("Connection failed");
|
|
448
|
+
clack_default.log.error("Lost connection to Nia servers.");
|
|
449
|
+
debug(`Exchange error: ${error}`);
|
|
450
|
+
clack_default.log.info("Falling back to manual API key entry.");
|
|
451
|
+
return await promptForManualApiKey();
|
|
452
|
+
}
|
|
439
453
|
}
|
|
440
454
|
}
|
|
455
|
+
const backoff = consecutiveNetworkErrors > 0 ? POLL_INTERVAL_MS * Math.min(consecutiveNetworkErrors, 4) : POLL_INTERVAL_MS;
|
|
456
|
+
await sleep(backoff);
|
|
441
457
|
}
|
|
442
458
|
}
|
|
443
459
|
async function promptForManualApiKey() {
|
|
@@ -2855,7 +2871,7 @@ async function addMCPServerToClientsStep(options) {
|
|
|
2855
2871
|
}
|
|
2856
2872
|
}
|
|
2857
2873
|
const spinner = clack_default.spinner();
|
|
2858
|
-
spinner.start("Installing Nia
|
|
2874
|
+
spinner.start("Installing Nia in selected agents...");
|
|
2859
2875
|
const successfulClients = [];
|
|
2860
2876
|
const failedClients = [];
|
|
2861
2877
|
for (const client of selectedClients) {
|
|
@@ -2911,7 +2927,7 @@ async function removeMCPServerFromClientsStep() {
|
|
|
2911
2927
|
return [];
|
|
2912
2928
|
}
|
|
2913
2929
|
const spinner = clack_default.spinner();
|
|
2914
|
-
spinner.start("Removing Nia
|
|
2930
|
+
spinner.start("Removing Nia from selected agents...");
|
|
2915
2931
|
const removedClients = [];
|
|
2916
2932
|
for (const client of selectedClients) {
|
|
2917
2933
|
const result = await client.removeServer();
|
|
@@ -3367,40 +3383,40 @@ async function runWizard(options) {
|
|
|
3367
3383
|
enableDebug();
|
|
3368
3384
|
}
|
|
3369
3385
|
printWelcome();
|
|
3370
|
-
const
|
|
3371
|
-
clack_default.
|
|
3372
|
-
message: "
|
|
3386
|
+
const action = await abortIfCancelled(
|
|
3387
|
+
clack_default.select({
|
|
3388
|
+
message: "Choose how to install Nia:",
|
|
3373
3389
|
options: [
|
|
3374
3390
|
{
|
|
3375
3391
|
value: "nia-cli",
|
|
3376
|
-
label: "Install Nia CLI",
|
|
3377
|
-
hint: "
|
|
3378
|
-
},
|
|
3379
|
-
{
|
|
3380
|
-
value: "add-mcp",
|
|
3381
|
-
label: "Install via add-mcp",
|
|
3382
|
-
hint: "Quick install to all agents (new standard)"
|
|
3392
|
+
label: "Install Nia CLI (recommended)",
|
|
3393
|
+
hint: "Preferred path: installs nia CLI + skill"
|
|
3383
3394
|
},
|
|
3384
3395
|
{
|
|
3385
3396
|
value: "skills",
|
|
3386
3397
|
label: "Install Nia Skill",
|
|
3387
3398
|
hint: "Install via skills CLI"
|
|
3388
3399
|
},
|
|
3400
|
+
{
|
|
3401
|
+
value: "add-mcp",
|
|
3402
|
+
label: "Install via add-mcp",
|
|
3403
|
+
hint: "Quick install to supported agents"
|
|
3404
|
+
},
|
|
3389
3405
|
{
|
|
3390
3406
|
value: "mcp",
|
|
3391
|
-
label: "Install
|
|
3392
|
-
hint: "
|
|
3407
|
+
label: "Install via MCP",
|
|
3408
|
+
hint: "Will be deprecated soon; skills are better"
|
|
3393
3409
|
},
|
|
3394
3410
|
{
|
|
3395
3411
|
value: "manual",
|
|
3396
3412
|
label: "Manual Setup (View Config)",
|
|
3397
|
-
hint: "View
|
|
3413
|
+
hint: "View config for a specific agent"
|
|
3398
3414
|
}
|
|
3399
3415
|
],
|
|
3400
|
-
|
|
3416
|
+
initialValue: "nia-cli"
|
|
3401
3417
|
})
|
|
3402
3418
|
);
|
|
3403
|
-
if (
|
|
3419
|
+
if (action === "manual") {
|
|
3404
3420
|
await runManualMode();
|
|
3405
3421
|
return;
|
|
3406
3422
|
}
|
|
@@ -3411,7 +3427,7 @@ async function runWizard(options) {
|
|
|
3411
3427
|
let installedMcp = false;
|
|
3412
3428
|
let installedSkills = false;
|
|
3413
3429
|
let installedNiaCliSkill = false;
|
|
3414
|
-
if (
|
|
3430
|
+
if (action === "add-mcp") {
|
|
3415
3431
|
console.log("");
|
|
3416
3432
|
const success = await runAddMcpInstall(apiKey);
|
|
3417
3433
|
if (success) {
|
|
@@ -3421,7 +3437,7 @@ async function runWizard(options) {
|
|
|
3421
3437
|
clack_default.log.warn("add-mcp installation may have failed");
|
|
3422
3438
|
}
|
|
3423
3439
|
}
|
|
3424
|
-
if (
|
|
3440
|
+
if (action === "mcp") {
|
|
3425
3441
|
let mode;
|
|
3426
3442
|
if (options.local !== void 0) {
|
|
3427
3443
|
mode = options.local ? "local" : "remote";
|
|
@@ -3462,7 +3478,7 @@ async function runWizard(options) {
|
|
|
3462
3478
|
});
|
|
3463
3479
|
installedMcp = installedClients.length > 0;
|
|
3464
3480
|
}
|
|
3465
|
-
if (
|
|
3481
|
+
if (action === "skills") {
|
|
3466
3482
|
console.log("");
|
|
3467
3483
|
const success = await runSkillsInstall();
|
|
3468
3484
|
if (success) {
|
|
@@ -3472,7 +3488,7 @@ async function runWizard(options) {
|
|
|
3472
3488
|
clack_default.log.warn("Skills installation may have failed");
|
|
3473
3489
|
}
|
|
3474
3490
|
}
|
|
3475
|
-
if (
|
|
3491
|
+
if (action === "nia-cli") {
|
|
3476
3492
|
console.log("");
|
|
3477
3493
|
const success = await runNiaCliSkillInstall(apiKey);
|
|
3478
3494
|
if (success) {
|
|
@@ -3499,7 +3515,7 @@ ${chalk3.cyan("Get started:")}
|
|
|
3499
3515
|
${chalk3.cyan("Try in your coding agent:")}
|
|
3500
3516
|
${chalk3.yellow('"List my indexed sources"')}
|
|
3501
3517
|
${chalk3.yellow('"Search vercel/ai-sdk for streaming"')}
|
|
3502
|
-
${chalk3.yellow('"Run deep research on
|
|
3518
|
+
${chalk3.yellow('"Run deep research on agent tool protocols"')}
|
|
3503
3519
|
|
|
3504
3520
|
${chalk3.dim("Using as API?")} ${chalk3.cyan("https://docs.trynia.ai/api-guide")}
|
|
3505
3521
|
${chalk3.dim("Follow us:")} ${chalk3.cyan("https://x.com/nozomioai")}
|
|
@@ -3516,7 +3532,7 @@ async function runMCPAdd(options) {
|
|
|
3516
3532
|
if (options.debug) {
|
|
3517
3533
|
enableDebug();
|
|
3518
3534
|
}
|
|
3519
|
-
clack_default.intro(chalk4.bgCyan.black(" Nia
|
|
3535
|
+
clack_default.intro(chalk4.bgCyan.black(" Nia Agent Setup "));
|
|
3520
3536
|
const apiKey = await getApiKey(options.apiKey);
|
|
3521
3537
|
let mode;
|
|
3522
3538
|
if (options.local !== void 0) {
|
|
@@ -3567,7 +3583,7 @@ async function runMCPRemove(options = {}) {
|
|
|
3567
3583
|
if (options.debug) {
|
|
3568
3584
|
enableDebug();
|
|
3569
3585
|
}
|
|
3570
|
-
clack_default.intro(chalk4.bgRed.white(" Remove Nia
|
|
3586
|
+
clack_default.intro(chalk4.bgRed.white(" Remove Nia "));
|
|
3571
3587
|
const removedClients = await removeMCPServerFromClientsStep();
|
|
3572
3588
|
if (removedClients.length > 0) {
|
|
3573
3589
|
clack_default.log.message(
|
|
@@ -3889,4 +3905,4 @@ export {
|
|
|
3889
3905
|
runSkillAdd,
|
|
3890
3906
|
printAgentGuide
|
|
3891
3907
|
};
|
|
3892
|
-
//# sourceMappingURL=chunk-
|
|
3908
|
+
//# sourceMappingURL=chunk-MC6VAW7S.js.map
|