nia-wizard 0.1.31 → 0.1.33
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/bin.js +7 -2
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-VGEI6AOZ.js → chunk-7Y5PMZRX.js} +105 -14
- package/dist/chunk-7Y5PMZRX.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-VGEI6AOZ.js.map +0 -1
package/dist/bin.js
CHANGED
|
@@ -8,11 +8,15 @@ import {
|
|
|
8
8
|
runWizard,
|
|
9
9
|
shutdown,
|
|
10
10
|
track
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-7Y5PMZRX.js";
|
|
12
12
|
|
|
13
13
|
// src/bin.ts
|
|
14
14
|
import yargs from "yargs";
|
|
15
15
|
import { hideBin } from "yargs/helpers";
|
|
16
|
+
process.on("SIGINT", async () => {
|
|
17
|
+
await shutdown();
|
|
18
|
+
process.exit(0);
|
|
19
|
+
});
|
|
16
20
|
var isInteractive = Boolean(process.stdin.isTTY);
|
|
17
21
|
function printCliError(error) {
|
|
18
22
|
if (error instanceof Error) {
|
|
@@ -54,7 +58,8 @@ var cli = yargs(hideBin(process.argv)).scriptName("nia-wizard").usage("$0 [api-k
|
|
|
54
58
|
}
|
|
55
59
|
const apiKeyArg = typeof argv["api-key"] === "string" ? argv["api-key"] : typeof argv.apiKey === "string" ? argv.apiKey : void 0;
|
|
56
60
|
if (apiKeyArg === "agent-guide") {
|
|
57
|
-
|
|
61
|
+
printAgentGuide();
|
|
62
|
+
return;
|
|
58
63
|
}
|
|
59
64
|
const ci = argv.ci || !isInteractive;
|
|
60
65
|
if (!isInteractive && !argv.ci) {
|
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\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 .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 .option('agent', {\n type: 'boolean',\n default: false,\n description: 'Print agent-facing Nia CLI onboarding prompt',\n }),\n async (argv) => {\n try {\n if (argv.agent) {\n printAgentGuide();\n return;\n }\n\n const apiKeyArg = typeof argv['api-key'] === 'string'\n ? argv['api-key']\n : typeof argv.apiKey === 'string'\n ? argv.apiKey\n : undefined;\n\n if (apiKeyArg === 'agent-guide') {\n throw new Error('The `agent-guide` subcommand has been removed. Use `npx nia-wizard --agent`.');\n }\n\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\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 '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":"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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';\nimport { track, shutdown } from './utils/analytics.js';\n\n// Flush analytics on Ctrl+C so wizard_completed events aren't lost\nprocess.on('SIGINT', async () => {\n await shutdown();\n process.exit(0);\n});\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 .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 .option('agent', {\n type: 'boolean',\n default: false,\n description: 'Print agent-facing Nia CLI onboarding prompt',\n }),\n async (argv) => {\n try {\n if (argv.agent) {\n printAgentGuide();\n return;\n }\n\n const apiKeyArg = typeof argv['api-key'] === 'string'\n ? argv['api-key']\n : typeof argv.apiKey === 'string'\n ? argv.apiKey\n : undefined;\n\n if (apiKeyArg === 'agent-guide') {\n printAgentGuide();\n return;\n }\n\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\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 '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":"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","names":["yargs"]}
|
|
@@ -9,7 +9,7 @@ var require_package = __commonJS({
|
|
|
9
9
|
"package.json"(exports, module) {
|
|
10
10
|
module.exports = {
|
|
11
11
|
name: "nia-wizard",
|
|
12
|
-
version: "0.1.
|
|
12
|
+
version: "0.1.33",
|
|
13
13
|
description: "CLI wizard to install Nia to your coding agents",
|
|
14
14
|
packageManager: "pnpm@10.30.3",
|
|
15
15
|
type: "module",
|
|
@@ -520,6 +520,10 @@ async function runDeviceFlow() {
|
|
|
520
520
|
clack_default.log.error("Failed to connect to Nia servers. Check your internet connection.");
|
|
521
521
|
debug(`Device flow error: ${error}`);
|
|
522
522
|
}
|
|
523
|
+
track("cli_wizard_error", {
|
|
524
|
+
error_type: "device_session_start_failed",
|
|
525
|
+
error_message: isDeviceFlowError(error) ? error.message : "Failed to connect to Nia servers"
|
|
526
|
+
});
|
|
523
527
|
printManualOnboardingFallback();
|
|
524
528
|
clack_default.log.info("Falling back to manual API key entry.");
|
|
525
529
|
return await promptForManualApiKey();
|
|
@@ -557,18 +561,78 @@ async function runDeviceFlow() {
|
|
|
557
561
|
function sleep(ms) {
|
|
558
562
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
559
563
|
}
|
|
560
|
-
async function waitForAuthorizationAndExchange(
|
|
564
|
+
async function waitForAuthorizationAndExchange(initialSession) {
|
|
561
565
|
const spinner = clack_default.spinner();
|
|
562
566
|
spinner.start("Waiting for browser authorization...");
|
|
563
567
|
const POLL_INTERVAL_MS = 2e3;
|
|
564
568
|
const MAX_NETWORK_ERRORS = 5;
|
|
569
|
+
const MAX_SESSION_RETRIES = 2;
|
|
565
570
|
let consecutiveNetworkErrors = 0;
|
|
571
|
+
let session = initialSession;
|
|
572
|
+
let sessionRetries = 0;
|
|
573
|
+
let pollCount = 0;
|
|
566
574
|
while (true) {
|
|
567
575
|
if (!isSessionValid(session)) {
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
576
|
+
if (sessionRetries < MAX_SESSION_RETRIES) {
|
|
577
|
+
sessionRetries++;
|
|
578
|
+
spinner.stop("Session expired \u2014 starting a new one...");
|
|
579
|
+
try {
|
|
580
|
+
session = await startDeviceSession();
|
|
581
|
+
track("cli_device_flow_started", {
|
|
582
|
+
authorization_session_id: session.authorization_session_id,
|
|
583
|
+
retry: sessionRetries
|
|
584
|
+
});
|
|
585
|
+
const formattedCode = formatUserCode(session.user_code);
|
|
586
|
+
const timeRemaining = getSessionTimeRemaining(session);
|
|
587
|
+
console.log("");
|
|
588
|
+
clack_default.note(
|
|
589
|
+
`${chalk.bold("New authorization code:")}
|
|
590
|
+
|
|
591
|
+
${chalk.bold.green(formattedCode)}
|
|
592
|
+
|
|
593
|
+
` + chalk.dim(`Code expires in ${Math.floor(timeRemaining / 60)} minutes`),
|
|
594
|
+
"Session Renewed"
|
|
595
|
+
);
|
|
596
|
+
try {
|
|
597
|
+
await open(session.verification_url);
|
|
598
|
+
} catch {
|
|
599
|
+
}
|
|
600
|
+
clack_default.log.message(
|
|
601
|
+
chalk.dim("Browser opened. If not, go to:\n") + ` ${chalk.cyan(session.verification_url)}`
|
|
602
|
+
);
|
|
603
|
+
console.log("");
|
|
604
|
+
spinner.start("Waiting for browser authorization...");
|
|
605
|
+
pollCount = 0;
|
|
606
|
+
consecutiveNetworkErrors = 0;
|
|
607
|
+
continue;
|
|
608
|
+
} catch {
|
|
609
|
+
track("cli_wizard_error", {
|
|
610
|
+
error_type: "device_session_retry_failed",
|
|
611
|
+
error_message: "Failed to start new device session after expiry"
|
|
612
|
+
});
|
|
613
|
+
printManualOnboardingFallback();
|
|
614
|
+
clack_default.log.info("Falling back to manual API key entry.");
|
|
615
|
+
return await promptForManualApiKey();
|
|
616
|
+
}
|
|
617
|
+
} else {
|
|
618
|
+
spinner.stop("Session expired");
|
|
619
|
+
clack_default.log.error("Authorization session expired after multiple attempts.");
|
|
620
|
+
track("cli_wizard_error", {
|
|
621
|
+
error_type: "auth_session_expired",
|
|
622
|
+
error_message: `Session expired after ${MAX_SESSION_RETRIES} retries`
|
|
623
|
+
});
|
|
624
|
+
printManualOnboardingFallback();
|
|
625
|
+
return abort("Session expired", 1);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
const remaining = getSessionTimeRemaining(session);
|
|
629
|
+
const mins = Math.floor(remaining / 60);
|
|
630
|
+
const secs = remaining % 60;
|
|
631
|
+
const timeStr = `${mins}:${secs.toString().padStart(2, "0")}`;
|
|
632
|
+
if (pollCount > 0 && pollCount % 15 === 0) {
|
|
633
|
+
spinner.message(`Waiting... (${timeStr} remaining) \u2014 ${session.verification_url}`);
|
|
634
|
+
} else {
|
|
635
|
+
spinner.message(`Waiting for browser authorization... (${timeStr} remaining)`);
|
|
572
636
|
}
|
|
573
637
|
try {
|
|
574
638
|
const apiKey = await exchangeForApiKey(session);
|
|
@@ -582,18 +646,25 @@ async function waitForAuthorizationAndExchange(session) {
|
|
|
582
646
|
consecutiveNetworkErrors = 0;
|
|
583
647
|
break;
|
|
584
648
|
case "expired":
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
return abort("Session expired", 1);
|
|
649
|
+
session = { ...session, expires_at: (/* @__PURE__ */ new Date(0)).toISOString() };
|
|
650
|
+
consecutiveNetworkErrors = 0;
|
|
651
|
+
break;
|
|
589
652
|
case "consumed":
|
|
590
653
|
spinner.stop("Session already used");
|
|
591
654
|
clack_default.log.error("This session was already used.");
|
|
592
655
|
clack_default.log.info("Please run the wizard again to start a new session.");
|
|
656
|
+
track("cli_wizard_error", {
|
|
657
|
+
error_type: "auth_session_consumed",
|
|
658
|
+
error_message: error.message
|
|
659
|
+
});
|
|
593
660
|
return abort("Session already used", 1);
|
|
594
661
|
case "invalid":
|
|
595
662
|
spinner.stop("Invalid session");
|
|
596
663
|
clack_default.log.error(error.message);
|
|
664
|
+
track("cli_wizard_error", {
|
|
665
|
+
error_type: "auth_session_invalid",
|
|
666
|
+
error_message: error.message
|
|
667
|
+
});
|
|
597
668
|
printManualOnboardingFallback();
|
|
598
669
|
return abort("Invalid session", 1);
|
|
599
670
|
case "network":
|
|
@@ -601,6 +672,10 @@ async function waitForAuthorizationAndExchange(session) {
|
|
|
601
672
|
if (consecutiveNetworkErrors >= MAX_NETWORK_ERRORS) {
|
|
602
673
|
spinner.stop("Connection failed");
|
|
603
674
|
clack_default.log.error(`Failed to reach Nia servers after ${MAX_NETWORK_ERRORS} attempts.`);
|
|
675
|
+
track("cli_wizard_error", {
|
|
676
|
+
error_type: "auth_network_failure",
|
|
677
|
+
error_message: `${MAX_NETWORK_ERRORS} consecutive network errors`
|
|
678
|
+
});
|
|
604
679
|
printManualOnboardingFallback();
|
|
605
680
|
return await promptForManualApiKey();
|
|
606
681
|
}
|
|
@@ -608,6 +683,10 @@ async function waitForAuthorizationAndExchange(session) {
|
|
|
608
683
|
default:
|
|
609
684
|
spinner.stop("Error");
|
|
610
685
|
clack_default.log.error(error.message);
|
|
686
|
+
track("cli_wizard_error", {
|
|
687
|
+
error_type: "auth_unknown_error",
|
|
688
|
+
error_message: error.message
|
|
689
|
+
});
|
|
611
690
|
printManualOnboardingFallback();
|
|
612
691
|
return await promptForManualApiKey();
|
|
613
692
|
}
|
|
@@ -617,11 +696,16 @@ async function waitForAuthorizationAndExchange(session) {
|
|
|
617
696
|
spinner.stop("Connection failed");
|
|
618
697
|
clack_default.log.error("Lost connection to Nia servers.");
|
|
619
698
|
debug(`Exchange error: ${error}`);
|
|
699
|
+
track("cli_wizard_error", {
|
|
700
|
+
error_type: "auth_network_failure",
|
|
701
|
+
error_message: "Lost connection after consecutive errors"
|
|
702
|
+
});
|
|
620
703
|
printManualOnboardingFallback();
|
|
621
704
|
return await promptForManualApiKey();
|
|
622
705
|
}
|
|
623
706
|
}
|
|
624
707
|
}
|
|
708
|
+
pollCount++;
|
|
625
709
|
const backoff = consecutiveNetworkErrors > 0 ? POLL_INTERVAL_MS * Math.min(consecutiveNetworkErrors, 4) : POLL_INTERVAL_MS;
|
|
626
710
|
await sleep(backoff);
|
|
627
711
|
}
|
|
@@ -3630,6 +3714,7 @@ async function runWizard(options) {
|
|
|
3630
3714
|
installedAddMcp = true;
|
|
3631
3715
|
} else {
|
|
3632
3716
|
clack_default.log.warn("add-mcp installation may have failed");
|
|
3717
|
+
track("cli_wizard_error", { error_type: "install_failed", install_method: "add-mcp" });
|
|
3633
3718
|
}
|
|
3634
3719
|
}
|
|
3635
3720
|
if (action === "mcp") {
|
|
@@ -3681,6 +3766,7 @@ async function runWizard(options) {
|
|
|
3681
3766
|
installedSkills = true;
|
|
3682
3767
|
} else {
|
|
3683
3768
|
clack_default.log.warn("Skills installation may have failed");
|
|
3769
|
+
track("cli_wizard_error", { error_type: "install_failed", install_method: "skills" });
|
|
3684
3770
|
}
|
|
3685
3771
|
}
|
|
3686
3772
|
if (action === "nia-cli") {
|
|
@@ -3692,6 +3778,7 @@ async function runWizard(options) {
|
|
|
3692
3778
|
installedNiaCliSkill = true;
|
|
3693
3779
|
} else {
|
|
3694
3780
|
clack_default.log.warn("Nia CLI skill installation may have failed");
|
|
3781
|
+
track("cli_wizard_error", { error_type: "install_failed", install_method: "nia-cli" });
|
|
3695
3782
|
}
|
|
3696
3783
|
}
|
|
3697
3784
|
track("cli_install_completed", {
|
|
@@ -3699,7 +3786,13 @@ async function runWizard(options) {
|
|
|
3699
3786
|
success: installedAddMcp || installedMcp || installedSkills || installedNiaCliSkill,
|
|
3700
3787
|
mode: action === "mcp" ? options.local ? "local" : "remote" : void 0
|
|
3701
3788
|
});
|
|
3702
|
-
|
|
3789
|
+
const wizardOutcome = installedAddMcp || installedMcp || installedSkills || installedNiaCliSkill ? "success" : "no_changes";
|
|
3790
|
+
track("cli_wizard_completed", {
|
|
3791
|
+
outcome: wizardOutcome,
|
|
3792
|
+
install_method: action,
|
|
3793
|
+
total_duration_ms: Date.now() - startTime
|
|
3794
|
+
});
|
|
3795
|
+
if (wizardOutcome === "success") {
|
|
3703
3796
|
const niaSkillManagementHint = installedNiaCliSkill ? `
|
|
3704
3797
|
${chalk3.cyan("Nia CLI skill management:")} ${chalk3.yellow("Run `nia skill` any time to manage your skill.")}
|
|
3705
3798
|
` : "";
|
|
@@ -3721,10 +3814,8 @@ ${chalk3.dim("Using as API?")} ${chalk3.cyan("https://docs.trynia.ai/api-guide")
|
|
|
3721
3814
|
${chalk3.dim("Follow us:")} ${chalk3.cyan("https://x.com/nozomioai")}
|
|
3722
3815
|
`;
|
|
3723
3816
|
clack_default.outro(outroMessage);
|
|
3724
|
-
track("cli_wizard_completed", { outcome: "success", install_method: action, total_duration_ms: Date.now() - startTime });
|
|
3725
3817
|
} else {
|
|
3726
3818
|
clack_default.outro(chalk3.dim("No changes made."));
|
|
3727
|
-
track("cli_wizard_completed", { outcome: "no_changes", install_method: action, total_duration_ms: Date.now() - startTime });
|
|
3728
3819
|
}
|
|
3729
3820
|
await shutdown();
|
|
3730
3821
|
}
|
|
@@ -4136,4 +4227,4 @@ export {
|
|
|
4136
4227
|
getAgentGuideMarkdown,
|
|
4137
4228
|
printAgentGuide
|
|
4138
4229
|
};
|
|
4139
|
-
//# sourceMappingURL=chunk-
|
|
4230
|
+
//# sourceMappingURL=chunk-7Y5PMZRX.js.map
|