@dp-pcs/ogp 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +437 -0
- package/dist/cli/agent-comms.d.ts +55 -0
- package/dist/cli/agent-comms.d.ts.map +1 -0
- package/dist/cli/agent-comms.js +217 -0
- package/dist/cli/agent-comms.js.map +1 -0
- package/dist/cli/expose.d.ts +3 -0
- package/dist/cli/expose.d.ts.map +1 -0
- package/dist/cli/expose.js +104 -0
- package/dist/cli/expose.js.map +1 -0
- package/dist/cli/federation.d.ts +28 -0
- package/dist/cli/federation.d.ts.map +1 -0
- package/dist/cli/federation.js +409 -0
- package/dist/cli/federation.js.map +1 -0
- package/dist/cli/install.d.ts +3 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +111 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +33 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +305 -0
- package/dist/cli.js.map +1 -0
- package/dist/daemon/agent-comms.d.ts +76 -0
- package/dist/daemon/agent-comms.d.ts.map +1 -0
- package/dist/daemon/agent-comms.js +188 -0
- package/dist/daemon/agent-comms.js.map +1 -0
- package/dist/daemon/doorman.d.ts +52 -0
- package/dist/daemon/doorman.d.ts.map +1 -0
- package/dist/daemon/doorman.js +203 -0
- package/dist/daemon/doorman.js.map +1 -0
- package/dist/daemon/intent-registry.d.ts +11 -0
- package/dist/daemon/intent-registry.d.ts.map +1 -0
- package/dist/daemon/intent-registry.js +101 -0
- package/dist/daemon/intent-registry.js.map +1 -0
- package/dist/daemon/keypair.d.ts +5 -0
- package/dist/daemon/keypair.d.ts.map +1 -0
- package/dist/daemon/keypair.js +25 -0
- package/dist/daemon/keypair.js.map +1 -0
- package/dist/daemon/message-handler.d.ts +20 -0
- package/dist/daemon/message-handler.d.ts.map +1 -0
- package/dist/daemon/message-handler.js +159 -0
- package/dist/daemon/message-handler.js.map +1 -0
- package/dist/daemon/notify.d.ts +7 -0
- package/dist/daemon/notify.d.ts.map +1 -0
- package/dist/daemon/notify.js +54 -0
- package/dist/daemon/notify.js.map +1 -0
- package/dist/daemon/peers.d.ts +66 -0
- package/dist/daemon/peers.d.ts.map +1 -0
- package/dist/daemon/peers.js +171 -0
- package/dist/daemon/peers.js.map +1 -0
- package/dist/daemon/reply-handler.d.ts +67 -0
- package/dist/daemon/reply-handler.d.ts.map +1 -0
- package/dist/daemon/reply-handler.js +176 -0
- package/dist/daemon/reply-handler.js.map +1 -0
- package/dist/daemon/scopes.d.ts +62 -0
- package/dist/daemon/scopes.d.ts.map +1 -0
- package/dist/daemon/scopes.js +113 -0
- package/dist/daemon/scopes.js.map +1 -0
- package/dist/daemon/server.d.ts +8 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +286 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/shared/config.d.ts +42 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +42 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/signing.d.ts +13 -0
- package/dist/shared/signing.d.ts.map +1 -0
- package/dist/shared/signing.js +46 -0
- package/dist/shared/signing.js.map +1 -0
- package/docs/agent-comms.md +277 -0
- package/docs/federation-flow.md +407 -0
- package/docs/quickstart.md +241 -0
- package/docs/scopes.md +198 -0
- package/package.json +57 -0
- package/scripts/install-skills.js +32 -0
- package/skills/ogp/SKILL.md +235 -0
- package/skills/ogp-agent-comms/SKILL.md +345 -0
- package/skills/ogp-expose/SKILL.md +281 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { listPeers, getPeer, approvePeer, rejectPeer, updatePeerGrantedScopes } from '../daemon/peers.js';
|
|
2
|
+
import { requireConfig } from '../shared/config.js';
|
|
3
|
+
import { getPublicKey, getPrivateKey, loadOrGenerateKeyPair } from '../daemon/keypair.js';
|
|
4
|
+
import { signObject } from '../shared/signing.js';
|
|
5
|
+
import * as crypto from 'node:crypto';
|
|
6
|
+
import { createScopeBundle, createScopeGrant, parseRateLimit, formatRateLimit, DEFAULT_RATE_LIMIT } from '../daemon/scopes.js';
|
|
7
|
+
export async function federationList(status) {
|
|
8
|
+
const peers = listPeers(status);
|
|
9
|
+
if (peers.length === 0) {
|
|
10
|
+
console.log('No peers found.');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
console.log(`\n${status ? status.toUpperCase() : 'ALL'} PEERS:\n`);
|
|
14
|
+
peers.forEach(peer => {
|
|
15
|
+
console.log(` ${peer.id}`);
|
|
16
|
+
console.log(` Name: ${peer.displayName}`);
|
|
17
|
+
console.log(` Status: ${peer.status}`);
|
|
18
|
+
console.log(` Gateway: ${peer.gatewayUrl}`);
|
|
19
|
+
console.log(` Public key: ${peer.publicKey.substring(0, 32)}...`);
|
|
20
|
+
console.log('');
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export async function federationRequest(peerUrl, peerId) {
|
|
24
|
+
const config = requireConfig();
|
|
25
|
+
// Build our peer info
|
|
26
|
+
const ourPeerInfo = {
|
|
27
|
+
id: peerId,
|
|
28
|
+
displayName: config.displayName,
|
|
29
|
+
email: config.email,
|
|
30
|
+
gatewayUrl: config.gatewayUrl,
|
|
31
|
+
publicKey: getPublicKey()
|
|
32
|
+
};
|
|
33
|
+
const keypair = loadOrGenerateKeyPair();
|
|
34
|
+
const peer = {
|
|
35
|
+
id: `${new URL(config.gatewayUrl).hostname}:${config.daemonPort}`,
|
|
36
|
+
displayName: config.displayName,
|
|
37
|
+
email: config.email,
|
|
38
|
+
gatewayUrl: config.gatewayUrl,
|
|
39
|
+
publicKey: keypair.publicKey,
|
|
40
|
+
};
|
|
41
|
+
const { sign } = await import('../shared/signing.js');
|
|
42
|
+
const signature = sign(JSON.stringify(peer), keypair.privateKey);
|
|
43
|
+
const requestBody = { peer, signature };
|
|
44
|
+
// Send request
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch(`${peerUrl}/federation/request`, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: { 'Content-Type': 'application/json' },
|
|
49
|
+
body: JSON.stringify(requestBody)
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
console.error(`Request failed: ${response.status} ${response.statusText}`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const result = await response.json();
|
|
56
|
+
console.log('ā Federation request sent');
|
|
57
|
+
console.log(` Status: ${result.status}`);
|
|
58
|
+
console.log(` Message: ${result.message}`);
|
|
59
|
+
// Fetch their federation card to get their actual identity
|
|
60
|
+
// Store them as a pending peer so we can send intents when approved
|
|
61
|
+
try {
|
|
62
|
+
const { addPeer } = await import('../daemon/peers.js');
|
|
63
|
+
const cardRes = await fetch(`${peerUrl}/.well-known/ogp`);
|
|
64
|
+
if (cardRes.ok) {
|
|
65
|
+
const card = await cardRes.json();
|
|
66
|
+
const peerHostname = new URL(peerUrl).hostname;
|
|
67
|
+
const peerPort = new URL(peerUrl).port || '18790';
|
|
68
|
+
addPeer({
|
|
69
|
+
id: `${peerHostname}:${peerPort}`,
|
|
70
|
+
displayName: card.displayName || peerId,
|
|
71
|
+
email: card.email || '',
|
|
72
|
+
gatewayUrl: peerUrl,
|
|
73
|
+
publicKey: card.publicKey || '',
|
|
74
|
+
status: 'pending',
|
|
75
|
+
requestedAt: new Date().toISOString()
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* non-fatal */ }
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error('Failed to send request:', error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function federationApprove(peerId, options = {}) {
|
|
86
|
+
const peer = getPeer(peerId);
|
|
87
|
+
if (!peer) {
|
|
88
|
+
console.error(`Peer not found: ${peerId}`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (peer.status === 'approved') {
|
|
92
|
+
console.log(`Peer ${peerId} is already approved.`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Build scope grants if provided
|
|
96
|
+
let scopeGrants;
|
|
97
|
+
if (options.intents && options.intents.length > 0) {
|
|
98
|
+
const rateLimit = options.rate ? parseRateLimit(options.rate) : DEFAULT_RATE_LIMIT;
|
|
99
|
+
if (!rateLimit) {
|
|
100
|
+
console.error(`Invalid rate limit format: ${options.rate} (expected: requests/seconds e.g., 100/3600)`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const scopes = options.intents.map(intent => {
|
|
104
|
+
const grant = createScopeGrant(intent, { rateLimit });
|
|
105
|
+
// Add topics for agent-comms
|
|
106
|
+
if (intent === 'agent-comms' && options.topics && options.topics.length > 0) {
|
|
107
|
+
grant.topics = options.topics;
|
|
108
|
+
}
|
|
109
|
+
return grant;
|
|
110
|
+
});
|
|
111
|
+
scopeGrants = createScopeBundle(scopes);
|
|
112
|
+
// Store the grants locally
|
|
113
|
+
updatePeerGrantedScopes(peerId, scopeGrants);
|
|
114
|
+
console.log(`ā Granted scopes: ${options.intents.join(', ')}`);
|
|
115
|
+
if (options.topics && options.topics.length > 0) {
|
|
116
|
+
console.log(` Topics: ${options.topics.join(', ')}`);
|
|
117
|
+
}
|
|
118
|
+
console.log(` Rate limit: ${formatRateLimit(rateLimit)}`);
|
|
119
|
+
}
|
|
120
|
+
approvePeer(peerId);
|
|
121
|
+
console.log(`ā Approved peer: ${peerId}`);
|
|
122
|
+
// Notify the peer ā send both formats for maximum compatibility
|
|
123
|
+
try {
|
|
124
|
+
const keypair = loadOrGenerateKeyPair();
|
|
125
|
+
const ourConfig = requireConfig();
|
|
126
|
+
const nonce = crypto.randomUUID();
|
|
127
|
+
await fetch(`${peer.gatewayUrl}/federation/approve`, {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
headers: { 'Content-Type': 'application/json' },
|
|
130
|
+
body: JSON.stringify({
|
|
131
|
+
// Package format
|
|
132
|
+
peerId: peer.id,
|
|
133
|
+
approved: true,
|
|
134
|
+
// Fork format (for interoperability)
|
|
135
|
+
fromGatewayId: `${new URL(ourConfig.gatewayUrl).hostname}:${ourConfig.daemonPort}`,
|
|
136
|
+
fromDisplayName: ourConfig.displayName,
|
|
137
|
+
fromGatewayUrl: ourConfig.gatewayUrl,
|
|
138
|
+
fromPublicKey: keypair.publicKey,
|
|
139
|
+
fromEmail: ourConfig.email,
|
|
140
|
+
timestamp: new Date().toISOString(),
|
|
141
|
+
nonce,
|
|
142
|
+
// v0.2.0: Include scope grants
|
|
143
|
+
protocolVersion: '0.2.0',
|
|
144
|
+
scopeGrants
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
console.log('ā Notified peer of approval');
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.error('Failed to notify peer:', error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export async function federationReject(peerId) {
|
|
154
|
+
const peer = getPeer(peerId);
|
|
155
|
+
if (!peer) {
|
|
156
|
+
console.error(`Peer not found: ${peerId}`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
rejectPeer(peerId);
|
|
160
|
+
console.log(`ā Rejected peer: ${peerId}`);
|
|
161
|
+
// Notify the peer
|
|
162
|
+
try {
|
|
163
|
+
await fetch(`${peer.gatewayUrl}/federation/approve`, {
|
|
164
|
+
method: 'POST',
|
|
165
|
+
headers: { 'Content-Type': 'application/json' },
|
|
166
|
+
body: JSON.stringify({
|
|
167
|
+
peerId: peer.id,
|
|
168
|
+
approved: false
|
|
169
|
+
})
|
|
170
|
+
});
|
|
171
|
+
console.log('ā Notified peer of rejection');
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error('Failed to notify peer:', error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export async function federationSend(peerId, intent, payloadJson) {
|
|
178
|
+
const config = requireConfig();
|
|
179
|
+
const peer = getPeer(peerId);
|
|
180
|
+
if (!peer) {
|
|
181
|
+
console.error(`Peer not found: ${peerId}`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (peer.status !== 'approved') {
|
|
185
|
+
console.error(`Peer ${peerId} is not approved`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const payload = JSON.parse(payloadJson);
|
|
189
|
+
const keypair = loadOrGenerateKeyPair();
|
|
190
|
+
const ourId = `${new URL(config.gatewayUrl).hostname}:${config.daemonPort}`;
|
|
191
|
+
const message = {
|
|
192
|
+
intent,
|
|
193
|
+
from: ourId,
|
|
194
|
+
to: peerId,
|
|
195
|
+
nonce: crypto.randomUUID(),
|
|
196
|
+
timestamp: new Date().toISOString(),
|
|
197
|
+
payload
|
|
198
|
+
};
|
|
199
|
+
const { payload: signedPayload, signature } = signObject(message, getPrivateKey());
|
|
200
|
+
try {
|
|
201
|
+
const response = await fetch(`${peer.gatewayUrl}/federation/message`, {
|
|
202
|
+
method: 'POST',
|
|
203
|
+
headers: { 'Content-Type': 'application/json' },
|
|
204
|
+
body: JSON.stringify({
|
|
205
|
+
message: signedPayload,
|
|
206
|
+
signature
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
if (!response.ok) {
|
|
210
|
+
console.error(`Send failed: ${response.status} ${response.statusText}`);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const result = await response.json();
|
|
214
|
+
console.log('ā Message sent');
|
|
215
|
+
console.log(' Response:', JSON.stringify(result, null, 2));
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error('Failed to send message:', error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Show scope grants for a peer
|
|
223
|
+
*/
|
|
224
|
+
export async function federationShowScopes(peerId) {
|
|
225
|
+
const peer = getPeer(peerId);
|
|
226
|
+
if (!peer) {
|
|
227
|
+
console.error(`Peer not found: ${peerId}`);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
console.log(`\nSCOPES FOR ${peer.displayName} (${peerId}):\n`);
|
|
231
|
+
console.log(' Status:', peer.status);
|
|
232
|
+
console.log(' Protocol:', peer.protocolVersion || '0.1.0 (legacy)');
|
|
233
|
+
console.log('');
|
|
234
|
+
// What I grant TO this peer
|
|
235
|
+
if (peer.grantedScopes) {
|
|
236
|
+
console.log(' GRANTED TO PEER (what they can request from me):');
|
|
237
|
+
for (const scope of peer.grantedScopes.scopes) {
|
|
238
|
+
const status = scope.enabled ? 'ā' : 'ā';
|
|
239
|
+
console.log(` ${status} ${scope.intent}`);
|
|
240
|
+
if (scope.rateLimit) {
|
|
241
|
+
console.log(` Rate: ${formatRateLimit(scope.rateLimit)}`);
|
|
242
|
+
}
|
|
243
|
+
if (scope.topics && scope.topics.length > 0) {
|
|
244
|
+
console.log(` Topics: ${scope.topics.join(', ')}`);
|
|
245
|
+
}
|
|
246
|
+
if (scope.expiresAt) {
|
|
247
|
+
console.log(` Expires: ${scope.expiresAt}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
console.log(` Granted at: ${peer.grantedScopes.grantedAt}`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
console.log(' GRANTED TO PEER: None (v0.1 mode - default rate limits apply)');
|
|
254
|
+
}
|
|
255
|
+
console.log('');
|
|
256
|
+
// What this peer grants TO me
|
|
257
|
+
if (peer.receivedScopes) {
|
|
258
|
+
console.log(' RECEIVED FROM PEER (what I can request from them):');
|
|
259
|
+
for (const scope of peer.receivedScopes.scopes) {
|
|
260
|
+
const status = scope.enabled ? 'ā' : 'ā';
|
|
261
|
+
console.log(` ${status} ${scope.intent}`);
|
|
262
|
+
if (scope.rateLimit) {
|
|
263
|
+
console.log(` Rate: ${formatRateLimit(scope.rateLimit)}`);
|
|
264
|
+
}
|
|
265
|
+
if (scope.topics && scope.topics.length > 0) {
|
|
266
|
+
console.log(` Topics: ${scope.topics.join(', ')}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
console.log(` Granted at: ${peer.receivedScopes.grantedAt}`);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
console.log(' RECEIVED FROM PEER: None (awaiting their approval with scopes)');
|
|
273
|
+
}
|
|
274
|
+
console.log('');
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Update scope grants for an existing peer
|
|
278
|
+
*/
|
|
279
|
+
export async function federationUpdateGrants(peerId, options) {
|
|
280
|
+
const peer = getPeer(peerId);
|
|
281
|
+
if (!peer) {
|
|
282
|
+
console.error(`Peer not found: ${peerId}`);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
if (peer.status !== 'approved') {
|
|
286
|
+
console.error(`Peer ${peerId} is not approved. Use 'approve' to approve with scopes.`);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (!options.intents || options.intents.length === 0) {
|
|
290
|
+
console.error('No intents specified. Use --intents to specify intents to grant.');
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const rateLimit = options.rate ? parseRateLimit(options.rate) : DEFAULT_RATE_LIMIT;
|
|
294
|
+
if (!rateLimit) {
|
|
295
|
+
console.error(`Invalid rate limit format: ${options.rate}`);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const scopes = options.intents.map(intent => {
|
|
299
|
+
const grant = createScopeGrant(intent, { rateLimit });
|
|
300
|
+
if (intent === 'agent-comms' && options.topics && options.topics.length > 0) {
|
|
301
|
+
grant.topics = options.topics;
|
|
302
|
+
}
|
|
303
|
+
return grant;
|
|
304
|
+
});
|
|
305
|
+
const scopeGrants = createScopeBundle(scopes);
|
|
306
|
+
updatePeerGrantedScopes(peerId, scopeGrants);
|
|
307
|
+
console.log(`ā Updated grants for ${peerId}:`);
|
|
308
|
+
console.log(` Intents: ${options.intents.join(', ')}`);
|
|
309
|
+
if (options.topics && options.topics.length > 0) {
|
|
310
|
+
console.log(` Topics: ${options.topics.join(', ')}`);
|
|
311
|
+
}
|
|
312
|
+
console.log(` Rate limit: ${formatRateLimit(rateLimit)}`);
|
|
313
|
+
// Optionally notify peer of updated grants (they can re-fetch our card)
|
|
314
|
+
console.log('\nNote: Peer will see updated capabilities on next card fetch.');
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Send an agent-comms message to a peer
|
|
318
|
+
*/
|
|
319
|
+
export async function federationSendAgentComms(peerId, topic, messageText, options = {}) {
|
|
320
|
+
const config = requireConfig();
|
|
321
|
+
const peer = getPeer(peerId);
|
|
322
|
+
if (!peer) {
|
|
323
|
+
console.error(`Peer not found: ${peerId}`);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (peer.status !== 'approved') {
|
|
327
|
+
console.error(`Peer ${peerId} is not approved`);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const keypair = loadOrGenerateKeyPair();
|
|
331
|
+
const ourId = `${new URL(config.gatewayUrl).hostname}:${config.daemonPort}`;
|
|
332
|
+
const nonce = crypto.randomUUID();
|
|
333
|
+
// Build replyTo URL if we want to receive callbacks
|
|
334
|
+
const replyTo = options.waitForReply
|
|
335
|
+
? `${config.gatewayUrl}/federation/reply/${nonce}`
|
|
336
|
+
: undefined;
|
|
337
|
+
const message = {
|
|
338
|
+
intent: 'agent-comms',
|
|
339
|
+
from: ourId,
|
|
340
|
+
to: peerId,
|
|
341
|
+
nonce,
|
|
342
|
+
timestamp: new Date().toISOString(),
|
|
343
|
+
replyTo,
|
|
344
|
+
conversationId: options.conversationId,
|
|
345
|
+
payload: {
|
|
346
|
+
topic,
|
|
347
|
+
message: messageText,
|
|
348
|
+
priority: options.priority || 'normal'
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
const { payload: signedPayload, signature } = signObject(message, getPrivateKey());
|
|
352
|
+
try {
|
|
353
|
+
const response = await fetch(`${peer.gatewayUrl}/federation/message`, {
|
|
354
|
+
method: 'POST',
|
|
355
|
+
headers: { 'Content-Type': 'application/json' },
|
|
356
|
+
body: JSON.stringify({
|
|
357
|
+
message: signedPayload,
|
|
358
|
+
signature
|
|
359
|
+
})
|
|
360
|
+
});
|
|
361
|
+
if (!response.ok) {
|
|
362
|
+
const body = await response.text();
|
|
363
|
+
if (response.status === 403) {
|
|
364
|
+
console.error(`Access denied: ${body}`);
|
|
365
|
+
console.log('Hint: Peer may not have granted you agent-comms scope for this topic.');
|
|
366
|
+
}
|
|
367
|
+
else if (response.status === 429) {
|
|
368
|
+
console.error(`Rate limited: ${body}`);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
console.error(`Send failed: ${response.status} ${response.statusText}`);
|
|
372
|
+
}
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
const result = await response.json();
|
|
376
|
+
console.log(`ā Agent-comms sent to ${peer.displayName}`);
|
|
377
|
+
console.log(` Topic: ${topic}`);
|
|
378
|
+
console.log(` Message: ${messageText}`);
|
|
379
|
+
// Poll for reply if requested
|
|
380
|
+
if (options.waitForReply) {
|
|
381
|
+
console.log('\nWaiting for reply...');
|
|
382
|
+
const timeout = options.replyTimeout || 30000;
|
|
383
|
+
const pollInterval = 2000;
|
|
384
|
+
const startTime = Date.now();
|
|
385
|
+
while (Date.now() - startTime < timeout) {
|
|
386
|
+
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
|
387
|
+
try {
|
|
388
|
+
const replyRes = await fetch(`${config.gatewayUrl}/federation/reply/${nonce}`);
|
|
389
|
+
if (replyRes.ok) {
|
|
390
|
+
const replyData = await replyRes.json();
|
|
391
|
+
if (replyData.status === 'complete' && replyData.reply) {
|
|
392
|
+
console.log('\nā Reply received:');
|
|
393
|
+
console.log(JSON.stringify(replyData.reply, null, 2));
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
// Continue polling
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
console.log('\nā± Reply timeout - no response received');
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
console.error('Failed to send agent-comms:', error);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=federation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/cli/federation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,uBAAuB,EAAa,MAAM,oBAAoB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAIL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4C;IAC/E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;IACnE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACrE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,sBAAsB;IACtB,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,MAAM;QACV,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,YAAY,EAAE;KAC1B,CAAC;IAEF,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IAExC,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE;QACjE,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAExC,eAAe;IACf,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,qBAAqB,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2C,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5C,2DAA2D;QAC3D,oEAAoE;QACpE,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;YAC1D,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAkE,CAAC;gBAClG,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;gBAClD,OAAO,CAAC;oBACN,EAAE,EAAE,GAAG,YAAY,IAAI,QAAQ,EAAE;oBACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;oBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;oBACvB,UAAU,EAAE,OAAO;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;oBAC/B,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,UAA0B,EAAE;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,uBAAuB,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAoC,CAAC;IACzC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACnF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,8CAA8C,CAAC,CAAC;YACxG,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAiB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,6BAA6B;YAC7B,IAAI,MAAM,KAAK,aAAa,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5E,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAExC,2BAA2B;QAC3B,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;IAE1C,gEAAgE;IAChE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,qBAAqB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,iBAAiB;gBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI;gBACd,qCAAqC;gBACrC,aAAa,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE;gBAClF,eAAe,EAAE,SAAS,CAAC,WAAW;gBACtC,cAAc,EAAE,SAAS,CAAC,UAAU;gBACpC,aAAa,EAAE,OAAO,CAAC,SAAS;gBAChC,SAAS,EAAE,SAAS,CAAC,KAAK;gBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,KAAK;gBACL,+BAA+B;gBAC/B,eAAe,EAAE,OAAO;gBACxB,WAAW;aACZ,CAAC;SACH,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;IAE1C,kBAAkB;IAClB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,qBAAqB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,KAAK;aAChB,CAAC;SACH,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,MAAc,EACd,WAAmB;IAEnB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,kBAAkB,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAE5E,MAAM,OAAO,GAAG;QACd,MAAM;QACN,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;QAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;KACR,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,qBAAqB,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,aAAa;gBACtB,SAAS;aACV,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,WAAW,KAAK,MAAM,MAAM,CAAC,CAAC;IAE/D,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,IAAI,gBAAgB,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4BAA4B;IAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,eAAe,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,eAAe,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,OAAuB;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,yDAAyD,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACnF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAiB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,aAAa,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAE3D,wEAAwE;IACxE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAc,EACd,KAAa,EACb,WAAmB,EACnB,UAKI,EAAE;IAEN,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,kBAAkB,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAElC,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY;QAClC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,qBAAqB,KAAK,EAAE;QAClD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,MAAM;QACV,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QACP,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,OAAO,EAAE;YACP,KAAK;YACL,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;SACvC;KACF,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,qBAAqB,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,aAAa;gBACtB,SAAS;aACV,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;YACvF,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoD,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;QAEzC,8BAA8B;QAC9B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBACxC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;gBAEhE,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,qBAAqB,KAAK,EAAE,CAAC,CAAC;oBAC/E,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAChB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAsC,CAAC;wBAC5E,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;4BACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;4BACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;4BACtD,OAAO;wBACT,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAmDA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmCxD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B1D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { execFile } from 'node:child_process';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
const LAUNCH_AGENT_LABEL = 'com.dp-pcs.ogp';
|
|
8
|
+
const LAUNCH_AGENT_DIR = path.join(os.homedir(), 'Library', 'LaunchAgents');
|
|
9
|
+
const LAUNCH_AGENT_PLIST = path.join(LAUNCH_AGENT_DIR, `${LAUNCH_AGENT_LABEL}.plist`);
|
|
10
|
+
async function getOgpBinaryPath() {
|
|
11
|
+
try {
|
|
12
|
+
// Try to find the ogp binary in PATH
|
|
13
|
+
const result = await execFileAsync('which', ['ogp']);
|
|
14
|
+
return result.stdout.trim();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
// Fallback to npm global bin directory
|
|
18
|
+
const result = await execFileAsync('npm', ['bin', '-g']);
|
|
19
|
+
const npmBin = result.stdout.trim();
|
|
20
|
+
return path.join(npmBin, 'ogp');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function generatePlist(ogpPath) {
|
|
24
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
25
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
26
|
+
<plist version="1.0">
|
|
27
|
+
<dict>
|
|
28
|
+
<key>Label</key>
|
|
29
|
+
<string>${LAUNCH_AGENT_LABEL}</string>
|
|
30
|
+
<key>ProgramArguments</key>
|
|
31
|
+
<array>
|
|
32
|
+
<string>${ogpPath}</string>
|
|
33
|
+
<string>start</string>
|
|
34
|
+
<string>--background</string>
|
|
35
|
+
</array>
|
|
36
|
+
<key>RunAtLoad</key>
|
|
37
|
+
<true/>
|
|
38
|
+
<key>KeepAlive</key>
|
|
39
|
+
<false/>
|
|
40
|
+
<key>StandardOutPath</key>
|
|
41
|
+
<string>${os.homedir()}/.ogp/launchagent.log</string>
|
|
42
|
+
<key>StandardErrorPath</key>
|
|
43
|
+
<string>${os.homedir()}/.ogp/launchagent.log</string>
|
|
44
|
+
</dict>
|
|
45
|
+
</plist>
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
export async function installLaunchAgent() {
|
|
49
|
+
if (process.platform !== 'darwin') {
|
|
50
|
+
console.error('LaunchAgent installation is only supported on macOS');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
// Ensure LaunchAgents directory exists
|
|
55
|
+
if (!fs.existsSync(LAUNCH_AGENT_DIR)) {
|
|
56
|
+
fs.mkdirSync(LAUNCH_AGENT_DIR, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
// Get the ogp binary path
|
|
59
|
+
const ogpPath = await getOgpBinaryPath();
|
|
60
|
+
console.log(`Found ogp binary at: ${ogpPath}`);
|
|
61
|
+
// Generate and write the plist
|
|
62
|
+
const plistContent = generatePlist(ogpPath);
|
|
63
|
+
fs.writeFileSync(LAUNCH_AGENT_PLIST, plistContent, 'utf-8');
|
|
64
|
+
console.log(`Created LaunchAgent plist at: ${LAUNCH_AGENT_PLIST}`);
|
|
65
|
+
// Load the LaunchAgent
|
|
66
|
+
try {
|
|
67
|
+
await execFileAsync('launchctl', ['load', LAUNCH_AGENT_PLIST]);
|
|
68
|
+
console.log('\nLaunchAgent loaded successfully');
|
|
69
|
+
console.log('OGP will now start automatically on login');
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error('Failed to load LaunchAgent');
|
|
73
|
+
console.error('You can manually load it with:');
|
|
74
|
+
console.error(` launchctl load ${LAUNCH_AGENT_PLIST}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Failed to install LaunchAgent:', error);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function uninstallLaunchAgent() {
|
|
83
|
+
if (process.platform !== 'darwin') {
|
|
84
|
+
console.error('LaunchAgent uninstallation is only supported on macOS');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
// Unload the LaunchAgent if it's loaded
|
|
89
|
+
if (fs.existsSync(LAUNCH_AGENT_PLIST)) {
|
|
90
|
+
try {
|
|
91
|
+
await execFileAsync('launchctl', ['unload', LAUNCH_AGENT_PLIST]);
|
|
92
|
+
console.log('LaunchAgent unloaded');
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.log('LaunchAgent was not loaded (or already unloaded)');
|
|
96
|
+
}
|
|
97
|
+
// Delete the plist file
|
|
98
|
+
fs.unlinkSync(LAUNCH_AGENT_PLIST);
|
|
99
|
+
console.log(`Deleted: ${LAUNCH_AGENT_PLIST}`);
|
|
100
|
+
console.log('\nOGP will no longer start automatically on login');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log('LaunchAgent is not installed');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('Failed to uninstall LaunchAgent:', error);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAKA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAkC9C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as readline from 'node:readline/promises';
|
|
2
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
3
|
+
import { saveConfig } from '../shared/config.js';
|
|
4
|
+
import { loadOrGenerateKeyPair } from '../daemon/keypair.js';
|
|
5
|
+
export async function runSetup() {
|
|
6
|
+
console.log('=== OGP Setup ===\n');
|
|
7
|
+
const rl = readline.createInterface({ input, output });
|
|
8
|
+
const daemonPort = await rl.question('Daemon port [18790]: ');
|
|
9
|
+
const openclawUrl = await rl.question('OpenClaw URL [http://localhost:18789]: ');
|
|
10
|
+
const openclawToken = await rl.question('OpenClaw API token: ');
|
|
11
|
+
const gatewayUrl = await rl.question('Gateway URL (your public URL ā run "ogp expose" first to get this, or leave blank to set later): ');
|
|
12
|
+
const displayName = await rl.question('Display name: ');
|
|
13
|
+
const email = await rl.question('Email: ');
|
|
14
|
+
const stateDir = await rl.question('State directory [~/.ogp]: ');
|
|
15
|
+
rl.close();
|
|
16
|
+
const config = {
|
|
17
|
+
daemonPort: parseInt(daemonPort) || 18790,
|
|
18
|
+
openclawUrl: openclawUrl || 'http://localhost:18789',
|
|
19
|
+
openclawToken,
|
|
20
|
+
gatewayUrl,
|
|
21
|
+
displayName,
|
|
22
|
+
email,
|
|
23
|
+
stateDir: stateDir || '~/.ogp'
|
|
24
|
+
};
|
|
25
|
+
saveConfig(config);
|
|
26
|
+
console.log('\nā Configuration saved');
|
|
27
|
+
// Generate keypair
|
|
28
|
+
const keypair = loadOrGenerateKeyPair();
|
|
29
|
+
console.log(`ā Ed25519 keypair generated`);
|
|
30
|
+
console.log(` Public key: ${keypair.publicKey.substring(0, 16)}...`);
|
|
31
|
+
console.log('\nSetup complete! Run "ogp start" to start the daemon.');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAkB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mGAAmG,CAAC,CAAC;IAC1I,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IAEjE,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,MAAM,GAAc;QACxB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK;QACzC,WAAW,EAAE,WAAW,IAAI,wBAAwB;QACpD,aAAa;QACb,UAAU;QACV,WAAW;QACX,KAAK;QACL,QAAQ,EAAE,QAAQ,IAAI,QAAQ;KAC/B,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,mBAAmB;IACnB,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACxE,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|