@braingrid/cli 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE.md +15 -0
  3. package/README.md +2 -5
  4. package/dist/cli.js +265 -317
  5. package/dist/cli.js.map +1 -1
  6. package/dist/handlers/auth.handlers.d.ts +1 -7
  7. package/dist/handlers/auth.handlers.d.ts.map +1 -1
  8. package/dist/handlers/auth.handlers.js +29 -79
  9. package/dist/handlers/auth.handlers.js.map +1 -1
  10. package/dist/handlers/index.d.ts +0 -1
  11. package/dist/handlers/index.d.ts.map +1 -1
  12. package/dist/handlers/index.js +0 -1
  13. package/dist/handlers/index.js.map +1 -1
  14. package/package.json +27 -7
  15. package/dist/handlers/agent.handlers.d.ts +0 -12
  16. package/dist/handlers/agent.handlers.d.ts.map +0 -1
  17. package/dist/handlers/agent.handlers.js +0 -130
  18. package/dist/handlers/agent.handlers.js.map +0 -1
  19. package/dist/rpc/registry.d.ts +0 -97
  20. package/dist/rpc/registry.d.ts.map +0 -1
  21. package/dist/rpc/registry.js +0 -119
  22. package/dist/rpc/registry.js.map +0 -1
  23. package/dist/rpc/server.d.ts +0 -78
  24. package/dist/rpc/server.d.ts.map +0 -1
  25. package/dist/rpc/server.js +0 -437
  26. package/dist/rpc/server.js.map +0 -1
  27. package/dist/rpc/transport.d.ts +0 -84
  28. package/dist/rpc/transport.d.ts.map +0 -1
  29. package/dist/rpc/transport.js +0 -296
  30. package/dist/rpc/transport.js.map +0 -1
  31. package/dist/services/__mocks__/utils.d.ts +0 -16
  32. package/dist/services/__mocks__/utils.d.ts.map +0 -1
  33. package/dist/services/__mocks__/utils.js +0 -21
  34. package/dist/services/__mocks__/utils.js.map +0 -1
  35. package/dist/services/agent-service.d.ts +0 -29
  36. package/dist/services/agent-service.d.ts.map +0 -1
  37. package/dist/services/agent-service.js +0 -273
  38. package/dist/services/agent-service.js.map +0 -1
@@ -1,273 +0,0 @@
1
- /**
2
- * Agent Service
3
- * Handles API interactions for agent conversations
4
- */
5
- import { createAuthenticatedAxios } from '../utils/axios-with-auth.js';
6
- import { getLogger } from '../utils/logger.js';
7
- const logger = getLogger();
8
- /**
9
- * Format tool arguments or result for display
10
- * Truncates long values to keep output readable
11
- */
12
- function formatToolData(data, maxLength = 100) {
13
- try {
14
- const str = typeof data === 'string' ? data : JSON.stringify(data);
15
- if (str.length <= maxLength) {
16
- return str;
17
- }
18
- return str.substring(0, maxLength) + '...';
19
- }
20
- catch {
21
- return String(data).substring(0, maxLength);
22
- }
23
- }
24
- export class AgentService {
25
- constructor(baseUrl, auth) {
26
- this.baseUrl = baseUrl;
27
- this.auth = auth;
28
- this.axios = createAuthenticatedAxios(auth);
29
- }
30
- getHeaders() {
31
- return {
32
- 'Content-Type': 'application/json',
33
- };
34
- }
35
- /**
36
- * Stream a conversation with the agent
37
- * Returns the final response after streaming completes
38
- */
39
- async streamConversation(request) {
40
- const url = `${this.baseUrl}/api/v1/projects/${request.project}/agent/conversations`;
41
- const headers = await this.getHeaders();
42
- const payload = {
43
- message: request.message,
44
- conversation_id: request.conversationId,
45
- context: request.context,
46
- };
47
- logger.debug('[AgentService] Making POST request with streaming', {
48
- url,
49
- payloadSize: JSON.stringify(payload).length,
50
- hasConversationId: !!request.conversationId,
51
- hasContext: !!request.context,
52
- });
53
- try {
54
- // Make POST request with streaming enabled
55
- // Note: timeout is for the entire request, not inactivity
56
- // For long-running streams, we set a generous timeout
57
- const response = (await this.axios.post(url, payload, {
58
- headers,
59
- timeout: 600000, // 10 minute timeout for long conversations
60
- responseType: 'stream', // Enable streaming
61
- }));
62
- logger.debug('[AgentService] Received streaming response', {
63
- status: response.status,
64
- hasData: !!response.data,
65
- dataType: typeof response.data,
66
- isStream: response.data?.readable,
67
- });
68
- // Collect chunks from the stream
69
- return new Promise((resolve, reject) => {
70
- let buffer = '';
71
- let conversationId = '';
72
- let finalStatus = 'complete';
73
- let assembledContent = '';
74
- let currentLineLength = 0;
75
- let inCodeBlock = false;
76
- let backtickCount = 0; // Track consecutive backticks for code block detection
77
- const maxLineLength = process.stdout.columns ? process.stdout.columns - 4 : 76;
78
- // Set up inactivity timeout (stream stops sending data)
79
- let inactivityTimeout = null;
80
- const inactivityTimeoutMs = 120000; // 2 minutes of no data
81
- const resetInactivityTimeout = () => {
82
- if (inactivityTimeout) {
83
- clearTimeout(inactivityTimeout);
84
- }
85
- inactivityTimeout = setTimeout(() => {
86
- logger.debug('[AgentService] Stream inactivity timeout - no data for 2 minutes');
87
- response.data.destroy(new Error('Stream inactivity timeout'));
88
- }, inactivityTimeoutMs);
89
- };
90
- // Start the inactivity timer
91
- resetInactivityTimeout();
92
- response.data.on('data', (chunk) => {
93
- // Reset inactivity timeout on each chunk
94
- resetInactivityTimeout();
95
- const chunkStr = chunk.toString();
96
- buffer += chunkStr;
97
- // Process complete chunks (separated by \u001e)
98
- const chunks = buffer.split('\u001e');
99
- // Keep the last incomplete chunk in the buffer
100
- buffer = chunks.pop() || '';
101
- for (const completeChunk of chunks) {
102
- if (!completeChunk.trim())
103
- continue;
104
- try {
105
- const parsed = JSON.parse(completeChunk);
106
- if (parsed.conversationId) {
107
- conversationId = parsed.conversationId;
108
- }
109
- if (parsed.status) {
110
- finalStatus = parsed.status;
111
- }
112
- // Parse message content
113
- if (parsed.message?.content) {
114
- try {
115
- const contentObj = JSON.parse(parsed.message.content);
116
- // Handle different chunk types
117
- if (contentObj.type === 'text-delta' && contentObj.text) {
118
- const text = contentObj.text;
119
- assembledContent += text;
120
- // Stream characters immediately with micro-batching
121
- let microBatch = '';
122
- for (const char of text) {
123
- // Check for code block markers
124
- if (char === '`') {
125
- backtickCount++;
126
- }
127
- else {
128
- backtickCount = 0;
129
- }
130
- if (backtickCount === 3) {
131
- inCodeBlock = !inCodeBlock;
132
- backtickCount = 0;
133
- }
134
- // Handle newlines
135
- if (char === '\n') {
136
- microBatch += char;
137
- process.stdout.write(microBatch);
138
- microBatch = '';
139
- currentLineLength = 0;
140
- continue;
141
- }
142
- // Handle word wrapping (only for regular text, not code blocks)
143
- if (!inCodeBlock && char === ' ' && currentLineLength >= maxLineLength) {
144
- microBatch += '\n';
145
- process.stdout.write(microBatch);
146
- microBatch = '';
147
- currentLineLength = 0;
148
- continue;
149
- }
150
- // Add character to micro-batch
151
- microBatch += char;
152
- currentLineLength++;
153
- // Flush micro-batch every 5 characters for smooth streaming
154
- if (microBatch.length >= 5) {
155
- process.stdout.write(microBatch);
156
- microBatch = '';
157
- }
158
- }
159
- // Flush any remaining characters
160
- if (microBatch) {
161
- process.stdout.write(microBatch);
162
- }
163
- }
164
- else if (contentObj.type === 'tool-call') {
165
- // Display tool call with visual indicator
166
- const toolName = contentObj.toolName || 'unknown';
167
- const args = contentObj.input ? formatToolData(contentObj.input) : '';
168
- process.stdout.write('\nšŸ”§ Calling tool: ' + toolName);
169
- if (args) {
170
- process.stdout.write('\n Arguments: ' + args);
171
- }
172
- process.stdout.write('\n');
173
- currentLineLength = 0;
174
- }
175
- else if (contentObj.type === 'tool-input-delta') {
176
- // Display incremental tool input
177
- const delta = contentObj.delta || '';
178
- if (delta) {
179
- process.stdout.write(delta);
180
- }
181
- }
182
- else if (contentObj.type === 'tool-result') {
183
- // Display tool result
184
- const isError = contentObj.result?.isError || false;
185
- if (isError) {
186
- const errorMsg = contentObj.result?.content || 'Unknown error';
187
- process.stdout.write('āœ— Tool failed: ' + formatToolData(errorMsg) + '\n');
188
- }
189
- else {
190
- process.stdout.write('āœ“ Tool completed\n');
191
- }
192
- currentLineLength = 0;
193
- }
194
- else if (contentObj.type === 'error') {
195
- // Display error
196
- const errorMsg = contentObj.error?.message || contentObj.error || 'Unknown error';
197
- process.stdout.write('\nāŒ Error: ' + errorMsg + '\n');
198
- currentLineLength = 0;
199
- }
200
- }
201
- catch {
202
- // If content is not JSON, treat it as plain text
203
- assembledContent += parsed.message.content;
204
- }
205
- }
206
- }
207
- catch {
208
- logger.debug('[AgentService] Failed to parse chunk', {
209
- chunk: completeChunk.substring(0, 100),
210
- });
211
- }
212
- }
213
- });
214
- response.data.on('end', () => {
215
- // Clear inactivity timeout
216
- if (inactivityTimeout) {
217
- clearTimeout(inactivityTimeout);
218
- }
219
- logger.debug('[AgentService] Stream ended', {
220
- conversationId,
221
- status: finalStatus,
222
- contentLength: assembledContent.length,
223
- });
224
- resolve({
225
- conversationId,
226
- message: {
227
- role: 'assistant',
228
- content: assembledContent || 'No content received',
229
- },
230
- status: finalStatus,
231
- });
232
- });
233
- response.data.on('error', (error) => {
234
- // Clear inactivity timeout
235
- if (inactivityTimeout) {
236
- clearTimeout(inactivityTimeout);
237
- }
238
- logger.debug('[AgentService] Stream error', { error: error.message });
239
- reject(error);
240
- });
241
- });
242
- }
243
- catch (error) {
244
- logger.debug('[AgentService] Request failed', {
245
- error: error instanceof Error ? error.message : String(error),
246
- errorType: error?.constructor?.name,
247
- });
248
- throw error;
249
- }
250
- }
251
- /**
252
- * Stream a conversation with callback support for real-time updates
253
- */
254
- async streamConversationWithCallback(request, onChunk) {
255
- const url = `${this.baseUrl}/api/v1/projects/${request.project}/agent/conversations`;
256
- const headers = await this.getHeaders();
257
- const payload = {
258
- message: request.message,
259
- conversation_id: request.conversationId,
260
- context: request.context,
261
- };
262
- // Make request with streaming support
263
- // For now, we'll use a simple POST and call the callback once
264
- // Future enhancement: Support Server-Sent Events (SSE) or chunked responses
265
- const response = await this.axios.post(url, payload, {
266
- headers,
267
- });
268
- // Call the callback with the response
269
- await onChunk(response.data);
270
- return response.data;
271
- }
272
- }
273
- //# sourceMappingURL=agent-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"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"}