arkna 1.0.0

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.
Files changed (50) hide show
  1. package/bin/arkna.js +2 -0
  2. package/dist/commands/connect.d.ts +3 -0
  3. package/dist/commands/connect.d.ts.map +1 -0
  4. package/dist/commands/connect.js +307 -0
  5. package/dist/commands/connect.js.map +1 -0
  6. package/dist/commands/login.d.ts +3 -0
  7. package/dist/commands/login.d.ts.map +1 -0
  8. package/dist/commands/login.js +292 -0
  9. package/dist/commands/login.js.map +1 -0
  10. package/dist/commands/status.d.ts +3 -0
  11. package/dist/commands/status.d.ts.map +1 -0
  12. package/dist/commands/status.js +119 -0
  13. package/dist/commands/status.js.map +1 -0
  14. package/dist/commands/sync.d.ts +3 -0
  15. package/dist/commands/sync.d.ts.map +1 -0
  16. package/dist/commands/sync.js +65 -0
  17. package/dist/commands/sync.js.map +1 -0
  18. package/dist/commands/test.d.ts +3 -0
  19. package/dist/commands/test.d.ts.map +1 -0
  20. package/dist/commands/test.js +142 -0
  21. package/dist/commands/test.js.map +1 -0
  22. package/dist/commands/verify.d.ts +3 -0
  23. package/dist/commands/verify.d.ts.map +1 -0
  24. package/dist/commands/verify.js +139 -0
  25. package/dist/commands/verify.js.map +1 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +27 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/arkna-dir.d.ts +83 -0
  31. package/dist/lib/arkna-dir.d.ts.map +1 -0
  32. package/dist/lib/arkna-dir.js +184 -0
  33. package/dist/lib/arkna-dir.js.map +1 -0
  34. package/dist/lib/connectivity.d.ts +35 -0
  35. package/dist/lib/connectivity.d.ts.map +1 -0
  36. package/dist/lib/connectivity.js +208 -0
  37. package/dist/lib/connectivity.js.map +1 -0
  38. package/dist/lib/platforms.d.ts +13 -0
  39. package/dist/lib/platforms.d.ts.map +1 -0
  40. package/dist/lib/platforms.js +348 -0
  41. package/dist/lib/platforms.js.map +1 -0
  42. package/dist/lib/ui.d.ts +28 -0
  43. package/dist/lib/ui.d.ts.map +1 -0
  44. package/dist/lib/ui.js +176 -0
  45. package/dist/lib/ui.js.map +1 -0
  46. package/dist/lib/verify.d.ts +15 -0
  47. package/dist/lib/verify.d.ts.map +1 -0
  48. package/dist/lib/verify.js +33 -0
  49. package/dist/lib/verify.js.map +1 -0
  50. package/package.json +42 -0
package/bin/arkna.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js');
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const connectCommand: Command;
3
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EpC,eAAO,MAAM,cAAc,SAmOvB,CAAC"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.connectCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const inquirer_1 = __importDefault(require("inquirer"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const ui_1 = require("../lib/ui");
45
+ const arkna_dir_1 = require("../lib/arkna-dir");
46
+ const verify_1 = require("../lib/verify");
47
+ const platforms_1 = require("../lib/platforms");
48
+ const VALID_PLATFORMS = ['openclaw', 'crewai', 'langchain', 'custom'];
49
+ /**
50
+ * Resolve token from (in priority order):
51
+ * 1. ARKNA_TOKEN env var
52
+ * 2. .arkna/.env file
53
+ * 3. Interactive secure prompt
54
+ * 4. -t flag (last resort — leaks to shell history)
55
+ */
56
+ async function resolveToken(flagToken, baseDir) {
57
+ // 1. Env var
58
+ if (process.env.ARKNA_TOKEN) {
59
+ console.log(` ${(0, ui_1.dim)('Token:')} from ARKNA_TOKEN env var`);
60
+ return process.env.ARKNA_TOKEN;
61
+ }
62
+ // 2. .arkna/.env
63
+ const envCreds = (0, arkna_dir_1.readArknaEnv)(baseDir);
64
+ if (envCreds?.token) {
65
+ console.log(` ${(0, ui_1.dim)('Token:')} from .arkna/.env`);
66
+ return envCreds.token;
67
+ }
68
+ // 3. -t flag (warn about shell history)
69
+ if (flagToken) {
70
+ console.log(` ${(0, ui_1.warn)('\u26A0')} ${(0, ui_1.dim)('Token passed via -t flag (visible in shell history)')}`);
71
+ return flagToken;
72
+ }
73
+ // 4. Interactive secure prompt
74
+ console.log(` ${(0, ui_1.dim)('No token found. Run')} ${(0, ui_1.brand)('arkna login')} ${(0, ui_1.dim)('first, or paste token below:')}`);
75
+ const { token } = await inquirer_1.default.prompt([{
76
+ type: 'password',
77
+ name: 'token',
78
+ message: (0, ui_1.brand)(' Token:'),
79
+ mask: '\u25CF',
80
+ prefix: '',
81
+ validate: (input) => {
82
+ if (!input || !input.startsWith('intk_')) {
83
+ return 'Token must start with intk_';
84
+ }
85
+ return true;
86
+ },
87
+ }]);
88
+ return token;
89
+ }
90
+ /**
91
+ * Resolve URL from (in priority order):
92
+ * 1. -u flag
93
+ * 2. ARKNA_URL env var
94
+ * 3. .arkna/.env file
95
+ * 4. Default
96
+ */
97
+ function resolveUrl(flagUrl, baseDir) {
98
+ if (flagUrl)
99
+ return flagUrl;
100
+ if (process.env.ARKNA_URL)
101
+ return process.env.ARKNA_URL;
102
+ const envCreds = (0, arkna_dir_1.readArknaEnv)(baseDir);
103
+ if (envCreds?.url)
104
+ return envCreds.url;
105
+ return 'https://api.arkna.com.au';
106
+ }
107
+ exports.connectCommand = new commander_1.Command('connect')
108
+ .description('Wire an agent to route through the ARKNA governance gateway')
109
+ .argument('<platform>', `Agent platform (${VALID_PLATFORMS.join(', ')})`)
110
+ .option('-t, --token <token>', 'Integration token (prefer ARKNA_TOKEN env var instead)')
111
+ .option('-u, --url <url>', 'ARKNA gateway URL (or set ARKNA_URL env var)')
112
+ .option('-n, --name <name>', 'Agent name')
113
+ .option('-c, --config <path>', 'Path to agent config file (OpenClaw: YAML to modify)')
114
+ .option('-d, --dir <dir>', 'Output dir for wrapper files (CrewAI/LangChain)')
115
+ .action(async (platform, options) => {
116
+ (0, ui_1.banner)();
117
+ // ── Validate platform ────────────────────────────────────────────────
118
+ if (!VALID_PLATFORMS.includes(platform)) {
119
+ (0, ui_1.errorBox)('Invalid platform', [
120
+ `Got: ${platform}`,
121
+ (0, ui_1.dim)(`Valid platforms: ${VALID_PLATFORMS.join(', ')}`),
122
+ ]);
123
+ process.exit(1);
124
+ }
125
+ const outputDir = options.dir || process.cwd();
126
+ const baseDir = options.config ? path.dirname(options.config) : outputDir;
127
+ // ── Resolve URL ──────────────────────────────────────────────────────
128
+ const url = resolveUrl(options.url, baseDir);
129
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
130
+ (0, ui_1.errorBox)('Invalid gateway URL', [
131
+ `Got: ${url}`,
132
+ (0, ui_1.dim)('URL must start with http:// or https://'),
133
+ ]);
134
+ process.exit(1);
135
+ }
136
+ // ── Resolve token (env > .arkna/.env > prompt > flag) ────────────────
137
+ const token = await resolveToken(options.token, baseDir);
138
+ if (!token.startsWith('intk_')) {
139
+ (0, ui_1.errorBox)('Invalid token', [
140
+ (0, ui_1.dim)('Token must start with intk_'),
141
+ (0, ui_1.dim)('Create one in Settings > External Agents.'),
142
+ ]);
143
+ process.exit(1);
144
+ }
145
+ const agentName = options.name || os.hostname();
146
+ // ── Step 1: Platform-specific wiring ─────────────────────────────────
147
+ (0, ui_1.step)(1, 3, 'Wire Agent');
148
+ let patchText;
149
+ switch (platform) {
150
+ case 'openclaw': {
151
+ if (options.config) {
152
+ const spinner = (0, ui_1.startSpinner)('Modifying OpenClaw config...');
153
+ const result = (0, platforms_1.wireOpenClaw)(options.config, url, agentName);
154
+ spinner.stop();
155
+ if (!result.success) {
156
+ (0, ui_1.errorBox)('Failed to modify config', [
157
+ result.error || 'Unknown error',
158
+ ]);
159
+ process.exit(1);
160
+ }
161
+ if (result.alreadyConfigured) {
162
+ console.log(` ${(0, ui_1.dim)('connectors.arkna already exists \u2014 skipping.')}`);
163
+ }
164
+ else {
165
+ console.log(` ${(0, ui_1.brand)('\u2714')} Modified ${options.config}`);
166
+ console.log(` ${(0, ui_1.dim)('Backup saved to ' + options.config + '.bak')}`);
167
+ }
168
+ }
169
+ else {
170
+ // No config file provided — print the YAML block
171
+ console.log(` ${(0, ui_1.dim)('No --config provided. Add this to your OpenClaw YAML:')}\n`);
172
+ console.log((0, ui_1.dim)((0, platforms_1.getOpenClawYamlBlock)(agentName)));
173
+ patchText = 'Add the YAML block above to your OpenClaw config file.';
174
+ }
175
+ break;
176
+ }
177
+ case 'crewai': {
178
+ const spinner = (0, ui_1.startSpinner)('Generating CrewAI wrapper...');
179
+ const result = (0, platforms_1.wireCrewAI)(outputDir, agentName);
180
+ spinner.stop();
181
+ if (!result.success) {
182
+ (0, ui_1.errorBox)('Failed to generate wrapper', [result.error || 'Unknown error']);
183
+ process.exit(1);
184
+ }
185
+ patchText = result.patch;
186
+ console.log(` ${(0, ui_1.brand)('\u2714')} Created ${result.wrapperPath}`);
187
+ break;
188
+ }
189
+ case 'langchain': {
190
+ const spinner = (0, ui_1.startSpinner)('Generating LangChain wrapper...');
191
+ const result = (0, platforms_1.wireLangChain)(outputDir, agentName);
192
+ spinner.stop();
193
+ if (!result.success) {
194
+ (0, ui_1.errorBox)('Failed to generate wrapper', [result.error || 'Unknown error']);
195
+ process.exit(1);
196
+ }
197
+ patchText = result.patch;
198
+ console.log(` ${(0, ui_1.brand)('\u2714')} Created ${result.wrapperPath}`);
199
+ break;
200
+ }
201
+ case 'custom': {
202
+ patchText = (0, platforms_1.getCustomPatch)(agentName);
203
+ console.log(` ${(0, ui_1.dim)('Add these API calls to your agent:')}\n`);
204
+ console.log((0, ui_1.dim)(patchText));
205
+ break;
206
+ }
207
+ }
208
+ // ── Step 2: Verify gateway ───────────────────────────────────────────
209
+ (0, ui_1.step)(2, 3, 'Verify Gateway');
210
+ let activeToken = token;
211
+ let { gatewayOk, tokenOk } = await (0, verify_1.verifyGateway)(url, activeToken);
212
+ // If env var token failed, try .arkna/.env token (may be newer from arkna login)
213
+ if (gatewayOk && !tokenOk && process.env.ARKNA_TOKEN) {
214
+ const fileEnv = (0, arkna_dir_1.readArknaEnv)(baseDir);
215
+ if (fileEnv?.token && fileEnv.token !== activeToken) {
216
+ console.log(`\n ${(0, ui_1.warn)('\u26A0')} ${(0, ui_1.dim)('Env var token rejected. Trying token from .arkna/.env...')}`);
217
+ const retry = await (0, verify_1.verifyGateway)(url, fileEnv.token);
218
+ if (retry.tokenOk) {
219
+ activeToken = fileEnv.token;
220
+ gatewayOk = retry.gatewayOk;
221
+ tokenOk = retry.tokenOk;
222
+ console.log(` ${(0, ui_1.dim)('Using newer token from .arkna/.env (run')} ${(0, ui_1.brand)('source .arkna/.env')} ${(0, ui_1.dim)('to fix your shell)')}`);
223
+ }
224
+ }
225
+ }
226
+ // ── Step 3: Write .arkna/.env ────────────────────────────────────────
227
+ (0, ui_1.step)(3, 3, 'Save Credentials');
228
+ const files = (0, arkna_dir_1.writeTokenEnv)(url, activeToken, baseDir);
229
+ (0, ui_1.fileTree)('.arkna', files);
230
+ // ── Summary ──────────────────────────────────────────────────────────
231
+ (0, ui_1.divider)();
232
+ if (gatewayOk && tokenOk) {
233
+ (0, ui_1.successBox)('CONFIGURED', [
234
+ `${(0, ui_1.dim)('Agent:')} ${agentName}`,
235
+ `${(0, ui_1.dim)('Platform:')} ${platform}`,
236
+ `${(0, ui_1.dim)('Gateway:')} ${url}`,
237
+ `${(0, ui_1.dim)('Token:')} valid`,
238
+ ]);
239
+ if (patchText && platform !== 'custom' && platform !== 'openclaw') {
240
+ (0, ui_1.hint)([
241
+ `${(0, ui_1.brandBold)('NEXT:')} Add these lines to your agent:`,
242
+ '',
243
+ ...patchText.split('\n').map(l => ` ${(0, ui_1.dim)(l)}`),
244
+ ]);
245
+ }
246
+ }
247
+ else if (gatewayOk && !tokenOk) {
248
+ // Token failed — check if .arkna/.env has a different (newer) token
249
+ const fileEnv = (0, arkna_dir_1.readArknaEnv)(baseDir);
250
+ const usingEnvVar = !!process.env.ARKNA_TOKEN;
251
+ const fileHasDifferentToken = fileEnv?.token && fileEnv.token !== token;
252
+ if (usingEnvVar && fileHasDifferentToken) {
253
+ (0, ui_1.errorBox)('Stale ARKNA_TOKEN env var', [
254
+ `${(0, ui_1.dim)('The ARKNA_TOKEN env var contains an old token that the gateway rejected.')}`,
255
+ `${(0, ui_1.dim)('.arkna/.env has a newer token (from arkna login).')}`,
256
+ '',
257
+ `${(0, ui_1.dim)('Fix:')} ${(0, ui_1.brand)('unset ARKNA_TOKEN')} ${(0, ui_1.dim)('then re-run this command.')}`,
258
+ `${(0, ui_1.dim)(' or:')} ${(0, ui_1.brand)('source .arkna/.env')} ${(0, ui_1.dim)('then re-run this command.')}`,
259
+ ]);
260
+ }
261
+ else {
262
+ (0, ui_1.errorBox)('Token rejected by gateway', [
263
+ (0, ui_1.dim)('The gateway returned 401 for this token.'),
264
+ (0, ui_1.dim)('Run `arkna login` to get a fresh token, then retry.'),
265
+ ]);
266
+ }
267
+ }
268
+ else {
269
+ (0, ui_1.errorBox)('Gateway verification failed', [
270
+ (0, ui_1.dim)('The agent was wired but gateway checks did not pass.'),
271
+ (0, ui_1.dim)('Check the errors above and run `arkna test` to retry.'),
272
+ ]);
273
+ }
274
+ const platformHint = {
275
+ openclaw: [
276
+ `${(0, ui_1.dim)('1.')} Add the YAML block above to your OpenClaw agent config`,
277
+ `${(0, ui_1.dim)('2.')} Set env vars: ${(0, ui_1.brand)('source .arkna/.env')}`,
278
+ `${(0, ui_1.dim)('3.')} Start your OpenClaw agent (it will auto-register with ARKNA on startup)`,
279
+ ],
280
+ crewai: [
281
+ `${(0, ui_1.dim)('1.')} Add the import lines above to your CrewAI entrypoint`,
282
+ `${(0, ui_1.dim)('2.')} Set env vars: ${(0, ui_1.brand)('source .arkna/.env')}`,
283
+ `${(0, ui_1.dim)('3.')} Run your CrewAI agent (it will auto-register with ARKNA on startup)`,
284
+ ],
285
+ langchain: [
286
+ `${(0, ui_1.dim)('1.')} Import ${(0, ui_1.brand)('get_arkna_tools()')} in your LangChain agent`,
287
+ `${(0, ui_1.dim)('2.')} Set env vars: ${(0, ui_1.brand)('source .arkna/.env')}`,
288
+ `${(0, ui_1.dim)('3.')} Run your LangChain agent (it will auto-register with ARKNA on startup)`,
289
+ ],
290
+ custom: [
291
+ `${(0, ui_1.dim)('1.')} Add the API calls above to your agent code`,
292
+ `${(0, ui_1.dim)('2.')} Set env vars: ${(0, ui_1.brand)('source .arkna/.env')}`,
293
+ `${(0, ui_1.dim)('3.')} Start your agent \u2014 it must call ${(0, ui_1.brand)('POST /api/gateway/register')} on startup`,
294
+ ],
295
+ }[platform] || [];
296
+ (0, ui_1.hint)([
297
+ `${(0, ui_1.brandBold)('WHAT HAPPENS NEXT:')}`,
298
+ ` Your agent is not in ARKNA yet. It registers itself when it starts.`,
299
+ ` Run these commands from your ${(0, ui_1.brandBold)('agent project directory')}:`,
300
+ '',
301
+ ...platformHint.map(l => ` ${l}`),
302
+ '',
303
+ ` ${(0, ui_1.dim)('Then verify:')}`,
304
+ ` ${(0, ui_1.dim)('$')} arkna verify --watch ${(0, ui_1.dim)('# waits for your agent to register')}`,
305
+ ]);
306
+ });
307
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,wDAAgC;AAChC,uCAAyB;AACzB,2CAA6B;AAC7B,kCAGmB;AACnB,gDAA+D;AAC/D,0CAA8C;AAC9C,gDAG0B;AAE1B,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CAAC,SAAkB,EAAE,OAAgB;IAC9D,aAAa;IACb,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACjC,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,SAAI,EAAC,QAAQ,CAAC,IAAI,IAAA,QAAG,EAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,qBAAqB,CAAC,IAAI,IAAA,UAAK,EAAC,aAAa,CAAC,IAAI,IAAA,QAAG,EAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;IAC9G,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAA,UAAK,EAAC,UAAU,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzC,OAAO,6BAA6B,CAAC;gBACvC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,OAA2B,EAAE,OAAgB;IAC/D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE,GAAG;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC;IACvC,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAEY,QAAA,cAAc,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,6DAA6D,CAAC;KAC1E,QAAQ,CAAC,YAAY,EAAE,mBAAmB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACxE,MAAM,CAAC,qBAAqB,EAAE,wDAAwD,CAAC;KACvF,MAAM,CAAC,iBAAiB,EAAE,8CAA8C,CAAC;KACzE,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC;KACzC,MAAM,CAAC,qBAAqB,EAAE,sDAAsD,CAAC;KACrF,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,CAAC;KAC5E,MAAM,CAAC,KAAK,EACX,QAAgB,EAChB,OAAuF,EACvF,EAAE;IACF,IAAA,WAAM,GAAE,CAAC;IAET,wEAAwE;IACxE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAA,aAAQ,EAAC,kBAAkB,EAAE;YAC3B,QAAQ,QAAQ,EAAE;YAClB,IAAA,QAAG,EAAC,oBAAoB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,wEAAwE;IACxE,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,IAAA,aAAQ,EAAC,qBAAqB,EAAE;YAC9B,QAAQ,GAAG,EAAE;YACb,IAAA,QAAG,EAAC,yCAAyC,CAAC;SAC/C,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,IAAA,aAAQ,EAAC,eAAe,EAAE;YACxB,IAAA,QAAG,EAAC,6BAA6B,CAAC;YAClC,IAAA,QAAG,EAAC,2CAA2C,CAAC;SACjD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEhD,wEAAwE;IACxE,IAAA,SAAI,EAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAEzB,IAAI,SAA6B,CAAC;IAElC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,8BAA8B,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAA,aAAQ,EAAC,yBAAyB,EAAE;wBAClC,MAAM,CAAC,KAAK,IAAI,eAAe;qBAChC,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,kDAAkD,CAAC,EAAE,CAAC,CAAC;gBAC9E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,QAAQ,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,uDAAuD,CAAC,IAAI,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,IAAA,gCAAoB,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClD,SAAS,GAAG,wDAAwD,CAAC;YACvE,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,8BAA8B,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAA,aAAQ,EAAC,4BAA4B,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,QAAQ,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,iCAAiC,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAA,yBAAa,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAA,aAAQ,EAAC,4BAA4B,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,QAAQ,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,SAAS,GAAG,IAAA,0BAAc,EAAC,SAAS,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,SAAS,CAAC,CAAC,CAAC;YAC5B,MAAM;QACR,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,IAAA,SAAI,EAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAE7B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,sBAAa,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEnE,iFAAiF;IACjF,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAA,SAAI,EAAC,QAAQ,CAAC,IAAI,IAAA,QAAG,EAAC,0DAA0D,CAAC,EAAE,CAAC,CAAC;YACxG,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAa,EAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5B,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,yCAAyC,CAAC,IAAI,IAAA,UAAK,EAAC,oBAAoB,CAAC,IAAI,IAAA,QAAG,EAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACjI,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,IAAA,SAAI,EAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,IAAA,yBAAa,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,IAAA,aAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE1B,wEAAwE;IACxE,IAAA,YAAO,GAAE,CAAC;IAEV,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACzB,IAAA,eAAU,EAAC,YAAY,EAAE;YACvB,GAAG,IAAA,QAAG,EAAC,QAAQ,CAAC,SAAS,SAAS,EAAE;YACpC,GAAG,IAAA,QAAG,EAAC,WAAW,CAAC,MAAM,QAAQ,EAAE;YACnC,GAAG,IAAA,QAAG,EAAC,UAAU,CAAC,OAAO,GAAG,EAAE;YAC9B,GAAG,IAAA,QAAG,EAAC,QAAQ,CAAC,aAAa;SAC9B,CAAC,CAAC;QAEH,IAAI,SAAS,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAClE,IAAA,SAAI,EAAC;gBACH,GAAG,IAAA,cAAS,EAAC,OAAO,CAAC,iCAAiC;gBACtD,EAAE;gBACF,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAA,QAAG,EAAC,CAAC,CAAC,EAAE,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,oEAAoE;QACpE,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9C,MAAM,qBAAqB,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;QAExE,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;YACzC,IAAA,aAAQ,EAAC,2BAA2B,EAAE;gBACpC,GAAG,IAAA,QAAG,EAAC,0EAA0E,CAAC,EAAE;gBACpF,GAAG,IAAA,QAAG,EAAC,mDAAmD,CAAC,EAAE;gBAC7D,EAAE;gBACF,GAAG,IAAA,QAAG,EAAC,MAAM,CAAC,IAAI,IAAA,UAAK,EAAC,mBAAmB,CAAC,IAAI,IAAA,QAAG,EAAC,2BAA2B,CAAC,EAAE;gBAClF,GAAG,IAAA,QAAG,EAAC,OAAO,CAAC,IAAI,IAAA,UAAK,EAAC,oBAAoB,CAAC,IAAI,IAAA,QAAG,EAAC,2BAA2B,CAAC,EAAE;aACrF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAA,aAAQ,EAAC,2BAA2B,EAAE;gBACpC,IAAA,QAAG,EAAC,0CAA0C,CAAC;gBAC/C,IAAA,QAAG,EAAC,qDAAqD,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAA,aAAQ,EAAC,6BAA6B,EAAE;YACtC,IAAA,QAAG,EAAC,sDAAsD,CAAC;YAC3D,IAAA,QAAG,EAAC,uDAAuD,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,QAAQ,EAAE;YACR,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,yDAAyD;YACrE,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,kBAAkB,IAAA,UAAK,EAAC,oBAAoB,CAAC,EAAE;YAC3D,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,0EAA0E;SACvF;QACD,MAAM,EAAE;YACN,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,uDAAuD;YACnE,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,kBAAkB,IAAA,UAAK,EAAC,oBAAoB,CAAC,EAAE;YAC3D,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,sEAAsE;SACnF;QACD,SAAS,EAAE;YACT,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,WAAW,IAAA,UAAK,EAAC,mBAAmB,CAAC,0BAA0B;YAC3E,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,kBAAkB,IAAA,UAAK,EAAC,oBAAoB,CAAC,EAAE;YAC3D,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,yEAAyE;SACtF;QACD,MAAM,EAAE;YACN,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,6CAA6C;YACzD,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,kBAAkB,IAAA,UAAK,EAAC,oBAAoB,CAAC,EAAE;YAC3D,GAAG,IAAA,QAAG,EAAC,IAAI,CAAC,yCAAyC,IAAA,UAAK,EAAC,4BAA4B,CAAC,aAAa;SACtG;KACF,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAElB,IAAA,SAAI,EAAC;QACH,GAAG,IAAA,cAAS,EAAC,oBAAoB,CAAC,EAAE;QACpC,uEAAuE;QACvE,kCAAkC,IAAA,cAAS,EAAC,yBAAyB,CAAC,GAAG;QACzE,EAAE;QACF,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,EAAE;QACF,KAAK,IAAA,QAAG,EAAC,cAAc,CAAC,EAAE;QAC1B,KAAK,IAAA,QAAG,EAAC,GAAG,CAAC,2BAA2B,IAAA,QAAG,EAAC,oCAAoC,CAAC,EAAE;KACpF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,eAAO,MAAM,YAAY,SAiMrB,CAAC"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loginCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const child_process_1 = require("child_process");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const ui_1 = require("../lib/ui");
42
+ const connectivity_1 = require("../lib/connectivity");
43
+ const arkna_dir_1 = require("../lib/arkna-dir");
44
+ /**
45
+ * Resolve URL from (in priority order):
46
+ * 1. --url flag
47
+ * 2. ARKNA_URL env var
48
+ * 3. .arkna/.env file
49
+ * 4. Default
50
+ */
51
+ function resolveUrl(flagUrl) {
52
+ if (flagUrl)
53
+ return flagUrl;
54
+ if (process.env.ARKNA_URL)
55
+ return process.env.ARKNA_URL;
56
+ const envCreds = (0, arkna_dir_1.readArknaEnv)();
57
+ if (envCreds?.url)
58
+ return envCreds.url;
59
+ return 'https://api.arkna.com.au';
60
+ }
61
+ /**
62
+ * Write token to .arkna/.env (creates directory if needed)
63
+ */
64
+ function writeTokenToEnv(url, token, baseDir) {
65
+ const dir = path.join(baseDir || process.cwd(), '.arkna');
66
+ fs.mkdirSync(dir, { recursive: true });
67
+ const envPath = path.join(dir, '.env');
68
+ const envContent = `# ARKNA Agent Enrollment — Environment Variables
69
+ # This file is gitignored. Do NOT commit this file.
70
+ # Token created via: arkna login
71
+ ARKNA_URL=${url}
72
+ ARKNA_TOKEN=${token}
73
+ `;
74
+ fs.writeFileSync(envPath, envContent);
75
+ // Ensure .gitignore exists
76
+ const gitignorePath = path.join(dir, '.gitignore');
77
+ if (!fs.existsSync(gitignorePath)) {
78
+ fs.writeFileSync(gitignorePath, `# .arkna/ contains secrets — never commit any of it\n*\n!.gitignore\n`);
79
+ }
80
+ }
81
+ /**
82
+ * Detect if we're in a headless environment (SSH, Docker, CI, no display)
83
+ */
84
+ function isHeadless() {
85
+ // SSH session
86
+ if (process.env.SSH_CONNECTION || process.env.SSH_TTY)
87
+ return true;
88
+ // CI environments
89
+ if (process.env.CI || process.env.GITHUB_ACTIONS || process.env.GITLAB_CI)
90
+ return true;
91
+ // Docker / container
92
+ if (process.env.container || process.env.DOCKER_CONTAINER)
93
+ return true;
94
+ // Linux without display
95
+ if (process.platform === 'linux' && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY)
96
+ return true;
97
+ return false;
98
+ }
99
+ /**
100
+ * Try to open a URL in the default browser. Returns true if attempted.
101
+ */
102
+ function tryOpenBrowser(url) {
103
+ if (isHeadless())
104
+ return false;
105
+ const cmd = process.platform === 'darwin'
106
+ ? `open "${url}"`
107
+ : process.platform === 'win32'
108
+ ? `start "" "${url}"`
109
+ : `xdg-open "${url}"`;
110
+ (0, child_process_1.exec)(cmd, () => {
111
+ // Silently fail — user can open manually
112
+ });
113
+ return true;
114
+ }
115
+ /**
116
+ * Sleep for ms milliseconds
117
+ */
118
+ function sleep(ms) {
119
+ return new Promise(resolve => setTimeout(resolve, ms));
120
+ }
121
+ exports.loginCommand = new commander_1.Command('login')
122
+ .description('Authenticate the CLI via browser approval (no token pasting)')
123
+ .option('-u, --url <url>', 'ARKNA gateway URL (or set ARKNA_URL env var)')
124
+ .option('-n, --name <name>', 'Agent name (shown in token list)')
125
+ .action(async (options) => {
126
+ (0, ui_1.banner)();
127
+ // ── Resolve URL ──────────────────────────────────────────────────────
128
+ const url = resolveUrl(options.url);
129
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
130
+ (0, ui_1.errorBox)('Invalid gateway URL', [
131
+ `Got: ${url}`,
132
+ (0, ui_1.dim)('URL must start with http:// or https://'),
133
+ ]);
134
+ process.exit(1);
135
+ }
136
+ // ── Health check ─────────────────────────────────────────────────────
137
+ const healthSpinner = (0, ui_1.startSpinner)('Checking gateway...');
138
+ const health = await (0, connectivity_1.checkHealth)(url);
139
+ healthSpinner.stop();
140
+ if (!health.passed) {
141
+ (0, ui_1.errorBox)('Gateway unreachable', [
142
+ health.detail,
143
+ (0, ui_1.dim)(`URL: ${url}`),
144
+ ]);
145
+ process.exit(1);
146
+ }
147
+ console.log(` ${(0, ui_1.brand)('✔')} Gateway reachable ${(0, ui_1.dim)(health.detail)}`);
148
+ // ── Request device code ──────────────────────────────────────────────
149
+ const codeSpinner = (0, ui_1.startSpinner)('Requesting device code...');
150
+ let deviceCode;
151
+ let verificationUri;
152
+ let verificationUriComplete;
153
+ try {
154
+ const resp = await fetch(`${url}/api/auth/device/code`, {
155
+ method: 'POST',
156
+ headers: { 'Content-Type': 'application/json' },
157
+ body: JSON.stringify({
158
+ cli_platform: `${process.platform}-${process.arch}`,
159
+ agent_name: options.name || undefined,
160
+ }),
161
+ });
162
+ if (!resp.ok) {
163
+ codeSpinner.stop();
164
+ const err = await resp.json().catch(() => ({ error: 'Request failed' }));
165
+ (0, ui_1.errorBox)('Failed to get device code', [
166
+ String(err.error || `HTTP ${resp.status}`),
167
+ ]);
168
+ process.exit(1);
169
+ }
170
+ const data = await resp.json();
171
+ deviceCode = data.device_code;
172
+ verificationUri = data.verification_uri;
173
+ verificationUriComplete = data.verification_uri_complete;
174
+ codeSpinner.stop();
175
+ }
176
+ catch (err) {
177
+ codeSpinner.stop();
178
+ (0, ui_1.errorBox)('Failed to get device code', [
179
+ err.message || 'Connection failed',
180
+ ]);
181
+ process.exit(1);
182
+ }
183
+ // ── Display code ────────────────────────────────────────────────────
184
+ const headless = isHeadless();
185
+ (0, ui_1.divider)();
186
+ console.log('');
187
+ console.log(` ${(0, ui_1.brand)('▲')} Go to:`);
188
+ console.log(` ${(0, ui_1.brand)(verificationUri)}`);
189
+ console.log('');
190
+ console.log(` Enter code:`);
191
+ console.log('');
192
+ console.log(` ${(0, ui_1.brand)('┌──────────────┐')}`);
193
+ console.log(` ${(0, ui_1.brand)('│')} ${(0, ui_1.brand)(deviceCode)} ${(0, ui_1.brand)('│')}`);
194
+ console.log(` ${(0, ui_1.brand)('└──────────────┘')}`);
195
+ console.log('');
196
+ console.log(` ${(0, ui_1.dim)('Or open directly:')}`);
197
+ console.log(` ${(0, ui_1.dim)(verificationUriComplete)}`);
198
+ console.log('');
199
+ (0, ui_1.divider)();
200
+ // Try to open browser (skip on headless)
201
+ const opened = tryOpenBrowser(verificationUriComplete);
202
+ if (opened) {
203
+ console.log(` ${(0, ui_1.dim)('Opening browser...')}`);
204
+ }
205
+ else {
206
+ console.log(` ${(0, ui_1.dim)('Open the link above on any device, then approve.')}`);
207
+ }
208
+ // ── Poll for approval ────────────────────────────────────────────────
209
+ const pollSpinner = (0, ui_1.startSpinner)('Waiting for approval... (Ctrl+C to cancel)');
210
+ const maxAttempts = 180; // 15 minutes at 5s intervals
211
+ let token = null;
212
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
213
+ await sleep(5000);
214
+ try {
215
+ const resp = await fetch(`${url}/api/auth/device/token`, {
216
+ method: 'POST',
217
+ headers: { 'Content-Type': 'application/json' },
218
+ body: JSON.stringify({ device_code: deviceCode }),
219
+ });
220
+ if (resp.ok) {
221
+ const data = await resp.json();
222
+ token = data.token;
223
+ break;
224
+ }
225
+ const body = await resp.json().catch(() => ({ error: 'unknown' }));
226
+ const error = body.error;
227
+ if (error === 'authorization_pending') {
228
+ // Keep polling
229
+ continue;
230
+ }
231
+ if (error === 'slow_down') {
232
+ // Wait an extra 5s before next attempt
233
+ await sleep(5000);
234
+ continue;
235
+ }
236
+ // Terminal errors
237
+ pollSpinner.stop();
238
+ if (error === 'expired_token') {
239
+ (0, ui_1.errorBox)('Code expired', [
240
+ (0, ui_1.dim)('The 15-minute window has passed.'),
241
+ (0, ui_1.dim)('Run `arkna login` again to get a new code.'),
242
+ ]);
243
+ }
244
+ else if (error === 'access_denied') {
245
+ (0, ui_1.errorBox)('Login denied', [
246
+ (0, ui_1.dim)('The code was rejected in the browser.'),
247
+ ]);
248
+ }
249
+ else {
250
+ (0, ui_1.errorBox)('Login failed', [error || `HTTP ${resp.status}`]);
251
+ }
252
+ process.exit(1);
253
+ }
254
+ catch {
255
+ // Network error — keep trying
256
+ continue;
257
+ }
258
+ }
259
+ pollSpinner.stop();
260
+ if (!token) {
261
+ (0, ui_1.errorBox)('Timed out', [
262
+ (0, ui_1.dim)('No approval received within 15 minutes.'),
263
+ (0, ui_1.dim)('Run `arkna login` again to retry.'),
264
+ ]);
265
+ process.exit(1);
266
+ }
267
+ // ── Write token ──────────────────────────────────────────────────────
268
+ writeTokenToEnv(url, token);
269
+ console.log('');
270
+ (0, ui_1.successBox)('AUTHENTICATED', [
271
+ `${(0, ui_1.dim)('Token:')} ${(0, ui_1.maskToken)(token)}`,
272
+ `${(0, ui_1.dim)('Gateway:')} ${url}`,
273
+ `${(0, ui_1.dim)('Saved to:')} .arkna/.env`,
274
+ `${(0, ui_1.dim)('Expires:')} 30 days`,
275
+ ]);
276
+ // Warn if stale ARKNA_TOKEN env var will shadow the fresh token
277
+ if (process.env.ARKNA_TOKEN && process.env.ARKNA_TOKEN !== token) {
278
+ console.log('');
279
+ console.log(` ${(0, ui_1.warn)('\u26A0')} ${(0, ui_1.warn)('ARKNA_TOKEN env var contains a different token.')}`);
280
+ console.log(` ${(0, ui_1.dim)(' The CLI will use the env var instead of the fresh token.')}`);
281
+ console.log(` ${(0, ui_1.dim)(' Fix:')} ${(0, ui_1.brand)('unset ARKNA_TOKEN')} ${(0, ui_1.dim)('or:')} ${(0, ui_1.brand)('source .arkna/.env')}`);
282
+ }
283
+ (0, ui_1.hint)([
284
+ `${(0, ui_1.brand)('NEXT:')} Connect your agent:`,
285
+ '',
286
+ ` ${(0, ui_1.dim)('$')} arkna connect openclaw -n "My Agent"`,
287
+ ` ${(0, ui_1.dim)('$')} arkna connect crewai -n "My Agent"`,
288
+ ` ${(0, ui_1.dim)('$')} arkna connect langchain -n "My Agent"`,
289
+ ` ${(0, ui_1.dim)('$')} arkna connect custom -n "My Agent"`,
290
+ ]);
291
+ });
292
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const statusCommand: Command;
3
+ //# sourceMappingURL=status.d.ts.map