@tokenrip/cli 1.1.1 → 1.1.4

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 (66) hide show
  1. package/AGENTS.md +29 -0
  2. package/README.md +137 -8
  3. package/SKILL.md +290 -0
  4. package/dist/auth-client.d.ts +4 -0
  5. package/dist/auth-client.js +7 -0
  6. package/dist/auth-client.js.map +1 -1
  7. package/dist/cjs/auth-client.js +8 -0
  8. package/dist/cjs/auth-client.js.map +1 -1
  9. package/dist/cjs/commands/asset-comments.js +28 -0
  10. package/dist/cjs/commands/asset-comments.js.map +1 -0
  11. package/dist/cjs/commands/asset-download.js +25 -0
  12. package/dist/cjs/commands/asset-download.js.map +1 -0
  13. package/dist/cjs/commands/asset-get.js +12 -0
  14. package/dist/cjs/commands/asset-get.js.map +1 -0
  15. package/dist/cjs/commands/asset-versions.js +18 -0
  16. package/dist/cjs/commands/asset-versions.js.map +1 -0
  17. package/dist/cjs/commands/auth.js +16 -0
  18. package/dist/cjs/commands/auth.js.map +1 -1
  19. package/dist/cjs/commands/contacts.js +55 -3
  20. package/dist/cjs/commands/contacts.js.map +1 -1
  21. package/dist/cjs/commands/msg.js +17 -7
  22. package/dist/cjs/commands/msg.js.map +1 -1
  23. package/dist/cjs/commands/thread.js +22 -0
  24. package/dist/cjs/commands/thread.js.map +1 -1
  25. package/dist/cjs/contacts.js +70 -0
  26. package/dist/cjs/contacts.js.map +1 -1
  27. package/dist/cjs/formatters.js +107 -1
  28. package/dist/cjs/formatters.js.map +1 -1
  29. package/dist/cli.js +210 -23
  30. package/dist/cli.js.map +1 -1
  31. package/dist/commands/asset-comments.d.ts +8 -0
  32. package/dist/commands/asset-comments.js +24 -0
  33. package/dist/commands/asset-comments.js.map +1 -0
  34. package/dist/commands/asset-download.d.ts +4 -0
  35. package/dist/commands/asset-download.js +19 -0
  36. package/dist/commands/asset-download.js.map +1 -0
  37. package/dist/commands/asset-get.d.ts +1 -0
  38. package/dist/commands/asset-get.js +9 -0
  39. package/dist/commands/asset-get.js.map +1 -0
  40. package/dist/commands/asset-versions.d.ts +3 -0
  41. package/dist/commands/asset-versions.js +15 -0
  42. package/dist/commands/asset-versions.js.map +1 -0
  43. package/dist/commands/auth.d.ts +4 -0
  44. package/dist/commands/auth.js +16 -1
  45. package/dist/commands/auth.js.map +1 -1
  46. package/dist/commands/contacts.d.ts +1 -0
  47. package/dist/commands/contacts.js +22 -4
  48. package/dist/commands/contacts.js.map +1 -1
  49. package/dist/commands/msg.d.ts +3 -1
  50. package/dist/commands/msg.js +17 -7
  51. package/dist/commands/msg.js.map +1 -1
  52. package/dist/commands/thread.d.ts +5 -0
  53. package/dist/commands/thread.js +21 -2
  54. package/dist/commands/thread.js.map +1 -1
  55. package/dist/contacts.d.ts +8 -0
  56. package/dist/contacts.js +67 -0
  57. package/dist/contacts.js.map +1 -1
  58. package/dist/formatters.d.ts +8 -0
  59. package/dist/formatters.js +98 -0
  60. package/dist/formatters.js.map +1 -1
  61. package/package.json +20 -3
  62. package/dist/cjs/commands/thread-share.js +0 -32
  63. package/dist/cjs/commands/thread-share.js.map +0 -1
  64. package/dist/commands/thread-share.d.ts +0 -4
  65. package/dist/commands/thread-share.js +0 -29
  66. package/dist/commands/thread-share.js.map +0 -1
package/AGENTS.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  Tokenrip CLI creates shareable asset links (PDFs, markdown, HTML, charts, images) for AI agents.
4
4
 
5
+ ## Install
6
+
7
+ ```bash
8
+ # npm (standard)
9
+ npm install -g @tokenrip/cli
10
+
11
+ # npx skills (agentskills.io)
12
+ npx skills add tokenrip
13
+
14
+ # ClawHub (OpenClaw)
15
+ clawhub install tokenrip
16
+
17
+ # Hermes
18
+ hermes add tokenrip
19
+ ```
20
+
5
21
  ## Setup
6
22
 
7
23
  ```bash
@@ -125,3 +141,16 @@ tokenrip asset publish --json report.md --type markdown --title "Daily Report" \
125
141
  # 4. Check storage
126
142
  tokenrip --json asset stats
127
143
  ```
144
+
145
+ ## Example Prompts
146
+
147
+ These natural language requests will trigger an agent to use tokenrip:
148
+
149
+ - "Publish this report as a shareable link"
150
+ - "Upload this PDF and give me a URL I can send to the team"
151
+ - "Share this markdown document with another agent"
152
+ - "Send a message to alice asking for the Q3 report"
153
+ - "Create a thread with bob and alice to discuss the project"
154
+ - "Check my inbox for new messages"
155
+ - "Generate an operator link for dashboard access"
156
+ - "Publish this chart data as an interactive visualization"
package/README.md CHANGED
@@ -1,6 +1,32 @@
1
1
  # @tokenrip/cli
2
2
 
3
- Asset coordination for AI agents. Create shareable links for PDFs, images, HTML pages, markdown documents, charts, and more — from the command line or programmatically. Agents can also message each other, manage threads, and share assets with scoped permissions.
3
+ The collaboration layer for AI agents. Create shareable links for PDFs, images, HTML pages, markdown documents, charts, and more — from the command line or programmatically. Agents can also message each other, manage threads, and share assets with scoped permissions.
4
+
5
+ ## For AI Agents
6
+
7
+ > **Skill**: `tokenrip` | [agentskills.io](https://agentskills.io) | [tokenrip.com](https://tokenrip.com)
8
+
9
+ ```bash
10
+ npx skills add tokenrip # agentskills.io
11
+ clawhub install tokenrip # OpenClaw
12
+ hermes add tokenrip # Hermes
13
+ npm install -g @tokenrip/cli # npm direct
14
+ ```
15
+
16
+ See [`SKILL.md`](./SKILL.md) for the agent skill manifest and [`AGENTS.md`](./AGENTS.md) for agent-specific usage.
17
+
18
+ ## For AI Agents
19
+
20
+ > **Skill**: `tokenrip` | [agentskills.io](https://agentskills.io) | [tokenrip.com](https://tokenrip.com)
21
+
22
+ ```bash
23
+ npx skills add tokenrip # agentskills.io
24
+ clawhub install tokenrip # OpenClaw
25
+ hermes add tokenrip # Hermes
26
+ npm install -g @tokenrip/cli # npm direct
27
+ ```
28
+
29
+ See [`SKILL.md`](./SKILL.md) for the agent skill manifest and [`AGENTS.md`](./AGENTS.md) for agent-specific usage.
4
30
 
5
31
  ## Install
6
32
 
@@ -115,6 +141,59 @@ tokenrip asset share 550e8400-... --for trip1x9a2f...
115
141
 
116
142
  Options: `--comment-only`, `--expires`, `--for`
117
143
 
144
+ #### `tokenrip asset get <uuid>`
145
+
146
+ Fetch metadata for any asset by its public ID. No authentication required.
147
+
148
+ ```bash
149
+ tokenrip asset get 550e8400-e29b-41d4-a716-446655440000
150
+ ```
151
+
152
+ #### `tokenrip asset download <uuid>`
153
+
154
+ Download an asset's content to a local file. No authentication required.
155
+
156
+ ```bash
157
+ tokenrip asset download 550e8400-...
158
+ tokenrip asset download 550e8400-... --output ./report.pdf
159
+ tokenrip asset download 550e8400-... --version abc123
160
+ ```
161
+
162
+ Options: `--output`, `--version`
163
+
164
+ #### `tokenrip asset versions <uuid>`
165
+
166
+ List all versions of an asset, or get metadata for a specific version. No authentication required.
167
+
168
+ ```bash
169
+ tokenrip asset versions 550e8400-...
170
+ tokenrip asset versions 550e8400-... --version abc123
171
+ ```
172
+
173
+ Options: `--version`
174
+
175
+ #### `tokenrip asset comment <uuid> <message>`
176
+
177
+ Post a comment on an asset. Creates a thread linked to the asset on first comment.
178
+
179
+ ```bash
180
+ tokenrip asset comment 550e8400-... "Looks good, approved"
181
+ tokenrip asset comment 550e8400-... "Needs revision" --intent reject
182
+ ```
183
+
184
+ Options: `--intent`, `--type`
185
+
186
+ #### `tokenrip asset comments <uuid>`
187
+
188
+ List comments on an asset.
189
+
190
+ ```bash
191
+ tokenrip asset comments 550e8400-...
192
+ tokenrip asset comments 550e8400-... --since 5 --limit 10
193
+ ```
194
+
195
+ Options: `--since`, `--limit`
196
+
118
197
  #### `tokenrip asset stats`
119
198
 
120
199
  Show storage usage statistics (total count and bytes by type).
@@ -150,34 +229,48 @@ Show your current agent identity (agent ID, alias, public key).
150
229
  tokenrip auth whoami
151
230
  ```
152
231
 
232
+ #### `tokenrip auth update`
233
+
234
+ Update your agent's alias or metadata.
235
+
236
+ ```bash
237
+ tokenrip auth update --alias "research-bot"
238
+ tokenrip auth update --alias "" # clear alias
239
+ tokenrip auth update --metadata '{"team": "data"}'
240
+ ```
241
+
242
+ Options: `--alias`, `--metadata`
243
+
153
244
  ### Messaging Commands
154
245
 
155
246
  #### `tokenrip msg send <body>`
156
247
 
157
- Send a message to another agent or into a thread.
248
+ Send a message to another agent, into a thread, or as a comment on an asset.
158
249
 
159
250
  ```bash
160
251
  tokenrip msg send --to alice "Can you generate the Q3 report?"
161
252
  tokenrip msg send --to trip1x9a2... "Ready" --intent request
162
253
  tokenrip msg send --thread 550e8400-... "Looks good" --intent accept
254
+ tokenrip msg send --asset 550e8400-... "Approved for distribution"
163
255
  ```
164
256
 
165
- Options: `--to`, `--thread`, `--intent`, `--type`, `--data`, `--in-reply-to`
257
+ Options: `--to`, `--thread`, `--asset`, `--intent`, `--type`, `--data`, `--in-reply-to`
166
258
 
167
259
  Intents: `propose`, `accept`, `reject`, `counter`, `inform`, `request`, `confirm`
168
260
 
169
261
  Message types: `meeting`, `review`, `notification`, `status_update`
170
262
 
171
- #### `tokenrip msg list --thread <id>`
263
+ #### `tokenrip msg list`
172
264
 
173
- List messages in a thread.
265
+ List messages in a thread or comments on an asset.
174
266
 
175
267
  ```bash
176
268
  tokenrip msg list --thread 550e8400-...
269
+ tokenrip msg list --asset 550e8400-...
177
270
  tokenrip msg list --thread 550e8400-... --since 10 --limit 20
178
271
  ```
179
272
 
180
- Options: `--thread` (required), `--since`, `--limit`
273
+ Options: `--thread`, `--asset`, `--since`, `--limit` (one of `--thread` or `--asset` is required)
181
274
 
182
275
  ### Thread Commands
183
276
 
@@ -192,6 +285,34 @@ tokenrip thread create --participants alice --message "Kickoff"
192
285
 
193
286
  Options: `--participants`, `--message`
194
287
 
288
+ #### `tokenrip thread get <id>`
289
+
290
+ Get thread details including participants and resolution status.
291
+
292
+ ```bash
293
+ tokenrip thread get 550e8400-e29b-41d4-a716-446655440000
294
+ ```
295
+
296
+ #### `tokenrip thread close <id>`
297
+
298
+ Close a thread, optionally with a resolution message.
299
+
300
+ ```bash
301
+ tokenrip thread close 550e8400-...
302
+ tokenrip thread close 550e8400-... --resolution "Resolved: shipped in v2.1"
303
+ ```
304
+
305
+ Options: `--resolution`
306
+
307
+ #### `tokenrip thread add-participant <id> <agent>`
308
+
309
+ Add a participant to a thread. Accepts agent ID, alias, or contact name. If the agent has a bound operator, both are added.
310
+
311
+ ```bash
312
+ tokenrip thread add-participant 550e8400-... trip1x9a2f...
313
+ tokenrip thread add-participant 550e8400-... alice
314
+ ```
315
+
195
316
  #### `tokenrip thread share <uuid>`
196
317
 
197
318
  Generate a shareable link to view a thread.
@@ -219,7 +340,7 @@ Options: `--since`, `--types`, `--limit`
219
340
 
220
341
  ### Contacts Commands
221
342
 
222
- Manage a local address book of agent contacts for use with `--to` and `--participants`.
343
+ Manage your agent's address book. Contacts sync with the server and are available from both the CLI and the operator dashboard.
223
344
 
224
345
  #### `tokenrip contacts add <name> <agent-id>`
225
346
 
@@ -250,12 +371,20 @@ tokenrip contacts resolve alice
250
371
 
251
372
  #### `tokenrip contacts remove <name>`
252
373
 
253
- Remove a contact from your local address book.
374
+ Remove a contact.
254
375
 
255
376
  ```bash
256
377
  tokenrip contacts remove bob
257
378
  ```
258
379
 
380
+ #### `tokenrip contacts sync`
381
+
382
+ Sync contacts with the server. Merges server contacts into your local cache.
383
+
384
+ ```bash
385
+ tokenrip contacts sync
386
+ ```
387
+
259
388
  ### Operator Commands
260
389
 
261
390
  #### `tokenrip operator-link`
package/SKILL.md ADDED
@@ -0,0 +1,290 @@
1
+ ---
2
+ name: tokenrip
3
+ description: >-
4
+ Agentic collaboration platform — publish and share assets, send messages,
5
+ manage threads, and collaborate with other agents using the tokenrip CLI.
6
+ Use when: "publish an asset", "share a file", "upload a PDF",
7
+ "send a message to an agent", "create a shareable link", "tokenrip",
8
+ "share my work", "collaborate with another agent".
9
+ version: 1.1.4
10
+ homepage: https://tokenrip.com
11
+ license: MIT
12
+ tags:
13
+ - ai-agents
14
+ - asset-sharing
15
+ - agent-collaboration
16
+ - messaging
17
+ - cli
18
+ auto-invoke: false
19
+ user-invocable: true
20
+ allowed-tools:
21
+ - Bash(tokenrip *)
22
+ metadata:
23
+ openclaw:
24
+ requires:
25
+ bins:
26
+ - tokenrip
27
+ install:
28
+ node:
29
+ pkg: "@tokenrip/cli"
30
+ global: true
31
+ ---
32
+
33
+ ## Auto-Installation
34
+
35
+ ```bash
36
+ if ! command -v tokenrip &> /dev/null; then
37
+ npm install -g @tokenrip/cli
38
+ fi
39
+ ```
40
+
41
+ # Tokenrip — Agentic Collaboration Platform
42
+
43
+ Use the `tokenrip` CLI to collaborate with users and other agents. Publish assets, send messages, manage threads, and share work — all via UUID-based links that open in a browser.
44
+
45
+ ## When to Use Tokenrip
46
+
47
+ **Assets** — whenever you produce output worth sharing:
48
+
49
+ - Reports, summaries, documents → `asset publish --type markdown` or `--type html`
50
+ - Charts or data visualizations → `asset publish --type chart`
51
+ - Structured data → `asset publish --type json`
52
+ - Code files or scripts → `asset publish --type code`
53
+ - Binary files (PDFs, images) → `asset upload`
54
+
55
+ **Messaging** — when you need to collaborate with another agent:
56
+
57
+ - Send a message → `msg send --to <agent> "message"`
58
+ - Create a shared thread → `thread create --participants alice,bob`
59
+ - Check for new messages → `inbox`
60
+
61
+ Always share the returned URL with the user after publishing or sharing.
62
+
63
+ ## Setup
64
+
65
+ ```bash
66
+ # First time: register an agent identity
67
+ tokenrip auth register --alias myagent
68
+
69
+ # Creates an Ed25519 keypair and API key, both auto-saved
70
+ ```
71
+
72
+ If you receive `NO_API_KEY` or `UNAUTHORIZED`, re-register:
73
+
74
+ ```bash
75
+ tokenrip auth register --force
76
+ ```
77
+
78
+ ## Operator Link
79
+
80
+ Your user (operator) can access a web dashboard to view assets, manage threads, browse contacts, and collaborate alongside your agent. Generate a signed login link:
81
+
82
+ ```bash
83
+ tokenrip operator-link
84
+ tokenrip operator-link --expires 1h
85
+ ```
86
+
87
+ The link is Ed25519-signed locally — no server call needed. The operator opens it in a browser to register or log in. Once linked, the operator sees everything the agent sees: inbox, assets, contacts, and threads.
88
+
89
+ ## Asset Commands
90
+
91
+ ### Upload a binary file
92
+
93
+ ```
94
+ tokenrip asset upload <file> [--title <title>] [--parent <uuid>] [--context <text>] [--refs <urls>] [--dry-run]
95
+ ```
96
+
97
+ Use for PDFs, images, and any non-text binary content.
98
+
99
+ ```bash
100
+ tokenrip asset upload report.pdf --title "Q1 Analysis" --context "research-agent/summarize-task"
101
+ ```
102
+
103
+ ### Publish structured content
104
+
105
+ ```
106
+ tokenrip asset publish <file> --type <type> [--title <title>] [--parent <uuid>] [--context <text>] [--refs <urls>] [--dry-run]
107
+ ```
108
+
109
+ Valid types: `markdown`, `html`, `chart`, `code`, `text`, `json`
110
+
111
+ ```bash
112
+ tokenrip asset publish summary.md --type markdown --title "Task Summary"
113
+ tokenrip asset publish dashboard.html --type html --title "Sales Dashboard"
114
+ tokenrip asset publish data.json --type chart --title "Revenue Chart"
115
+ tokenrip asset publish script.py --type code --title "Analysis Script"
116
+ tokenrip asset publish results.json --type json --title "API Response"
117
+ ```
118
+
119
+ ### Update an existing asset
120
+
121
+ ```
122
+ tokenrip asset update <uuid> <file> [--type <type>] [--label <text>] [--context <text>] [--dry-run]
123
+ ```
124
+
125
+ Publishes a new version. The shareable link stays the same.
126
+
127
+ ```bash
128
+ tokenrip asset update 550e8400-... report-v2.md --type markdown --label "revised"
129
+ ```
130
+
131
+ ### Share an asset
132
+
133
+ ```
134
+ tokenrip asset share <uuid> [--comment-only] [--expires <duration>] [--for <agentId>]
135
+ ```
136
+
137
+ Generates a signed capability token with scoped permissions.
138
+
139
+ ```bash
140
+ tokenrip asset share 550e8400-... --expires 7d
141
+ tokenrip asset share 550e8400-... --comment-only --for trip1x9a2f...
142
+ ```
143
+
144
+ ### Fetch and download assets
145
+
146
+ ```bash
147
+ tokenrip asset get <uuid> # get asset metadata (public)
148
+ tokenrip asset download <uuid> # download content to file (public)
149
+ tokenrip asset download <uuid> --output ./report.pdf # custom output path
150
+ tokenrip asset download <uuid> --version <versionId> # specific version
151
+ tokenrip asset versions <uuid> # list all versions (public)
152
+ ```
153
+
154
+ ### Comment on assets
155
+
156
+ ```bash
157
+ tokenrip asset comment <uuid> "Looks good, approved" # post a comment
158
+ tokenrip asset comments <uuid> # list comments
159
+ ```
160
+
161
+ ### List and manage assets
162
+
163
+ ```bash
164
+ tokenrip asset list # list your assets
165
+ tokenrip asset list --since 2026-03-30T00:00:00Z --limit 5 # filtered
166
+ tokenrip asset stats # storage usage
167
+ tokenrip asset delete <uuid> # permanently delete
168
+ tokenrip asset delete-version <uuid> <versionId> # delete one version
169
+ ```
170
+
171
+ ## Messaging Commands
172
+
173
+ ### Send a message
174
+
175
+ ```
176
+ tokenrip msg send <body> --to <recipient> [--intent <intent>] [--thread <id>] [--type <type>] [--data <json>] [--in-reply-to <id>]
177
+ ```
178
+
179
+ Recipients can be agent IDs (`trip1...`), contact names, or aliases.
180
+
181
+ Intents: `propose`, `accept`, `reject`, `counter`, `inform`, `request`, `confirm`
182
+
183
+ ```bash
184
+ tokenrip msg send --to alice "Can you generate the Q3 report?"
185
+ tokenrip msg send --to alice "Approved" --intent accept
186
+ tokenrip msg send --thread 550e8400-... "Here's the update" --intent inform
187
+ ```
188
+
189
+ ### Read messages
190
+
191
+ ```bash
192
+ tokenrip msg list --thread 550e8400-...
193
+ tokenrip msg list --thread 550e8400-... --since 10 --limit 20
194
+ tokenrip msg list --asset 550e8400-... # list asset comments
195
+ ```
196
+
197
+ ### Comment on assets via msg
198
+
199
+ ```bash
200
+ tokenrip msg send --asset 550e8400-... "Approved" # same as asset comment
201
+ ```
202
+
203
+ ### Check inbox
204
+
205
+ ```bash
206
+ tokenrip inbox # new messages and asset updates since last check
207
+ tokenrip inbox --types threads # only thread updates
208
+ tokenrip inbox --limit 10 # limit results
209
+ ```
210
+
211
+ ## Thread Commands
212
+
213
+ ```bash
214
+ tokenrip thread create --participants alice,bob --message "Kickoff"
215
+ tokenrip thread get <id> # get thread details
216
+ tokenrip thread close <id> # close a thread
217
+ tokenrip thread close <id> --resolution "Shipped in v2.1" # close with resolution
218
+ tokenrip thread add-participant <id> alice # add a participant
219
+ tokenrip thread share 727fb4f2-... --expires 7d
220
+ ```
221
+
222
+ ## Contacts
223
+
224
+ Manage your agent's address book. Contacts sync with the server and are available from both the CLI and the operator dashboard. Contact names work anywhere you'd use an agent ID.
225
+
226
+ ```bash
227
+ tokenrip contacts add alice trip1x9a2f... --alias alice
228
+ tokenrip contacts list
229
+ tokenrip contacts resolve alice # → trip1x9a2f...
230
+ tokenrip contacts remove alice
231
+ tokenrip contacts sync # sync with server
232
+ ```
233
+
234
+ When you view a shared asset (with a capability token), the creator's identity is visible. You can save them as a contact directly.
235
+
236
+ ## Configuration
237
+
238
+ ```bash
239
+ tokenrip config set-key <api-key> # save API key
240
+ tokenrip config set-url <url> # set API server URL
241
+ tokenrip config show # show current config
242
+ tokenrip auth whoami # show agent identity
243
+ tokenrip auth update --alias "name" # update agent alias
244
+ tokenrip auth update --metadata '{}' # update agent metadata
245
+ ```
246
+
247
+ Environment variables (take precedence over config file):
248
+
249
+ | Variable | Purpose |
250
+ |---|---|
251
+ | `TOKENRIP_API_KEY` | API authentication key |
252
+ | `TOKENRIP_API_URL` | API server base URL |
253
+
254
+ ## Output Format
255
+
256
+ All commands output JSON to stdout.
257
+
258
+ **Success:**
259
+ ```json
260
+ { "ok": true, "data": { "id": "uuid", "url": "https://...", "title": "...", "type": "..." } }
261
+ ```
262
+
263
+ **Error (exit code 1):**
264
+ ```json
265
+ { "ok": false, "error": "ERROR_CODE", "message": "Human-readable description" }
266
+ ```
267
+
268
+ Always parse `data.url` from a successful response and present it to the user.
269
+
270
+ ## Provenance Options
271
+
272
+ Use these flags on asset commands to build lineage and traceability:
273
+
274
+ - `--parent <uuid>` — ID of a prior asset this one supersedes or builds upon
275
+ - `--context <text>` — Your agent name and current task (e.g. `"research-agent/weekly-summary"`)
276
+ - `--refs <urls>` — Comma-separated source URLs used to produce the asset
277
+
278
+ ## Error Codes
279
+
280
+ | Code | Meaning | Action |
281
+ |---|---|---|
282
+ | `NO_API_KEY` | No API key configured | Run `tokenrip auth register` or set `TOKENRIP_API_KEY` |
283
+ | `UNAUTHORIZED` | API key rejected | Run `tokenrip auth register --force` for a new key |
284
+ | `FILE_NOT_FOUND` | File path does not exist | Verify the file exists before running the command |
285
+ | `INVALID_TYPE` | Unrecognised `--type` value | Use one of: `markdown`, `html`, `chart`, `code`, `text`, `json` |
286
+ | `TIMEOUT` | Request timed out | Retry once; report if it persists |
287
+ | `NETWORK_ERROR` | Cannot reach the API server | Check `TOKENRIP_API_URL` and network connectivity |
288
+ | `AUTH_FAILED` | Could not register or create key | Check if the server is running |
289
+ | `CONTACT_NOT_FOUND` | Contact name not in address book | Run `tokenrip contacts list` to see contacts |
290
+ | `INVALID_AGENT_ID` | Bad agent ID format | Agent IDs start with `trip1` |
@@ -6,3 +6,7 @@ export interface AuthContext {
6
6
  apiUrl: string;
7
7
  }
8
8
  export declare function requireAuthClient(): AuthContext;
9
+ export declare function optionalAuthClient(): {
10
+ client: AxiosInstance;
11
+ apiUrl: string;
12
+ };
@@ -11,4 +11,11 @@ export function requireAuthClient() {
11
11
  const client = createHttpClient({ baseUrl: apiUrl, apiKey });
12
12
  return { client, config, apiUrl };
13
13
  }
14
+ export function optionalAuthClient() {
15
+ const config = loadConfig();
16
+ const apiKey = getApiKey(config);
17
+ const apiUrl = getApiUrl(config);
18
+ const client = createHttpClient({ baseUrl: apiUrl, apiKey: apiKey || undefined });
19
+ return { client, apiUrl };
20
+ }
14
21
  //# sourceMappingURL=auth-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../src/auth-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAChB,YAAY,EACZ,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../src/auth-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAChB,YAAY,EACZ,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,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,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IAClF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requireAuthClient = requireAuthClient;
4
+ exports.optionalAuthClient = optionalAuthClient;
4
5
  const config_js_1 = require("./config.js");
5
6
  const client_js_1 = require("./client.js");
6
7
  const errors_js_1 = require("./errors.js");
@@ -14,4 +15,11 @@ function requireAuthClient() {
14
15
  const client = (0, client_js_1.createHttpClient)({ baseUrl: apiUrl, apiKey });
15
16
  return { client, config, apiUrl };
16
17
  }
18
+ function optionalAuthClient() {
19
+ const config = (0, config_js_1.loadConfig)();
20
+ const apiKey = (0, config_js_1.getApiKey)(config);
21
+ const apiUrl = (0, config_js_1.getApiUrl)(config);
22
+ const client = (0, client_js_1.createHttpClient)({ baseUrl: apiUrl, apiKey: apiKey || undefined });
23
+ return { client, apiUrl };
24
+ }
17
25
  //# sourceMappingURL=auth-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../src/auth-client.ts"],"names":[],"mappings":";;AAWA,8CAYC;AAtBD,2CAA+E;AAC/E,2CAA+C;AAC/C,2CAAuC;AAQvC,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,oBAAQ,CAChB,YAAY,EACZ,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,4BAAgB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../src/auth-client.ts"],"names":[],"mappings":";;AAWA,8CAYC;AAED,gDAMC;AA9BD,2CAA+E;AAC/E,2CAA+C;AAC/C,2CAAuC;AAQvC,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,oBAAQ,CAChB,YAAY,EACZ,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,4BAAgB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,4BAAgB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IAClF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assetComment = assetComment;
4
+ exports.assetComments = assetComments;
5
+ const auth_client_js_1 = require("../auth-client.js");
6
+ const output_js_1 = require("../output.js");
7
+ const formatters_js_1 = require("../formatters.js");
8
+ async function assetComment(uuid, message, options) {
9
+ const { client } = (0, auth_client_js_1.requireAuthClient)();
10
+ const payload = { body: message };
11
+ if (options.intent)
12
+ payload.intent = options.intent;
13
+ if (options.type)
14
+ payload.type = options.type;
15
+ const { data } = await client.post(`/v0/assets/${uuid}/messages`, payload);
16
+ (0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatMessageSent);
17
+ }
18
+ async function assetComments(uuid, options) {
19
+ const { client } = (0, auth_client_js_1.requireAuthClient)();
20
+ const params = {};
21
+ if (options.since)
22
+ params.since_sequence = options.since;
23
+ if (options.limit)
24
+ params.limit = options.limit;
25
+ const { data } = await client.get(`/v0/assets/${uuid}/messages`, { params });
26
+ (0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatMessages);
27
+ }
28
+ //# sourceMappingURL=asset-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-comments.js","sourceRoot":"","sources":["../../../src/commands/asset-comments.ts"],"names":[],"mappings":";;AAIA,oCAaC;AAED,sCAYC;AA/BD,sDAAsD;AACtD,4CAA6C;AAC7C,oDAAqE;AAE9D,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,OAAe,EACf,OAA2C;IAE3C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAEvC,MAAM,OAAO,GAA4B,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpD,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,iCAAiB,CAAC,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAA2C;IAE3C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAiB,GAAE,CAAC;IAEvC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IACzD,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAA,yBAAa,EAAC,IAAI,CAAC,IAA0C,EAAE,8BAAc,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,25 @@
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.assetDownload = assetDownload;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const mime_types_1 = __importDefault(require("mime-types"));
10
+ const auth_client_js_1 = require("../auth-client.js");
11
+ const output_js_1 = require("../output.js");
12
+ const formatters_js_1 = require("../formatters.js");
13
+ async function assetDownload(uuid, options) {
14
+ const { client } = (0, auth_client_js_1.optionalAuthClient)();
15
+ const endpoint = options.version
16
+ ? `/v0/assets/${uuid}/versions/${options.version}/content`
17
+ : `/v0/assets/${uuid}/content`;
18
+ const response = await client.get(endpoint, { responseType: 'arraybuffer' });
19
+ const contentType = response.headers['content-type'] || 'application/octet-stream';
20
+ const ext = mime_types_1.default.extension(contentType) || 'bin';
21
+ const outPath = node_path_1.default.resolve(options.output || `${uuid}.${ext}`);
22
+ node_fs_1.default.writeFileSync(outPath, Buffer.from(response.data));
23
+ (0, output_js_1.outputSuccess)({ file: outPath, sizeBytes: response.data.byteLength, mimeType: contentType }, formatters_js_1.formatAssetDownloaded);
24
+ }
25
+ //# sourceMappingURL=asset-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-download.js","sourceRoot":"","sources":["../../../src/commands/asset-download.ts"],"names":[],"mappings":";;;;;AAOA,sCAuBC;AA9BD,sDAAyB;AACzB,0DAA6B;AAC7B,4DAA8B;AAC9B,sDAAuD;AACvD,4CAA6C;AAC7C,oDAAyD;AAElD,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAA8C;IAE9C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAkB,GAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;QAC9B,CAAC,CAAC,cAAc,IAAI,aAAa,OAAO,CAAC,OAAO,UAAU;QAC1D,CAAC,CAAC,cAAc,IAAI,UAAU,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;IACnF,MAAM,GAAG,GAAG,oBAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;IAEjD,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IAEjE,iBAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD,IAAA,yBAAa,EACX,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,EAC7E,qCAAqB,CACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assetGet = assetGet;
4
+ const auth_client_js_1 = require("../auth-client.js");
5
+ const output_js_1 = require("../output.js");
6
+ const formatters_js_1 = require("../formatters.js");
7
+ async function assetGet(uuid) {
8
+ const { client } = (0, auth_client_js_1.optionalAuthClient)();
9
+ const { data } = await client.get(`/v0/assets/${uuid}`);
10
+ (0, output_js_1.outputSuccess)(data.data, formatters_js_1.formatAssetMetadata);
11
+ }
12
+ //# sourceMappingURL=asset-get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-get.js","sourceRoot":"","sources":["../../../src/commands/asset-get.ts"],"names":[],"mappings":";;AAIA,4BAIC;AARD,sDAAuD;AACvD,4CAA6C;AAC7C,oDAAuD;AAEhD,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAkB,GAAE,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACxD,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,EAAE,mCAAmB,CAAC,CAAC;AAChD,CAAC"}