@karis-ai/cli 0.1.0 → 0.1.2

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInfluencerCommand(program: Command): void;
3
+ //# sourceMappingURL=influencer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"influencer.d.ts","sourceRoot":"","sources":["../../src/commands/influencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4KpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiKhE"}
@@ -0,0 +1,235 @@
1
+ import chalk from 'chalk';
2
+ import { KarisClient } from '../core/client.js';
3
+ import { isTextOutput } from '../core/cli-context.js';
4
+ import { printCommandResult } from '../utils/output.js';
5
+ import { runCommand } from '../utils/run-command.js';
6
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
7
+ function formatFollowers(n) {
8
+ if (n == null)
9
+ return '-';
10
+ if (n >= 1_000_000)
11
+ return `${(n / 1_000_000).toFixed(1)}M`;
12
+ if (n >= 1_000)
13
+ return `${(n / 1_000).toFixed(0)}K`;
14
+ return String(n);
15
+ }
16
+ function formatEngagement(rate) {
17
+ if (rate == null)
18
+ return '-';
19
+ return `${(rate * 100).toFixed(2)}%`;
20
+ }
21
+ function renderInfluencers(data) {
22
+ if (!isTextOutput()) {
23
+ printCommandResult({
24
+ search_record_id: data.searchRecordId,
25
+ session_id: data.sessionId,
26
+ influencers: data.influencers,
27
+ pagination: data.pagination,
28
+ excluded_count: data.excludedCount,
29
+ });
30
+ return;
31
+ }
32
+ const { influencers, pagination, searchRecordId, sessionId, excludedCount } = data;
33
+ const pct = pagination.total > 0 ? Math.round((influencers.length / pagination.total) * 100) : 0;
34
+ console.log();
35
+ console.log(chalk.bold(`Influencer Results`) +
36
+ chalk.dim(` — page ${pagination.page}/${pagination.totalPages} (${influencers.length} of ${pagination.total} results${excludedCount > 0 ? `, ${excludedCount} excluded` : ''})`));
37
+ console.log(chalk.dim(`Record: ${searchRecordId} Session: ${sessionId}`));
38
+ console.log();
39
+ if (influencers.length === 0) {
40
+ console.log(chalk.yellow(' No influencers found for this page.'));
41
+ console.log();
42
+ return;
43
+ }
44
+ // Column widths
45
+ const COL = { num: 4, name: 28, platform: 12, followers: 10, er: 8, url: 0 };
46
+ const header = chalk.dim('#'.padStart(COL.num)) +
47
+ ' ' +
48
+ chalk.bold('Name'.padEnd(COL.name)) +
49
+ chalk.dim('Platform'.padEnd(COL.platform)) +
50
+ chalk.dim('Followers'.padStart(COL.followers)) +
51
+ ' ' +
52
+ chalk.dim('ER'.padStart(COL.er)) +
53
+ ' ' +
54
+ chalk.dim('URL');
55
+ console.log(header);
56
+ console.log(chalk.dim('─'.repeat(90)));
57
+ influencers.forEach((inf, i) => {
58
+ const num = chalk.dim(String((pagination.page - 1) * pagination.pageSize + i + 1).padStart(COL.num));
59
+ const name = (inf.fullName || inf.username).slice(0, COL.name - 1).padEnd(COL.name);
60
+ const platform = chalk.dim(inf.platform.padEnd(COL.platform));
61
+ const followers = chalk.cyan(formatFollowers(inf.followerCount).padStart(COL.followers));
62
+ const er = chalk.green(formatEngagement(inf.engagementRate).padStart(COL.er));
63
+ const url = inf.profileUrl ? chalk.dim(inf.profileUrl) : chalk.dim(`@${inf.username}`);
64
+ console.log(`${num} ${name}${platform}${followers} ${er} ${url}`);
65
+ });
66
+ console.log();
67
+ if (pagination.page < pagination.totalPages) {
68
+ console.log(chalk.dim(` Next page: karis influencer results --record-id ${searchRecordId} --session-id ${sessionId} --page ${pagination.page + 1}`));
69
+ }
70
+ console.log();
71
+ }
72
+ async function apiPost(client, path, body) {
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ const baseUrl = client.apiUrl;
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ const apiKey = client.apiKey;
77
+ const res = await fetch(`${baseUrl}${path}`, {
78
+ method: 'POST',
79
+ headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` },
80
+ body: JSON.stringify(body),
81
+ });
82
+ if (!res.ok) {
83
+ let msg = '';
84
+ try {
85
+ const j = (await res.json());
86
+ msg = j.message || '';
87
+ }
88
+ catch { /* empty */ }
89
+ throw new Error(`API error ${res.status}${msg ? ': ' + msg : ''}`);
90
+ }
91
+ const j = (await res.json());
92
+ return j.data;
93
+ }
94
+ async function apiGet(client, path) {
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ const baseUrl = client.apiUrl;
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ const apiKey = client.apiKey;
99
+ const res = await fetch(`${baseUrl}${path}`, {
100
+ headers: { Authorization: `Bearer ${apiKey}` },
101
+ });
102
+ if (!res.ok) {
103
+ let msg = '';
104
+ try {
105
+ const j = (await res.json());
106
+ msg = j.message || '';
107
+ }
108
+ catch { /* empty */ }
109
+ throw new Error(`API error ${res.status}${msg ? ': ' + msg : ''}`);
110
+ }
111
+ const j = (await res.json());
112
+ return j.data;
113
+ }
114
+ // ─── Command ──────────────────────────────────────────────────────────────────
115
+ export function registerInfluencerCommand(program) {
116
+ const inf = program.command('influencer').description('Find and browse influencers');
117
+ // ── search ──────────────────────────────────────────────────────────────────
118
+ inf
119
+ .command('search')
120
+ .description('Search for influencers by keyword')
121
+ .option('-k, --keywords <kw>', 'Comma-separated keywords, e.g. "fitness,workout"')
122
+ .option('-p, --platform <platform>', 'Platform: instagram | tiktok | youtube | twitter (default: instagram)')
123
+ .option('--min-followers <n>', 'Minimum follower count', parseInt)
124
+ .option('--max-followers <n>', 'Maximum follower count', parseInt)
125
+ .option('--min-engagement <rate>', 'Minimum engagement rate 0-1, e.g. 0.03 for 3%', parseFloat)
126
+ .option('--location <cc>', 'Comma-separated country codes, e.g. "US,GB"')
127
+ .option('--language <lang>', 'Language code, e.g. en')
128
+ .option('--count <n>', 'Number of results per page (default: 20)', parseInt)
129
+ .action(runCommand(async (options) => {
130
+ const platform = options.platform || 'instagram';
131
+ const keywords = options.keywords
132
+ ? options.keywords.split(',').map((k) => k.trim()).filter(Boolean)
133
+ : [];
134
+ if (keywords.length === 0) {
135
+ throw new Error('--keywords is required. Example: --keywords "fitness,workout"');
136
+ }
137
+ const platformsConfig = [{ platform, matchingMode: 'has' }];
138
+ const body = {
139
+ mode: 'keyword',
140
+ platformsConfig,
141
+ keywords,
142
+ };
143
+ if (options.minFollowers != null || options.maxFollowers != null) {
144
+ body.followerRange = {
145
+ ...(options.minFollowers != null && { min: options.minFollowers }),
146
+ ...(options.maxFollowers != null && { max: options.maxFollowers }),
147
+ };
148
+ }
149
+ if (options.minEngagement != null)
150
+ body.minEngagementRate = options.minEngagement;
151
+ if (options.location)
152
+ body.locations = options.location.split(',').map((c) => c.trim());
153
+ if (options.language)
154
+ body.language = options.language;
155
+ if (options.count != null)
156
+ body.pageSize = options.count;
157
+ if (isTextOutput()) {
158
+ process.stdout.write(chalk.dim(` Searching ${platform} for "${keywords.join(', ')}"...`));
159
+ }
160
+ const client = await KarisClient.create();
161
+ const data = await apiPost(client, '/api/influencer/search-records', body);
162
+ if (isTextOutput()) {
163
+ process.stdout.write('\r\x1b[2K');
164
+ }
165
+ renderInfluencers(data);
166
+ }));
167
+ // ── results ─────────────────────────────────────────────────────────────────
168
+ inf
169
+ .command('results')
170
+ .description('Browse a page of results from an existing search record')
171
+ .requiredOption('--record-id <id>', 'Search record ID (from a previous search)')
172
+ .option('--session-id <id>', 'Session ID for pagination (required for page > 1)')
173
+ .option('--page <n>', 'Page number (default: 1)', parseInt)
174
+ .option('--count <n>', 'Results per page (default: 20)', parseInt)
175
+ .action(runCommand(async (options) => {
176
+ const client = await KarisClient.create();
177
+ const page = options.page ?? 1;
178
+ if (page === 1) {
179
+ // restore: creates a new session and returns page 1
180
+ const data = await apiPost(client, `/api/influencer/search-records/${options.recordId}/restore`, { pageSize: options.count ?? 20 });
181
+ renderInfluencers(data);
182
+ }
183
+ else {
184
+ if (!options.sessionId) {
185
+ throw new Error('--session-id is required for page > 1. Run page 1 first to get a session ID.');
186
+ }
187
+ const data = await apiPost(client, `/api/influencer/search-records/${options.recordId}/page`, {
188
+ sessionId: options.sessionId,
189
+ page,
190
+ pageSize: options.count ?? 20,
191
+ });
192
+ renderInfluencers(data);
193
+ }
194
+ }));
195
+ // ── list ─────────────────────────────────────────────────────────────────────
196
+ inf
197
+ .command('list')
198
+ .description('List your recent influencer searches')
199
+ .option('--limit <n>', 'Number of records to show (default: 10)', parseInt)
200
+ .action(runCommand(async (options) => {
201
+ const limit = options.limit ?? 10;
202
+ const client = await KarisClient.create();
203
+ const data = await apiGet(client, `/api/influencer/search-records?page=1&pageSize=${limit}`);
204
+ const items = data?.items ?? data ?? [];
205
+ if (!isTextOutput()) {
206
+ printCommandResult({ records: items, total: data?.total ?? items.length });
207
+ return;
208
+ }
209
+ console.log();
210
+ if (items.length === 0) {
211
+ console.log(chalk.dim(' No searches yet. Run: karis influencer search --keywords ...'));
212
+ console.log();
213
+ return;
214
+ }
215
+ console.log(chalk.bold(`Recent Searches`) + chalk.dim(` (${items.length} shown)`));
216
+ console.log();
217
+ const COL = { id: 38, name: 30, platform: 14, count: 8 };
218
+ console.log(chalk.dim('Record ID'.padEnd(COL.id)) +
219
+ chalk.bold('Name'.padEnd(COL.name)) +
220
+ chalk.dim('Platform'.padEnd(COL.platform)) +
221
+ chalk.dim('Results'.padStart(COL.count)));
222
+ console.log(chalk.dim('─'.repeat(95)));
223
+ for (const rec of items) {
224
+ const id = chalk.dim(rec.id.padEnd(COL.id));
225
+ const name = rec.name.slice(0, COL.name - 1).padEnd(COL.name);
226
+ const platform = chalk.dim((rec.platforms ?? []).join(',').padEnd(COL.platform));
227
+ const count = chalk.cyan(rec.resultCount != null ? String(rec.resultCount).padStart(COL.count) : '-'.padStart(COL.count));
228
+ console.log(`${id}${name}${platform}${count}`);
229
+ }
230
+ console.log();
231
+ console.log(chalk.dim(' Tip: karis influencer results --record-id <id> to browse results'));
232
+ console.log();
233
+ }));
234
+ }
235
+ //# sourceMappingURL=influencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"influencer.js","sourceRoot":"","sources":["../../src/commands/influencer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,5 @@
1
1
  import { Command } from 'commander';
2
- /**
3
- * Start a localhost HTTP server, open the browser to the CLI auth page,
4
- * and wait for the callback with the API key.
5
- */
6
- export declare function browserLogin(apiUrl: string): Promise<string>;
2
+ import { browserLogin } from '../core/auth.js';
3
+ export { browserLogin };
7
4
  export declare function registerLoginCommand(program: Command): void;
8
5
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuElE;AA6BD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgE3D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAAE,YAAY,EAAgB,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,CAAC;AAgBxB,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD3D"}
@@ -1,99 +1,11 @@
1
- import http from 'node:http';
2
- import crypto from 'node:crypto';
3
1
  import chalk from 'chalk';
4
- import ora from 'ora';
5
- import { setConfigValue, loadResolvedConfig } from '../utils/config.js';
2
+ import { loadResolvedConfig } from '../utils/config.js';
6
3
  import { isTextOutput } from '../core/cli-context.js';
7
4
  import { printCommandResult } from '../utils/output.js';
8
5
  import { runCommand } from '../utils/run-command.js';
9
6
  import { KarisClient } from '../core/client.js';
10
- const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
11
- function deriveAppUrl(apiUrl) {
12
- if (apiUrl.includes('api-staging'))
13
- return 'https://app-staging.karis.im';
14
- if (apiUrl.includes('localhost') || apiUrl.includes('127.0.0.1')) {
15
- const port = new URL(apiUrl).port || '8000';
16
- return `http://localhost:${port === '8000' ? '3000' : port}`;
17
- }
18
- return 'https://app.karis.im';
19
- }
20
- /**
21
- * Start a localhost HTTP server, open the browser to the CLI auth page,
22
- * and wait for the callback with the API key.
23
- */
24
- export async function browserLogin(apiUrl) {
25
- const state = crypto.randomBytes(16).toString('hex');
26
- const appUrl = deriveAppUrl(apiUrl);
27
- return new Promise((resolve, reject) => {
28
- const server = http.createServer((req, res) => {
29
- const url = new URL(req.url, `http://localhost`);
30
- if (url.pathname !== '/callback') {
31
- res.writeHead(404);
32
- res.end('Not found');
33
- return;
34
- }
35
- const key = url.searchParams.get('key');
36
- const returnedState = url.searchParams.get('state');
37
- const error = url.searchParams.get('error');
38
- if (error) {
39
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
40
- res.end(resultPage(false, error));
41
- server.close();
42
- reject(new Error(`Authorization failed: ${error}`));
43
- return;
44
- }
45
- if (returnedState !== state) {
46
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
47
- res.end(resultPage(false, 'State mismatch — possible CSRF attack.'));
48
- server.close();
49
- reject(new Error('State mismatch'));
50
- return;
51
- }
52
- if (!key) {
53
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
54
- res.end(resultPage(false, 'No API key received.'));
55
- server.close();
56
- reject(new Error('No API key in callback'));
57
- return;
58
- }
59
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
60
- res.end(resultPage(true));
61
- server.close();
62
- resolve(key);
63
- });
64
- server.listen(0, '127.0.0.1', async () => {
65
- const addr = server.address();
66
- const port = typeof addr === 'object' && addr ? addr.port : 0;
67
- const authUrl = `${appUrl}/cli/auth?port=${port}&state=${state}`;
68
- try {
69
- const openModule = await import('open');
70
- await openModule.default(authUrl);
71
- }
72
- catch {
73
- if (isTextOutput()) {
74
- console.log(chalk.yellow(`\n Could not open browser. Please visit:`));
75
- console.log(chalk.cyan(` ${authUrl}\n`));
76
- }
77
- }
78
- });
79
- const timeout = setTimeout(() => {
80
- server.close();
81
- reject(new Error('Login timed out. Please try again.'));
82
- }, LOGIN_TIMEOUT_MS);
83
- server.on('close', () => clearTimeout(timeout));
84
- });
85
- }
86
- function resultPage(success, errorMessage) {
87
- const title = success ? 'Logged in to Karis' : 'Login failed';
88
- const body = success
89
- ? '<p style="color:#22c55e;font-size:1.2em;">&#10003; You can close this tab and return to the terminal.</p>'
90
- : `<p style="color:#ef4444;font-size:1.2em;">&#10007; ${errorMessage || 'Unknown error'}</p>`;
91
- return `<!DOCTYPE html>
92
- <html><head><meta charset="utf-8"><title>${title}</title>
93
- <style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#09090b;color:#fafafa;}
94
- .card{text-align:center;padding:3rem;border-radius:1rem;background:#18181b;max-width:400px;}</style>
95
- </head><body><div class="card"><h2>${title}</h2>${body}</div></body></html>`;
96
- }
7
+ import { browserLogin, performLogin } from '../core/auth.js';
8
+ export { browserLogin };
97
9
  async function tryExistingKey(apiUrl) {
98
10
  const resolved = await loadResolvedConfig();
99
11
  const existingKey = resolved.apiKey.value;
@@ -134,39 +46,20 @@ export function registerLoginCommand(program) {
134
46
  return;
135
47
  }
136
48
  }
137
- const spinner = isTextOutput() ? ora('Opening browser...').start() : undefined;
138
- let apiKey;
139
- try {
140
- if (spinner)
141
- spinner.text = 'Waiting for authorization...';
142
- apiKey = await browserLogin(apiUrl);
143
- if (spinner)
144
- spinner.succeed('Authorized');
145
- }
146
- catch (error) {
147
- if (spinner)
148
- spinner.fail('Login failed');
149
- throw error;
150
- }
151
- await setConfigValue('api-key', apiKey);
152
- let userName = '';
153
- try {
154
- const client = new KarisClient({ apiKey, apiUrl });
155
- const info = await client.verifyKey();
156
- userName = info.name || '';
157
- }
158
- catch {
159
- // non-critical
49
+ if (isTextOutput()) {
50
+ console.log(chalk.dim(' Opening browser...'));
51
+ console.log();
160
52
  }
53
+ const name = await performLogin(apiUrl);
161
54
  if (isTextOutput()) {
162
- const label = userName ? ` (key: ${userName})` : '';
55
+ const label = name ? ` (key: ${name})` : '';
163
56
  console.log(chalk.green(` API key saved${label}`));
164
57
  console.log();
165
58
  }
166
59
  printCommandResult({
167
60
  action: 'login',
168
61
  success: true,
169
- key_name: userName || undefined,
62
+ key_name: name || undefined,
170
63
  });
171
64
  }));
172
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,14 @@ export interface HitlFormData {
27
27
  passthrough?: boolean;
28
28
  sections?: HitlFormSection[];
29
29
  }
30
+ export interface ArtifactItem {
31
+ name?: string;
32
+ url?: string;
33
+ file_id?: string;
34
+ file_extension?: string;
35
+ }
30
36
  export interface StreamChunk {
31
- type: 'content' | 'tool_start' | 'tool_end' | 'error' | 'done' | 'hitl_request';
37
+ type: 'content' | 'tool_start' | 'tool_end' | 'error' | 'done' | 'hitl_request' | 'working_summary' | 'progress' | 'output_artifact';
32
38
  content?: string;
33
39
  tool?: string;
34
40
  title?: string;
@@ -41,6 +47,12 @@ export interface StreamChunk {
41
47
  form_data?: HitlFormData;
42
48
  prompt?: string;
43
49
  auth_url?: string;
50
+ summary_text?: string;
51
+ steps?: Array<{
52
+ label?: string;
53
+ status?: string;
54
+ }>;
55
+ artifacts?: ArtifactItem[];
44
56
  }
45
57
  export type AgentMode = 'remote';
46
58
  export interface AgentInterface {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-interface.d.ts","sourceRoot":"","sources":["../../src/core/agent-interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,UAAU,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE9C;;OAEG;IACH,OAAO,IAAI,SAAS,CAAC;IAErB;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"agent-interface.d.ts","sourceRoot":"","sources":["../../src/core/agent-interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EACA,SAAS,GACT,YAAY,GACZ,UAAU,GACV,OAAO,GACP,MAAM,GACN,cAAc,GACd,iBAAiB,GACjB,UAAU,GACV,iBAAiB,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,UAAU,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE9C;;OAEG;IACH,OAAO,IAAI,SAAS,CAAC;IAErB;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,18 @@
1
+ export declare function resultPage(success: boolean, errorMessage?: string): string;
2
+ /**
3
+ * Start a localhost HTTP server, open the browser to the CLI auth page,
4
+ * and wait for the callback with the API key.
5
+ */
6
+ export declare function browserLogin(apiUrl: string): Promise<string>;
7
+ /**
8
+ * Run the full browser login flow: open browser, wait for key, save it.
9
+ * Returns the key name on success, throws on failure.
10
+ */
11
+ export declare function performLogin(apiUrl: string): Promise<string>;
12
+ /**
13
+ * Auto-login flow triggered when AUTH_REQUIRED is detected in a TTY session.
14
+ * Shows a prompt, runs browser login, saves the key.
15
+ * Returns true if login succeeded, false if it failed or was skipped.
16
+ */
17
+ export declare function autoLogin(): Promise<boolean>;
18
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAmBA,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuElE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAclE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BlD"}