@braingrid/cli 0.1.3 ā 0.2.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.
- package/CHANGELOG.md +56 -0
- package/README.md +54 -39
- package/dist/chunk-KNVWIF3L.js +401 -0
- package/dist/chunk-KNVWIF3L.js.map +1 -0
- package/dist/cli.js +6229 -290
- package/dist/cli.js.map +1 -1
- package/dist/gh-installer-B65ZOOC4.js +13 -0
- package/dist/gh-installer-B65ZOOC4.js.map +1 -0
- package/package.json +40 -13
- package/dist/build-config.d.ts +0 -26
- package/dist/build-config.d.ts.map +0 -1
- package/dist/build-config.js +0 -45
- package/dist/build-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/handlers/agent.handlers.d.ts +0 -12
- package/dist/handlers/agent.handlers.d.ts.map +0 -1
- package/dist/handlers/agent.handlers.js +0 -130
- package/dist/handlers/agent.handlers.js.map +0 -1
- package/dist/handlers/auth.handlers.d.ts +0 -19
- package/dist/handlers/auth.handlers.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.js +0 -177
- package/dist/handlers/auth.handlers.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -14
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -14
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/init.handlers.d.ts +0 -10
- package/dist/handlers/init.handlers.d.ts.map +0 -1
- package/dist/handlers/init.handlers.js +0 -638
- package/dist/handlers/init.handlers.js.map +0 -1
- package/dist/handlers/project.handlers.d.ts +0 -36
- package/dist/handlers/project.handlers.d.ts.map +0 -1
- package/dist/handlers/project.handlers.js +0 -309
- package/dist/handlers/project.handlers.js.map +0 -1
- package/dist/handlers/requirement.handlers.d.ts +0 -32
- package/dist/handlers/requirement.handlers.d.ts.map +0 -1
- package/dist/handlers/requirement.handlers.js +0 -264
- package/dist/handlers/requirement.handlers.js.map +0 -1
- package/dist/handlers/status.handlers.d.ts +0 -12
- package/dist/handlers/status.handlers.d.ts.map +0 -1
- package/dist/handlers/status.handlers.js +0 -212
- package/dist/handlers/status.handlers.js.map +0 -1
- package/dist/handlers/task.handlers.d.ts +0 -29
- package/dist/handlers/task.handlers.d.ts.map +0 -1
- package/dist/handlers/task.handlers.js +0 -326
- package/dist/handlers/task.handlers.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -10
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -5
- package/dist/handlers/types.js.map +0 -1
- package/dist/handlers/update.handlers.d.ts +0 -16
- package/dist/handlers/update.handlers.d.ts.map +0 -1
- package/dist/handlers/update.handlers.js +0 -119
- package/dist/handlers/update.handlers.js.map +0 -1
- package/dist/rpc/registry.d.ts +0 -97
- package/dist/rpc/registry.d.ts.map +0 -1
- package/dist/rpc/registry.js +0 -119
- package/dist/rpc/registry.js.map +0 -1
- package/dist/rpc/server.d.ts +0 -78
- package/dist/rpc/server.d.ts.map +0 -1
- package/dist/rpc/server.js +0 -437
- package/dist/rpc/server.js.map +0 -1
- package/dist/rpc/transport.d.ts +0 -84
- package/dist/rpc/transport.d.ts.map +0 -1
- package/dist/rpc/transport.js +0 -296
- package/dist/rpc/transport.js.map +0 -1
- package/dist/services/__mocks__/utils.d.ts +0 -16
- package/dist/services/__mocks__/utils.d.ts.map +0 -1
- package/dist/services/__mocks__/utils.js +0 -21
- package/dist/services/__mocks__/utils.js.map +0 -1
- package/dist/services/agent-service.d.ts +0 -29
- package/dist/services/agent-service.d.ts.map +0 -1
- package/dist/services/agent-service.js +0 -273
- package/dist/services/agent-service.js.map +0 -1
- package/dist/services/auth.d.ts +0 -59
- package/dist/services/auth.d.ts.map +0 -1
- package/dist/services/auth.js +0 -549
- package/dist/services/auth.js.map +0 -1
- package/dist/services/claude.d.ts +0 -18
- package/dist/services/claude.d.ts.map +0 -1
- package/dist/services/claude.js +0 -164
- package/dist/services/claude.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -47
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -89
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/internal/github-service.d.ts +0 -67
- package/dist/services/internal/github-service.d.ts.map +0 -1
- package/dist/services/internal/github-service.js +0 -81
- package/dist/services/internal/github-service.js.map +0 -1
- package/dist/services/internal/repository-service.d.ts +0 -79
- package/dist/services/internal/repository-service.d.ts.map +0 -1
- package/dist/services/internal/repository-service.js +0 -88
- package/dist/services/internal/repository-service.js.map +0 -1
- package/dist/services/oauth2-auth.d.ts +0 -76
- package/dist/services/oauth2-auth.d.ts.map +0 -1
- package/dist/services/oauth2-auth.js +0 -451
- package/dist/services/oauth2-auth.js.map +0 -1
- package/dist/services/project-service.d.ts +0 -24
- package/dist/services/project-service.d.ts.map +0 -1
- package/dist/services/project-service.js +0 -60
- package/dist/services/project-service.js.map +0 -1
- package/dist/services/requirement-service.d.ts +0 -32
- package/dist/services/requirement-service.d.ts.map +0 -1
- package/dist/services/requirement-service.js +0 -91
- package/dist/services/requirement-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -22
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -52
- package/dist/services/task-service.js.map +0 -1
- package/dist/types/api.d.ts +0 -16
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -5
- package/dist/types/api.js.map +0 -1
- package/dist/types/auth.d.ts +0 -73
- package/dist/types/auth.d.ts.map +0 -1
- package/dist/types/auth.js +0 -2
- package/dist/types/auth.js.map +0 -1
- package/dist/types/claude.d.ts +0 -22
- package/dist/types/claude.d.ts.map +0 -1
- package/dist/types/claude.js +0 -2
- package/dist/types/claude.js.map +0 -1
- package/dist/types/github.d.ts +0 -105
- package/dist/types/github.d.ts.map +0 -1
- package/dist/types/github.js +0 -6
- package/dist/types/github.js.map +0 -1
- package/dist/types/local-project.d.ts +0 -30
- package/dist/types/local-project.d.ts.map +0 -1
- package/dist/types/local-project.js +0 -24
- package/dist/types/local-project.js.map +0 -1
- package/dist/types/project.d.ts +0 -56
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/project.js +0 -5
- package/dist/types/project.js.map +0 -1
- package/dist/types/requirement.d.ts +0 -69
- package/dist/types/requirement.d.ts.map +0 -1
- package/dist/types/requirement.js +0 -5
- package/dist/types/requirement.js.map +0 -1
- package/dist/types/task.d.ts +0 -44
- package/dist/types/task.d.ts.map +0 -1
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -1
- package/dist/utils/axios-retry.d.ts +0 -25
- package/dist/utils/axios-retry.d.ts.map +0 -1
- package/dist/utils/axios-retry.js +0 -174
- package/dist/utils/axios-retry.js.map +0 -1
- package/dist/utils/axios-with-auth.d.ts +0 -10
- package/dist/utils/axios-with-auth.d.ts.map +0 -1
- package/dist/utils/axios-with-auth.js +0 -118
- package/dist/utils/axios-with-auth.js.map +0 -1
- package/dist/utils/cli-tools.d.ts +0 -30
- package/dist/utils/cli-tools.d.ts.map +0 -1
- package/dist/utils/cli-tools.js +0 -199
- package/dist/utils/cli-tools.js.map +0 -1
- package/dist/utils/command-execution.d.ts +0 -30
- package/dist/utils/command-execution.d.ts.map +0 -1
- package/dist/utils/command-execution.js +0 -264
- package/dist/utils/command-execution.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -85
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -287
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -77
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -17
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -115
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -10
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -122
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/gh-installer.d.ts +0 -31
- package/dist/utils/gh-installer.d.ts.map +0 -1
- package/dist/utils/gh-installer.js +0 -296
- package/dist/utils/gh-installer.js.map +0 -1
- package/dist/utils/git-installer.d.ts +0 -31
- package/dist/utils/git-installer.d.ts.map +0 -1
- package/dist/utils/git-installer.js +0 -290
- package/dist/utils/git-installer.js.map +0 -1
- package/dist/utils/git.d.ts +0 -60
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -144
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/github-repo.d.ts +0 -43
- package/dist/utils/github-repo.d.ts.map +0 -1
- package/dist/utils/github-repo.js +0 -113
- package/dist/utils/github-repo.js.map +0 -1
- package/dist/utils/id-normalization.d.ts +0 -26
- package/dist/utils/id-normalization.d.ts.map +0 -1
- package/dist/utils/id-normalization.js +0 -45
- package/dist/utils/id-normalization.js.map +0 -1
- package/dist/utils/jwt.d.ts +0 -45
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/jwt.js +0 -64
- package/dist/utils/jwt.js.map +0 -1
- package/dist/utils/local-store.d.ts +0 -36
- package/dist/utils/local-store.d.ts.map +0 -1
- package/dist/utils/local-store.js +0 -94
- package/dist/utils/local-store.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/package-manager-installer.d.ts +0 -36
- package/dist/utils/package-manager-installer.d.ts.map +0 -1
- package/dist/utils/package-manager-installer.js +0 -106
- package/dist/utils/package-manager-installer.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -31
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -133
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/projects.d.ts +0 -23
- package/dist/utils/projects.d.ts.map +0 -1
- package/dist/utils/projects.js +0 -36
- package/dist/utils/projects.js.map +0 -1
- package/dist/utils/repository-access.d.ts +0 -89
- package/dist/utils/repository-access.d.ts.map +0 -1
- package/dist/utils/repository-access.js +0 -132
- package/dist/utils/repository-access.js.map +0 -1
- package/dist/utils/requirements.d.ts +0 -43
- package/dist/utils/requirements.d.ts.map +0 -1
- package/dist/utils/requirements.js +0 -79
- package/dist/utils/requirements.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -47
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -101
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/status-parser.d.ts +0 -95
- package/dist/utils/status-parser.d.ts.map +0 -1
- package/dist/utils/status-parser.js +0 -205
- package/dist/utils/status-parser.js.map +0 -1
- package/dist/utils/tasks.d.ts +0 -21
- package/dist/utils/tasks.d.ts.map +0 -1
- package/dist/utils/tasks.js +0 -63
- package/dist/utils/tasks.js.map +0 -1
- package/dist/utils/workspace-manager.d.ts +0 -65
- package/dist/utils/workspace-manager.d.ts.map +0 -1
- package/dist/utils/workspace-manager.js +0 -98
- package/dist/utils/workspace-manager.js.map +0 -1
package/dist/rpc/transport.js
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* STDIO Transport Layer for JSON-RPC 2.0
|
|
3
|
-
* Handles newline-delimited JSON message parsing and sending over stdin/stdout
|
|
4
|
-
*/
|
|
5
|
-
import { EventEmitter } from 'events';
|
|
6
|
-
import { createParseError, safeParseJsonRpcMessage } from '@braingrid/protocol';
|
|
7
|
-
/**
|
|
8
|
-
* STDIO Transport implementation for JSON-RPC communication
|
|
9
|
-
*/
|
|
10
|
-
export class StdioTransport extends EventEmitter {
|
|
11
|
-
constructor(input = process.stdin, output = process.stdout, options = {}) {
|
|
12
|
-
super();
|
|
13
|
-
this.buffer = '';
|
|
14
|
-
this.isClosed = false;
|
|
15
|
-
this.contentBuffer = Buffer.alloc(0);
|
|
16
|
-
this.expectedContentLength = null;
|
|
17
|
-
this.headers = new Map();
|
|
18
|
-
this.input = input;
|
|
19
|
-
this.output = output;
|
|
20
|
-
this.useContentLength = options.useContentLength || false;
|
|
21
|
-
// Set encoding to UTF-8 for newline-delimited mode
|
|
22
|
-
if (!this.useContentLength) {
|
|
23
|
-
this.input.setEncoding('utf8');
|
|
24
|
-
}
|
|
25
|
-
// Set up input stream handling
|
|
26
|
-
this.input.on('data', this.handleData.bind(this));
|
|
27
|
-
this.input.on('error', this.handleError.bind(this));
|
|
28
|
-
this.input.on('end', () => this.handleClose());
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Handle incoming data chunks from stdin
|
|
32
|
-
*/
|
|
33
|
-
handleData(chunk) {
|
|
34
|
-
if (this.isClosed)
|
|
35
|
-
return;
|
|
36
|
-
if (this.useContentLength) {
|
|
37
|
-
// Content-Length mode (LSP-style)
|
|
38
|
-
this.handleContentLengthData(chunk);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
// Newline-delimited mode
|
|
42
|
-
this.handleNewlineDelimitedData(chunk);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Handle data in newline-delimited mode
|
|
47
|
-
*/
|
|
48
|
-
handleNewlineDelimitedData(chunk) {
|
|
49
|
-
// Add chunk to buffer
|
|
50
|
-
this.buffer += chunk;
|
|
51
|
-
// Process complete messages (newline-delimited)
|
|
52
|
-
let newlineIndex;
|
|
53
|
-
while ((newlineIndex = this.buffer.indexOf('\n')) !== -1) {
|
|
54
|
-
// Extract the complete message
|
|
55
|
-
const messageStr = this.buffer.substring(0, newlineIndex).trim();
|
|
56
|
-
this.buffer = this.buffer.substring(newlineIndex + 1);
|
|
57
|
-
// Skip empty lines
|
|
58
|
-
if (messageStr.length === 0)
|
|
59
|
-
continue;
|
|
60
|
-
// Parse and emit the message
|
|
61
|
-
this.processMessage(messageStr);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Handle data in content-length mode (LSP-style)
|
|
66
|
-
*/
|
|
67
|
-
handleContentLengthData(chunk) {
|
|
68
|
-
// Append chunk to content buffer
|
|
69
|
-
this.contentBuffer = Buffer.concat([this.contentBuffer, chunk]);
|
|
70
|
-
while (true) {
|
|
71
|
-
if (this.expectedContentLength === null) {
|
|
72
|
-
// Try to parse headers
|
|
73
|
-
const headerEndIndex = this.contentBuffer.indexOf('\r\n\r\n');
|
|
74
|
-
if (headerEndIndex === -1) {
|
|
75
|
-
// Not enough data for headers yet
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
// Extract headers
|
|
79
|
-
const headersStr = this.contentBuffer.subarray(0, headerEndIndex).toString('utf8');
|
|
80
|
-
this.parseHeaders(headersStr);
|
|
81
|
-
// Remove headers from buffer
|
|
82
|
-
this.contentBuffer = this.contentBuffer.subarray(headerEndIndex + 4);
|
|
83
|
-
// Get content length
|
|
84
|
-
const contentLengthStr = this.headers.get('content-length');
|
|
85
|
-
if (!contentLengthStr) {
|
|
86
|
-
this.handleError(new Error('Missing Content-Length header'));
|
|
87
|
-
this.contentBuffer = Buffer.alloc(0);
|
|
88
|
-
this.headers.clear();
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
this.expectedContentLength = parseInt(contentLengthStr, 10);
|
|
92
|
-
if (isNaN(this.expectedContentLength)) {
|
|
93
|
-
this.handleError(new Error(`Invalid Content-Length: ${contentLengthStr}`));
|
|
94
|
-
this.contentBuffer = Buffer.alloc(0);
|
|
95
|
-
this.headers.clear();
|
|
96
|
-
this.expectedContentLength = null;
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Check if we have the full content
|
|
101
|
-
if (this.contentBuffer.length >= this.expectedContentLength) {
|
|
102
|
-
// Extract the message content
|
|
103
|
-
const messageBuffer = this.contentBuffer.subarray(0, this.expectedContentLength);
|
|
104
|
-
const messageStr = messageBuffer.toString('utf8');
|
|
105
|
-
// Remove processed content from buffer
|
|
106
|
-
this.contentBuffer = this.contentBuffer.subarray(this.expectedContentLength);
|
|
107
|
-
// Reset for next message
|
|
108
|
-
this.expectedContentLength = null;
|
|
109
|
-
this.headers.clear();
|
|
110
|
-
// Process the message
|
|
111
|
-
this.processMessage(messageStr);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// Not enough data for content yet
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Parse LSP-style headers
|
|
121
|
-
*/
|
|
122
|
-
parseHeaders(headersStr) {
|
|
123
|
-
const lines = headersStr.split('\r\n');
|
|
124
|
-
for (const line of lines) {
|
|
125
|
-
const colonIndex = line.indexOf(':');
|
|
126
|
-
if (colonIndex !== -1) {
|
|
127
|
-
const key = line.substring(0, colonIndex).toLowerCase().trim();
|
|
128
|
-
const value = line.substring(colonIndex + 1).trim();
|
|
129
|
-
this.headers.set(key, value);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Process a complete JSON message string
|
|
135
|
-
*/
|
|
136
|
-
processMessage(messageStr) {
|
|
137
|
-
try {
|
|
138
|
-
// Parse JSON
|
|
139
|
-
const jsonData = JSON.parse(messageStr);
|
|
140
|
-
// Check if it's a batch request (array)
|
|
141
|
-
if (Array.isArray(jsonData)) {
|
|
142
|
-
// Process as batch request
|
|
143
|
-
this.processBatchRequest(jsonData);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
// Process as single message
|
|
147
|
-
this.processSingleMessage(jsonData);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
// JSON parse error
|
|
152
|
-
const errorMessage = error instanceof Error ? error.message : 'Invalid JSON';
|
|
153
|
-
const errorResponse = createParseError(`JSON parse error: ${errorMessage}`);
|
|
154
|
-
this.emit('error', new Error(errorResponse.error.message));
|
|
155
|
-
// Send error response
|
|
156
|
-
this.send(errorResponse).catch(err => this.handleError(err));
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Process a single JSON-RPC message
|
|
161
|
-
*/
|
|
162
|
-
processSingleMessage(jsonData) {
|
|
163
|
-
// Validate as JSON-RPC message
|
|
164
|
-
const parseResult = safeParseJsonRpcMessage(jsonData);
|
|
165
|
-
if (!parseResult.success) {
|
|
166
|
-
// Emit parse error
|
|
167
|
-
const errorResponse = createParseError(`Invalid JSON-RPC message: ${parseResult.error?.message || 'Unknown validation error'}`);
|
|
168
|
-
this.emit('error', new Error(errorResponse.error.message));
|
|
169
|
-
// Send error response
|
|
170
|
-
this.send(errorResponse).catch(err => this.handleError(err));
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
// Emit the validated message
|
|
174
|
-
this.emit('message', parseResult.data);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Process a batch request (array of messages)
|
|
178
|
-
*/
|
|
179
|
-
processBatchRequest(jsonArray) {
|
|
180
|
-
if (jsonArray.length === 0) {
|
|
181
|
-
// Empty batch is invalid
|
|
182
|
-
const errorResponse = createParseError('Batch request cannot be empty');
|
|
183
|
-
this.emit('error', new Error(errorResponse.error.message));
|
|
184
|
-
this.send(errorResponse).catch(err => this.handleError(err));
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
// Emit as batch request
|
|
188
|
-
this.emit('batch', jsonArray);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Send a JSON-RPC message or batch response
|
|
192
|
-
*/
|
|
193
|
-
async send(message) {
|
|
194
|
-
if (this.isClosed) {
|
|
195
|
-
throw new Error('Transport is closed');
|
|
196
|
-
}
|
|
197
|
-
return new Promise((resolve, reject) => {
|
|
198
|
-
try {
|
|
199
|
-
const messageStr = JSON.stringify(message);
|
|
200
|
-
if (this.useContentLength) {
|
|
201
|
-
// Content-Length mode (LSP-style)
|
|
202
|
-
const contentBuffer = Buffer.from(messageStr, 'utf8');
|
|
203
|
-
const headers = `Content-Length: ${contentBuffer.length}\r\n\r\n`;
|
|
204
|
-
const fullMessage = Buffer.concat([Buffer.from(headers, 'utf8'), contentBuffer]);
|
|
205
|
-
// Write headers and content
|
|
206
|
-
this.output.write(fullMessage, error => {
|
|
207
|
-
if (error) {
|
|
208
|
-
reject(error);
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
resolve();
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
// Newline-delimited mode
|
|
217
|
-
const fullMessage = messageStr + '\n';
|
|
218
|
-
// Write to output stream
|
|
219
|
-
this.output.write(fullMessage, 'utf8', error => {
|
|
220
|
-
if (error) {
|
|
221
|
-
reject(error);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
resolve();
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
catch (error) {
|
|
230
|
-
reject(error);
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Set up a handler for incoming messages
|
|
236
|
-
*/
|
|
237
|
-
onMessage(handler) {
|
|
238
|
-
this.on('message', handler);
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Set up a handler for batch requests
|
|
242
|
-
*/
|
|
243
|
-
onBatch(handler) {
|
|
244
|
-
this.on('batch', handler);
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Set up a handler for transport errors
|
|
248
|
-
*/
|
|
249
|
-
onError(handler) {
|
|
250
|
-
this.on('error', handler);
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Handle transport errors
|
|
254
|
-
*/
|
|
255
|
-
handleError(error) {
|
|
256
|
-
if (!this.isClosed) {
|
|
257
|
-
this.emit('error', error);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Handle transport close
|
|
262
|
-
*/
|
|
263
|
-
handleClose() {
|
|
264
|
-
if (!this.isClosed) {
|
|
265
|
-
this.isClosed = true;
|
|
266
|
-
this.emit('close');
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Close the transport
|
|
271
|
-
*/
|
|
272
|
-
async close() {
|
|
273
|
-
if (this.isClosed)
|
|
274
|
-
return;
|
|
275
|
-
this.isClosed = true;
|
|
276
|
-
// Remove all listeners
|
|
277
|
-
this.removeAllListeners();
|
|
278
|
-
// Clear buffer
|
|
279
|
-
this.buffer = '';
|
|
280
|
-
// Don't close stdin/stdout if they are the actual process streams
|
|
281
|
-
if (this.input !== process.stdin) {
|
|
282
|
-
this.input.destroy();
|
|
283
|
-
}
|
|
284
|
-
if (this.output !== process.stdout) {
|
|
285
|
-
this.output.end();
|
|
286
|
-
}
|
|
287
|
-
this.emit('close');
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Check if transport is closed
|
|
291
|
-
*/
|
|
292
|
-
get closed() {
|
|
293
|
-
return this.isClosed;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
//# sourceMappingURL=transport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/rpc/transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEhF;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAU/C,YACC,QAAkB,OAAO,CAAC,KAAK,EAC/B,SAAmB,OAAO,CAAC,MAAM,EACjC,UAA0C,EAAE;QAE5C,KAAK,EAAE,CAAC;QAZD,WAAM,GAAW,EAAE,CAAC;QACpB,aAAQ,GAAY,KAAK,CAAC;QAE1B,kBAAa,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,0BAAqB,GAAkB,IAAI,CAAC;QAC5C,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;QAQhD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;QAE1D,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,KAAsB;QACxC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,kCAAkC;YAClC,IAAI,CAAC,uBAAuB,CAAC,KAAe,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACP,yBAAyB;YACzB,IAAI,CAAC,0BAA0B,CAAC,KAAe,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,KAAa;QAC/C,sBAAsB;QACtB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAErB,gDAAgD;QAChD,IAAI,YAAoB,CAAC;QACzB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1D,+BAA+B;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAEtD,mBAAmB;YACnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEtC,6BAA6B;YAC7B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,KAAa;QAC5C,iCAAiC;QACjC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;QAEhE,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;gBACzC,uBAAuB;gBACvB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3B,kCAAkC;oBAClC,MAAM;gBACP,CAAC;gBAED,kBAAkB;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAE9B,6BAA6B;gBAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBAErE,qBAAqB;gBACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;oBAC7D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,MAAM;gBACP,CAAC;gBAED,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,2BAA2B,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAC3E,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;oBAClC,MAAM;gBACP,CAAC;YACF,CAAC;YAED,oCAAoC;YACpC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7D,8BAA8B;gBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACjF,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAElD,uCAAuC;gBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAE7E,yBAAyB;gBACzB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAErB,sBAAsB;gBACtB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACP,kCAAkC;gBAClC,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,UAAkB;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,UAAkB;QACxC,IAAI,CAAC;YACJ,aAAa;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAExC,wCAAwC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,2BAA2B;gBAC3B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACP,4BAA4B;gBAC5B,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,mBAAmB;YACnB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;YAC7E,MAAM,aAAa,GAAG,gBAAgB,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,QAAiB;QAC7C,+BAA+B;QAC/B,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,mBAAmB;YACnB,MAAM,aAAa,GAAG,gBAAgB,CACrC,6BAA6B,WAAW,CAAC,KAAK,EAAE,OAAO,IAAI,0BAA0B,EAAE,CACvF,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,sBAAsB;YACtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO;QACR,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,SAAoB;QAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,yBAAyB;YACzB,MAAM,aAAa,GAAG,gBAAgB,CAAC,+BAA+B,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO;QACR,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAgC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAA8C;QACxD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAE3C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC3B,kCAAkC;oBAClC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBACtD,MAAM,OAAO,GAAG,mBAAmB,aAAa,CAAC,MAAM,UAAU,CAAC;oBAClE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;oBAEjF,4BAA4B;oBAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;wBACtC,IAAI,KAAK,EAAE,CAAC;4BACX,MAAM,CAAC,KAAK,CAAC,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACP,OAAO,EAAE,CAAC;wBACX,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,yBAAyB;oBACzB,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;oBAEtC,yBAAyB;oBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;wBAC9C,IAAI,KAAK,EAAE,CAAC;4BACX,MAAM,CAAC,KAAK,CAAC,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACP,OAAO,EAAE,CAAC;wBACX,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAA0C;QACnD,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAA6C;QACpD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAA+B;QACtC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IAED;;OAEG;IACK,WAAW;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACV,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,eAAe;QACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,kEAAkE;QAClE,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare const mockParseRequirementId: (id: string) => {
|
|
2
|
-
type: string;
|
|
3
|
-
value: number;
|
|
4
|
-
} | {
|
|
5
|
-
type: string;
|
|
6
|
-
value: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const mockParseTaskId: (id: string) => {
|
|
9
|
-
type: string;
|
|
10
|
-
value: number;
|
|
11
|
-
} | {
|
|
12
|
-
type: string;
|
|
13
|
-
value: string;
|
|
14
|
-
};
|
|
15
|
-
export declare const mockFindTaskById: (tasks: any[], id: string) => any;
|
|
16
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/__mocks__/utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sBAAsB,GAAI,IAAI,MAAM;;;;;;CAKhD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM;;;;;;CAKzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,GAAG,EAAE,EAAE,IAAI,MAAM,QAMxD,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Mock utilities for tests
|
|
2
|
-
export const mockParseRequirementId = (id) => {
|
|
3
|
-
if (id.startsWith('REQ-')) {
|
|
4
|
-
return { type: 'req_id', value: parseInt(id.substring(4)) };
|
|
5
|
-
}
|
|
6
|
-
return { type: 'uuid', value: id };
|
|
7
|
-
};
|
|
8
|
-
export const mockParseTaskId = (id) => {
|
|
9
|
-
if (id.startsWith('TASK-')) {
|
|
10
|
-
return { type: 'task_id', value: parseInt(id.substring(5)) };
|
|
11
|
-
}
|
|
12
|
-
return { type: 'uuid', value: id };
|
|
13
|
-
};
|
|
14
|
-
export const mockFindTaskById = (tasks, id) => {
|
|
15
|
-
if (id.startsWith('TASK-')) {
|
|
16
|
-
const taskId = parseInt(id.substring(5));
|
|
17
|
-
return tasks.find((t) => t.task_id === taskId) || null;
|
|
18
|
-
}
|
|
19
|
-
return tasks.find((t) => t.id === id) || null;
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/services/__mocks__/utils.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAU,EAAE,EAAE;IACpD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,EAAE;IAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,EAAU,EAAE,EAAE;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AACpD,CAAC,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Service
|
|
3
|
-
* Handles API interactions for agent conversations
|
|
4
|
-
*/
|
|
5
|
-
import { BraingridAuth } from './auth.js';
|
|
6
|
-
import type { StreamingConversationResponse, ConversationContext } from '@braingrid/protocol';
|
|
7
|
-
export interface AgentConversationRequest {
|
|
8
|
-
project: string;
|
|
9
|
-
message: string;
|
|
10
|
-
conversationId?: string;
|
|
11
|
-
context?: ConversationContext;
|
|
12
|
-
}
|
|
13
|
-
export declare class AgentService {
|
|
14
|
-
private baseUrl;
|
|
15
|
-
private auth;
|
|
16
|
-
private axios;
|
|
17
|
-
constructor(baseUrl: string, auth: BraingridAuth);
|
|
18
|
-
private getHeaders;
|
|
19
|
-
/**
|
|
20
|
-
* Stream a conversation with the agent
|
|
21
|
-
* Returns the final response after streaming completes
|
|
22
|
-
*/
|
|
23
|
-
streamConversation(request: AgentConversationRequest): Promise<StreamingConversationResponse>;
|
|
24
|
-
/**
|
|
25
|
-
* Stream a conversation with callback support for real-time updates
|
|
26
|
-
*/
|
|
27
|
-
streamConversationWithCallback(request: AgentConversationRequest, onChunk: (chunk: StreamingConversationResponse) => void | Promise<void>): Promise<StreamingConversationResponse>;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=agent-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI9F,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAkBD,qBAAa,YAAY;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAgB;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAMhD,OAAO,CAAC,UAAU;IAMlB;;;OAGG;IACG,kBAAkB,CACvB,OAAO,EAAE,wBAAwB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAwOzC;;OAEG;IACG,8BAA8B,CACnC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACrE,OAAO,CAAC,6BAA6B,CAAC;CAsBzC"}
|
|
@@ -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
|