@bradygaster/squad-sdk 0.8.4 → 0.8.16
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/README.md +3 -3
- package/dist/adapter/client.d.ts +1 -0
- package/dist/adapter/client.d.ts.map +1 -1
- package/dist/adapter/client.js +29 -19
- package/dist/adapter/client.js.map +1 -1
- package/dist/adapter/errors.js.map +1 -1
- package/dist/agents/charter-compiler.js.map +1 -1
- package/dist/agents/history-shadow.js.map +1 -1
- package/dist/agents/lifecycle.js.map +1 -1
- package/dist/agents/onboarding.js +12 -12
- package/dist/agents/onboarding.js.map +1 -1
- package/dist/build/ci-pipeline.js.map +1 -1
- package/dist/build/github-dist.d.ts +2 -2
- package/dist/build/github-dist.js +3 -3
- package/dist/build/github-dist.js.map +1 -1
- package/dist/build/install-migration.js +2 -2
- package/dist/build/install-migration.js.map +1 -1
- package/dist/build/release.js.map +1 -1
- package/dist/build/versioning.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/config/agent-doc.js.map +1 -1
- package/dist/config/agent-source.js.map +1 -1
- package/dist/config/doc-sync.js.map +1 -1
- package/dist/config/init.js +1 -1
- package/dist/config/init.js.map +1 -1
- package/dist/config/legacy-fallback.js.map +1 -1
- package/dist/config/markdown-migration.js.map +1 -1
- package/dist/config/migration.js.map +1 -1
- package/dist/config/routing.js.map +1 -1
- package/dist/coordinator/fan-out.js.map +1 -1
- package/dist/coordinator/index.d.ts.map +1 -1
- package/dist/coordinator/index.js +9 -3
- package/dist/coordinator/index.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/multi-squad.d.ts +89 -0
- package/dist/multi-squad.d.ts.map +1 -0
- package/dist/multi-squad.js +233 -0
- package/dist/multi-squad.js.map +1 -0
- package/dist/ralph/triage.d.ts +48 -0
- package/dist/ralph/triage.d.ts.map +1 -0
- package/dist/ralph/triage.js +310 -0
- package/dist/ralph/triage.js.map +1 -0
- package/dist/remote/bridge.d.ts +77 -0
- package/dist/remote/bridge.d.ts.map +1 -0
- package/dist/remote/bridge.js +553 -0
- package/dist/remote/bridge.js.map +1 -0
- package/dist/remote/index.d.ts +7 -0
- package/dist/remote/index.d.ts.map +1 -0
- package/dist/remote/index.js +6 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/remote/protocol.d.ts +130 -0
- package/dist/remote/protocol.d.ts.map +1 -0
- package/dist/remote/protocol.js +25 -0
- package/dist/remote/protocol.js.map +1 -0
- package/dist/remote/types.d.ts +34 -0
- package/dist/remote/types.d.ts.map +1 -0
- package/dist/remote/types.js +5 -0
- package/dist/remote/types.js.map +1 -0
- package/dist/runtime/benchmarks.js.map +1 -1
- package/dist/runtime/constants.d.ts +2 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +2 -0
- package/dist/runtime/constants.js.map +1 -1
- package/dist/runtime/otel-init.d.ts +12 -0
- package/dist/runtime/otel-init.d.ts.map +1 -1
- package/dist/runtime/otel-init.js +18 -0
- package/dist/runtime/otel-init.js.map +1 -1
- package/dist/runtime/otel.d.ts +6 -4
- package/dist/runtime/otel.d.ts.map +1 -1
- package/dist/runtime/otel.js +35 -13
- package/dist/runtime/otel.js.map +1 -1
- package/dist/sharing/conflicts.js +7 -5
- package/dist/sharing/conflicts.js.map +1 -1
- package/dist/sharing/export.js.map +1 -1
- package/dist/sharing/import.js.map +1 -1
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/upstream/resolver.js.map +1 -1
- package/dist/utils/safe-timestamp.d.ts +6 -0
- package/dist/utils/safe-timestamp.d.ts.map +1 -0
- package/dist/utils/safe-timestamp.js +8 -0
- package/dist/utils/safe-timestamp.js.map +1 -0
- package/package.json +205 -197
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { normalizeEol } from '../utils/normalize-eol.js';
|
|
2
|
+
/** Parse routing rules from routing.md content */
|
|
3
|
+
export function parseRoutingRules(routingMd) {
|
|
4
|
+
const table = parseTableSection(routingMd, /^##\s*work\s*type\s*(?:→|->)\s*agent\b/i);
|
|
5
|
+
if (!table)
|
|
6
|
+
return [];
|
|
7
|
+
const workTypeIndex = findColumnIndex(table.headers, ['work type', 'type']);
|
|
8
|
+
const agentIndex = findColumnIndex(table.headers, ['agent', 'route to', 'route']);
|
|
9
|
+
const examplesIndex = findColumnIndex(table.headers, ['examples', 'example']);
|
|
10
|
+
if (workTypeIndex < 0 || agentIndex < 0)
|
|
11
|
+
return [];
|
|
12
|
+
const rules = [];
|
|
13
|
+
for (const row of table.rows) {
|
|
14
|
+
const workType = cleanCell(row[workTypeIndex] ?? '');
|
|
15
|
+
const agentName = cleanCell(row[agentIndex] ?? '');
|
|
16
|
+
const keywords = splitKeywords(examplesIndex >= 0 ? row[examplesIndex] : '');
|
|
17
|
+
if (!workType || !agentName)
|
|
18
|
+
continue;
|
|
19
|
+
rules.push({ workType, agentName, keywords });
|
|
20
|
+
}
|
|
21
|
+
return rules;
|
|
22
|
+
}
|
|
23
|
+
/** Parse module ownership from routing.md content */
|
|
24
|
+
export function parseModuleOwnership(routingMd) {
|
|
25
|
+
const table = parseTableSection(routingMd, /^##\s*module\s*ownership\b/i);
|
|
26
|
+
if (!table)
|
|
27
|
+
return [];
|
|
28
|
+
const moduleIndex = findColumnIndex(table.headers, ['module', 'path']);
|
|
29
|
+
const primaryIndex = findColumnIndex(table.headers, ['primary']);
|
|
30
|
+
const secondaryIndex = findColumnIndex(table.headers, ['secondary']);
|
|
31
|
+
if (moduleIndex < 0 || primaryIndex < 0)
|
|
32
|
+
return [];
|
|
33
|
+
const modules = [];
|
|
34
|
+
for (const row of table.rows) {
|
|
35
|
+
const modulePath = normalizeModulePath(row[moduleIndex] ?? '');
|
|
36
|
+
const primary = cleanCell(row[primaryIndex] ?? '');
|
|
37
|
+
const secondaryRaw = cleanCell(secondaryIndex >= 0 ? row[secondaryIndex] ?? '' : '');
|
|
38
|
+
const secondary = normalizeOptionalOwner(secondaryRaw);
|
|
39
|
+
if (!modulePath || !primary)
|
|
40
|
+
continue;
|
|
41
|
+
modules.push({ modulePath, primary, secondary });
|
|
42
|
+
}
|
|
43
|
+
return modules;
|
|
44
|
+
}
|
|
45
|
+
/** Parse team roster from team.md content */
|
|
46
|
+
export function parseRoster(teamMd) {
|
|
47
|
+
const table = parseTableSection(teamMd, /^##\s*members\b/i) ??
|
|
48
|
+
parseTableSection(teamMd, /^##\s*team\s*roster\b/i);
|
|
49
|
+
if (!table)
|
|
50
|
+
return [];
|
|
51
|
+
const nameIndex = findColumnIndex(table.headers, ['name']);
|
|
52
|
+
const roleIndex = findColumnIndex(table.headers, ['role']);
|
|
53
|
+
if (nameIndex < 0 || roleIndex < 0)
|
|
54
|
+
return [];
|
|
55
|
+
const excluded = new Set(['scribe', 'ralph']);
|
|
56
|
+
const members = [];
|
|
57
|
+
for (const row of table.rows) {
|
|
58
|
+
const name = cleanCell(row[nameIndex] ?? '');
|
|
59
|
+
const role = cleanCell(row[roleIndex] ?? '');
|
|
60
|
+
if (!name || !role)
|
|
61
|
+
continue;
|
|
62
|
+
if (excluded.has(name.toLowerCase()))
|
|
63
|
+
continue;
|
|
64
|
+
members.push({
|
|
65
|
+
name,
|
|
66
|
+
role,
|
|
67
|
+
label: `squad:${name.toLowerCase()}`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return members;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Triage an issue using routing rules, module ownership, and roster.
|
|
74
|
+
* Priority order:
|
|
75
|
+
* 1. Module path match — issue mentions a file path matching module ownership
|
|
76
|
+
* 2. Work type keyword — issue content matches routing rule keywords
|
|
77
|
+
* 3. Role keyword — fallback to generic role-based matching (frontend/backend/test)
|
|
78
|
+
* 4. Lead fallback — assign to Lead/Architect if no match
|
|
79
|
+
*/
|
|
80
|
+
export function triageIssue(issue, rules, modules, roster) {
|
|
81
|
+
const issueText = `${issue.title}\n${issue.body ?? ''}`.toLowerCase();
|
|
82
|
+
const normalizedIssueText = normalizeTextForPathMatch(issueText);
|
|
83
|
+
const bestModule = findBestModuleMatch(normalizedIssueText, modules);
|
|
84
|
+
if (bestModule) {
|
|
85
|
+
const primaryMember = findMember(bestModule.primary, roster);
|
|
86
|
+
if (primaryMember) {
|
|
87
|
+
return {
|
|
88
|
+
agent: primaryMember,
|
|
89
|
+
reason: `Matched module path "${bestModule.modulePath}" to primary owner "${bestModule.primary}"`,
|
|
90
|
+
source: 'module-ownership',
|
|
91
|
+
confidence: 'high',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (bestModule.secondary) {
|
|
95
|
+
const secondaryMember = findMember(bestModule.secondary, roster);
|
|
96
|
+
if (secondaryMember) {
|
|
97
|
+
return {
|
|
98
|
+
agent: secondaryMember,
|
|
99
|
+
reason: `Matched module path "${bestModule.modulePath}" to secondary owner "${bestModule.secondary}"`,
|
|
100
|
+
source: 'module-ownership',
|
|
101
|
+
confidence: 'medium',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const bestRule = findBestRuleMatch(issueText, rules);
|
|
107
|
+
if (bestRule) {
|
|
108
|
+
const agent = findMember(bestRule.rule.agentName, roster);
|
|
109
|
+
if (agent) {
|
|
110
|
+
return {
|
|
111
|
+
agent,
|
|
112
|
+
reason: `Matched routing keyword(s): ${bestRule.matchedKeywords.join(', ')}`,
|
|
113
|
+
source: 'routing-rule',
|
|
114
|
+
confidence: bestRule.matchedKeywords.length >= 2 ? 'high' : 'medium',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const roleMatch = findRoleKeywordMatch(issueText, roster);
|
|
119
|
+
if (roleMatch) {
|
|
120
|
+
return {
|
|
121
|
+
agent: roleMatch.agent,
|
|
122
|
+
reason: roleMatch.reason,
|
|
123
|
+
source: 'role-keyword',
|
|
124
|
+
confidence: 'medium',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const lead = findLeadFallback(roster);
|
|
128
|
+
if (!lead)
|
|
129
|
+
return null;
|
|
130
|
+
return {
|
|
131
|
+
agent: lead,
|
|
132
|
+
reason: 'No module, routing, or role keyword match — routed to Lead/Architect',
|
|
133
|
+
source: 'lead-fallback',
|
|
134
|
+
confidence: 'low',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function parseTableSection(markdown, sectionHeader) {
|
|
138
|
+
const lines = normalizeEol(markdown).split('\n');
|
|
139
|
+
let inSection = false;
|
|
140
|
+
const tableLines = [];
|
|
141
|
+
for (const line of lines) {
|
|
142
|
+
const trimmed = line.trim();
|
|
143
|
+
if (!inSection && sectionHeader.test(trimmed)) {
|
|
144
|
+
inSection = true;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (inSection && /^##\s+/.test(trimmed)) {
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
if (inSection && trimmed.startsWith('|')) {
|
|
151
|
+
tableLines.push(trimmed);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (tableLines.length === 0)
|
|
155
|
+
return null;
|
|
156
|
+
let headers = null;
|
|
157
|
+
const rows = [];
|
|
158
|
+
for (const line of tableLines) {
|
|
159
|
+
const cells = parseTableLine(line);
|
|
160
|
+
if (cells.length === 0)
|
|
161
|
+
continue;
|
|
162
|
+
if (cells.every((cell) => /^:?-{2,}:?$/.test(cell)))
|
|
163
|
+
continue;
|
|
164
|
+
if (!headers) {
|
|
165
|
+
headers = cells;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
rows.push(cells);
|
|
169
|
+
}
|
|
170
|
+
if (!headers)
|
|
171
|
+
return null;
|
|
172
|
+
return { headers, rows };
|
|
173
|
+
}
|
|
174
|
+
function parseTableLine(line) {
|
|
175
|
+
return line
|
|
176
|
+
.replace(/^\|/, '')
|
|
177
|
+
.replace(/\|$/, '')
|
|
178
|
+
.split('|')
|
|
179
|
+
.map((cell) => cell.trim());
|
|
180
|
+
}
|
|
181
|
+
function findColumnIndex(headers, candidates) {
|
|
182
|
+
const normalizedHeaders = headers.map((header) => cleanCell(header).toLowerCase());
|
|
183
|
+
for (const candidate of candidates) {
|
|
184
|
+
const index = normalizedHeaders.findIndex((header) => header.includes(candidate));
|
|
185
|
+
if (index >= 0)
|
|
186
|
+
return index;
|
|
187
|
+
}
|
|
188
|
+
return -1;
|
|
189
|
+
}
|
|
190
|
+
function cleanCell(value) {
|
|
191
|
+
return value
|
|
192
|
+
.replace(/`/g, '')
|
|
193
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
194
|
+
.trim();
|
|
195
|
+
}
|
|
196
|
+
function splitKeywords(examplesCell) {
|
|
197
|
+
if (!examplesCell)
|
|
198
|
+
return [];
|
|
199
|
+
return examplesCell
|
|
200
|
+
.split(',')
|
|
201
|
+
.map((keyword) => cleanCell(keyword))
|
|
202
|
+
.filter((keyword) => keyword.length > 0);
|
|
203
|
+
}
|
|
204
|
+
function normalizeOptionalOwner(owner) {
|
|
205
|
+
if (!owner)
|
|
206
|
+
return null;
|
|
207
|
+
if (/^[-—–]+$/.test(owner))
|
|
208
|
+
return null;
|
|
209
|
+
return owner;
|
|
210
|
+
}
|
|
211
|
+
function normalizeModulePath(modulePath) {
|
|
212
|
+
return cleanCell(modulePath).replace(/\\/g, '/').toLowerCase();
|
|
213
|
+
}
|
|
214
|
+
function normalizeTextForPathMatch(text) {
|
|
215
|
+
return text.replace(/\\/g, '/').replace(/`/g, '');
|
|
216
|
+
}
|
|
217
|
+
function normalizeName(value) {
|
|
218
|
+
return cleanCell(value)
|
|
219
|
+
.toLowerCase()
|
|
220
|
+
.replace(/[^\w@\s-]/g, '')
|
|
221
|
+
.replace(/\s+/g, ' ')
|
|
222
|
+
.trim();
|
|
223
|
+
}
|
|
224
|
+
function findMember(target, roster) {
|
|
225
|
+
const normalizedTarget = normalizeName(target);
|
|
226
|
+
if (!normalizedTarget)
|
|
227
|
+
return null;
|
|
228
|
+
for (const member of roster) {
|
|
229
|
+
if (normalizeName(member.name) === normalizedTarget)
|
|
230
|
+
return member;
|
|
231
|
+
}
|
|
232
|
+
for (const member of roster) {
|
|
233
|
+
if (normalizeName(member.role) === normalizedTarget)
|
|
234
|
+
return member;
|
|
235
|
+
}
|
|
236
|
+
for (const member of roster) {
|
|
237
|
+
const memberName = normalizeName(member.name);
|
|
238
|
+
if (normalizedTarget.includes(memberName) || memberName.includes(normalizedTarget)) {
|
|
239
|
+
return member;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
for (const member of roster) {
|
|
243
|
+
const memberRole = normalizeName(member.role);
|
|
244
|
+
if (normalizedTarget.includes(memberRole) || memberRole.includes(normalizedTarget)) {
|
|
245
|
+
return member;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
function findBestModuleMatch(issueText, modules) {
|
|
251
|
+
let best = null;
|
|
252
|
+
let bestLength = -1;
|
|
253
|
+
for (const module of modules) {
|
|
254
|
+
const modulePath = normalizeModulePath(module.modulePath);
|
|
255
|
+
if (!modulePath)
|
|
256
|
+
continue;
|
|
257
|
+
if (!issueText.includes(modulePath))
|
|
258
|
+
continue;
|
|
259
|
+
if (modulePath.length > bestLength) {
|
|
260
|
+
best = module;
|
|
261
|
+
bestLength = modulePath.length;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return best;
|
|
265
|
+
}
|
|
266
|
+
function findBestRuleMatch(issueText, rules) {
|
|
267
|
+
let best = null;
|
|
268
|
+
let bestScore = 0;
|
|
269
|
+
for (const rule of rules) {
|
|
270
|
+
const matchedKeywords = rule.keywords
|
|
271
|
+
.map((keyword) => keyword.toLowerCase())
|
|
272
|
+
.filter((keyword) => keyword.length > 0 && issueText.includes(keyword));
|
|
273
|
+
if (matchedKeywords.length === 0)
|
|
274
|
+
continue;
|
|
275
|
+
const score = matchedKeywords.length * 100 + matchedKeywords.reduce((sum, keyword) => sum + keyword.length, 0);
|
|
276
|
+
if (score > bestScore) {
|
|
277
|
+
best = {
|
|
278
|
+
rule,
|
|
279
|
+
matchedKeywords,
|
|
280
|
+
};
|
|
281
|
+
bestScore = score;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return best;
|
|
285
|
+
}
|
|
286
|
+
function findRoleKeywordMatch(issueText, roster) {
|
|
287
|
+
for (const member of roster) {
|
|
288
|
+
const role = member.role.toLowerCase();
|
|
289
|
+
if ((role.includes('frontend') || role.includes('ui')) &&
|
|
290
|
+
(issueText.includes('ui') || issueText.includes('frontend') || issueText.includes('css'))) {
|
|
291
|
+
return { agent: member, reason: 'Matched frontend/UI role keywords' };
|
|
292
|
+
}
|
|
293
|
+
if ((role.includes('backend') || role.includes('api') || role.includes('server')) &&
|
|
294
|
+
(issueText.includes('api') || issueText.includes('backend') || issueText.includes('database'))) {
|
|
295
|
+
return { agent: member, reason: 'Matched backend/API role keywords' };
|
|
296
|
+
}
|
|
297
|
+
if ((role.includes('test') || role.includes('qa')) &&
|
|
298
|
+
(issueText.includes('test') || issueText.includes('bug') || issueText.includes('fix'))) {
|
|
299
|
+
return { agent: member, reason: 'Matched testing/QA role keywords' };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
function findLeadFallback(roster) {
|
|
305
|
+
return (roster.find((member) => {
|
|
306
|
+
const role = member.role.toLowerCase();
|
|
307
|
+
return role.includes('lead') || role.includes('architect');
|
|
308
|
+
}) ?? null);
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=triage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/ralph/triage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squad Remote Control — RemoteBridge
|
|
3
|
+
*
|
|
4
|
+
* WebSocket server that bridges Squad's EventBus to remote PWA clients.
|
|
5
|
+
* Maintains message history, broadcasts events, handles incoming commands.
|
|
6
|
+
*/
|
|
7
|
+
import http from 'node:http';
|
|
8
|
+
import { type RCMessage, type RCAgent } from './protocol.js';
|
|
9
|
+
import type { RemoteBridgeConfig, RemoteConnection, ConnectionState } from './types.js';
|
|
10
|
+
export declare class RemoteBridge {
|
|
11
|
+
private config;
|
|
12
|
+
private server;
|
|
13
|
+
private wss;
|
|
14
|
+
private connections;
|
|
15
|
+
private messages;
|
|
16
|
+
private agents;
|
|
17
|
+
private state;
|
|
18
|
+
private messageIdCounter;
|
|
19
|
+
private staticHandler?;
|
|
20
|
+
private acpEventLog;
|
|
21
|
+
private wsRateLimit;
|
|
22
|
+
private ipConnections;
|
|
23
|
+
private httpRateLimits;
|
|
24
|
+
private sessionToken;
|
|
25
|
+
private tickets;
|
|
26
|
+
private readonly SESSION_TTL;
|
|
27
|
+
private readonly sessionCreatedAt;
|
|
28
|
+
private auditLogDir;
|
|
29
|
+
private auditLogPath;
|
|
30
|
+
private auditLog;
|
|
31
|
+
constructor(config: RemoteBridgeConfig);
|
|
32
|
+
/** Set a handler to serve static PWA files */
|
|
33
|
+
setStaticHandler(handler: (req: http.IncomingMessage, res: http.ServerResponse) => void): void;
|
|
34
|
+
/** Get the session token for WebSocket authentication */
|
|
35
|
+
getSessionToken(): string;
|
|
36
|
+
/** Get the audit log file path */
|
|
37
|
+
getAuditLogPath(): string;
|
|
38
|
+
/** Get the session expiry timestamp */
|
|
39
|
+
getSessionExpiry(): number;
|
|
40
|
+
/** Start the HTTP + WebSocket server */
|
|
41
|
+
start(): Promise<number>;
|
|
42
|
+
/** Stop the server and clean up */
|
|
43
|
+
stop(): Promise<void>;
|
|
44
|
+
/** Get the actual port the server is listening on */
|
|
45
|
+
getPort(): number;
|
|
46
|
+
getState(): ConnectionState;
|
|
47
|
+
getConnectionCount(): number;
|
|
48
|
+
getConnections(): RemoteConnection[];
|
|
49
|
+
/** Add a message to history and broadcast to clients */
|
|
50
|
+
addMessage(role: 'user' | 'agent' | 'system', content: string, agentName?: string): RCMessage;
|
|
51
|
+
getMessageHistory(): RCMessage[];
|
|
52
|
+
/** Send a streaming delta to all clients */
|
|
53
|
+
sendDelta(sessionId: string, agentName: string, content: string): void;
|
|
54
|
+
/** Update the agent roster and broadcast */
|
|
55
|
+
updateAgents(agents: RCAgent[]): void;
|
|
56
|
+
/** Update a single agent's status */
|
|
57
|
+
updateAgentStatus(name: string, status: RCAgent['status']): void;
|
|
58
|
+
sendToolCall(agentName: string, tool: string, args: Record<string, unknown>, status: 'running' | 'completed' | 'error'): void;
|
|
59
|
+
sendPermissionRequest(id: string, agentName: string, tool: string, args: Record<string, unknown>, description: string): void;
|
|
60
|
+
sendUsage(model: string, inputTokens: number, outputTokens: number, cost: number): void;
|
|
61
|
+
sendError(message: string, agentName?: string): void;
|
|
62
|
+
private handleSessionsAPI;
|
|
63
|
+
private handleDeleteSession;
|
|
64
|
+
/** Redact secrets from text before replay */
|
|
65
|
+
private redactSecrets;
|
|
66
|
+
private passthroughWrite;
|
|
67
|
+
/** Set a passthrough pipe — raw WebSocket messages go to this writer,
|
|
68
|
+
* and call passthroughFromAgent() to send agent responses back */
|
|
69
|
+
setPassthrough(writer: (msg: string) => void): void;
|
|
70
|
+
/** Forward a raw message from the agent (copilot stdout) to all clients + record */
|
|
71
|
+
passthroughFromAgent(line: string): void;
|
|
72
|
+
private handleConnection;
|
|
73
|
+
private handleClientCommand;
|
|
74
|
+
private broadcast;
|
|
75
|
+
private send;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/remote/bridge.ts"],"names":[],"mappings":"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"}
|