@nordsym/apiclaw 2.7.0 → 2.8.0-rc.1

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,340 @@
1
+ /**
2
+ * APIClaw CLI auth — browser-loopback flow (Modal/gh/vercel pattern).
3
+ *
4
+ * `apiclaw auth login`
5
+ * 1. Generate PKCE verifier + challenge, random state.
6
+ * 2. Start ephemeral HTTP listener on an OS-assigned port.
7
+ * 3. POST cliAuth:start to Convex → get {authId, browserUrl}.
8
+ * 4. Open browserUrl in default browser (open / xdg-open / start).
9
+ * 5. Wait for /callback?code=X&state=Y on loopback (max 5 min).
10
+ * 6. Validate state, POST cliAuth:exchange with {code, codeVerifier} → session+key.
11
+ * 7. Write ~/.apiclaw.toml, verify, print success + next-step hints.
12
+ *
13
+ * Email fallback: --email-fallback delegates to the existing magic-link
14
+ * loginCommand for headless/SSH users.
15
+ */
16
+ import { createServer } from 'node:http';
17
+ import { randomBytes, createHash } from 'node:crypto';
18
+ import { spawn } from 'node:child_process';
19
+ import ora from 'ora';
20
+ import chalk from 'chalk';
21
+ import { writeAuthConfig, readAuthConfig, clearAuthConfig, AUTH_CONFIG_PATH } from '../../auth-config.js';
22
+ import { getMachineFingerprint } from '../../session.js';
23
+ import { loginCommand as emailLogin } from './login.js';
24
+ const CONVEX_URL = process.env.APICLAW_CONVEX_URL ||
25
+ 'https://adventurous-avocet-799.convex.cloud';
26
+ const APP_URL = process.env.APICLAW_APP_URL || 'https://apiclaw.cloud';
27
+ const LOOPBACK_TIMEOUT_MS = 5 * 60 * 1000; // 5 min
28
+ const PREFERRED_PORT = 41789;
29
+ function base64url(buf) {
30
+ return buf.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
31
+ }
32
+ function generatePkcePair() {
33
+ const verifier = base64url(randomBytes(48));
34
+ const challenge = base64url(createHash('sha256').update(verifier).digest());
35
+ return { verifier, challenge };
36
+ }
37
+ function generateState() {
38
+ return base64url(randomBytes(24));
39
+ }
40
+ /**
41
+ * Open URL in the user's default browser.
42
+ * Returns true if the OS command was spawned, false if no opener is available.
43
+ */
44
+ function openBrowser(url) {
45
+ const platform = process.platform;
46
+ let cmd;
47
+ let args;
48
+ if (platform === 'darwin') {
49
+ cmd = 'open';
50
+ args = [url];
51
+ }
52
+ else if (platform === 'win32') {
53
+ cmd = 'cmd';
54
+ args = ['/c', 'start', '', url];
55
+ }
56
+ else {
57
+ cmd = 'xdg-open';
58
+ args = [url];
59
+ }
60
+ try {
61
+ const child = spawn(cmd, args, { detached: true, stdio: 'ignore' });
62
+ child.unref();
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Start a one-shot HTTP listener on a free port.
71
+ * Resolves with the captured query params on first /callback hit.
72
+ */
73
+ function startLoopbackListener() {
74
+ return new Promise((resolveOuter, rejectOuter) => {
75
+ let resolveResult;
76
+ let rejectResult;
77
+ const result = new Promise((res, rej) => {
78
+ resolveResult = res;
79
+ rejectResult = rej;
80
+ });
81
+ const server = createServer((req, res) => {
82
+ const url = new URL(req.url || '/', `http://127.0.0.1`);
83
+ if (url.pathname !== '/callback') {
84
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
85
+ res.end('Not found');
86
+ return;
87
+ }
88
+ const code = url.searchParams.get('code');
89
+ const state = url.searchParams.get('state');
90
+ if (!code || !state) {
91
+ res.writeHead(400, { 'Content-Type': 'text/plain' });
92
+ res.end('Missing code or state');
93
+ rejectResult(new Error('callback_missing_params'));
94
+ return;
95
+ }
96
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
97
+ res.end(`<!doctype html><html><head><meta charset="utf-8"><title>APIClaw — Authenticated</title><style>
98
+ body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#0a0a0a;color:#fafafa;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;text-align:center}
99
+ .box{max-width:420px;padding:32px}
100
+ .lobster{font-size:48px;margin-bottom:16px}
101
+ h1{font-weight:600;font-size:20px;margin:0 0 8px}
102
+ p{color:#a3a3a3;font-size:14px;line-height:1.5;margin:8px 0}
103
+ code{background:#1a1a1a;padding:2px 6px;border-radius:4px;color:#ef4444;font-size:13px}
104
+ </style></head><body><div class="box">
105
+ <div class="lobster">🦞</div>
106
+ <h1>Authenticated</h1>
107
+ <p>You can close this tab and return to your terminal.</p>
108
+ </div></body></html>`);
109
+ resolveResult({ code, state });
110
+ });
111
+ server.on('error', (err) => {
112
+ if (err.code === 'EADDRINUSE') {
113
+ // Retry on a free OS-assigned port
114
+ server.listen(0, '127.0.0.1');
115
+ }
116
+ else {
117
+ rejectOuter(err);
118
+ }
119
+ });
120
+ server.listen(PREFERRED_PORT, '127.0.0.1', () => {
121
+ const addr = server.address();
122
+ const port = typeof addr === 'object' && addr ? addr.port : PREFERRED_PORT;
123
+ resolveOuter({ server, port, result });
124
+ });
125
+ });
126
+ }
127
+ async function convexMutation(path, args) {
128
+ const res = await fetch(`${CONVEX_URL}/api/mutation`, {
129
+ method: 'POST',
130
+ headers: { 'Content-Type': 'application/json' },
131
+ body: JSON.stringify({ path, args }),
132
+ });
133
+ if (!res.ok)
134
+ throw new Error(`convex ${path} ${res.status}`);
135
+ const data = await res.json();
136
+ if (data.status === 'error')
137
+ throw new Error(data.errorMessage || `convex ${path} error`);
138
+ return (data.value ?? data);
139
+ }
140
+ /**
141
+ * Fire-and-forget funnel event. Never blocks the auth path on telemetry.
142
+ * Uses the public funnel:recordEvent mutation (no auth required for these events).
143
+ */
144
+ async function emitFailure(reason, fingerprint) {
145
+ try {
146
+ await fetch(`${CONVEX_URL}/api/mutation`, {
147
+ method: 'POST',
148
+ headers: { 'Content-Type': 'application/json' },
149
+ body: JSON.stringify({
150
+ path: 'funnel:recordEvent',
151
+ args: {
152
+ event: 'cli_browser_callback_failed',
153
+ classification: 'human',
154
+ fingerprint,
155
+ props: { reason },
156
+ },
157
+ }),
158
+ });
159
+ }
160
+ catch {
161
+ // best-effort
162
+ }
163
+ }
164
+ async function convexAction(path, args) {
165
+ const res = await fetch(`${CONVEX_URL}/api/action`, {
166
+ method: 'POST',
167
+ headers: { 'Content-Type': 'application/json' },
168
+ body: JSON.stringify({ path, args }),
169
+ });
170
+ if (!res.ok)
171
+ throw new Error(`convex action ${path} ${res.status}`);
172
+ const data = await res.json();
173
+ if (data.status === 'error')
174
+ throw new Error(data.errorMessage || `convex action ${path} error`);
175
+ return (data.value ?? data);
176
+ }
177
+ export async function authLoginCommand(options = {}) {
178
+ // Already signed in?
179
+ if (!options.force) {
180
+ const existing = readAuthConfig();
181
+ if (existing) {
182
+ console.log(chalk.green(`\n✓ Already signed in as ${chalk.bold(existing.email)}\n`));
183
+ console.log(chalk.dim(` Use ${chalk.white('apiclaw auth login --force')} to switch accounts, or ${chalk.white('apiclaw auth logout')} to clear.\n`));
184
+ return existing;
185
+ }
186
+ }
187
+ // Email-fallback branch — delegate to existing magic-link command.
188
+ if (options.emailFallback) {
189
+ const result = await emailLogin({ force: options.force });
190
+ if (!result)
191
+ return null;
192
+ const cfg = {
193
+ workspaceId: result.workspaceId,
194
+ email: result.email,
195
+ sessionToken: result.sessionToken,
196
+ createdAt: Date.now(),
197
+ };
198
+ writeAuthConfig(cfg);
199
+ return cfg;
200
+ }
201
+ console.log('');
202
+ console.log(chalk.bold(' 🦞 APIClaw — agent-native auth'));
203
+ console.log(chalk.dim(' Opening browser for one-tap sign-in...\n'));
204
+ // PKCE + state + fingerprint
205
+ const { verifier, challenge } = generatePkcePair();
206
+ const state = generateState();
207
+ const fingerprint = getMachineFingerprint();
208
+ // Start loopback FIRST so the port is known when we register with Convex
209
+ const loop = await startLoopbackListener();
210
+ let startResult;
211
+ const startSpinner = ora('Registering session...').start();
212
+ try {
213
+ startResult = await convexMutation('cliAuth:start', {
214
+ state,
215
+ challenge,
216
+ port: loop.port,
217
+ fingerprint,
218
+ appUrl: APP_URL,
219
+ });
220
+ startSpinner.succeed('Session registered');
221
+ }
222
+ catch (err) {
223
+ startSpinner.fail(`Failed to register session: ${err.message}`);
224
+ loop.server.close();
225
+ return null;
226
+ }
227
+ // Open browser (or print URL if --no-open / spawn fails)
228
+ if (!options.noOpen) {
229
+ const opened = openBrowser(startResult.browserUrl);
230
+ if (!opened) {
231
+ console.log(chalk.yellow(' Could not open your browser automatically.'));
232
+ }
233
+ }
234
+ console.log(chalk.dim(' Visit this URL if your browser did not open:'));
235
+ console.log(` ${chalk.cyan(startResult.browserUrl)}\n`);
236
+ // Wait for callback
237
+ const waitSpinner = ora('Waiting for browser sign-in...').start();
238
+ let timedOut = false;
239
+ const timeout = setTimeout(() => {
240
+ timedOut = true;
241
+ waitSpinner.fail('Timed out after 5 minutes');
242
+ loop.server.close();
243
+ }, LOOPBACK_TIMEOUT_MS);
244
+ let callback;
245
+ try {
246
+ callback = await loop.result;
247
+ }
248
+ catch (err) {
249
+ clearTimeout(timeout);
250
+ waitSpinner.fail(`Callback failed: ${err.message}`);
251
+ loop.server.close();
252
+ await emitFailure(timedOut ? 'timeout' : 'callback_error', fingerprint);
253
+ return null;
254
+ }
255
+ clearTimeout(timeout);
256
+ loop.server.close();
257
+ if (callback.state !== state) {
258
+ waitSpinner.fail('State mismatch — possible CSRF, aborting');
259
+ await emitFailure('state_mismatch', fingerprint);
260
+ return null;
261
+ }
262
+ waitSpinner.succeed('Browser sign-in received');
263
+ // Exchange code+verifier for session+key
264
+ const exchSpinner = ora('Exchanging credentials...').start();
265
+ let result;
266
+ try {
267
+ result = await convexAction('cliAuth:exchange', {
268
+ code: callback.code,
269
+ codeVerifier: verifier,
270
+ fingerprint,
271
+ });
272
+ }
273
+ catch (err) {
274
+ exchSpinner.fail(`Exchange failed: ${err.message}`);
275
+ return null;
276
+ }
277
+ if (!result.success || !result.sessionToken || !result.workspaceId || !result.email) {
278
+ exchSpinner.fail(`Exchange rejected: ${result.error || 'unknown'}`);
279
+ return null;
280
+ }
281
+ exchSpinner.succeed('Credentials exchanged');
282
+ // Write config
283
+ const cfg = {
284
+ workspaceId: result.workspaceId,
285
+ email: result.email,
286
+ sessionToken: result.sessionToken,
287
+ apiKey: result.apiKey,
288
+ createdAt: Date.now(),
289
+ lastUsedAt: Date.now(),
290
+ };
291
+ writeAuthConfig(cfg);
292
+ // Success banner + next-step hints (CLI-first onboarding, not "go to workspace")
293
+ console.log('');
294
+ if (result.isNew) {
295
+ console.log(chalk.bold(` ✅ Workspace created for ${chalk.green(result.email)}`));
296
+ console.log(chalk.dim(` Free tier: 50 calls/month. Tier: ${result.tier ?? 'free'}.`));
297
+ }
298
+ else {
299
+ console.log(chalk.bold(` ✅ Authenticated as ${chalk.green(result.email)}`));
300
+ console.log(chalk.dim(` Tier: ${result.tier ?? 'free'}`));
301
+ }
302
+ console.log(chalk.dim(` Config written to ${AUTH_CONFIG_PATH}`));
303
+ console.log('');
304
+ console.log(chalk.bold(' Try it:'));
305
+ console.log(chalk.dim(' apiclaw discover "currency conversion"'));
306
+ console.log(chalk.dim(' apiclaw call apilayer/fixer-latest --params \'{"base":"USD","symbols":"EUR"}\''));
307
+ console.log(chalk.dim(' apiclaw call openrouter/auto --body \'{"prompt":"hello"}\''));
308
+ if (result.apiKey) {
309
+ console.log('');
310
+ console.log(chalk.bold(' For HTTP runtimes:'));
311
+ console.log(chalk.dim(` export APICLAW_API_KEY=${result.apiKey}`));
312
+ }
313
+ console.log('');
314
+ return cfg;
315
+ }
316
+ export async function authLogoutCommand() {
317
+ const existing = readAuthConfig();
318
+ if (!existing) {
319
+ console.log(chalk.dim(' Not signed in.\n'));
320
+ return;
321
+ }
322
+ clearAuthConfig();
323
+ console.log(chalk.green(`\n✓ Signed out (${existing.email})\n`));
324
+ }
325
+ export async function authWhoamiCommand() {
326
+ const cfg = readAuthConfig();
327
+ if (!cfg) {
328
+ console.log(chalk.dim(' Not signed in. Run: apiclaw auth login\n'));
329
+ return;
330
+ }
331
+ console.log('');
332
+ console.log(` ${chalk.bold('Email:')} ${cfg.email}`);
333
+ console.log(` ${chalk.bold('Workspace:')} ${cfg.workspaceId}`);
334
+ if (cfg.apiKey) {
335
+ console.log(` ${chalk.bold('API key:')} sk-claw-...${cfg.apiKey.slice(-4)}`);
336
+ }
337
+ console.log(` ${chalk.bold('Config:')} ${AUTH_CONFIG_PATH}`);
338
+ console.log('');
339
+ }
340
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -11,6 +11,7 @@ import { doctorCommand } from './commands/doctor.js';
11
11
  import { restoreCommand } from './commands/restore.js';
12
12
  import { uninstallCommand } from './commands/uninstall.js';
13
13
  import { loginCommand } from './commands/login.js';
14
+ import { authLoginCommand, authLogoutCommand, authWhoamiCommand } from './commands/auth.js';
14
15
  import { demoCommand } from './commands/demo.js';
15
16
  import { missionCommand } from './commands/mission.js';
16
17
  import { discoverCommand, callCommand, detailsCommand, balanceCommand } from './commands/direct.js';
@@ -100,15 +101,58 @@ program
100
101
  .option('--dry-run', 'Show what would be done without making changes')
101
102
  .option('-f, --force', 'Remove even if not configured')
102
103
  .action(uninstallCommand);
103
- // Login / signup command in-terminal email verification
104
+ // Auth agent-native browser-loopback flow (canonical from v2.8).
105
+ // `apiclaw auth login` is the recommended path; `apiclaw login` aliases the
106
+ // new flow but keeps the old --email path for back-compat.
107
+ const authCmd = program
108
+ .command('auth')
109
+ .description('Authenticate the APIClaw CLI (Modal-style browser-loopback flow)');
110
+ authCmd
111
+ .command('login')
112
+ .description('Open browser, sign in via Clerk, write ~/.apiclaw.toml')
113
+ .option('-f, --force', 'Re-authenticate even if already signed in')
114
+ .option('--email-fallback', 'Use the legacy email magic-link flow (for headless/SSH)')
115
+ .option('--print-mcp-token', 'Also issue an sk-mcp-* token for Remote MCP fallback (not yet implemented)')
116
+ .option('--no-open', 'Print the URL instead of opening the browser')
117
+ .action(async (options) => {
118
+ await authLoginCommand({
119
+ force: options.force,
120
+ emailFallback: options.emailFallback,
121
+ printMcpToken: options.printMcpToken,
122
+ noOpen: !options.open, // commander inverts --no-open
123
+ });
124
+ });
125
+ authCmd
126
+ .command('logout')
127
+ .description('Clear local credentials (~/.apiclaw.toml)')
128
+ .action(async () => {
129
+ await authLogoutCommand();
130
+ });
131
+ authCmd
132
+ .command('whoami')
133
+ .description('Show the currently authenticated workspace')
134
+ .action(async () => {
135
+ await authWhoamiCommand();
136
+ });
137
+ // Login / signup command — preserved for back-compat.
138
+ // Defaults to the new browser-loopback flow; --email keeps the legacy magic-link path.
104
139
  program
105
140
  .command('login')
106
- .description('Sign in or create a free APIClaw workspace (no browser needed)')
107
- .option('-e, --email <email>', 'Email address to use')
141
+ .description('Sign in or create a free APIClaw workspace (alias of `auth login`)')
142
+ .option('-e, --email <email>', 'Email address to use (legacy magic-link flow)')
108
143
  .option('-f, --force', 'Force re-login even if already signed in')
109
144
  .option('--no-demo', 'Skip the demo after login')
110
145
  .action(async (options) => {
111
- const result = await loginCommand({ email: options.email, force: options.force });
146
+ // If --email is given, user explicitly wants the old magic-link flow.
147
+ if (options.email) {
148
+ const result = await loginCommand({ email: options.email, force: options.force });
149
+ if (result && options.demo !== false) {
150
+ await demoCommand();
151
+ }
152
+ return;
153
+ }
154
+ // Otherwise use the canonical browser-loopback flow.
155
+ const result = await authLoginCommand({ force: options.force });
112
156
  if (result && options.demo !== false) {
113
157
  await demoCommand();
114
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,iFAAiF,CAAC;KAC9F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mCAAmC;AACnC,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,uBAAuB,EAAE,4EAA4E,CAAC;KAC7G,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;KACpD,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,OAAO,EAAE,gCAAgC,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;KACzC,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,sBAAsB,EAAE,iDAAiD,CAAC;KACjF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,oCAAoC;IACpC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;QAChD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE;YACxC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,8CAA8C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO;IACT,CAAC;IAED,eAAe;IACf,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,oDAAoD;AACpD,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,CAAC;KACvF,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,gCAAgC;AAChC,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,sBAAsB,EAAE,yCAAyC,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,yCAAyC;AACzC,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,qCAAqC;AACrC,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC;KAC1C,MAAM,CAAC,sBAAsB,EAAE,0CAA0C,CAAC;KAC1E,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,0DAA0D;AAC1D,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KACrD,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACrC,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,sDAAsD;AACtD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,+EAA+E;AAC/E,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,CAAC;KACvF,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,+CAA+C;AAC/C,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAChE,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,CAAC;KAC1E,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,2BAA2B;AAC3B,EAAE;AACF,0DAA0D;AAC1D,8EAA8E;AAC9E,oEAAoE;AACpE,qEAAqE;AACrE,yEAAyE;AACzE,oEAAoE;AACpE,OAAO;KACJ,OAAO,CAAC,gCAAgC,CAAC;KACzC,WAAW,CAAC,uEAAuE,CAAC;KACpF,kBAAkB,CAAC,IAAI,CAAC;KACxB,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,IAAc,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -221,7 +221,7 @@ function checkAnonymousRateLimit(fingerprint) {
221
221
  error: `Hourly rate limit (${ANONYMOUS_HOURLY_LIMIT} calls/hour)`,
222
222
  retry_after_minutes: calculateMinutesUntilNextHour(),
223
223
  hint: "Rate limit resets at top of hour",
224
- action: "Register to get higher limits: register_owner({ email: 'you@example.com' })"
224
+ action: "Authenticate for higher limits: npx @nordsym/apiclaw auth login"
225
225
  }, null, 2)
226
226
  };
227
227
  }
@@ -232,8 +232,8 @@ function checkAnonymousRateLimit(fingerprint) {
232
232
  error: JSON.stringify({
233
233
  success: false,
234
234
  error: `⚡ You've hit your free tier limit (${ANONYMOUS_WEEKLY_LIMIT} calls/week).\n Upgrade: https://apiclaw.cloud/upgrade`,
235
- hint: "Register for 50 calls/week, or upgrade for unlimited",
236
- action: "Run: register_owner({ email: 'you@example.com' })",
235
+ hint: "Authenticate for 50 calls/month, or upgrade for unlimited",
236
+ action: "Run in terminal: npx @nordsym/apiclaw auth login",
237
237
  upgrade_url: "https://apiclaw.cloud/upgrade",
238
238
  retry_after: getNextMonthUTC()
239
239
  }, null, 2)
@@ -250,7 +250,7 @@ function checkAnonymousRateLimit(fingerprint) {
250
250
  async function validateSession() {
251
251
  const session = readSession();
252
252
  if (!session) {
253
- console.error('[APIClaw] No session found. Use register_owner to authenticate.');
253
+ console.error('[APIClaw] No session found. Run `npx @nordsym/apiclaw auth login` to authenticate.');
254
254
  return false;
255
255
  }
256
256
  try {
@@ -356,11 +356,15 @@ function checkWorkspaceAccess(providerId) {
356
356
  return {
357
357
  allowed: false,
358
358
  error: JSON.stringify({
359
- status: 'registration_required',
360
- error: 'Registration required to call APIs.',
361
- message: 'Ask the user for their email, then call register_owner({ email: "..." }). A 6-digit code will be sent. Then call verify_code with the code.',
362
- action: 'register_owner',
363
- free_tier: '50 API calls/month -- completely free.',
359
+ status: 'agent_auth_required',
360
+ error: 'Authentication required to call APIs.',
361
+ message: 'APIClaw uses an agent-native auth flow. Run the CLI command below in the user\'s terminal. A browser opens, the user signs in with one click, and the CLI writes ~/.apiclaw.toml. Then re-call this tool.',
362
+ action: 'agent_auth_required',
363
+ command: 'npx @nordsym/apiclaw auth login',
364
+ estimated_seconds: 15,
365
+ fallback: 'If no browser available (SSH/headless): npx @nordsym/apiclaw auth login --email-fallback',
366
+ legacy_action: 'register_owner ({ email: "..." }) is still supported but slower (inbox round-trip).',
367
+ free_tier: '50 API calls/month — completely free.',
364
368
  }, null, 2),
365
369
  isAnonymous: true,
366
370
  };
@@ -377,10 +381,13 @@ function checkWorkspaceAccess(providerId) {
377
381
  return {
378
382
  allowed: false,
379
383
  error: JSON.stringify({
380
- status: 'registration_required',
384
+ status: 'agent_auth_required',
381
385
  error: 'An account is required to use APIClaw.',
382
- message: 'Call register_owner({ email: "you@example.com" }) to sign up. Free tier: 25 calls/month.',
383
- action: 'register_owner',
386
+ message: 'Run `npx @nordsym/apiclaw auth login` in the user\'s terminal. Browser opens, user clicks once, CLI writes ~/.apiclaw.toml. Then re-call this tool.',
387
+ action: 'agent_auth_required',
388
+ command: 'npx @nordsym/apiclaw auth login',
389
+ estimated_seconds: 15,
390
+ fallback: 'register_owner({ email: "..." }) — legacy email magic-link flow, still works.',
384
391
  }, null, 2),
385
392
  isAnonymous: true,
386
393
  };
@@ -864,7 +871,7 @@ const tools = [
864
871
  },
865
872
  {
866
873
  name: 'call_api',
867
- description: `Primary execution tool. Use this to actually do the job through APIClaw: live web search, scraping, email, SMS, speech, LLM calls, invoices, screenshots, currency, weather, and other external API work. Requires free registration; if not registered, call register_owner first.
874
+ description: `Primary execution tool. Use this to actually do the job through APIClaw: live web search, scraping, speech, LLM calls, invoices, screenshots, currency, weather, and other external API work. Requires a free workspace; if not authenticated, the response will return action="agent_auth_required" with the CLI command to run (npx @nordsym/apiclaw auth login). The legacy register_owner / verify_code flow still works as a fallback.
868
875
 
869
876
  SINGLE CALL: Provide provider + action + params
870
877
  CHAIN: Provide chain array to execute multiple APIs in sequence/parallel with cross-step references.
@@ -1057,7 +1064,7 @@ Example chain:
1057
1064
  // ============================================
1058
1065
  {
1059
1066
  name: 'register_owner',
1060
- description: 'REQUIRED before using any API. Register your email to create a workspace. A 6-digit verification code will be sent to your email. After calling this, ask the user for the code and call verify_code.',
1067
+ description: 'LEGACY auth path (kept for back-compat). The canonical agent-native flow is `npx @nordsym/apiclaw auth login` — when a tool returns action="agent_auth_required", run that CLI command instead of this tool. register_owner sends a 6-digit code to the email and requires the user to paste it back via verify_code.',
1061
1068
  inputSchema: {
1062
1069
  type: 'object',
1063
1070
  properties: {
@@ -1817,7 +1824,7 @@ Docs: https://apiclaw.cloud
1817
1824
  text: JSON.stringify({
1818
1825
  status: 'error',
1819
1826
  error: access.error,
1820
- hint: 'Use register_owner to authenticate your workspace.',
1827
+ hint: 'Run `npx @nordsym/apiclaw auth login` to authenticate your workspace. (register_owner still works as a fallback.)',
1821
1828
  }, null, 2)
1822
1829
  }],
1823
1830
  isError: true
@@ -2123,7 +2130,7 @@ Docs: https://apiclaw.cloud
2123
2130
  if (result.success && workspaceContext && !workspaceContext.email) {
2124
2131
  const remaining = UNREGISTERED_CALL_LIMIT - (workspaceContext.usageCount || 0);
2125
2132
  if (remaining > 0 && remaining <= 3) {
2126
- responseData._notice = `${remaining} free calls remaining. Run register_owner to unlock more.`;
2133
+ responseData._notice = `${remaining} free calls remaining. Run \`npx @nordsym/apiclaw auth login\` to unlock more.`;
2127
2134
  }
2128
2135
  }
2129
2136
  return {