@agent-relay/dashboard-server 2.0.92 → 2.0.94
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/dist/lib/types.d.ts +3 -2
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +16 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/proxy-server.d.ts.map +1 -1
- package/dist/proxy-server.js +32 -19
- package/dist/proxy-server.js.map +1 -1
- package/dist/relaycast-provider-helpers.d.ts +6 -0
- package/dist/relaycast-provider-helpers.d.ts.map +1 -1
- package/dist/relaycast-provider-helpers.js +10 -9
- package/dist/relaycast-provider-helpers.js.map +1 -1
- package/dist/relaycast-provider.d.ts +3 -7
- package/dist/relaycast-provider.d.ts.map +1 -1
- package/dist/relaycast-provider.js +5 -28
- package/dist/relaycast-provider.js.map +1 -1
- package/dist/routes/channels.d.ts.map +1 -1
- package/dist/routes/channels.js +7 -8
- package/dist/routes/channels.js.map +1 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +2 -3
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/models.d.ts.map +1 -1
- package/dist/routes/models.js +39 -3
- package/dist/routes/models.js.map +1 -1
- package/dist/routes/relay-config.d.ts.map +1 -1
- package/dist/routes/relay-config.js +19 -6
- package/dist/routes/relay-config.js.map +1 -1
- package/dist/routes/thread-replies.d.ts.map +1 -1
- package/dist/routes/thread-replies.js +4 -4
- package/dist/routes/thread-replies.js.map +1 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +0 -1
- package/dist/services/index.js.map +1 -1
- package/dist/types/index.d.ts +0 -75
- package/dist/types/index.d.ts.map +1 -1
- package/dist/websocket/logs.d.ts +1 -25
- package/dist/websocket/logs.d.ts.map +1 -1
- package/dist/websocket/logs.js +0 -397
- package/dist/websocket/logs.js.map +1 -1
- package/out/404.html +1 -1
- package/out/_next/static/chunks/{3663-47290254b8f6f5dd.js → 3663-191a9aa9104061af.js} +1 -1
- package/out/_next/static/chunks/4201-d11188cf35739bff.js +1 -0
- package/out/_next/static/chunks/5787-f6fd7a3fbfe5eae6.js +73 -0
- package/out/_next/static/chunks/app/app/[[...slug]]/{page-c1376e695ba19e38.js → page-2b872f60e3d64014.js} +1 -1
- package/out/_next/static/chunks/app/{page-f2ebc7d0bc08e395.js → page-ca5511e5d65100a5.js} +1 -1
- package/out/about.html +1 -1
- package/out/about.txt +1 -1
- package/out/app/onboarding.html +1 -1
- package/out/app/onboarding.txt +1 -1
- package/out/app.html +1 -1
- package/out/app.txt +2 -2
- package/out/blog/go-to-bed-wake-up-to-a-finished-product.html +1 -1
- package/out/blog/go-to-bed-wake-up-to-a-finished-product.txt +1 -1
- package/out/blog/let-them-cook-multi-agent-orchestration.html +1 -1
- package/out/blog/let-them-cook-multi-agent-orchestration.txt +1 -1
- package/out/blog.html +1 -1
- package/out/blog.txt +1 -1
- package/out/careers.html +1 -1
- package/out/careers.txt +1 -1
- package/out/changelog.html +1 -1
- package/out/changelog.txt +1 -1
- package/out/cloud/link.html +1 -1
- package/out/cloud/link.txt +1 -1
- package/out/complete-profile.html +1 -1
- package/out/complete-profile.txt +1 -1
- package/out/connect-repos.html +1 -1
- package/out/connect-repos.txt +1 -1
- package/out/contact.html +1 -1
- package/out/contact.txt +1 -1
- package/out/dev/cli-tools.html +1 -1
- package/out/dev/cli-tools.txt +1 -1
- package/out/dev/log-viewer.html +1 -1
- package/out/dev/log-viewer.txt +1 -1
- package/out/docs.html +1 -1
- package/out/docs.txt +1 -1
- package/out/history.html +1 -1
- package/out/history.txt +2 -2
- package/out/index.html +1 -1
- package/out/index.txt +2 -2
- package/out/login.html +1 -1
- package/out/login.txt +1 -1
- package/out/metrics.html +1 -1
- package/out/metrics.txt +2 -2
- package/out/pricing.html +1 -1
- package/out/pricing.txt +1 -1
- package/out/privacy.html +1 -1
- package/out/privacy.txt +1 -1
- package/out/providers/setup/claude.html +1 -1
- package/out/providers/setup/claude.txt +1 -1
- package/out/providers/setup/codex.html +1 -1
- package/out/providers/setup/codex.txt +1 -1
- package/out/providers/setup/cursor.html +1 -1
- package/out/providers/setup/cursor.txt +1 -1
- package/out/providers.html +1 -1
- package/out/providers.txt +1 -1
- package/out/security.html +1 -1
- package/out/security.txt +1 -1
- package/out/signup.html +1 -1
- package/out/signup.txt +1 -1
- package/out/terms.html +1 -1
- package/out/terms.txt +1 -1
- package/package.json +6 -9
- package/dist/lib/attachment-storage.d.ts +0 -10
- package/dist/lib/attachment-storage.d.ts.map +0 -1
- package/dist/lib/attachment-storage.js +0 -53
- package/dist/lib/attachment-storage.js.map +0 -1
- package/dist/lib/broadcast.d.ts +0 -18
- package/dist/lib/broadcast.d.ts.map +0 -1
- package/dist/lib/broadcast.js +0 -118
- package/dist/lib/broadcast.js.map +0 -1
- package/dist/lib/channel-state.d.ts +0 -32
- package/dist/lib/channel-state.d.ts.map +0 -1
- package/dist/lib/channel-state.js +0 -146
- package/dist/lib/channel-state.js.map +0 -1
- package/dist/lib/cli-auth.d.ts +0 -40
- package/dist/lib/cli-auth.d.ts.map +0 -1
- package/dist/lib/cli-auth.js +0 -144
- package/dist/lib/cli-auth.js.map +0 -1
- package/dist/lib/data-assembly.d.ts +0 -136
- package/dist/lib/data-assembly.d.ts.map +0 -1
- package/dist/lib/data-assembly.js +0 -550
- package/dist/lib/data-assembly.js.map +0 -1
- package/dist/lib/server-state.d.ts +0 -115
- package/dist/lib/server-state.d.ts.map +0 -1
- package/dist/lib/server-state.js +0 -138
- package/dist/lib/server-state.js.map +0 -1
- package/dist/lib/websocket-runtime.d.ts +0 -17
- package/dist/lib/websocket-runtime.d.ts.map +0 -1
- package/dist/lib/websocket-runtime.js +0 -76
- package/dist/lib/websocket-runtime.js.map +0 -1
- package/dist/routes/auth.d.ts +0 -45
- package/dist/routes/auth.d.ts.map +0 -1
- package/dist/routes/auth.js +0 -261
- package/dist/routes/auth.js.map +0 -1
- package/dist/routes/channels-integrated.d.ts +0 -84
- package/dist/routes/channels-integrated.d.ts.map +0 -1
- package/dist/routes/channels-integrated.js +0 -644
- package/dist/routes/channels-integrated.js.map +0 -1
- package/dist/routes/decisions.d.ts +0 -31
- package/dist/routes/decisions.d.ts.map +0 -1
- package/dist/routes/decisions.js +0 -109
- package/dist/routes/decisions.js.map +0 -1
- package/dist/routes/fleet.d.ts +0 -24
- package/dist/routes/fleet.d.ts.map +0 -1
- package/dist/routes/fleet.js +0 -131
- package/dist/routes/fleet.js.map +0 -1
- package/dist/routes/history.d.ts +0 -13
- package/dist/routes/history.d.ts.map +0 -1
- package/dist/routes/history.js +0 -205
- package/dist/routes/history.js.map +0 -1
- package/dist/routes/messaging.d.ts +0 -34
- package/dist/routes/messaging.d.ts.map +0 -1
- package/dist/routes/messaging.js +0 -306
- package/dist/routes/messaging.js.map +0 -1
- package/dist/routes/settings.d.ts +0 -6
- package/dist/routes/settings.d.ts.map +0 -1
- package/dist/routes/settings.js +0 -119
- package/dist/routes/settings.js.map +0 -1
- package/dist/routes/spawn.d.ts +0 -75
- package/dist/routes/spawn.d.ts.map +0 -1
- package/dist/routes/spawn.js +0 -521
- package/dist/routes/spawn.js.map +0 -1
- package/dist/routes/system.d.ts +0 -21
- package/dist/routes/system.d.ts.map +0 -1
- package/dist/routes/system.js +0 -186
- package/dist/routes/system.js.map +0 -1
- package/dist/routes/tasks.d.ts +0 -27
- package/dist/routes/tasks.d.ts.map +0 -1
- package/dist/routes/tasks.js +0 -103
- package/dist/routes/tasks.js.map +0 -1
- package/dist/routes/ui.d.ts +0 -6
- package/dist/routes/ui.d.ts.map +0 -1
- package/dist/routes/ui.js +0 -114
- package/dist/routes/ui.js.map +0 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -481
- package/dist/server.js.map +0 -1
- package/dist/services/broker-spawn-reader.d.ts +0 -40
- package/dist/services/broker-spawn-reader.d.ts.map +0 -1
- package/dist/services/broker-spawn-reader.js +0 -155
- package/dist/services/broker-spawn-reader.js.map +0 -1
- package/dist/services/user-bridge.d.ts +0 -155
- package/dist/services/user-bridge.d.ts.map +0 -1
- package/dist/services/user-bridge.js +0 -385
- package/dist/services/user-bridge.js.map +0 -1
- package/dist/websocket/bridge.d.ts +0 -12
- package/dist/websocket/bridge.d.ts.map +0 -1
- package/dist/websocket/bridge.js +0 -33
- package/dist/websocket/bridge.js.map +0 -1
- package/dist/websocket/main.d.ts +0 -15
- package/dist/websocket/main.d.ts.map +0 -1
- package/dist/websocket/main.js +0 -84
- package/dist/websocket/main.js.map +0 -1
- package/dist/websocket/presence.d.ts +0 -74
- package/dist/websocket/presence.d.ts.map +0 -1
- package/dist/websocket/presence.js +0 -330
- package/dist/websocket/presence.js.map +0 -1
- package/out/_next/static/chunks/270-8c0b8109123a0c5f.js +0 -73
- package/out/_next/static/chunks/5518-6d77237eefc8d5ae.js +0 -1
- /package/out/_next/static/{5cqIVzlh9DbJT28EbNrcC → wgSCX8AQnjVl_Rnx1gUp5}/_buildManifest.js +0 -0
- /package/out/_next/static/{5cqIVzlh9DbJT28EbNrcC → wgSCX8AQnjVl_Rnx1gUp5}/_ssgManifest.js +0 -0
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Application } from 'express';
|
|
2
|
-
import type { StorageAdapter } from '@agent-relay/storage/adapter';
|
|
3
|
-
interface Attachment {
|
|
4
|
-
id: string;
|
|
5
|
-
filename: string;
|
|
6
|
-
mimeType: string;
|
|
7
|
-
size: number;
|
|
8
|
-
url: string;
|
|
9
|
-
filePath?: string;
|
|
10
|
-
width?: number;
|
|
11
|
-
height?: number;
|
|
12
|
-
data?: string;
|
|
13
|
-
}
|
|
14
|
-
interface RelayClientLike {
|
|
15
|
-
state: string;
|
|
16
|
-
sendMessage: (to: string, body: string, kind?: string, data?: unknown, thread?: string) => boolean;
|
|
17
|
-
}
|
|
18
|
-
export interface MessagingRouteDeps {
|
|
19
|
-
getTeamMembers: (teamName: string) => string[];
|
|
20
|
-
isAgentOnline: (agentName: string) => boolean;
|
|
21
|
-
isRecipientOnline: (recipient: string) => boolean;
|
|
22
|
-
getRelayClient: (senderName?: string, entityType?: 'agent' | 'user') => Promise<RelayClientLike>;
|
|
23
|
-
attachmentRegistry: Map<string, Attachment>;
|
|
24
|
-
attachmentsDir: string;
|
|
25
|
-
broadcastData: () => Promise<void>;
|
|
26
|
-
storage?: StorageAdapter;
|
|
27
|
-
remapAgentName?: (name: string) => string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Integrated messaging and attachment routes.
|
|
31
|
-
*/
|
|
32
|
-
export declare function registerMessagingRoutes(app: Application, deps: MessagingRouteDeps): void;
|
|
33
|
-
export {};
|
|
34
|
-
//# sourceMappingURL=messaging.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/routes/messaging.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAElF,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,CACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,KACZ,OAAO,CAAC;CACd;AAsBD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC/C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,cAAc,EAAE,CACd,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,KAC1B,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAkWxF"}
|
package/dist/routes/messaging.js
DELETED
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import crypto from 'crypto';
|
|
4
|
-
/**
|
|
5
|
-
* Integrated messaging and attachment routes.
|
|
6
|
-
*/
|
|
7
|
-
export function registerMessagingRoutes(app, deps) {
|
|
8
|
-
const { getTeamMembers, isAgentOnline, isRecipientOnline, getRelayClient, attachmentRegistry, attachmentsDir, broadcastData, storage, remapAgentName, } = deps;
|
|
9
|
-
const mapStoredMessage = (message) => ({
|
|
10
|
-
id: message.id,
|
|
11
|
-
from: remapAgentName ? remapAgentName(message.from) : message.from,
|
|
12
|
-
to: remapAgentName ? remapAgentName(message.to) : message.to,
|
|
13
|
-
content: message.body,
|
|
14
|
-
timestamp: new Date(message.ts).toISOString(),
|
|
15
|
-
thread: message.thread,
|
|
16
|
-
replyCount: message.replyCount,
|
|
17
|
-
});
|
|
18
|
-
const parseBeforeCursor = (raw) => {
|
|
19
|
-
if (typeof raw !== 'string' || raw.trim() === '') {
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
const asNumber = Number.parseInt(raw, 10);
|
|
23
|
-
if (Number.isFinite(asNumber)) {
|
|
24
|
-
return asNumber;
|
|
25
|
-
}
|
|
26
|
-
const asTime = Date.parse(raw);
|
|
27
|
-
return Number.isNaN(asTime) ? undefined : asTime;
|
|
28
|
-
};
|
|
29
|
-
const findParentMessage = async (id) => {
|
|
30
|
-
if (!storage) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
if (typeof storage.getMessageById === 'function') {
|
|
34
|
-
const exact = await storage.getMessageById(id);
|
|
35
|
-
if (exact) {
|
|
36
|
-
return exact;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const candidates = await storage.getMessages({ limit: 2000, order: 'desc' });
|
|
40
|
-
return candidates.find((message) => message.id === id || message.id.startsWith(id)) ?? null;
|
|
41
|
-
};
|
|
42
|
-
const resolveReplyTarget = (parent, senderName) => {
|
|
43
|
-
const from = parent.from;
|
|
44
|
-
const to = parent.to;
|
|
45
|
-
const channelFromData = typeof parent.data?.channel === 'string'
|
|
46
|
-
? (parent.data.channel)
|
|
47
|
-
: undefined;
|
|
48
|
-
if (to.startsWith('#')) {
|
|
49
|
-
return to;
|
|
50
|
-
}
|
|
51
|
-
if (to === '*' && channelFromData && channelFromData.startsWith('#')) {
|
|
52
|
-
return channelFromData;
|
|
53
|
-
}
|
|
54
|
-
return from === senderName ? to : from;
|
|
55
|
-
};
|
|
56
|
-
// Thread replies (non-mock mode)
|
|
57
|
-
app.get('/api/messages/:id/replies', async (req, res) => {
|
|
58
|
-
if (!storage) {
|
|
59
|
-
return res.status(503).json({ ok: false, error: 'Storage not configured' });
|
|
60
|
-
}
|
|
61
|
-
const { id } = req.params;
|
|
62
|
-
const limitRaw = typeof req.query.limit === 'string' ? Number.parseInt(req.query.limit, 10) : 50;
|
|
63
|
-
const limit = Number.isFinite(limitRaw) && limitRaw > 0 ? Math.min(limitRaw, 200) : 50;
|
|
64
|
-
const beforeTs = parseBeforeCursor(req.query.before);
|
|
65
|
-
try {
|
|
66
|
-
const parent = await findParentMessage(id);
|
|
67
|
-
if (!parent) {
|
|
68
|
-
return res.status(404).json({ ok: false, error: 'Message not found' });
|
|
69
|
-
}
|
|
70
|
-
const allReplies = await storage.getMessages({ thread: parent.id, order: 'asc' });
|
|
71
|
-
const filteredReplies = beforeTs ? allReplies.filter((message) => message.ts < beforeTs) : allReplies;
|
|
72
|
-
const replies = filteredReplies.length > limit ? filteredReplies.slice(-limit) : filteredReplies;
|
|
73
|
-
const hasMore = filteredReplies.length > replies.length;
|
|
74
|
-
const nextCursor = hasMore && replies.length > 0 ? new Date(replies[0].ts).toISOString() : undefined;
|
|
75
|
-
return res.json({
|
|
76
|
-
ok: true,
|
|
77
|
-
data: {
|
|
78
|
-
parent: {
|
|
79
|
-
...mapStoredMessage(parent),
|
|
80
|
-
reply_count: allReplies.length,
|
|
81
|
-
},
|
|
82
|
-
replies: replies.map(mapStoredMessage),
|
|
83
|
-
nextCursor,
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
console.error(`[dashboard] Failed to load thread replies for ${id}:`, err);
|
|
89
|
-
return res.status(500).json({ ok: false, error: 'Failed to load thread replies' });
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
app.post('/api/messages/:id/replies', async (req, res) => {
|
|
93
|
-
if (!storage) {
|
|
94
|
-
return res.status(503).json({ ok: false, error: 'Storage not configured' });
|
|
95
|
-
}
|
|
96
|
-
const { id } = req.params;
|
|
97
|
-
const { text, from } = req.body || {};
|
|
98
|
-
const trimmedText = typeof text === 'string' ? text.trim() : '';
|
|
99
|
-
if (!trimmedText) {
|
|
100
|
-
return res.status(400).json({ ok: false, error: 'Missing "text" field' });
|
|
101
|
-
}
|
|
102
|
-
try {
|
|
103
|
-
const parent = await findParentMessage(id);
|
|
104
|
-
if (!parent) {
|
|
105
|
-
return res.status(404).json({ ok: false, error: 'Message not found' });
|
|
106
|
-
}
|
|
107
|
-
const senderName = typeof from === 'string' && from.trim() ? from.trim() : 'Dashboard';
|
|
108
|
-
const relayClient = await getRelayClient(senderName, 'user');
|
|
109
|
-
if (!relayClient || relayClient.state !== 'READY') {
|
|
110
|
-
return res.status(503).json({ ok: false, error: 'Relay adapter is not ready' });
|
|
111
|
-
}
|
|
112
|
-
const target = resolveReplyTarget(parent, senderName);
|
|
113
|
-
const sent = relayClient.sendMessage(target, trimmedText, 'message', undefined, parent.id);
|
|
114
|
-
if (!sent) {
|
|
115
|
-
return res.status(500).json({ ok: false, error: 'Failed to send reply' });
|
|
116
|
-
}
|
|
117
|
-
const reply = {
|
|
118
|
-
id: `pending-reply-${Date.now()}`,
|
|
119
|
-
from: senderName,
|
|
120
|
-
to: target,
|
|
121
|
-
content: trimmedText,
|
|
122
|
-
timestamp: new Date().toISOString(),
|
|
123
|
-
thread: parent.id,
|
|
124
|
-
};
|
|
125
|
-
broadcastData().catch((err) => console.error('[dashboard] Failed to broadcast after reply:', err));
|
|
126
|
-
return res.status(201).json({ ok: true, data: reply });
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
console.error(`[dashboard] Failed to post thread reply for ${id}:`, err);
|
|
130
|
-
return res.status(500).json({ ok: false, error: 'Failed to post reply' });
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
// API endpoint to send messages.
|
|
134
|
-
app.post('/api/send', async (req, res) => {
|
|
135
|
-
const { to, message, thread, attachments: attachmentIds, from: senderName } = req.body;
|
|
136
|
-
if (!to || !message) {
|
|
137
|
-
return res.status(400).json({ error: 'Missing "to" or "message" field' });
|
|
138
|
-
}
|
|
139
|
-
// Check if this is a team mention (team:teamName).
|
|
140
|
-
const teamMatch = to.match(/^team:(.+)$/);
|
|
141
|
-
let targets;
|
|
142
|
-
if (teamMatch) {
|
|
143
|
-
const teamName = teamMatch[1];
|
|
144
|
-
const members = getTeamMembers(teamName);
|
|
145
|
-
if (members.length === 0) {
|
|
146
|
-
return res.status(404).json({ error: `No agents found in team "${teamName}"` });
|
|
147
|
-
}
|
|
148
|
-
// Filter to only online members.
|
|
149
|
-
targets = members.filter(isAgentOnline);
|
|
150
|
-
if (targets.length === 0) {
|
|
151
|
-
return res.status(404).json({ error: `No online agents in team "${teamName}"` });
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
// Fail fast if target agent is offline (except broadcasts).
|
|
156
|
-
if (to !== '*' && !isRecipientOnline(to)) {
|
|
157
|
-
return res.status(404).json({ error: `Recipient "${to}" is not online` });
|
|
158
|
-
}
|
|
159
|
-
targets = [to];
|
|
160
|
-
}
|
|
161
|
-
// Always use 'Dashboard' client to avoid name conflicts with user agents.
|
|
162
|
-
const relayClient = await getRelayClient('Dashboard');
|
|
163
|
-
if (!relayClient || relayClient.state !== 'READY') {
|
|
164
|
-
return res.status(503).json({ error: 'Relay adapter is not ready' });
|
|
165
|
-
}
|
|
166
|
-
try {
|
|
167
|
-
// Resolve attachments if provided.
|
|
168
|
-
let attachments;
|
|
169
|
-
if (attachmentIds && Array.isArray(attachmentIds) && attachmentIds.length > 0) {
|
|
170
|
-
attachments = [];
|
|
171
|
-
for (const id of attachmentIds) {
|
|
172
|
-
const attachment = attachmentRegistry.get(id);
|
|
173
|
-
if (attachment) {
|
|
174
|
-
attachments.push(attachment);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
// Include attachments, channel context, and sender info in the message data field.
|
|
179
|
-
const isBroadcast = targets.length === 1 && targets[0] === '*';
|
|
180
|
-
const messageData = {};
|
|
181
|
-
if (attachments && attachments.length > 0) {
|
|
182
|
-
messageData.attachments = attachments;
|
|
183
|
-
}
|
|
184
|
-
if (isBroadcast) {
|
|
185
|
-
messageData.channel = 'general';
|
|
186
|
-
}
|
|
187
|
-
// Include actual sender name for dashboard messages for UI attribution.
|
|
188
|
-
if (senderName) {
|
|
189
|
-
messageData.senderName = senderName;
|
|
190
|
-
}
|
|
191
|
-
const hasMessageData = Object.keys(messageData).length > 0;
|
|
192
|
-
// Send to all targets (single agent, team members, or broadcast).
|
|
193
|
-
let allSent = true;
|
|
194
|
-
for (const target of targets) {
|
|
195
|
-
const sent = relayClient.sendMessage(target, message, 'message', hasMessageData ? messageData : undefined, thread);
|
|
196
|
-
if (!sent) {
|
|
197
|
-
allSent = false;
|
|
198
|
-
console.error(`[dashboard] Failed to send message to ${target}`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (allSent) {
|
|
202
|
-
// Broadcast updated data to all connected clients so they see the sent message.
|
|
203
|
-
broadcastData().catch((err) => console.error('[dashboard] Failed to broadcast after send:', err));
|
|
204
|
-
return res.json({ success: true, sentTo: targets.length > 1 ? targets : targets[0] });
|
|
205
|
-
}
|
|
206
|
-
return res.status(500).json({ error: 'Failed to send message to some recipients' });
|
|
207
|
-
}
|
|
208
|
-
catch (err) {
|
|
209
|
-
console.error('[dashboard] Failed to send message:', err);
|
|
210
|
-
return res.status(500).json({ error: 'Failed to send message' });
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
// API endpoint to send messages via bridge (cross-project).
|
|
214
|
-
app.post('/api/bridge/send', async (req, res) => {
|
|
215
|
-
const { projectId, to, message } = req.body;
|
|
216
|
-
if (!projectId || !to || !message) {
|
|
217
|
-
return res.status(400).json({ error: 'Missing "projectId", "to", or "message" field' });
|
|
218
|
-
}
|
|
219
|
-
return res.status(501).json({
|
|
220
|
-
error: 'Legacy socket bridge sending has been removed. Use broker/relaycast messaging paths instead.',
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
// API endpoint to upload attachments (images/screenshots).
|
|
224
|
-
app.post('/api/upload', async (req, res) => {
|
|
225
|
-
const { filename, mimeType, data } = req.body;
|
|
226
|
-
// Validate required fields.
|
|
227
|
-
if (!filename || !mimeType || !data) {
|
|
228
|
-
return res.status(400).json({
|
|
229
|
-
success: false,
|
|
230
|
-
error: 'Missing required fields: filename, mimeType, data',
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
// Validate mime type (only allow images for now).
|
|
234
|
-
const allowedTypes = ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/svg+xml'];
|
|
235
|
-
if (!allowedTypes.includes(mimeType)) {
|
|
236
|
-
return res.status(400).json({
|
|
237
|
-
success: false,
|
|
238
|
-
error: `Invalid file type. Allowed types: ${allowedTypes.join(', ')}`,
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
try {
|
|
242
|
-
// Decode base64 data.
|
|
243
|
-
const base64Data = data.replace(/^data:[^;]+;base64,/, '');
|
|
244
|
-
const buffer = Buffer.from(base64Data, 'base64');
|
|
245
|
-
// Generate unique ID and filename for the attachment.
|
|
246
|
-
const attachmentId = crypto.randomUUID();
|
|
247
|
-
const timestamp = Date.now();
|
|
248
|
-
const ext = mimeType.split('/')[1].replace('svg+xml', 'svg');
|
|
249
|
-
const safeFilename = `${attachmentId.substring(0, 8)}-${timestamp}.${ext}`;
|
|
250
|
-
// Save to ~/.relay/attachments/ directory for agents to access.
|
|
251
|
-
const attachmentFilePath = path.join(attachmentsDir, safeFilename);
|
|
252
|
-
fs.writeFileSync(attachmentFilePath, buffer);
|
|
253
|
-
// Create attachment record with file path for agents.
|
|
254
|
-
const attachment = {
|
|
255
|
-
id: attachmentId,
|
|
256
|
-
filename,
|
|
257
|
-
mimeType,
|
|
258
|
-
size: buffer.length,
|
|
259
|
-
url: `/attachments/${safeFilename}`,
|
|
260
|
-
filePath: attachmentFilePath,
|
|
261
|
-
data,
|
|
262
|
-
};
|
|
263
|
-
// Store in registry for lookup when sending messages.
|
|
264
|
-
attachmentRegistry.set(attachmentId, attachment);
|
|
265
|
-
console.log(`[dashboard] Uploaded attachment: ${filename} (${buffer.length} bytes) -> ${attachmentFilePath}`);
|
|
266
|
-
return res.json({
|
|
267
|
-
success: true,
|
|
268
|
-
attachment: {
|
|
269
|
-
id: attachment.id,
|
|
270
|
-
filename: attachment.filename,
|
|
271
|
-
mimeType: attachment.mimeType,
|
|
272
|
-
size: attachment.size,
|
|
273
|
-
url: attachment.url,
|
|
274
|
-
filePath: attachment.filePath,
|
|
275
|
-
},
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
catch (err) {
|
|
279
|
-
console.error('[dashboard] Upload failed:', err);
|
|
280
|
-
return res.status(500).json({
|
|
281
|
-
success: false,
|
|
282
|
-
error: 'Failed to upload file',
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
// API endpoint to get attachment by ID.
|
|
287
|
-
app.get('/api/attachment/:id', (req, res) => {
|
|
288
|
-
const { id } = req.params;
|
|
289
|
-
const attachment = attachmentRegistry.get(id);
|
|
290
|
-
if (!attachment) {
|
|
291
|
-
return res.status(404).json({ error: 'Attachment not found' });
|
|
292
|
-
}
|
|
293
|
-
return res.json({
|
|
294
|
-
success: true,
|
|
295
|
-
attachment: {
|
|
296
|
-
id: attachment.id,
|
|
297
|
-
filename: attachment.filename,
|
|
298
|
-
mimeType: attachment.mimeType,
|
|
299
|
-
size: attachment.size,
|
|
300
|
-
url: attachment.url,
|
|
301
|
-
filePath: attachment.filePath,
|
|
302
|
-
},
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
//# sourceMappingURL=messaging.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/routes/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/routes/settings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAuH7D"}
|
package/dist/routes/settings.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Workspace settings and trajectory settings routes.
|
|
5
|
-
*/
|
|
6
|
-
export function registerSettingsRoutes(app) {
|
|
7
|
-
// GET /api/settings - Get all workspace settings with documentation.
|
|
8
|
-
app.get('/api/settings', async (_req, res) => {
|
|
9
|
-
try {
|
|
10
|
-
const { readRelayConfig, shouldStoreInRepo, getTrajectoriesStorageDescription } = await import('@agent-relay/config/trajectory-config');
|
|
11
|
-
const config = readRelayConfig();
|
|
12
|
-
return res.json({
|
|
13
|
-
success: true,
|
|
14
|
-
settings: {
|
|
15
|
-
trajectories: {
|
|
16
|
-
storeInRepo: shouldStoreInRepo(),
|
|
17
|
-
storageLocation: getTrajectoriesStorageDescription(),
|
|
18
|
-
description: 'Trajectories record the journey of agent work using the PDERO paradigm (Plan, Design, Execute, Review, Observe). They capture decisions, phase transitions, and retrospectives.',
|
|
19
|
-
benefits: [
|
|
20
|
-
'Track why decisions were made, not just what was built',
|
|
21
|
-
'Enable session recovery when agents crash or context is lost',
|
|
22
|
-
'Provide learning data for future agents working on similar tasks',
|
|
23
|
-
'Create an audit trail of agent work for review',
|
|
24
|
-
],
|
|
25
|
-
learnMore: 'https://pdero.com',
|
|
26
|
-
optInReason: 'Enable "Store in repo" to version-control your trajectories alongside your code. This is useful for teams who want to review agent decision-making processes.',
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
config,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
34
|
-
console.error('[api] Settings error:', err);
|
|
35
|
-
return res.status(500).json({
|
|
36
|
-
success: false,
|
|
37
|
-
error: message,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
// GET /api/settings/trajectory - Get trajectory storage settings.
|
|
42
|
-
app.get('/api/settings/trajectory', async (_req, res) => {
|
|
43
|
-
try {
|
|
44
|
-
const { readRelayConfig, shouldStoreInRepo, getTrajectoriesStorageDescription } = await import('@agent-relay/config/trajectory-config');
|
|
45
|
-
const config = readRelayConfig();
|
|
46
|
-
return res.json({
|
|
47
|
-
success: true,
|
|
48
|
-
settings: {
|
|
49
|
-
storeInRepo: shouldStoreInRepo(),
|
|
50
|
-
storageLocation: getTrajectoriesStorageDescription(),
|
|
51
|
-
},
|
|
52
|
-
config: config.trajectories || {},
|
|
53
|
-
documentation: {
|
|
54
|
-
title: 'Trajectory Storage',
|
|
55
|
-
description: 'Trajectories record the journey of agent work using the PDERO paradigm (Plan, Design, Execute, Review, Observe).',
|
|
56
|
-
whatIsIt: 'A trajectory captures not just what an agent built, but WHY it made specific decisions. This includes phase transitions, key decisions with reasoning, and retrospective summaries.',
|
|
57
|
-
benefits: [
|
|
58
|
-
'Understand agent decision-making for code review',
|
|
59
|
-
'Enable session recovery if agents crash',
|
|
60
|
-
'Train future agents on your codebase patterns',
|
|
61
|
-
'Create audit trails of AI work',
|
|
62
|
-
],
|
|
63
|
-
storeInRepoExplanation: 'When enabled, trajectories are stored in .trajectories/ in your repo and can be committed to source control. When disabled (default), they are stored in your user directory (~/.config/agent-relay/trajectories/).',
|
|
64
|
-
learnMore: 'https://pdero.com',
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
70
|
-
console.error('[api] Settings trajectory error:', err);
|
|
71
|
-
return res.status(500).json({
|
|
72
|
-
success: false,
|
|
73
|
-
error: message,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
// PUT /api/settings/trajectory - Update trajectory storage settings.
|
|
78
|
-
app.put('/api/settings/trajectory', async (req, res) => {
|
|
79
|
-
try {
|
|
80
|
-
const { storeInRepo } = req.body;
|
|
81
|
-
if (typeof storeInRepo !== 'boolean') {
|
|
82
|
-
return res.status(400).json({
|
|
83
|
-
success: false,
|
|
84
|
-
error: 'storeInRepo must be a boolean',
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
const { getRelayConfigPath, readRelayConfig } = await import('@agent-relay/config/trajectory-config');
|
|
88
|
-
const { getProjectPaths } = await import('@agent-relay/config');
|
|
89
|
-
const { projectRoot: _projectRoot } = getProjectPaths();
|
|
90
|
-
const config = readRelayConfig();
|
|
91
|
-
config.trajectories = {
|
|
92
|
-
...config.trajectories,
|
|
93
|
-
storeInRepo,
|
|
94
|
-
};
|
|
95
|
-
const configPath = getRelayConfigPath();
|
|
96
|
-
const configDir = path.dirname(configPath);
|
|
97
|
-
if (!fs.existsSync(configDir)) {
|
|
98
|
-
fs.mkdirSync(configDir, { recursive: true });
|
|
99
|
-
}
|
|
100
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
101
|
-
return res.json({
|
|
102
|
-
success: true,
|
|
103
|
-
settings: {
|
|
104
|
-
storeInRepo,
|
|
105
|
-
storageLocation: storeInRepo ? 'repo (.trajectories/)' : 'user (~/.config/agent-relay/trajectories/)',
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
111
|
-
console.error('[api] Settings trajectory update error:', err);
|
|
112
|
-
return res.status(500).json({
|
|
113
|
-
success: false,
|
|
114
|
-
error: message,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=settings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/routes/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/spawn.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { Application } from 'express';
|
|
2
|
-
interface ActiveWorkerLike {
|
|
3
|
-
name: string;
|
|
4
|
-
cli: string;
|
|
5
|
-
task: string;
|
|
6
|
-
team?: string;
|
|
7
|
-
spawnerName?: string;
|
|
8
|
-
spawnedAt: number;
|
|
9
|
-
pid?: number;
|
|
10
|
-
}
|
|
11
|
-
interface SpawnReaderLike {
|
|
12
|
-
getActiveWorkers(): ActiveWorkerLike[];
|
|
13
|
-
hasWorker(name: string): boolean;
|
|
14
|
-
getWorkerOutput(name: string, limit?: number): string[] | undefined;
|
|
15
|
-
getWorkerRawOutput(name: string): string | undefined;
|
|
16
|
-
sendWorkerInput(name: string, data: string): Promise<boolean>;
|
|
17
|
-
}
|
|
18
|
-
interface RelayAdapterLike {
|
|
19
|
-
spawn: (request: {
|
|
20
|
-
name: string;
|
|
21
|
-
cli: string;
|
|
22
|
-
task?: string;
|
|
23
|
-
team?: string;
|
|
24
|
-
model?: string;
|
|
25
|
-
cwd?: string;
|
|
26
|
-
interactive?: boolean;
|
|
27
|
-
shadowMode?: string;
|
|
28
|
-
shadowOf?: string;
|
|
29
|
-
spawnerName?: string;
|
|
30
|
-
userId?: string;
|
|
31
|
-
continueFrom?: string;
|
|
32
|
-
includeWorkflowConventions?: boolean;
|
|
33
|
-
}) => Promise<{
|
|
34
|
-
success: boolean;
|
|
35
|
-
name?: string;
|
|
36
|
-
error?: string;
|
|
37
|
-
}>;
|
|
38
|
-
release: (name: string) => Promise<{
|
|
39
|
-
success: boolean;
|
|
40
|
-
name?: string;
|
|
41
|
-
error?: string;
|
|
42
|
-
}>;
|
|
43
|
-
}
|
|
44
|
-
interface SpawnPresenceEvent {
|
|
45
|
-
type: string;
|
|
46
|
-
agent: {
|
|
47
|
-
name: string;
|
|
48
|
-
};
|
|
49
|
-
cli?: string;
|
|
50
|
-
task?: string;
|
|
51
|
-
spawnedBy?: string;
|
|
52
|
-
releasedBy?: string;
|
|
53
|
-
timestamp: string;
|
|
54
|
-
}
|
|
55
|
-
export interface SpawnRouteDeps {
|
|
56
|
-
dataDir: string;
|
|
57
|
-
projectRoot?: string;
|
|
58
|
-
relayAdapter: RelayAdapterLike;
|
|
59
|
-
spawnReader?: SpawnReaderLike;
|
|
60
|
-
agentCwdMap: Map<string, string>;
|
|
61
|
-
isAgentOnline: (agentName: string) => boolean;
|
|
62
|
-
resolveWorkspaceId: (req: {
|
|
63
|
-
query?: Record<string, unknown>;
|
|
64
|
-
body?: Record<string, unknown>;
|
|
65
|
-
headers?: Record<string, unknown>;
|
|
66
|
-
}) => string | undefined;
|
|
67
|
-
broadcastData: () => Promise<void>;
|
|
68
|
-
broadcastPresence: (event: SpawnPresenceEvent) => void;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Spawn, logs, repositories, and trajectory routes.
|
|
72
|
-
*/
|
|
73
|
-
export declare function registerSpawnRoutes(app: Application, deps: SpawnRouteDeps): void;
|
|
74
|
-
export {};
|
|
75
|
-
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/routes/spawn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IACpE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,kBAAkB,EAAE,CAAC,GAAG,EAAE;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,MAAM,GAAG,SAAS,CAAC;IACzB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CA4kBhF"}
|