@tokenrip/cli 1.0.1 → 1.1.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 +248 -35
- package/dist/cjs/client.js +2 -1
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/commands/auth.js +72 -25
- package/dist/cjs/commands/auth.js.map +1 -1
- package/dist/cjs/commands/config.js +12 -0
- package/dist/cjs/commands/config.js.map +1 -1
- package/dist/cjs/commands/contacts.js +36 -0
- package/dist/cjs/commands/contacts.js.map +1 -0
- package/dist/cjs/commands/inbox.js +36 -0
- package/dist/cjs/commands/inbox.js.map +1 -0
- package/dist/cjs/commands/msg.js +51 -0
- package/dist/cjs/commands/msg.js.map +1 -0
- package/dist/cjs/commands/operator-link.js +32 -0
- package/dist/cjs/commands/operator-link.js.map +1 -0
- package/dist/cjs/commands/share.js +33 -0
- package/dist/cjs/commands/share.js.map +1 -0
- package/dist/cjs/commands/thread-share.js +32 -0
- package/dist/cjs/commands/thread-share.js.map +1 -0
- package/dist/cjs/commands/thread.js +39 -0
- package/dist/cjs/commands/thread.js.map +1 -0
- package/dist/cjs/config.js +7 -3
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/contacts.js +64 -0
- package/dist/cjs/contacts.js.map +1 -0
- package/dist/cjs/crypto.js +47 -0
- package/dist/cjs/crypto.js.map +1 -0
- package/dist/cjs/formatters.js +120 -1
- package/dist/cjs/formatters.js.map +1 -1
- package/dist/cjs/identity.js +25 -0
- package/dist/cjs/identity.js.map +1 -0
- package/dist/cjs/index.js +27 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/output.js +11 -11
- package/dist/cjs/output.js.map +1 -1
- package/dist/cjs/state.js +24 -0
- package/dist/cjs/state.js.map +1 -0
- package/dist/cli.js +180 -21
- package/dist/cli.js.map +1 -1
- package/dist/client.js +2 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.d.ts +5 -3
- package/dist/commands/auth.js +70 -25
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +12 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts +7 -0
- package/dist/commands/contacts.js +30 -0
- package/dist/commands/contacts.js.map +1 -0
- package/dist/commands/inbox.d.ts +6 -0
- package/dist/commands/inbox.js +33 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/msg.d.ts +13 -0
- package/dist/commands/msg.js +47 -0
- package/dist/commands/msg.js.map +1 -0
- package/dist/commands/operator-link.d.ts +3 -0
- package/dist/commands/operator-link.js +29 -0
- package/dist/commands/operator-link.js.map +1 -0
- package/dist/commands/share.d.ts +6 -0
- package/dist/commands/share.js +29 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/thread-share.d.ts +4 -0
- package/dist/commands/thread-share.js +29 -0
- package/dist/commands/thread-share.js.map +1 -0
- package/dist/commands/thread.d.ts +8 -0
- package/dist/commands/thread.js +35 -0
- package/dist/commands/thread.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +6 -3
- package/dist/config.js.map +1 -1
- package/dist/contacts.d.ts +16 -0
- package/dist/contacts.js +53 -0
- package/dist/contacts.js.map +1 -0
- package/dist/crypto.d.ts +16 -0
- package/dist/crypto.js +40 -0
- package/dist/crypto.js.map +1 -0
- package/dist/formatters.d.ts +7 -0
- package/dist/formatters.js +112 -0
- package/dist/formatters.js.map +1 -1
- package/dist/identity.d.ts +7 -0
- package/dist/identity.js +18 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +1 -1
- package/dist/output.js +10 -10
- package/dist/output.js.map +1 -1
- package/dist/state.d.ts +5 -0
- package/dist/state.js +17 -0
- package/dist/state.js.map +1 -0
- package/package.json +3 -1
package/dist/cjs/output.js
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.setForceHuman = setForceHuman;
|
|
4
4
|
exports.outputSuccess = outputSuccess;
|
|
5
5
|
exports.outputError = outputError;
|
|
6
6
|
exports.wrapCommand = wrapCommand;
|
|
7
7
|
const errors_js_1 = require("./errors.js");
|
|
8
|
-
let
|
|
9
|
-
function
|
|
10
|
-
|
|
8
|
+
let forceHuman = false;
|
|
9
|
+
function setForceHuman(value) {
|
|
10
|
+
forceHuman = value;
|
|
11
11
|
}
|
|
12
12
|
function isJsonMode() {
|
|
13
|
-
if (
|
|
14
|
-
return
|
|
15
|
-
if (process.env.TOKENRIP_OUTPUT === '
|
|
16
|
-
return
|
|
17
|
-
|
|
18
|
-
return true;
|
|
19
|
-
return false;
|
|
13
|
+
if (forceHuman)
|
|
14
|
+
return false;
|
|
15
|
+
if (process.env.TOKENRIP_OUTPUT === 'human')
|
|
16
|
+
return false;
|
|
17
|
+
return true;
|
|
20
18
|
}
|
|
21
19
|
function outputSuccess(data, formatter) {
|
|
22
20
|
if (isJsonMode() || !formatter) {
|
|
@@ -60,5 +58,7 @@ const ERROR_HINTS = {
|
|
|
60
58
|
FILE_NOT_FOUND: 'Check the file path and try again.',
|
|
61
59
|
INVALID_TYPE: 'Valid types: markdown, html, chart, code, text.',
|
|
62
60
|
AUTH_FAILED: 'Could not create API key. Is the server running?',
|
|
61
|
+
CONTACT_NOT_FOUND: 'Run `tokenrip contacts list` to see available contacts.',
|
|
62
|
+
INVALID_AGENT_ID: 'Agent IDs start with trip1. Example: trip1x9a2f...',
|
|
63
63
|
};
|
|
64
64
|
//# sourceMappingURL=output.js.map
|
package/dist/cjs/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":";;AAKA,sCAEC;AAQD,sCAMC;AAED,kCAcC;AAED,kCASC;AAhDD,2CAAmD;AAGnD,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,SAAgB,aAAa,CAAC,KAAc;IAC1C,UAAU,GAAG,KAAK,CAAC;AACrB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,UAAU;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,aAAa,CAAC,IAA6B,EAAE,SAAqB;IAChF,IAAI,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,GAAa;IACvC,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,2DAA2D;IAC3D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CAA8C,EAAK;IAC5E,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAA,sBAAU,EAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAuB,CAAC;AACjC,CAAC;AAED,MAAM,WAAW,GAA2B;IAC1C,UAAU,EAAE,yDAAyD;IACrE,YAAY,EAAE,yEAAyE;IACvF,aAAa,EAAE,yDAAyD;IACxE,OAAO,EAAE,uEAAuE;IAChF,cAAc,EAAE,oCAAoC;IACpD,YAAY,EAAE,iDAAiD;IAC/D,WAAW,EAAE,kDAAkD;IAC/D,iBAAiB,EAAE,yDAAyD;IAC5E,gBAAgB,EAAE,oDAAoD;CACvE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadState = loadState;
|
|
7
|
+
exports.saveState = saveState;
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const config_js_1 = require("./config.js");
|
|
11
|
+
const STATE_FILE = node_path_1.default.join(config_js_1.CONFIG_DIR, 'state.json');
|
|
12
|
+
function loadState() {
|
|
13
|
+
try {
|
|
14
|
+
const raw = node_fs_1.default.readFileSync(STATE_FILE, 'utf-8');
|
|
15
|
+
return JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function saveState(state) {
|
|
22
|
+
node_fs_1.default.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":";;;;;AAUA,8BAOC;AAED,8BAEC;AArBD,sDAAyB;AACzB,0DAA6B;AAC7B,2CAAyC;AAEzC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,sBAAU,EAAE,YAAY,CAAC,CAAC;AAMvD,SAAgB,SAAS;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAAoB;IAC5C,iBAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
-
import { configSetKey, configSetUrl } from './commands/config.js';
|
|
5
|
-
import { authCreateKey } from './commands/auth.js';
|
|
4
|
+
import { configSetKey, configSetUrl, configShow } from './commands/config.js';
|
|
6
5
|
import { upload } from './commands/upload.js';
|
|
7
6
|
import { publish } from './commands/publish.js';
|
|
8
7
|
import { status } from './commands/status.js';
|
|
@@ -10,18 +9,19 @@ import { deleteAsset } from './commands/delete.js';
|
|
|
10
9
|
import { update } from './commands/update.js';
|
|
11
10
|
import { deleteVersion } from './commands/delete-version.js';
|
|
12
11
|
import { stats } from './commands/stats.js';
|
|
13
|
-
import {
|
|
12
|
+
import { share } from './commands/share.js';
|
|
13
|
+
import { wrapCommand, setForceHuman } from './output.js';
|
|
14
14
|
const require = createRequire(import.meta.url);
|
|
15
15
|
const { version } = require('../package.json');
|
|
16
16
|
const program = new Command();
|
|
17
17
|
program
|
|
18
18
|
.name('tokenrip')
|
|
19
|
-
.description('Tokenrip — Asset
|
|
19
|
+
.description('Tokenrip — Asset coordination for AI agents')
|
|
20
20
|
.version(version)
|
|
21
|
-
.option('--
|
|
21
|
+
.option('--human', 'Use human-readable output instead of JSON')
|
|
22
22
|
.hook('preAction', () => {
|
|
23
|
-
if (program.opts().
|
|
24
|
-
|
|
23
|
+
if (program.opts().human)
|
|
24
|
+
setForceHuman(true);
|
|
25
25
|
})
|
|
26
26
|
.addHelpText('after', `
|
|
27
27
|
QUICK START:
|
|
@@ -137,6 +137,20 @@ CAUTION:
|
|
|
137
137
|
Cannot delete the last remaining version — delete the asset instead.
|
|
138
138
|
`)
|
|
139
139
|
.action(wrapCommand(deleteVersion));
|
|
140
|
+
asset
|
|
141
|
+
.command('share')
|
|
142
|
+
.argument('<uuid>', 'Asset public ID to generate a share link for')
|
|
143
|
+
.option('--comment-only', 'Only allow commenting (no version creation)')
|
|
144
|
+
.option('--expires <duration>', 'Token expiry: 30m, 1h, 7d, 30d, etc.')
|
|
145
|
+
.option('--for <agentId>', 'Restrict token to a specific agent (trip1...)')
|
|
146
|
+
.description('Generate a shareable link with scoped permissions')
|
|
147
|
+
.addHelpText('after', `
|
|
148
|
+
EXAMPLES:
|
|
149
|
+
$ tokenrip asset share 550e8400-e29b-41d4-a716-446655440000
|
|
150
|
+
$ tokenrip asset share 550e8400-... --comment-only --expires 7d
|
|
151
|
+
$ tokenrip asset share 550e8400-... --for trip1x9a2f...
|
|
152
|
+
`)
|
|
153
|
+
.action(wrapCommand(share));
|
|
140
154
|
asset
|
|
141
155
|
.command('stats')
|
|
142
156
|
.description('Show storage usage statistics')
|
|
@@ -148,26 +162,167 @@ Shows total asset count and storage bytes broken down by type.
|
|
|
148
162
|
`)
|
|
149
163
|
.action(wrapCommand(stats));
|
|
150
164
|
// ── auth commands ───────────────────────────────────────────────────
|
|
151
|
-
const auth = program.command('auth').description('
|
|
165
|
+
const auth = program.command('auth').description('Agent identity and authentication');
|
|
166
|
+
auth
|
|
167
|
+
.command('register')
|
|
168
|
+
.description('Register a new agent identity')
|
|
169
|
+
.option('--alias <alias>', 'Set agent alias (e.g. alice)')
|
|
170
|
+
.option('--force', 'Overwrite existing identity')
|
|
171
|
+
.action(wrapCommand(async (options) => {
|
|
172
|
+
const { authRegister } = await import('./commands/auth.js');
|
|
173
|
+
await authRegister(options);
|
|
174
|
+
}));
|
|
152
175
|
auth
|
|
153
176
|
.command('create-key')
|
|
154
|
-
.
|
|
155
|
-
.
|
|
156
|
-
|
|
177
|
+
.description('Regenerate API key (revokes current key)')
|
|
178
|
+
.action(wrapCommand(async () => {
|
|
179
|
+
const { authCreateKey } = await import('./commands/auth.js');
|
|
180
|
+
await authCreateKey();
|
|
181
|
+
}));
|
|
182
|
+
auth
|
|
183
|
+
.command('whoami')
|
|
184
|
+
.description('Show current agent identity')
|
|
185
|
+
.action(wrapCommand(async () => {
|
|
186
|
+
const { authWhoami } = await import('./commands/auth.js');
|
|
187
|
+
await authWhoami();
|
|
188
|
+
}));
|
|
189
|
+
// ── inbox command ──────────────────────────────────────────────────
|
|
190
|
+
program
|
|
191
|
+
.command('inbox')
|
|
192
|
+
.description('Poll for new thread messages and asset updates')
|
|
193
|
+
.option('--since <iso-date>', 'Override stored cursor (ISO 8601, does not update state)')
|
|
194
|
+
.option('--types <types>', 'Filter: threads, assets, or both (comma-separated)')
|
|
195
|
+
.option('--limit <n>', 'Max items per type (default: 50, max: 200)')
|
|
196
|
+
.action(wrapCommand(async (options) => {
|
|
197
|
+
const { inbox: inboxCmd } = await import('./commands/inbox.js');
|
|
198
|
+
await inboxCmd(options);
|
|
199
|
+
}));
|
|
200
|
+
// ── msg commands ─────────────────────────────────────────────────────
|
|
201
|
+
const msg = program.command('msg').description('Send and read messages');
|
|
202
|
+
msg
|
|
203
|
+
.command('send')
|
|
204
|
+
.argument('<body>', 'Message text')
|
|
205
|
+
.option('--to <recipient>', 'Recipient: agent ID, contact name, or alias')
|
|
206
|
+
.option('--thread <id>', 'Reply to existing thread')
|
|
207
|
+
.option('--intent <intent>', 'Message intent: propose, accept, reject, counter, inform, request, confirm')
|
|
208
|
+
.option('--type <type>', 'Message type: meeting, review, notification, status_update')
|
|
209
|
+
.option('--data <json>', 'Structured JSON payload')
|
|
210
|
+
.option('--in-reply-to <id>', 'Message ID being replied to')
|
|
211
|
+
.description('Send a message to an agent or thread')
|
|
157
212
|
.addHelpText('after', `
|
|
158
213
|
EXAMPLES:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
214
|
+
$ tokenrip msg send --to alice "Can you generate the Q3 report?"
|
|
215
|
+
$ tokenrip msg send --to trip1x9a2... "Ready" --intent request
|
|
216
|
+
$ tokenrip msg send --thread 550e8400-... "Looks good" --intent accept
|
|
217
|
+
`)
|
|
218
|
+
.action(wrapCommand(async (body, options) => {
|
|
219
|
+
const { msgSend } = await import('./commands/msg.js');
|
|
220
|
+
await msgSend(body, options);
|
|
221
|
+
}));
|
|
222
|
+
msg
|
|
223
|
+
.command('list')
|
|
224
|
+
.requiredOption('--thread <id>', 'Thread ID to read messages from')
|
|
225
|
+
.option('--since <sequence>', 'Show messages after this sequence number')
|
|
226
|
+
.option('--limit <n>', 'Max messages to return (default: 50, max: 200)')
|
|
227
|
+
.description('List messages in a thread')
|
|
228
|
+
.addHelpText('after', `
|
|
229
|
+
EXAMPLES:
|
|
230
|
+
$ tokenrip msg list --thread 550e8400-...
|
|
231
|
+
$ tokenrip msg list --thread 550e8400-... --since 10 --limit 20
|
|
232
|
+
`)
|
|
233
|
+
.action(wrapCommand(async (options) => {
|
|
234
|
+
const { msgList } = await import('./commands/msg.js');
|
|
235
|
+
await msgList(options);
|
|
236
|
+
}));
|
|
237
|
+
// ── thread commands ──────────────────────────────────────────────────
|
|
238
|
+
const thread = program.command('thread').description('Manage threads');
|
|
239
|
+
thread
|
|
240
|
+
.command('create')
|
|
241
|
+
.option('--participants <agents>', 'Comma-separated agent IDs, contact names, or aliases')
|
|
242
|
+
.option('--message <text>', 'Initial message body')
|
|
243
|
+
.description('Create a new thread')
|
|
244
|
+
.addHelpText('after', `
|
|
245
|
+
EXAMPLES:
|
|
246
|
+
$ tokenrip thread create --participants alice,bob
|
|
247
|
+
$ tokenrip thread create --participants alice --message "Kickoff"
|
|
248
|
+
`)
|
|
249
|
+
.action(wrapCommand(async (options) => {
|
|
250
|
+
const { threadCreate } = await import('./commands/thread.js');
|
|
251
|
+
await threadCreate(options);
|
|
252
|
+
}));
|
|
253
|
+
thread
|
|
254
|
+
.command('share')
|
|
255
|
+
.argument('<uuid>', 'Thread ID to generate a share link for')
|
|
256
|
+
.option('--expires <duration>', 'Token expiry: 30m, 1h, 7d, 30d, etc.')
|
|
257
|
+
.option('--for <agentId>', 'Restrict token to a specific agent (trip1...)')
|
|
258
|
+
.description('Generate a shareable link to view a thread')
|
|
259
|
+
.addHelpText('after', `
|
|
260
|
+
EXAMPLES:
|
|
261
|
+
$ tokenrip thread share 727fb4f2-29a5-4afc-840e-f606a783fade
|
|
262
|
+
$ tokenrip thread share 727fb4f2-... --expires 7d
|
|
263
|
+
`)
|
|
264
|
+
.action(wrapCommand(async (uuid, options) => {
|
|
265
|
+
const { threadShare } = await import('./commands/thread.js');
|
|
266
|
+
await threadShare(uuid, options);
|
|
267
|
+
}));
|
|
268
|
+
// ── contacts commands ────────────────────────────────────────────────
|
|
269
|
+
const contacts = program.command('contacts').description('Manage local agent contacts');
|
|
270
|
+
contacts
|
|
271
|
+
.command('add')
|
|
272
|
+
.argument('<name>', 'Short name for this contact')
|
|
273
|
+
.argument('<agent-id>', 'Agent ID (starts with trip1)')
|
|
274
|
+
.option('--alias <alias>', 'Agent alias (e.g. alice)')
|
|
275
|
+
.option('--notes <text>', 'Notes about this contact')
|
|
276
|
+
.description('Add or update a contact')
|
|
277
|
+
.addHelpText('after', `
|
|
278
|
+
EXAMPLES:
|
|
279
|
+
$ tokenrip contacts add alice trip1x9a2f... --alias alice
|
|
280
|
+
$ tokenrip contacts add bob trip1k7m3d... --notes "Report generator"
|
|
281
|
+
`)
|
|
282
|
+
.action(wrapCommand(async (name, agentId, options) => {
|
|
283
|
+
const { contactsAdd } = await import('./commands/contacts.js');
|
|
284
|
+
await contactsAdd(name, agentId, options);
|
|
285
|
+
}));
|
|
286
|
+
contacts
|
|
287
|
+
.command('list')
|
|
288
|
+
.description('List all contacts')
|
|
289
|
+
.action(wrapCommand(async () => {
|
|
290
|
+
const { contactsList } = await import('./commands/contacts.js');
|
|
291
|
+
await contactsList();
|
|
292
|
+
}));
|
|
293
|
+
contacts
|
|
294
|
+
.command('resolve')
|
|
295
|
+
.argument('<name>', 'Contact name to look up')
|
|
296
|
+
.description('Resolve a contact name to an agent ID')
|
|
297
|
+
.action(wrapCommand(async (name) => {
|
|
298
|
+
const { contactsResolve } = await import('./commands/contacts.js');
|
|
299
|
+
await contactsResolve(name);
|
|
300
|
+
}));
|
|
301
|
+
contacts
|
|
302
|
+
.command('remove')
|
|
303
|
+
.argument('<name>', 'Contact name to remove')
|
|
304
|
+
.description('Remove a contact')
|
|
305
|
+
.action(wrapCommand(async (name) => {
|
|
306
|
+
const { contactsRemove } = await import('./commands/contacts.js');
|
|
307
|
+
await contactsRemove(name);
|
|
308
|
+
}));
|
|
309
|
+
// ── operator commands ───────────────────────────────────────────────
|
|
310
|
+
program
|
|
311
|
+
.command('operator-link')
|
|
312
|
+
.description('Generate a signed URL for operator onboarding or login')
|
|
313
|
+
.option('--expires <duration>', 'Token expiry (default: 5m). E.g. 5m, 1h, 1d')
|
|
314
|
+
.addHelpText('after', `
|
|
315
|
+
EXAMPLES:
|
|
316
|
+
$ tokenrip operator-link
|
|
317
|
+
$ tokenrip operator-link --expires 1h
|
|
167
318
|
|
|
168
|
-
The
|
|
319
|
+
The operator opens the URL in their browser to register or log in.
|
|
320
|
+
No server call needed — the link is signed with your agent's Ed25519 key.
|
|
169
321
|
`)
|
|
170
|
-
.action(wrapCommand(
|
|
322
|
+
.action(wrapCommand(async (options) => {
|
|
323
|
+
const { operatorLink } = await import('./commands/operator-link.js');
|
|
324
|
+
await operatorLink(options);
|
|
325
|
+
}));
|
|
171
326
|
// ── config commands ─────────────────────────────────────────────────
|
|
172
327
|
const config = program.command('config').description('Manage CLI configuration');
|
|
173
328
|
config
|
|
@@ -207,5 +362,9 @@ EXAMPLES:
|
|
|
207
362
|
You can also set TOKENRIP_API_URL instead of using this command.
|
|
208
363
|
`)
|
|
209
364
|
.action(wrapCommand(configSetUrl));
|
|
365
|
+
config
|
|
366
|
+
.command('show')
|
|
367
|
+
.description('Show current configuration')
|
|
368
|
+
.action(wrapCommand(configShow));
|
|
210
369
|
program.parse();
|
|
211
370
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -21,7 +21,8 @@ export function createHttpClient(config = {}) {
|
|
|
21
21
|
if (error.code === 'ECONNABORTED') {
|
|
22
22
|
throw new CliError('TIMEOUT', 'Request timeout — is the Tokenrip server running?');
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
const details = error.code || error.message || 'Unknown error';
|
|
25
|
+
throw new CliError('NETWORK_ERROR', `Network error (${details}) — is the API server running? Try: tokenrip config set-url http://localhost:3434`);
|
|
25
26
|
});
|
|
26
27
|
return client;
|
|
27
28
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,eAAe,GAAG,KAAK,CAAC;AAQ9B,MAAM,UAAU,gBAAgB,CAAC,SAAuB,EAAE;IACxD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,0BAA0B;QACrD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;QAC1C,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAoE,EAAE,EAAE;QACvE,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,sFAAsF,CACvF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,eAAe,GAAG,KAAK,CAAC;AAQ9B,MAAM,UAAU,gBAAgB,CAAC,SAAuB,EAAE;IACxD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,0BAA0B;QACrD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;QAC1C,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAoE,EAAE,EAAE;QACvE,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,sFAAsF,CACvF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;QAC/D,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,kBAAkB,OAAO,mFAAmF,CAAC,CAAC;IACpJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export declare function
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export declare function authRegister(options: {
|
|
2
|
+
alias?: string;
|
|
3
|
+
force?: boolean;
|
|
4
4
|
}): Promise<void>;
|
|
5
|
+
export declare function authCreateKey(): Promise<void>;
|
|
6
|
+
export declare function authWhoami(): Promise<void>;
|
package/dist/commands/auth.js
CHANGED
|
@@ -1,41 +1,86 @@
|
|
|
1
|
-
import { hostname } from 'node:os';
|
|
2
1
|
import { loadConfig, getApiUrl, saveConfig } from '../config.js';
|
|
3
2
|
import { createHttpClient } from '../client.js';
|
|
4
3
|
import { CliError } from '../errors.js';
|
|
5
4
|
import { outputSuccess } from '../output.js';
|
|
6
5
|
import { formatAuthKey } from '../formatters.js';
|
|
7
|
-
|
|
6
|
+
import { generateKeypair, publicKeyToAgentId } from '../crypto.js';
|
|
7
|
+
import { loadIdentity, saveIdentity } from '../identity.js';
|
|
8
|
+
import { requireAuthClient } from '../auth-client.js';
|
|
9
|
+
export async function authRegister(options) {
|
|
10
|
+
const existing = loadIdentity();
|
|
11
|
+
if (existing && !options.force) {
|
|
12
|
+
throw new CliError('IDENTITY_EXISTS', [
|
|
13
|
+
`Already registered as ${existing.agentId}`,
|
|
14
|
+
'To re-register with a new identity, use --force',
|
|
15
|
+
].join('\n'));
|
|
16
|
+
}
|
|
8
17
|
const config = loadConfig();
|
|
9
18
|
const apiUrl = getApiUrl(config);
|
|
10
|
-
const keyName = options.name || `tokenrip-${hostname()}`;
|
|
11
19
|
const client = createHttpClient({ baseUrl: apiUrl });
|
|
20
|
+
const keypair = generateKeypair();
|
|
21
|
+
const agentId = publicKeyToAgentId(keypair.publicKeyHex);
|
|
22
|
+
const body = { public_key: keypair.publicKeyHex };
|
|
23
|
+
if (options.alias)
|
|
24
|
+
body.alias = options.alias;
|
|
25
|
+
try {
|
|
26
|
+
const { data } = await client.post('/v0/agents', body);
|
|
27
|
+
const apiKey = data.data.api_key;
|
|
28
|
+
saveIdentity({
|
|
29
|
+
agentId,
|
|
30
|
+
publicKey: keypair.publicKeyHex,
|
|
31
|
+
secretKey: keypair.secretKeyHex,
|
|
32
|
+
});
|
|
33
|
+
config.apiKey = apiKey;
|
|
34
|
+
saveConfig(config);
|
|
35
|
+
outputSuccess({
|
|
36
|
+
agentId,
|
|
37
|
+
alias: data.data.alias ?? null,
|
|
38
|
+
apiKey,
|
|
39
|
+
message: 'Agent registered',
|
|
40
|
+
identity_file: '~/.config/tokenrip/identity.json',
|
|
41
|
+
config_file: '~/.config/tokenrip/config.json',
|
|
42
|
+
}, formatAuthKey);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error instanceof CliError)
|
|
46
|
+
throw error;
|
|
47
|
+
throw new CliError('REGISTRATION_FAILED', 'Failed to register agent. Is the server running?');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function authCreateKey() {
|
|
51
|
+
const { client } = requireAuthClient();
|
|
52
|
+
try {
|
|
53
|
+
const { data } = await client.post('/v0/agents/revoke-key');
|
|
54
|
+
const apiKey = data.data.api_key;
|
|
55
|
+
const config = loadConfig();
|
|
56
|
+
config.apiKey = apiKey;
|
|
57
|
+
saveConfig(config);
|
|
58
|
+
outputSuccess({
|
|
59
|
+
apiKey,
|
|
60
|
+
message: 'API key regenerated and saved',
|
|
61
|
+
note: 'Previous key has been revoked',
|
|
62
|
+
}, formatAuthKey);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof CliError)
|
|
66
|
+
throw error;
|
|
67
|
+
throw new CliError('KEY_ROTATION_FAILED', 'Failed to regenerate API key.');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export async function authWhoami() {
|
|
71
|
+
const { client } = requireAuthClient();
|
|
12
72
|
try {
|
|
13
|
-
const { data } = await client.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
outputSuccess({
|
|
20
|
-
keyName,
|
|
21
|
-
apiKey,
|
|
22
|
-
message: 'API key created and saved',
|
|
23
|
-
note: 'Keep this key safe — treat it like a password',
|
|
24
|
-
}, formatAuthKey);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
outputSuccess({
|
|
28
|
-
keyName,
|
|
29
|
-
apiKey,
|
|
30
|
-
message: 'API key created',
|
|
31
|
-
note: 'To save it, run: tokenrip config set-key <key>',
|
|
32
|
-
}, formatAuthKey);
|
|
33
|
-
}
|
|
73
|
+
const { data } = await client.get('/v0/agents/me');
|
|
74
|
+
outputSuccess({
|
|
75
|
+
agent_id: data.data.agent_id,
|
|
76
|
+
alias: data.data.alias,
|
|
77
|
+
registered_at: data.data.registered_at,
|
|
78
|
+
});
|
|
34
79
|
}
|
|
35
80
|
catch (error) {
|
|
36
81
|
if (error instanceof CliError)
|
|
37
82
|
throw error;
|
|
38
|
-
throw new CliError('
|
|
83
|
+
throw new CliError('WHOAMI_FAILED', 'Failed to fetch agent profile.');
|
|
39
84
|
}
|
|
40
85
|
}
|
|
41
86
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadConfig, saveConfig } from '../config.js';
|
|
1
|
+
import { loadConfig, saveConfig, getApiUrl, getApiKey } from '../config.js';
|
|
2
2
|
import { outputSuccess } from '../output.js';
|
|
3
3
|
import { formatConfigSaved } from '../formatters.js';
|
|
4
4
|
export async function configSetKey(key) {
|
|
@@ -13,4 +13,15 @@ export async function configSetUrl(url) {
|
|
|
13
13
|
saveConfig(config);
|
|
14
14
|
outputSuccess({ message: 'API URL saved', apiUrl: url }, formatConfigSaved);
|
|
15
15
|
}
|
|
16
|
+
export async function configShow() {
|
|
17
|
+
const config = loadConfig();
|
|
18
|
+
const apiUrl = getApiUrl(config);
|
|
19
|
+
const apiKey = getApiKey(config);
|
|
20
|
+
const hasKey = apiKey ? 'yes (saved)' : 'no (env/not set)';
|
|
21
|
+
outputSuccess({
|
|
22
|
+
apiUrl,
|
|
23
|
+
apiKey: hasKey,
|
|
24
|
+
configFile: '~/.config/tokenrip/config.json',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
16
27
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC3D,aAAa,CAAC;QACZ,MAAM;QACN,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,gCAAgC;KAC7C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function contactsAdd(name: string, agentId: string, options: {
|
|
2
|
+
alias?: string;
|
|
3
|
+
notes?: string;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function contactsList(): Promise<void>;
|
|
6
|
+
export declare function contactsResolve(name: string): Promise<void>;
|
|
7
|
+
export declare function contactsRemove(name: string): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { loadContacts, addContact, removeContact } from '../contacts.js';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
import { outputSuccess } from '../output.js';
|
|
4
|
+
import { formatContacts, formatContactResolved } from '../formatters.js';
|
|
5
|
+
export async function contactsAdd(name, agentId, options) {
|
|
6
|
+
addContact(name, agentId, { alias: options.alias, notes: options.notes });
|
|
7
|
+
outputSuccess({
|
|
8
|
+
name,
|
|
9
|
+
agent_id: agentId,
|
|
10
|
+
alias: options.alias ?? null,
|
|
11
|
+
notes: options.notes ?? null,
|
|
12
|
+
message: `Contact "${name}" saved`,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function contactsList() {
|
|
16
|
+
const contacts = loadContacts();
|
|
17
|
+
outputSuccess(contacts, formatContacts);
|
|
18
|
+
}
|
|
19
|
+
export async function contactsResolve(name) {
|
|
20
|
+
const contacts = loadContacts();
|
|
21
|
+
if (!contacts[name]) {
|
|
22
|
+
throw new CliError('CONTACT_NOT_FOUND', `Contact "${name}" not found`);
|
|
23
|
+
}
|
|
24
|
+
outputSuccess({ name, agent_id: contacts[name].agent_id }, formatContactResolved);
|
|
25
|
+
}
|
|
26
|
+
export async function contactsRemove(name) {
|
|
27
|
+
removeContact(name);
|
|
28
|
+
outputSuccess({ name, message: `Contact "${name}" removed` });
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,OAAe,EACf,OAA2C;IAE3C,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1E,aAAa,CAAC;QACZ,IAAI;QACJ,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;QAC5B,OAAO,EAAE,YAAY,IAAI,SAAS;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,aAAa,CAAC,QAA8C,EAAE,cAAc,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,YAAY,IAAI,aAAa,CAAC,CAAC;IACzE,CAAC;IACD,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,qBAAqB,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,IAAI,WAAW,EAAE,CAAC,CAAC;AAChE,CAAC"}
|