@clawapps/cli 0.6.0 → 0.6.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.
Files changed (97) hide show
  1. package/README.md +86 -123
  2. package/dist/commands/balance.d.ts +3 -0
  3. package/dist/commands/balance.js +31 -0
  4. package/dist/commands/balance.js.map +1 -0
  5. package/dist/commands/connect.d.ts +7 -0
  6. package/dist/commands/connect.js +143 -0
  7. package/dist/commands/connect.js.map +1 -0
  8. package/dist/commands/helpers/resolve-credentials.d.ts +12 -0
  9. package/dist/commands/helpers/resolve-credentials.js +29 -0
  10. package/dist/commands/helpers/resolve-credentials.js.map +1 -0
  11. package/dist/commands/login-code.d.ts +6 -0
  12. package/dist/commands/login-code.js +27 -0
  13. package/dist/commands/login-code.js.map +1 -0
  14. package/dist/commands/login-poll.d.ts +5 -0
  15. package/dist/commands/login-poll.js +30 -0
  16. package/dist/commands/login-poll.js.map +1 -0
  17. package/dist/commands/login.d.ts +3 -5
  18. package/dist/commands/login.js +66 -128
  19. package/dist/commands/login.js.map +1 -1
  20. package/dist/commands/logout.js +3 -18
  21. package/dist/commands/logout.js.map +1 -1
  22. package/dist/commands/send.d.ts +8 -0
  23. package/dist/commands/send.js +112 -0
  24. package/dist/commands/send.js.map +1 -0
  25. package/dist/commands/sessions.d.ts +6 -0
  26. package/dist/commands/sessions.js +36 -0
  27. package/dist/commands/sessions.js.map +1 -0
  28. package/dist/index.js +49 -34
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/config.d.ts +4 -15
  31. package/dist/lib/config.js +6 -21
  32. package/dist/lib/config.js.map +1 -1
  33. package/dist/lib/login-service.d.ts +23 -0
  34. package/dist/lib/login-service.js +68 -0
  35. package/dist/lib/login-service.js.map +1 -0
  36. package/dist/lib/relay-client.d.ts +25 -0
  37. package/dist/lib/relay-client.js +113 -0
  38. package/dist/lib/relay-client.js.map +1 -0
  39. package/dist/lib/sse-parser.d.ts +12 -0
  40. package/dist/lib/sse-parser.js +61 -0
  41. package/dist/lib/sse-parser.js.map +1 -0
  42. package/dist/lib/types.d.ts +17 -27
  43. package/package.json +3 -2
  44. package/dist/auth/apple.d.ts +0 -5
  45. package/dist/auth/apple.js +0 -15
  46. package/dist/auth/apple.js.map +0 -1
  47. package/dist/auth/exchange.d.ts +0 -6
  48. package/dist/auth/exchange.js +0 -25
  49. package/dist/auth/exchange.js.map +0 -1
  50. package/dist/auth/google.d.ts +0 -5
  51. package/dist/auth/google.js +0 -16
  52. package/dist/auth/google.js.map +0 -1
  53. package/dist/auth/login-server.d.ts +0 -10
  54. package/dist/auth/login-server.js +0 -62
  55. package/dist/auth/login-server.js.map +0 -1
  56. package/dist/auth/payment-server.d.ts +0 -10
  57. package/dist/auth/payment-server.js +0 -66
  58. package/dist/auth/payment-server.js.map +0 -1
  59. package/dist/auth/qr-poll.d.ts +0 -32
  60. package/dist/auth/qr-poll.js +0 -72
  61. package/dist/auth/qr-poll.js.map +0 -1
  62. package/dist/auth/server.d.ts +0 -17
  63. package/dist/auth/server.js +0 -102
  64. package/dist/auth/server.js.map +0 -1
  65. package/dist/commands/credit.d.ts +0 -1
  66. package/dist/commands/credit.js +0 -28
  67. package/dist/commands/credit.js.map +0 -1
  68. package/dist/commands/helpers/ensure-token.d.ts +0 -6
  69. package/dist/commands/helpers/ensure-token.js +0 -29
  70. package/dist/commands/helpers/ensure-token.js.map +0 -1
  71. package/dist/commands/membership.d.ts +0 -1
  72. package/dist/commands/membership.js +0 -28
  73. package/dist/commands/membership.js.map +0 -1
  74. package/dist/commands/payment-grant.d.ts +0 -5
  75. package/dist/commands/payment-grant.js +0 -132
  76. package/dist/commands/payment-grant.js.map +0 -1
  77. package/dist/commands/recharge-credits.d.ts +0 -1
  78. package/dist/commands/recharge-credits.js +0 -10
  79. package/dist/commands/recharge-credits.js.map +0 -1
  80. package/dist/commands/subscribe.d.ts +0 -1
  81. package/dist/commands/subscribe.js +0 -10
  82. package/dist/commands/subscribe.js.map +0 -1
  83. package/dist/commands/token.d.ts +0 -1
  84. package/dist/commands/token.js +0 -17
  85. package/dist/commands/token.js.map +0 -1
  86. package/dist/commands/whoami.d.ts +0 -1
  87. package/dist/commands/whoami.js +0 -59
  88. package/dist/commands/whoami.js.map +0 -1
  89. package/dist/html/callback.d.ts +0 -12
  90. package/dist/html/callback.js +0 -246
  91. package/dist/html/callback.js.map +0 -1
  92. package/dist/html/logo-data.d.ts +0 -1
  93. package/dist/html/logo-data.js +0 -2
  94. package/dist/html/logo-data.js.map +0 -1
  95. package/dist/lib/api.d.ts +0 -13
  96. package/dist/lib/api.js +0 -26
  97. package/dist/lib/api.js.map +0 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
5
  [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green.svg)](https://nodejs.org/)
6
6
 
7
- A command-line tool for authenticating with the [ClawApps](https://www.clawapps.ai) platform. Sign in via Google or Apple directly from your terminal tokens are stored locally for use by AI agents and scripts.
7
+ Command-line client for the [ClawApps](https://www.clawapps.ai) AI agent platform. Authenticate via WeChat, interact with your agent workspace, and integrate with external AI assistants.
8
8
 
9
9
  ## Install
10
10
 
@@ -12,178 +12,141 @@ A command-line tool for authenticating with the [ClawApps](https://www.clawapps.
12
12
  npm install -g @clawapps/cli
13
13
  ```
14
14
 
15
- ## Commands
16
-
17
- ### `clawapps login`
18
-
19
- Sign in with Google or Apple. Opens a browser for OAuth, then stores tokens locally. If already logged in, auto-refreshes the token and extends the session.
15
+ ## Quick Start
20
16
 
21
17
  ```bash
22
- $ clawapps login
23
- Opening browser for login...
24
- ✔ Logged in as user@gmail.com
25
- ```
18
+ # 1. Login (scan WeChat QR code)
19
+ clawapps login
26
20
 
27
- ### `clawapps whoami`
21
+ # 2. Check balance
22
+ clawapps balance
28
23
 
29
- Show current account info. Auto-refreshes expired tokens.
24
+ # 3. Send a message to your agent
25
+ clawapps send "hello"
30
26
 
31
- ```bash
32
- $ clawapps whoami
33
- ClawApps Account
34
- ──────────────────────────────
35
- Name: Username
36
- Email: user@gmail.com
37
- ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
38
- Provider: google
27
+ # 4. Or start a persistent session
28
+ clawapps connect
39
29
  ```
40
30
 
41
- ### `clawapps token`
31
+ ## Commands
32
+
33
+ ### `clawapps login`
42
34
 
43
- Print current valid access token. Auto-refreshes if expired. Designed for scripting.
35
+ Log in via WeChat QR code. Scan with WeChat to authenticate (valid for 3 minutes). Tokens are stored locally for subsequent commands.
44
36
 
45
37
  ```bash
46
- $ clawapps token
47
- eyJhbGciOiJIUzI1NiIs...
38
+ $ clawapps login
39
+ Scan with WeChat to login:
40
+ █████████████████████
41
+ █████████████████████
42
+ Waiting for authentication...
43
+ ✔ Login successful!
48
44
  ```
49
45
 
50
- Use in scripts:
46
+ ### `clawapps logout`
51
47
 
52
- ```bash
53
- curl -H "Authorization: Bearer $(clawapps token)" https://api.clawapps.ai/api/v1/...
54
- ```
48
+ Log out and clear local credentials and session history.
55
49
 
56
- ### `clawapps credit`
50
+ ### `clawapps send <message>`
57
51
 
58
- Open credit recharge page in browser.
52
+ Send a message to your agent workspace and receive the response.
59
53
 
60
54
  ```bash
61
- $ clawapps credit
62
- Opening credit recharge page...
63
- Page opened in your browser.
55
+ # Human-readable output
56
+ $ clawapps send "what's the weather in Toronto?"
57
+ Toronto today: 7°C, rainy. Bring an umbrella.
58
+
59
+ # JSON output (for AI assistant integration)
60
+ $ clawapps send "hello" --json
61
+ {"event":"session_created","session_id":"abc-123"}
62
+ {"event":"text","content":"Hello! How can I help you?"}
63
+ {"event":"complete","success":true,"usage":{...}}
64
64
  ```
65
65
 
66
- ### `clawapps membership`
66
+ Options: `--json` `--session-id <id>` `--new-session` `--timeout <ms>`
67
+
68
+ ### `clawapps connect`
67
69
 
68
- Open membership subscription page in browser.
70
+ Start a persistent interactive session with your agent workspace.
69
71
 
70
72
  ```bash
71
- $ clawapps membership
72
- Opening membership subscription page...
73
- Page opened in your browser.
73
+ # Interactive mode
74
+ $ clawapps connect
75
+ Connected to session: abc-123
76
+ > hello
77
+ Hello! How can I help you?
78
+ > /quit
79
+
80
+ # JSON pipe mode (AI assistant integration)
81
+ $ clawapps connect --json
74
82
  ```
75
83
 
76
- ### `clawapps payment-grant <skill_id>`
84
+ Options: `--json` `--session-id <id>` `--timeout <ms>`
77
85
 
78
- Open payment grant page for a skill. Starts a local callback server to receive the payment token after authorization.
86
+ ### `clawapps balance`
87
+
88
+ Check your credit balance.
79
89
 
80
90
  ```bash
81
- $ clawapps payment-grant c0ff42a9-2b54-48b3-b570-cb16be363ad6
82
- Opening payment grant page...
83
- Waiting for payment confirmation...
91
+ $ clawapps balance
92
+ Account Balance
93
+ Credits: 78.16
94
+ Membership: free
84
95
 
85
- Payment grant confirmed!
86
- Payment Token: 8d6d2e514eb241559a4dfcb3176ce3a4
87
- Auto Payment: disabled
96
+ $ clawapps balance --json
97
+ {"credits":78.16,"membership":"free","display_name":"sammi"}
88
98
  ```
89
99
 
90
- ### `clawapps logout`
100
+ ### `clawapps sessions`
91
101
 
92
- Sign out and clear local credentials.
102
+ List or manage local session history.
93
103
 
94
104
  ```bash
95
- $ clawapps logout
96
- Logged out successfully.
105
+ $ clawapps sessions
106
+ $ clawapps sessions --clear
97
107
  ```
98
108
 
99
- ## How It Works
109
+ ## AI Assistant Integration
100
110
 
101
- ```
102
- clawapps login
103
- → Local HTTP server starts on localhost (random port)
104
- Browser opens for OAuth (Google or Apple)
105
- Callback returns tokens to local server
106
- Credentials saved to ~/.clawapps/credentials.json (0600)
107
-
108
- clawapps token
109
- → Load local credentials
110
- → Validate access token via API
111
- → If expired, auto-refresh using refresh token
112
- → Output valid access token to stdout
111
+ External AI assistants (e.g., Claude Code) can use the CLI as a subprocess:
112
+
113
+ ```bash
114
+ export CLAWAPPS_ACCESS_TOKEN="eyJ..."
115
+ export CLAWAPPS_REFRESH_TOKEN="eyJ..."
116
+ clawapps send "deploy my app" --json
113
117
  ```
114
118
 
115
- ## Credentials
119
+ JSON events (stdout, one per line):
116
120
 
117
- Tokens are stored at `~/.clawapps/credentials.json` with file permissions `0600`.
121
+ | Event | Description |
122
+ |-------|-------------|
123
+ | `session_created` | Session ID assigned |
124
+ | `text` | Assistant response text (streaming) |
125
+ | `mode_change` | Switched from Gemini to Claude mode |
126
+ | `complete` | Response finished with usage stats |
127
+ | `cost` | Credits consumed and remaining balance |
128
+ | `error` | Error occurred |
118
129
 
119
- ```json
120
- {
121
- "provider": "google",
122
- "access_token": "eyJ...",
123
- "refresh_token": "eyJ...",
124
- "logged_in_at": "2026-03-12T11:00:00.000Z"
125
- }
126
- ```
130
+ ## Credentials
127
131
 
128
- ## Project Structure
132
+ Tokens stored at `~/.clawapps/credentials.json` (permissions `0600`).
129
133
 
130
- ```
131
- clawapps-cli/
132
- ├── bin/claw.js # Entry point
133
- ├── src/
134
- │ ├── index.ts # Commander setup
135
- │ ├── commands/
136
- │ │ ├── login.ts # OAuth flow with auto-refresh
137
- │ │ ├── logout.ts # Clear credentials
138
- │ │ ├── whoami.ts # User info with auto-refresh
139
- │ │ ├── token.ts # Print valid access token
140
- │ │ ├── credit.ts # Open credit page
141
- │ │ ├── membership.ts # Open membership page
142
- │ │ ├── payment-grant.ts # Payment authorization flow
143
- │ │ └── helpers/
144
- │ │ └── ensure-token.ts # Token validation & refresh
145
- │ ├── auth/
146
- │ │ ├── login-server.ts # Login callback server
147
- │ │ ├── payment-server.ts # Payment callback server
148
- │ │ ├── server.ts # Google OAuth callback server
149
- │ │ ├── google.ts # Google OAuth URL builder
150
- │ │ ├── apple.ts # Apple OAuth URL builder
151
- │ │ └── exchange.ts # Token exchange
152
- │ ├── lib/
153
- │ │ ├── config.ts # API endpoints & constants
154
- │ │ ├── credentials.ts # Read/write credentials
155
- │ │ ├── api.ts # HTTP request helpers
156
- │ │ └── types.ts # TypeScript interfaces
157
- │ └── html/
158
- │ ├── callback.ts # OAuth callback HTML templates
159
- │ └── logo-data.ts # Logo (base64 embedded)
160
- ├── package.json
161
- └── tsconfig.json
162
- ```
134
+ Environment variables override local credentials:
135
+ - `CLAWAPPS_ACCESS_TOKEN` — Access token
136
+ - `CLAWAPPS_REFRESH_TOKEN` Refresh token
137
+ - `CLAWAPPS_RELAY_URL` — Custom relay endpoint
163
138
 
164
139
  ## Development
165
140
 
166
141
  ```bash
167
- npm install # Install dependencies
168
- npm run build # Compile TypeScript
169
- npm run dev # Watch mode
170
- node bin/claw.js # Run locally
142
+ npm install
143
+ npm run build
144
+ node bin/claw.js
171
145
  ```
172
146
 
173
147
  ## Requirements
174
148
 
175
- - **Node.js >= 18** (uses native `fetch`)
176
-
177
- ## Related
178
-
179
- - [clawapps-skill](https://github.com/ClawApps/clawapps-skill) — Agent Skill for managing apps on ClawApps
180
-
181
- ## Contributing
182
-
183
- 1. Fork the repository
184
- 2. Create a feature branch (`git checkout -b feat/my-feature`)
185
- 3. Commit your changes (use [Conventional Commits](https://www.conventionalcommits.org/))
186
- 4. Push and open a Pull Request
149
+ - **Node.js >= 18**
187
150
 
188
151
  ## License
189
152
 
@@ -0,0 +1,3 @@
1
+ export declare function balanceCommand(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;
@@ -0,0 +1,31 @@
1
+ import chalk from 'chalk';
2
+ import { resolveCredentials } from './helpers/resolve-credentials.js';
3
+ import { getBalance } from '../lib/relay-client.js';
4
+ export async function balanceCommand(options) {
5
+ try {
6
+ const creds = await resolveCredentials();
7
+ const balance = await getBalance(creds.access_token);
8
+ if (options.json) {
9
+ process.stdout.write(JSON.stringify(balance) + '\n');
10
+ }
11
+ else {
12
+ console.log(chalk.bold('Account Balance'));
13
+ console.log(` Credits: ${chalk.green(String(balance.credits))}`);
14
+ console.log(` Membership: ${balance.membership}`);
15
+ if (balance.display_name) {
16
+ console.log(` Name: ${balance.display_name}`);
17
+ }
18
+ }
19
+ }
20
+ catch (err) {
21
+ const msg = err instanceof Error ? err.message : String(err);
22
+ if (options.json) {
23
+ process.stdout.write(JSON.stringify({ error: msg }) + '\n');
24
+ }
25
+ else {
26
+ console.error(chalk.red(msg));
27
+ }
28
+ process.exit(msg.includes('authenticated') || msg.includes('expired') ? 2 : 1);
29
+ }
30
+ }
31
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface ConnectOptions {
2
+ sessionId?: string;
3
+ json?: boolean;
4
+ timeout?: string;
5
+ }
6
+ export declare function connectCommand(options: ConnectOptions): Promise<void>;
7
+ export {};
@@ -0,0 +1,143 @@
1
+ import chalk from 'chalk';
2
+ import { createInterface } from 'node:readline';
3
+ import { resolveCredentials } from './helpers/resolve-credentials.js';
4
+ import { createSession, sendMessage, stopProcessing, closeSession, saveSession, } from '../lib/relay-client.js';
5
+ function jsonOut(obj) {
6
+ process.stdout.write(JSON.stringify(obj) + '\n');
7
+ }
8
+ export async function connectCommand(options) {
9
+ const isJson = !!options.json;
10
+ try {
11
+ const creds = await resolveCredentials();
12
+ const token = creds.access_token;
13
+ // Create or reuse session
14
+ let sessionId;
15
+ if (options.sessionId) {
16
+ sessionId = options.sessionId;
17
+ }
18
+ else {
19
+ const session = await createSession(token);
20
+ sessionId = session.session_id;
21
+ await saveSession({ session_id: sessionId, created_at: new Date().toISOString() });
22
+ }
23
+ if (isJson) {
24
+ jsonOut({ event: 'session_created', session_id: sessionId });
25
+ jsonOut({ event: 'ready' });
26
+ }
27
+ else {
28
+ console.log(chalk.green(`Connected to session: ${sessionId}`));
29
+ console.log(chalk.gray('Type your message and press Enter. Use Ctrl+C to exit.\n'));
30
+ }
31
+ // Handle graceful shutdown
32
+ let shuttingDown = false;
33
+ const cleanup = async () => {
34
+ if (shuttingDown)
35
+ return;
36
+ shuttingDown = true;
37
+ try {
38
+ await closeSession(token, sessionId);
39
+ }
40
+ catch { /* ignore */ }
41
+ process.exit(0);
42
+ };
43
+ process.on('SIGINT', cleanup);
44
+ process.on('SIGTERM', cleanup);
45
+ if (isJson) {
46
+ // JSON mode: read NDJSON from stdin
47
+ await jsonMode(token, sessionId);
48
+ }
49
+ else {
50
+ // Interactive mode: readline prompt
51
+ await interactiveMode(token, sessionId);
52
+ }
53
+ }
54
+ catch (err) {
55
+ const msg = err instanceof Error ? err.message : String(err);
56
+ if (isJson) {
57
+ jsonOut({ event: 'error', code: 'CLI_ERROR', message: msg });
58
+ }
59
+ else {
60
+ console.error(chalk.red(msg));
61
+ }
62
+ process.exit(msg.includes('authenticated') || msg.includes('expired') ? 2 : 1);
63
+ }
64
+ }
65
+ async function jsonMode(token, sessionId) {
66
+ const rl = createInterface({ input: process.stdin });
67
+ for await (const line of rl) {
68
+ if (!line.trim())
69
+ continue;
70
+ let cmd;
71
+ try {
72
+ cmd = JSON.parse(line);
73
+ }
74
+ catch {
75
+ jsonOut({ event: 'error', code: 'INVALID_JSON', message: 'Invalid JSON input' });
76
+ continue;
77
+ }
78
+ if (cmd.action === 'stop') {
79
+ await stopProcessing(token, sessionId).catch(() => { });
80
+ jsonOut({ event: 'stopped' });
81
+ continue;
82
+ }
83
+ if (cmd.action === 'message' && cmd.content) {
84
+ for await (const evt of sendMessage(token, sessionId, cmd.content)) {
85
+ jsonOut({ event: evt.event, ...evt.data });
86
+ }
87
+ continue;
88
+ }
89
+ jsonOut({ event: 'error', code: 'UNKNOWN_ACTION', message: `Unknown action: ${cmd.action}` });
90
+ }
91
+ }
92
+ async function interactiveMode(token, sessionId) {
93
+ const rl = createInterface({
94
+ input: process.stdin,
95
+ output: process.stderr, // prompts to stderr, data to stdout
96
+ prompt: chalk.cyan('> '),
97
+ });
98
+ rl.prompt();
99
+ for await (const line of rl) {
100
+ const input = line.trim();
101
+ if (!input) {
102
+ rl.prompt();
103
+ continue;
104
+ }
105
+ if (input.toLowerCase() === '/quit' || input.toLowerCase() === '/exit') {
106
+ break;
107
+ }
108
+ if (input.toLowerCase() === '/stop') {
109
+ await stopProcessing(token, sessionId).catch(() => { });
110
+ console.log(chalk.yellow('Stopped.'));
111
+ rl.prompt();
112
+ continue;
113
+ }
114
+ try {
115
+ for await (const evt of sendMessage(token, sessionId, input)) {
116
+ switch (evt.event) {
117
+ case 'text':
118
+ process.stdout.write(String(evt.data.content || ''));
119
+ break;
120
+ case 'complete':
121
+ process.stdout.write('\n');
122
+ break;
123
+ case 'cost': {
124
+ const used = evt.data.credits_used;
125
+ const after = evt.data.balance_after;
126
+ if (used > 0) {
127
+ console.log(chalk.gray(`[Credits: -${used} | Balance: ${after}]`));
128
+ }
129
+ break;
130
+ }
131
+ case 'error':
132
+ console.error(chalk.red(`Error: ${evt.data.message}`));
133
+ break;
134
+ }
135
+ }
136
+ }
137
+ catch (err) {
138
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
139
+ }
140
+ rl.prompt();
141
+ }
142
+ }
143
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAQhC,SAAS,OAAO,CAAC,GAA4B;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;QAEjC,0BAA0B;QAC1B,IAAI,SAAiB,CAAC;QACtB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;YAC/B,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,2BAA2B;QAC3B,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/B,IAAI,MAAM,EAAE,CAAC;YACX,oCAAoC;YACpC,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,KAAa,EAAE,SAAiB;IACtD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAErD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,IAAI,GAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACjF,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,SAAS;QACX,CAAC;QAED,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,SAAiB;IAC7D,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,oCAAoC;QAC5D,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KACzB,CAAC,CAAC;IAEH,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACvE,MAAM;QACR,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC7D,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;oBAClB,KAAK,MAAM;wBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;wBACrD,MAAM;oBACR,KAAK,UAAU;wBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3B,MAAM;oBACR,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAsB,CAAC;wBAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,aAAuB,CAAC;wBAC/C,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;4BACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,eAAe,KAAK,GAAG,CAAC,CAAC,CAAC;wBACrE,CAAC;wBACD,MAAM;oBACR,CAAC;oBACD,KAAK,OAAO;wBACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBACvD,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Credentials } from '../../lib/types.js';
2
+ /**
3
+ * Resolve credentials from environment variables or local file.
4
+ *
5
+ * Priority:
6
+ * 1. CLAWAPPS_ACCESS_TOKEN + CLAWAPPS_REFRESH_TOKEN env vars
7
+ * 2. ~/.clawapps/credentials.json
8
+ * 3. Throw with instructions to run `clawapps login`
9
+ *
10
+ * Token validation is done server-side by the Relay.
11
+ */
12
+ export declare function resolveCredentials(): Promise<Credentials>;
@@ -0,0 +1,29 @@
1
+ import { loadCredentials } from '../../lib/credentials.js';
2
+ /**
3
+ * Resolve credentials from environment variables or local file.
4
+ *
5
+ * Priority:
6
+ * 1. CLAWAPPS_ACCESS_TOKEN + CLAWAPPS_REFRESH_TOKEN env vars
7
+ * 2. ~/.clawapps/credentials.json
8
+ * 3. Throw with instructions to run `clawapps login`
9
+ *
10
+ * Token validation is done server-side by the Relay.
11
+ */
12
+ export async function resolveCredentials() {
13
+ const envAccess = process.env.CLAWAPPS_ACCESS_TOKEN;
14
+ const envRefresh = process.env.CLAWAPPS_REFRESH_TOKEN;
15
+ if (envAccess && envRefresh) {
16
+ return {
17
+ provider: 'env',
18
+ access_token: envAccess,
19
+ refresh_token: envRefresh,
20
+ logged_in_at: new Date().toISOString(),
21
+ };
22
+ }
23
+ const creds = await loadCredentials();
24
+ if (!creds) {
25
+ throw new Error('Not authenticated. Run `clawapps login` or set CLAWAPPS_ACCESS_TOKEN.');
26
+ }
27
+ return creds;
28
+ }
29
+ //# sourceMappingURL=resolve-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-credentials.js","sourceRoot":"","sources":["../../../src/commands/helpers/resolve-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAEtD,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,UAAU;YACzB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Create a login code and QR image. Returns immediately (non-blocking).
3
+ * Outputs JSON metadata + QR code text to stdout.
4
+ * Designed for AI agent integration.
5
+ */
6
+ export declare function loginCodeCommand(): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createLoginCode } from '../lib/login-service.js';
3
+ /**
4
+ * Create a login code and QR image. Returns immediately (non-blocking).
5
+ * Outputs JSON metadata + QR code text to stdout.
6
+ * Designed for AI agent integration.
7
+ */
8
+ export async function loginCodeCommand() {
9
+ try {
10
+ const result = await createLoginCode();
11
+ process.stdout.write(JSON.stringify({
12
+ code: result.code,
13
+ url: result.qr_url,
14
+ qr_image: result.qr_image,
15
+ expires_at: result.expires_at,
16
+ next: `clawapps login-poll ${result.code}`,
17
+ }) + '\n');
18
+ // Print QR text directly so agent sees it in stdout
19
+ process.stdout.write(readFileSync(result.qr_text, 'utf-8'));
20
+ }
21
+ catch (err) {
22
+ const msg = err instanceof Error ? err.message : String(err);
23
+ process.stdout.write(JSON.stringify({ error: msg }) + '\n');
24
+ process.exit(1);
25
+ }
26
+ }
27
+ //# sourceMappingURL=login-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-code.js","sourceRoot":"","sources":["../../src/commands/login-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,MAAM;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,uBAAuB,MAAM,CAAC,IAAI,EAAE;SAC3C,CAAC,GAAG,IAAI,CAAC,CAAC;QACX,oDAAoD;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Poll for login code verification. Outputs JSON events.
3
+ * Designed for AI agent integration.
4
+ */
5
+ export declare function loginPollCommand(code: string): Promise<void>;
@@ -0,0 +1,30 @@
1
+ import { pollLoginCode } from '../lib/login-service.js';
2
+ /**
3
+ * Poll for login code verification. Outputs JSON events.
4
+ * Designed for AI agent integration.
5
+ */
6
+ export async function loginPollCommand(code) {
7
+ function jsonOut(obj) {
8
+ process.stdout.write(JSON.stringify(obj) + '\n');
9
+ }
10
+ try {
11
+ const result = await pollLoginCode(code, (remaining) => {
12
+ if (remaining % 30 === 0) {
13
+ jsonOut({ event: 'waiting', remaining });
14
+ }
15
+ });
16
+ if (result.success) {
17
+ jsonOut({ event: 'login_success', display_name: result.display_name || null });
18
+ }
19
+ else {
20
+ jsonOut({ event: 'error', code: 'LOGIN_FAILED', message: result.error });
21
+ process.exit(1);
22
+ }
23
+ }
24
+ catch (err) {
25
+ const msg = err instanceof Error ? err.message : String(err);
26
+ jsonOut({ event: 'error', code: 'POLL_ERROR', message: msg });
27
+ process.exit(1);
28
+ }
29
+ }
30
+ //# sourceMappingURL=login-poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-poll.js","sourceRoot":"","sources":["../../src/commands/login-poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,SAAS,OAAO,CAAC,GAA4B;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE;YACrD,IAAI,SAAS,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,5 +1,3 @@
1
- export interface LoginCommandOptions {
2
- urlOnly?: boolean;
3
- wait?: string;
4
- }
5
- export declare function loginCommand(options: LoginCommandOptions): Promise<void>;
1
+ export declare function loginCommand(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;