@clawapps/cli 0.6.5 → 0.7.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.
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { createInterface } from 'node:readline';
3
3
  import { resolveCredentials } from './helpers/resolve-credentials.js';
4
- import { createSession, sendMessage, stopProcessing, closeSession, saveSession, } from '../lib/relay-client.js';
4
+ import { connectRelay, saveSession } from '../lib/relay-client.js';
5
5
  function jsonOut(obj) {
6
6
  process.stdout.write(JSON.stringify(obj) + '\n');
7
7
  }
@@ -9,42 +9,32 @@ export async function connectCommand(options) {
9
9
  const isHuman = !!options.human;
10
10
  try {
11
11
  const creds = await resolveCredentials();
12
- const token = creds.access_token;
13
- let sessionId;
14
- if (options.sessionId) {
15
- sessionId = options.sessionId;
16
- }
17
- else {
18
- const session = await createSession(token);
19
- sessionId = session.session_id;
20
- await saveSession({ session_id: sessionId, created_at: new Date().toISOString() });
21
- }
12
+ const relay = await connectRelay(creds.access_token);
13
+ await saveSession({ session_id: relay.sessionId, created_at: new Date().toISOString() });
22
14
  if (isHuman) {
23
- console.log(chalk.green(`Connected to session: ${sessionId}`));
15
+ console.log(chalk.green(`Connected to session: ${relay.sessionId}`));
24
16
  console.log(chalk.gray('Type your message and press Enter. Use Ctrl+C to exit.\n'));
25
17
  }
26
18
  else {
27
- jsonOut({ event: 'session_created', session_id: sessionId });
19
+ jsonOut({ event: 'session_created', session_id: relay.sessionId });
28
20
  jsonOut({ event: 'ready' });
29
21
  }
22
+ // Graceful shutdown
30
23
  let shuttingDown = false;
31
- const cleanup = async () => {
24
+ const cleanup = () => {
32
25
  if (shuttingDown)
33
26
  return;
34
27
  shuttingDown = true;
35
- try {
36
- await closeSession(token, sessionId);
37
- }
38
- catch { /* ignore */ }
28
+ relay.close();
39
29
  process.exit(0);
40
30
  };
41
31
  process.on('SIGINT', cleanup);
42
32
  process.on('SIGTERM', cleanup);
43
33
  if (isHuman) {
44
- await interactiveMode(token, sessionId);
34
+ await interactiveMode(relay);
45
35
  }
46
36
  else {
47
- await jsonMode(token, sessionId);
37
+ await jsonMode(relay);
48
38
  }
49
39
  }
50
40
  catch (err) {
@@ -58,8 +48,15 @@ export async function connectCommand(options) {
58
48
  process.exit(msg.includes('authenticated') || msg.includes('expired') ? 2 : 1);
59
49
  }
60
50
  }
61
- async function jsonMode(token, sessionId) {
51
+ async function jsonMode(relay) {
52
+ // Read commands from stdin, send to relay
62
53
  const rl = createInterface({ input: process.stdin });
54
+ // Also listen for push messages from Bridge
55
+ const pushListener = (async () => {
56
+ for await (const msg of relay.listen()) {
57
+ jsonOut({ event: msg.type, ...msg });
58
+ }
59
+ })();
63
60
  for await (const line of rl) {
64
61
  if (!line.trim())
65
62
  continue;
@@ -72,25 +69,54 @@ async function jsonMode(token, sessionId) {
72
69
  continue;
73
70
  }
74
71
  if (cmd.action === 'stop') {
75
- await stopProcessing(token, sessionId).catch(() => { });
72
+ relay.stop();
76
73
  jsonOut({ event: 'stopped' });
77
- continue;
78
74
  }
79
- if (cmd.action === 'message' && cmd.content) {
80
- for await (const evt of sendMessage(token, sessionId, cmd.content)) {
81
- jsonOut({ event: evt.event, ...evt.data });
82
- }
83
- continue;
75
+ else if (cmd.action === 'message' && cmd.content) {
76
+ relay.send({ action: 'message', content: cmd.content });
77
+ // Responses come through the pushListener
78
+ }
79
+ else {
80
+ jsonOut({ event: 'error', code: 'UNKNOWN_ACTION', message: `Unknown action: ${cmd.action}` });
84
81
  }
85
- jsonOut({ event: 'error', code: 'UNKNOWN_ACTION', message: `Unknown action: ${cmd.action}` });
86
82
  }
87
83
  }
88
- async function interactiveMode(token, sessionId) {
84
+ async function interactiveMode(relay) {
89
85
  const rl = createInterface({
90
86
  input: process.stdin,
91
87
  output: process.stderr,
92
88
  prompt: chalk.cyan('> '),
93
89
  });
90
+ // Listen for Bridge messages and display them
91
+ const pushListener = (async () => {
92
+ for await (const msg of relay.listen()) {
93
+ switch (msg.type) {
94
+ case 'assistant_text':
95
+ case 'assistant':
96
+ process.stdout.write(String(msg.content || msg.text || ''));
97
+ break;
98
+ case 'formatted':
99
+ if (msg.intro)
100
+ process.stdout.write(String(msg.intro));
101
+ break;
102
+ case 'complete':
103
+ process.stdout.write('\n');
104
+ rl.prompt();
105
+ break;
106
+ case 'cost': {
107
+ const used = msg.credits_used;
108
+ const after = msg.balance_after;
109
+ if (used > 0)
110
+ console.log(chalk.gray(`[Credits: -${used} | Balance: ${after}]`));
111
+ break;
112
+ }
113
+ case 'error':
114
+ console.error(chalk.red(`Error: ${msg.message}`));
115
+ rl.prompt();
116
+ break;
117
+ }
118
+ }
119
+ })();
94
120
  rl.prompt();
95
121
  for await (const line of rl) {
96
122
  const input = line.trim();
@@ -101,37 +127,14 @@ async function interactiveMode(token, sessionId) {
101
127
  if (input.toLowerCase() === '/quit' || input.toLowerCase() === '/exit')
102
128
  break;
103
129
  if (input.toLowerCase() === '/stop') {
104
- await stopProcessing(token, sessionId).catch(() => { });
130
+ relay.stop();
105
131
  console.log(chalk.yellow('Stopped.'));
106
132
  rl.prompt();
107
133
  continue;
108
134
  }
109
- try {
110
- for await (const evt of sendMessage(token, sessionId, input)) {
111
- switch (evt.event) {
112
- case 'text':
113
- process.stdout.write(String(evt.data.content || ''));
114
- break;
115
- case 'complete':
116
- process.stdout.write('\n');
117
- break;
118
- case 'cost': {
119
- const used = evt.data.credits_used;
120
- const after = evt.data.balance_after;
121
- if (used > 0)
122
- console.log(chalk.gray(`[Credits: -${used} | Balance: ${after}]`));
123
- break;
124
- }
125
- case 'error':
126
- console.error(chalk.red(`Error: ${evt.data.message}`));
127
- break;
128
- }
129
- }
130
- }
131
- catch (err) {
132
- console.error(chalk.red(err instanceof Error ? err.message : String(err)));
133
- }
134
- rl.prompt();
135
+ relay.send({ action: 'message', content: input });
136
+ // Response comes through pushListener
135
137
  }
138
+ relay.close();
136
139
  }
137
140
  //# sourceMappingURL=connect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -1,93 +1,90 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import { resolveCredentials } from './helpers/resolve-credentials.js';
4
- import { createSession, sendMessage, saveSession, getLastSessionId, } from '../lib/relay-client.js';
4
+ import { connectRelay, saveSession } from '../lib/relay-client.js';
5
5
  export async function sendCommand(message, options) {
6
6
  const isHuman = !!options.human;
7
7
  try {
8
8
  const creds = await resolveCredentials();
9
- const token = creds.access_token;
10
- // Resolve session
11
- let sessionId;
12
- if (options.sessionId) {
13
- sessionId = options.sessionId;
14
- }
15
- else if (options.newSession) {
16
- const session = await createSession(token);
17
- sessionId = session.session_id;
18
- await saveSession({ session_id: sessionId, created_at: new Date().toISOString() });
19
- }
20
- else {
21
- const lastId = await getLastSessionId();
22
- if (lastId) {
23
- sessionId = lastId;
24
- }
25
- else {
26
- const session = await createSession(token);
27
- sessionId = session.session_id;
28
- await saveSession({ session_id: sessionId, created_at: new Date().toISOString() });
29
- }
30
- }
9
+ const relay = await connectRelay(creds.access_token);
10
+ await saveSession({ session_id: relay.sessionId, created_at: new Date().toISOString() });
31
11
  if (!isHuman) {
32
- process.stdout.write(JSON.stringify({ event: 'session_created', session_id: sessionId }) + '\n');
12
+ process.stdout.write(JSON.stringify({ event: 'session_created', session_id: relay.sessionId }) + '\n');
33
13
  }
34
- // Send message and collect response
35
14
  const spinner = isHuman ? ora('Thinking...').start() : null;
36
15
  let fullResponse = '';
37
16
  let creditsUsed = 0;
38
17
  let balanceAfter = 0;
39
- for await (const evt of sendMessage(token, sessionId, message)) {
40
- switch (evt.event) {
41
- case 'text':
42
- fullResponse += evt.data.content || '';
18
+ for await (const msg of relay.sendMessage(message)) {
19
+ switch (msg.type) {
20
+ case 'assistant_text':
21
+ case 'assistant':
22
+ fullResponse += msg.content || msg.text || '';
43
23
  if (isHuman) {
44
24
  if (spinner?.isSpinning)
45
25
  spinner.stop();
46
26
  }
47
27
  else {
48
- process.stdout.write(JSON.stringify({ event: 'text', content: evt.data.content }) + '\n');
28
+ process.stdout.write(JSON.stringify({ event: 'text', content: msg.content || msg.text }) + '\n');
29
+ }
30
+ break;
31
+ case 'formatted': {
32
+ const intro = msg.intro || '';
33
+ if (intro && !fullResponse.includes(intro)) {
34
+ fullResponse += intro;
35
+ if (isHuman) {
36
+ if (spinner?.isSpinning)
37
+ spinner.stop();
38
+ }
39
+ else {
40
+ process.stdout.write(JSON.stringify({ event: 'text', content: intro }) + '\n');
41
+ }
42
+ }
43
+ if (!isHuman) {
44
+ process.stdout.write(JSON.stringify({ event: 'formatted', mode: msg.mode, intro, ui_tree: msg.ui_tree, timing: msg.timing }) + '\n');
49
45
  }
50
46
  break;
47
+ }
51
48
  case 'status':
52
49
  case 'log':
53
50
  if (isHuman && spinner?.isSpinning) {
54
- spinner.text = (evt.data.state || evt.data.level || 'processing');
51
+ spinner.text = (msg.state || msg.level || 'processing');
55
52
  }
56
53
  else if (!isHuman) {
57
- process.stdout.write(JSON.stringify({ event: evt.event, ...evt.data }) + '\n');
54
+ process.stdout.write(JSON.stringify({ event: msg.type, ...msg }) + '\n');
58
55
  }
59
56
  break;
60
57
  case 'mode_change':
61
58
  if (!isHuman) {
62
- process.stdout.write(JSON.stringify({ event: 'mode_change', ...evt.data }) + '\n');
59
+ process.stdout.write(JSON.stringify({ event: 'mode_change', mode: msg.mode, reason: msg.reason }) + '\n');
63
60
  }
64
61
  break;
65
62
  case 'complete':
66
63
  if (!isHuman) {
67
- process.stdout.write(JSON.stringify({ event: 'complete', ...evt.data }) + '\n');
64
+ process.stdout.write(JSON.stringify({ event: 'complete', success: msg.success, mode: msg.mode, usage: msg.usage }) + '\n');
68
65
  }
69
66
  break;
70
67
  case 'cost':
71
- creditsUsed = evt.data.credits_used || 0;
72
- balanceAfter = evt.data.balance_after || 0;
68
+ creditsUsed = msg.credits_used || 0;
69
+ balanceAfter = msg.balance_after || 0;
73
70
  if (!isHuman) {
74
- process.stdout.write(JSON.stringify({ event: 'cost', ...evt.data }) + '\n');
71
+ process.stdout.write(JSON.stringify({ event: 'cost', credits_used: creditsUsed, balance_after: balanceAfter }) + '\n');
75
72
  }
76
73
  break;
77
74
  case 'error':
78
75
  if (isHuman) {
79
76
  if (spinner?.isSpinning)
80
- spinner.fail(evt.data.message);
81
- console.error(chalk.red(`Error: ${evt.data.message}`));
77
+ spinner.fail(msg.message);
78
+ console.error(chalk.red(`Error: ${msg.message}`));
82
79
  }
83
80
  else {
84
- process.stdout.write(JSON.stringify({ event: 'error', ...evt.data }) + '\n');
81
+ process.stdout.write(JSON.stringify({ event: 'error', code: msg.code, message: msg.message }) + '\n');
85
82
  }
86
83
  break;
87
84
  }
88
85
  }
89
- if (spinner?.isSpinning)
90
- spinner.stop();
86
+ spinner?.stop();
87
+ relay.close();
91
88
  if (isHuman && fullResponse) {
92
89
  console.log(fullResponse);
93
90
  if (creditsUsed > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,38 @@
1
- import type { RelaySessionResponse, RelayBalanceResponse, SSEEvent, SessionStore, SessionInfo } from './types.js';
1
+ import type { RelayBalanceResponse, SessionInfo, SessionStore } from './types.js';
2
+ export interface RelayMessage {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }
2
6
  /**
3
- * Create a new session on the Relay.
4
- */
5
- export declare function createSession(token: string): Promise<RelaySessionResponse>;
6
- /**
7
- * Send a message and yield SSE events as they arrive.
8
- */
9
- export declare function sendMessage(token: string, sessionId: string, content: string): AsyncGenerator<SSEEvent>;
10
- /**
11
- * Stop processing for a session.
12
- */
13
- export declare function stopProcessing(token: string, sessionId: string): Promise<void>;
14
- /**
15
- * Close a session.
16
- */
17
- export declare function closeSession(token: string, sessionId: string): Promise<void>;
18
- /**
19
- * Get credit balance.
7
+ * Connect to Relay via WebSocket. Returns helpers to send/receive messages.
20
8
  */
9
+ export declare function connectRelay(token: string): Promise<RelayConnection>;
10
+ export declare class RelayConnection {
11
+ ws: WebSocket;
12
+ sessionId: string;
13
+ mode: string;
14
+ constructor(ws: WebSocket, sessionId: string, mode: string);
15
+ /**
16
+ * Send an action to Bridge via Relay.
17
+ */
18
+ send(action: Record<string, unknown>): void;
19
+ /**
20
+ * Send a message and yield Bridge responses until complete.
21
+ */
22
+ sendMessage(content: string): AsyncGenerator<RelayMessage>;
23
+ /**
24
+ * Listen for all messages (including push messages).
25
+ */
26
+ listen(): AsyncGenerator<RelayMessage>;
27
+ /**
28
+ * Stop current processing.
29
+ */
30
+ stop(): void;
31
+ /**
32
+ * Close the connection.
33
+ */
34
+ close(): void;
35
+ }
21
36
  export declare function getBalance(token: string): Promise<RelayBalanceResponse>;
22
37
  export declare function loadSessions(): Promise<SessionStore>;
23
38
  export declare function saveSession(info: SessionInfo): Promise<void>;
@@ -2,75 +2,170 @@ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { CONFIG } from './config.js';
5
- import { parseSSE } from './sse-parser.js';
6
- function relayUrl(path) {
5
+ function relayHttpUrl(path) {
7
6
  const base = process.env.CLAWAPPS_RELAY_URL || CONFIG.CLI_RELAY_BASE;
8
7
  return `${base}${path}`;
9
8
  }
10
- function authHeaders(token) {
11
- return {
12
- 'Authorization': `Bearer ${token}`,
13
- 'Content-Type': 'application/json',
14
- };
9
+ function relayWsUrl(token) {
10
+ const base = process.env.CLAWAPPS_RELAY_URL || CONFIG.CLI_RELAY_BASE;
11
+ // Convert https://.../ to wss://.../ws?token=xxx
12
+ const wsBase = base.replace(/^http/, 'ws');
13
+ return `${wsBase}/ws?token=${encodeURIComponent(token)}`;
15
14
  }
16
15
  /**
17
- * Create a new session on the Relay.
16
+ * Connect to Relay via WebSocket. Returns helpers to send/receive messages.
18
17
  */
19
- export async function createSession(token) {
20
- const res = await fetch(relayUrl('/session'), {
21
- method: 'POST',
22
- headers: authHeaders(token),
23
- body: '{}',
18
+ export async function connectRelay(token) {
19
+ const wsUrl = relayWsUrl(token);
20
+ const ws = await new Promise((resolve, reject) => {
21
+ const socket = new WebSocket(wsUrl);
22
+ const timeout = setTimeout(() => {
23
+ socket.close();
24
+ reject(new Error('Connection timeout'));
25
+ }, CONFIG.CLI_CONNECT_TIMEOUT_MS);
26
+ socket.addEventListener('open', () => { clearTimeout(timeout); resolve(socket); });
27
+ socket.addEventListener('error', (e) => { clearTimeout(timeout); reject(new Error('Connection failed')); });
24
28
  });
25
- if (!res.ok) {
26
- const err = await res.json().catch(() => ({ message: res.statusText }));
27
- throw new Error(err.message || `Session creation failed (${res.status})`);
28
- }
29
- return await res.json();
29
+ // Wait for initial {type:"connected"} from Relay
30
+ const connMsg = await waitForMessage(ws, 'connected', CONFIG.CLI_CONNECT_TIMEOUT_MS);
31
+ return new RelayConnection(ws, connMsg.session_id, connMsg.mode);
30
32
  }
31
- /**
32
- * Send a message and yield SSE events as they arrive.
33
- */
34
- export async function* sendMessage(token, sessionId, content) {
35
- const res = await fetch(relayUrl(`/session/${sessionId}/message`), {
36
- method: 'POST',
37
- headers: authHeaders(token),
38
- body: JSON.stringify({ content }),
39
- signal: AbortSignal.timeout(CONFIG.CLI_MESSAGE_TIMEOUT_MS),
33
+ function waitForMessage(ws, expectedType, timeoutMs) {
34
+ return new Promise((resolve, reject) => {
35
+ const timeout = setTimeout(() => {
36
+ ws.removeEventListener('message', handler);
37
+ reject(new Error(`Timeout waiting for "${expectedType}"`));
38
+ }, timeoutMs);
39
+ function handler(event) {
40
+ try {
41
+ const msg = JSON.parse(event.data);
42
+ if (msg.type === expectedType) {
43
+ clearTimeout(timeout);
44
+ ws.removeEventListener('message', handler);
45
+ resolve(msg);
46
+ }
47
+ }
48
+ catch { /* keep waiting */ }
49
+ }
50
+ ws.addEventListener('message', handler);
40
51
  });
41
- if (!res.ok) {
42
- const err = await res.json().catch(() => ({ message: res.statusText }));
43
- throw new Error(err.message || `Send failed (${res.status})`);
52
+ }
53
+ export class RelayConnection {
54
+ ws;
55
+ sessionId;
56
+ mode;
57
+ constructor(ws, sessionId, mode) {
58
+ this.ws = ws;
59
+ this.sessionId = sessionId;
60
+ this.mode = mode;
44
61
  }
45
- if (!res.body) {
46
- throw new Error('No response body (SSE stream expected)');
62
+ /**
63
+ * Send an action to Bridge via Relay.
64
+ */
65
+ send(action) {
66
+ if (this.ws.readyState === WebSocket.OPEN) {
67
+ this.ws.send(JSON.stringify(action));
68
+ }
69
+ }
70
+ /**
71
+ * Send a message and yield Bridge responses until complete.
72
+ */
73
+ async *sendMessage(content) {
74
+ this.send({ action: 'message', content });
75
+ const messageQueue = [];
76
+ let resolve = null;
77
+ let done = false;
78
+ const handler = (event) => {
79
+ try {
80
+ const msg = JSON.parse(event.data);
81
+ messageQueue.push(msg);
82
+ if (resolve) {
83
+ resolve();
84
+ resolve = null;
85
+ }
86
+ }
87
+ catch { /* ignore */ }
88
+ };
89
+ this.ws.addEventListener('message', handler);
90
+ try {
91
+ while (!done) {
92
+ if (messageQueue.length === 0) {
93
+ await new Promise((r) => { resolve = r; });
94
+ }
95
+ while (messageQueue.length > 0) {
96
+ const msg = messageQueue.shift();
97
+ yield msg;
98
+ if (msg.type === 'complete' || msg.type === 'error') {
99
+ done = true;
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ finally {
106
+ this.ws.removeEventListener('message', handler);
107
+ }
108
+ }
109
+ /**
110
+ * Listen for all messages (including push messages).
111
+ */
112
+ async *listen() {
113
+ const messageQueue = [];
114
+ let resolve = null;
115
+ let closed = false;
116
+ const handler = (event) => {
117
+ try {
118
+ const msg = JSON.parse(event.data);
119
+ messageQueue.push(msg);
120
+ if (resolve) {
121
+ resolve();
122
+ resolve = null;
123
+ }
124
+ }
125
+ catch { /* ignore */ }
126
+ };
127
+ const closeHandler = () => {
128
+ closed = true;
129
+ if (resolve) {
130
+ resolve();
131
+ resolve = null;
132
+ }
133
+ };
134
+ this.ws.addEventListener('message', handler);
135
+ this.ws.addEventListener('close', closeHandler);
136
+ try {
137
+ while (!closed) {
138
+ if (messageQueue.length === 0) {
139
+ await new Promise((r) => { resolve = r; });
140
+ }
141
+ while (messageQueue.length > 0) {
142
+ yield messageQueue.shift();
143
+ }
144
+ }
145
+ }
146
+ finally {
147
+ this.ws.removeEventListener('message', handler);
148
+ this.ws.removeEventListener('close', closeHandler);
149
+ }
150
+ }
151
+ /**
152
+ * Stop current processing.
153
+ */
154
+ stop() {
155
+ this.send({ action: 'stop' });
156
+ }
157
+ /**
158
+ * Close the connection.
159
+ */
160
+ close() {
161
+ if (this.ws.readyState === WebSocket.OPEN) {
162
+ this.ws.close(1000, 'Client close');
163
+ }
47
164
  }
48
- yield* parseSSE(res.body);
49
- }
50
- /**
51
- * Stop processing for a session.
52
- */
53
- export async function stopProcessing(token, sessionId) {
54
- await fetch(relayUrl(`/session/${sessionId}/stop`), {
55
- method: 'POST',
56
- headers: authHeaders(token),
57
- body: '{}',
58
- });
59
- }
60
- /**
61
- * Close a session.
62
- */
63
- export async function closeSession(token, sessionId) {
64
- await fetch(relayUrl(`/session/${sessionId}`), {
65
- method: 'DELETE',
66
- headers: { 'Authorization': `Bearer ${token}` },
67
- });
68
165
  }
69
- /**
70
- * Get credit balance.
71
- */
166
+ // --- HTTP endpoints (balance, no WS needed) ---
72
167
  export async function getBalance(token) {
73
- const res = await fetch(relayUrl('/balance'), {
168
+ const res = await fetch(relayHttpUrl('/balance'), {
74
169
  method: 'GET',
75
170
  headers: { 'Authorization': `Bearer ${token}` },
76
171
  });
@@ -1 +1 @@
1
- {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/lib/relay-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/lib/relay-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawapps/cli",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "description": "ClawApps CLI - AI agent platform client",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,12 +0,0 @@
1
- import type { SSEEvent } from './types.js';
2
- /**
3
- * Parse a Server-Sent Events stream into structured events.
4
- *
5
- * SSE format:
6
- * event: text
7
- * data: {"content":"hello"}
8
- *
9
- * event: complete
10
- * data: {"success":true}
11
- */
12
- export declare function parseSSE(body: ReadableStream<Uint8Array>): AsyncGenerator<SSEEvent>;
@@ -1,61 +0,0 @@
1
- /**
2
- * Parse a Server-Sent Events stream into structured events.
3
- *
4
- * SSE format:
5
- * event: text
6
- * data: {"content":"hello"}
7
- *
8
- * event: complete
9
- * data: {"success":true}
10
- */
11
- export async function* parseSSE(body) {
12
- const reader = body.pipeThrough(new TextDecoderStream()).getReader();
13
- let buffer = '';
14
- let currentEvent = '';
15
- let currentData = '';
16
- try {
17
- while (true) {
18
- const { done, value } = await reader.read();
19
- if (done)
20
- break;
21
- buffer += value;
22
- const lines = buffer.split('\n');
23
- // Keep the last incomplete line in buffer
24
- buffer = lines.pop() || '';
25
- for (const line of lines) {
26
- if (line.startsWith('event: ')) {
27
- currentEvent = line.slice(7).trim();
28
- }
29
- else if (line.startsWith('data: ')) {
30
- currentData = line.slice(6);
31
- }
32
- else if (line === '' && currentEvent && currentData) {
33
- // Empty line = end of event
34
- try {
35
- const data = JSON.parse(currentData);
36
- yield { event: currentEvent, data };
37
- }
38
- catch {
39
- yield { event: currentEvent, data: { raw: currentData } };
40
- }
41
- currentEvent = '';
42
- currentData = '';
43
- }
44
- }
45
- }
46
- // Flush any remaining event
47
- if (currentEvent && currentData) {
48
- try {
49
- const data = JSON.parse(currentData);
50
- yield { event: currentEvent, data };
51
- }
52
- catch {
53
- yield { event: currentEvent, data: { raw: currentData } };
54
- }
55
- }
56
- }
57
- finally {
58
- reader.releaseLock();
59
- }
60
- }
61
- //# sourceMappingURL=sse-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-parser.js","sourceRoot":"","sources":["../../src/lib/sse-parser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,IAAgC;IAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAS,CAAC,CAAC,SAAS,EAAE,CAAC;IAE5E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,KAAK,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,0CAA0C;YAC1C,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC;qBAAM,IAAI,IAAI,KAAK,EAAE,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;oBACtD,4BAA4B;oBAC5B,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;wBACrC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;oBACtC,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;oBAC5D,CAAC;oBACD,YAAY,GAAG,EAAE,CAAC;oBAClB,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACrC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}