@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.
Files changed (93) hide show
  1. package/README.md +248 -35
  2. package/dist/cjs/client.js +2 -1
  3. package/dist/cjs/client.js.map +1 -1
  4. package/dist/cjs/commands/auth.js +72 -25
  5. package/dist/cjs/commands/auth.js.map +1 -1
  6. package/dist/cjs/commands/config.js +12 -0
  7. package/dist/cjs/commands/config.js.map +1 -1
  8. package/dist/cjs/commands/contacts.js +36 -0
  9. package/dist/cjs/commands/contacts.js.map +1 -0
  10. package/dist/cjs/commands/inbox.js +36 -0
  11. package/dist/cjs/commands/inbox.js.map +1 -0
  12. package/dist/cjs/commands/msg.js +51 -0
  13. package/dist/cjs/commands/msg.js.map +1 -0
  14. package/dist/cjs/commands/operator-link.js +32 -0
  15. package/dist/cjs/commands/operator-link.js.map +1 -0
  16. package/dist/cjs/commands/share.js +33 -0
  17. package/dist/cjs/commands/share.js.map +1 -0
  18. package/dist/cjs/commands/thread-share.js +32 -0
  19. package/dist/cjs/commands/thread-share.js.map +1 -0
  20. package/dist/cjs/commands/thread.js +39 -0
  21. package/dist/cjs/commands/thread.js.map +1 -0
  22. package/dist/cjs/config.js +7 -3
  23. package/dist/cjs/config.js.map +1 -1
  24. package/dist/cjs/contacts.js +64 -0
  25. package/dist/cjs/contacts.js.map +1 -0
  26. package/dist/cjs/crypto.js +47 -0
  27. package/dist/cjs/crypto.js.map +1 -0
  28. package/dist/cjs/formatters.js +120 -1
  29. package/dist/cjs/formatters.js.map +1 -1
  30. package/dist/cjs/identity.js +25 -0
  31. package/dist/cjs/identity.js.map +1 -0
  32. package/dist/cjs/index.js +27 -1
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/output.js +11 -11
  35. package/dist/cjs/output.js.map +1 -1
  36. package/dist/cjs/state.js +24 -0
  37. package/dist/cjs/state.js.map +1 -0
  38. package/dist/cli.js +180 -21
  39. package/dist/cli.js.map +1 -1
  40. package/dist/client.js +2 -1
  41. package/dist/client.js.map +1 -1
  42. package/dist/commands/auth.d.ts +5 -3
  43. package/dist/commands/auth.js +70 -25
  44. package/dist/commands/auth.js.map +1 -1
  45. package/dist/commands/config.d.ts +1 -0
  46. package/dist/commands/config.js +12 -1
  47. package/dist/commands/config.js.map +1 -1
  48. package/dist/commands/contacts.d.ts +7 -0
  49. package/dist/commands/contacts.js +30 -0
  50. package/dist/commands/contacts.js.map +1 -0
  51. package/dist/commands/inbox.d.ts +6 -0
  52. package/dist/commands/inbox.js +33 -0
  53. package/dist/commands/inbox.js.map +1 -0
  54. package/dist/commands/msg.d.ts +13 -0
  55. package/dist/commands/msg.js +47 -0
  56. package/dist/commands/msg.js.map +1 -0
  57. package/dist/commands/operator-link.d.ts +3 -0
  58. package/dist/commands/operator-link.js +29 -0
  59. package/dist/commands/operator-link.js.map +1 -0
  60. package/dist/commands/share.d.ts +6 -0
  61. package/dist/commands/share.js +29 -0
  62. package/dist/commands/share.js.map +1 -0
  63. package/dist/commands/thread-share.d.ts +4 -0
  64. package/dist/commands/thread-share.js +29 -0
  65. package/dist/commands/thread-share.js.map +1 -0
  66. package/dist/commands/thread.d.ts +8 -0
  67. package/dist/commands/thread.js +35 -0
  68. package/dist/commands/thread.js.map +1 -0
  69. package/dist/config.d.ts +1 -0
  70. package/dist/config.js +6 -3
  71. package/dist/config.js.map +1 -1
  72. package/dist/contacts.d.ts +16 -0
  73. package/dist/contacts.js +53 -0
  74. package/dist/contacts.js.map +1 -0
  75. package/dist/crypto.d.ts +16 -0
  76. package/dist/crypto.js +40 -0
  77. package/dist/crypto.js.map +1 -0
  78. package/dist/formatters.d.ts +7 -0
  79. package/dist/formatters.js +112 -0
  80. package/dist/formatters.js.map +1 -1
  81. package/dist/identity.d.ts +7 -0
  82. package/dist/identity.js +18 -0
  83. package/dist/identity.js.map +1 -0
  84. package/dist/index.d.ts +5 -0
  85. package/dist/index.js +4 -0
  86. package/dist/index.js.map +1 -1
  87. package/dist/output.d.ts +1 -1
  88. package/dist/output.js +10 -10
  89. package/dist/output.js.map +1 -1
  90. package/dist/state.d.ts +5 -0
  91. package/dist/state.js +17 -0
  92. package/dist/state.js.map +1 -0
  93. package/package.json +3 -1
@@ -1,22 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setForceJson = setForceJson;
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 forceJson = false;
9
- function setForceJson(value) {
10
- forceJson = value;
8
+ let forceHuman = false;
9
+ function setForceHuman(value) {
10
+ forceHuman = value;
11
11
  }
12
12
  function isJsonMode() {
13
- if (forceJson)
14
- return true;
15
- if (process.env.TOKENRIP_OUTPUT === 'json')
16
- return true;
17
- if (!process.stdout.isTTY)
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
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/output.ts"],"names":[],"mappings":";;AAKA,oCAEC;AASD,sCAMC;AAED,kCAcC;AAED,kCASC;AAjDD,2CAAmD;AAGnD,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAgB,YAAY,CAAC,KAAc;IACzC,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,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;CAChE,CAAC"}
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 { wrapCommand, setForceJson } from './output.js';
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 sharing for AI agents')
19
+ .description('Tokenrip — Asset coordination for AI agents')
20
20
  .version(version)
21
- .option('--json', 'Force JSON output even in interactive terminal')
21
+ .option('--human', 'Use human-readable output instead of JSON')
22
22
  .hook('preAction', () => {
23
- if (program.opts().json)
24
- setForceJson(true);
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('Manage API keys and authentication');
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
- .option('--name <name>', 'Friendly name for this key (default: tokenrip-<hostname>)')
155
- .option('--no-save', 'Create key but do not auto-save to config')
156
- .description('Create a new API key')
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
- Create a key with a default name (auto-saved):
160
- $ tokenrip auth create-key
161
-
162
- Create a key with a custom name:
163
- $ tokenrip auth create-key --name "My Agent"
164
-
165
- Create a key without auto-saving:
166
- $ tokenrip auth create-key --no-save
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 API key is sensitive treat it like a password.
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(authCreateKey));
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":"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"}
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
- throw new CliError('NETWORK_ERROR', 'Network error is the Tokenrip server running?');
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
  }
@@ -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,iDAAiD,CAAC,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
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"}
@@ -1,4 +1,6 @@
1
- export declare function authCreateKey(options: {
2
- name?: string;
3
- save?: boolean;
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>;
@@ -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
- export async function authCreateKey(options) {
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.post('/v0/auth/keys', { name: keyName });
14
- const apiKey = data.data.apiKey;
15
- // Auto-save the key if requested or not explicitly disabled
16
- if (options.save !== false) {
17
- config.apiKey = apiKey;
18
- saveConfig(config);
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('AUTH_FAILED', 'Failed to create API key. Is the server running?');
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,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0C;IAC5E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,QAAQ,EAAE,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAEhC,4DAA4D;QAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,aAAa,CAAC;gBACZ,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,+CAA+C;aACtD,EAAE,aAAa,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,aAAa,CAAC;gBACZ,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE,gDAAgD;aACvD,EAAE,aAAa,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ;YAAE,MAAM,KAAK,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,kDAAkD,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export declare function configSetKey(key: string): Promise<void>;
2
2
  export declare function configSetUrl(url: string): Promise<void>;
3
+ export declare function configShow(): Promise<void>;
@@ -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;AACtD,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"}
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"}
@@ -0,0 +1,6 @@
1
+ export declare function inbox(options: {
2
+ since?: string;
3
+ types?: string;
4
+ limit?: string;
5
+ human?: boolean;
6
+ }): Promise<void>;