@tokenrip/cli 1.3.13 → 1.4.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 (149) hide show
  1. package/AGENTS.md +86 -86
  2. package/README.md +10 -10
  3. package/SKILL.md +136 -136
  4. package/dist/cjs/client.js +1 -1
  5. package/dist/cjs/client.js.map +1 -1
  6. package/dist/cjs/commands/archive.js +9 -9
  7. package/dist/cjs/commands/archive.js.map +1 -1
  8. package/dist/cjs/commands/artifact-cat.js +15 -0
  9. package/dist/cjs/commands/artifact-cat.js.map +1 -0
  10. package/dist/cjs/commands/artifact-comments.js +33 -0
  11. package/dist/cjs/commands/artifact-comments.js.map +1 -0
  12. package/dist/cjs/commands/artifact-download.js +76 -0
  13. package/dist/cjs/commands/artifact-download.js.map +1 -0
  14. package/dist/cjs/commands/artifact-get.js +14 -0
  15. package/dist/cjs/commands/artifact-get.js.map +1 -0
  16. package/dist/cjs/commands/artifact-versions.js +20 -0
  17. package/dist/cjs/commands/artifact-versions.js.map +1 -0
  18. package/dist/cjs/commands/collection.js +4 -4
  19. package/dist/cjs/commands/collection.js.map +1 -1
  20. package/dist/cjs/commands/delete-version.js +3 -3
  21. package/dist/cjs/commands/delete-version.js.map +1 -1
  22. package/dist/cjs/commands/delete.js +7 -7
  23. package/dist/cjs/commands/delete.js.map +1 -1
  24. package/dist/cjs/commands/folder.js +4 -4
  25. package/dist/cjs/commands/folder.js.map +1 -1
  26. package/dist/cjs/commands/fork.js +4 -4
  27. package/dist/cjs/commands/fork.js.map +1 -1
  28. package/dist/cjs/commands/mountedagent.js +23 -23
  29. package/dist/cjs/commands/mountedagent.js.map +1 -1
  30. package/dist/cjs/commands/msg.js +11 -11
  31. package/dist/cjs/commands/msg.js.map +1 -1
  32. package/dist/cjs/commands/patch.js +4 -4
  33. package/dist/cjs/commands/patch.js.map +1 -1
  34. package/dist/cjs/commands/publish.js +16 -16
  35. package/dist/cjs/commands/publish.js.map +1 -1
  36. package/dist/cjs/commands/search.js +2 -2
  37. package/dist/cjs/commands/search.js.map +1 -1
  38. package/dist/cjs/commands/share.js +4 -4
  39. package/dist/cjs/commands/share.js.map +1 -1
  40. package/dist/cjs/commands/stats.js +1 -1
  41. package/dist/cjs/commands/stats.js.map +1 -1
  42. package/dist/cjs/commands/status.js +2 -2
  43. package/dist/cjs/commands/status.js.map +1 -1
  44. package/dist/cjs/commands/thread.js +2 -2
  45. package/dist/cjs/commands/thread.js.map +1 -1
  46. package/dist/cjs/commands/tour.js +2 -2
  47. package/dist/cjs/commands/tour.js.map +1 -1
  48. package/dist/cjs/commands/update.js +3 -3
  49. package/dist/cjs/commands/update.js.map +1 -1
  50. package/dist/cjs/commands/upload.js +4 -4
  51. package/dist/cjs/commands/upload.js.map +1 -1
  52. package/dist/cjs/formatters.js +63 -63
  53. package/dist/cjs/formatters.js.map +1 -1
  54. package/dist/cjs/index.js +2 -2
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/output.js +2 -2
  57. package/dist/cjs/output.js.map +1 -1
  58. package/dist/cjs/parse-artifact-id.js +13 -0
  59. package/dist/cjs/parse-artifact-id.js.map +1 -0
  60. package/dist/cjs/refs.js +2 -2
  61. package/dist/cjs/refs.js.map +1 -1
  62. package/dist/cjs/tour/agent-script.js +5 -5
  63. package/dist/cjs/tour/steps.js +13 -13
  64. package/dist/cjs/tour/steps.js.map +1 -1
  65. package/dist/cli.js +218 -217
  66. package/dist/cli.js.map +1 -1
  67. package/dist/client.js +1 -1
  68. package/dist/client.js.map +1 -1
  69. package/dist/commands/archive.d.ts +2 -2
  70. package/dist/commands/archive.js +7 -7
  71. package/dist/commands/archive.js.map +1 -1
  72. package/dist/commands/artifact-cat.d.ts +3 -0
  73. package/dist/commands/artifact-cat.js +12 -0
  74. package/dist/commands/artifact-cat.js.map +1 -0
  75. package/dist/commands/artifact-comments.d.ts +9 -0
  76. package/dist/commands/artifact-comments.js +29 -0
  77. package/dist/commands/artifact-comments.js.map +1 -0
  78. package/dist/commands/artifact-download.d.ts +5 -0
  79. package/dist/commands/artifact-download.js +70 -0
  80. package/dist/commands/artifact-download.js.map +1 -0
  81. package/dist/commands/artifact-get.d.ts +1 -0
  82. package/dist/commands/artifact-get.js +11 -0
  83. package/dist/commands/artifact-get.js.map +1 -0
  84. package/dist/commands/artifact-versions.d.ts +3 -0
  85. package/dist/commands/artifact-versions.js +17 -0
  86. package/dist/commands/artifact-versions.js.map +1 -0
  87. package/dist/commands/collection.js +4 -4
  88. package/dist/commands/collection.js.map +1 -1
  89. package/dist/commands/delete-version.js +3 -3
  90. package/dist/commands/delete-version.js.map +1 -1
  91. package/dist/commands/delete.d.ts +1 -1
  92. package/dist/commands/delete.js +7 -7
  93. package/dist/commands/delete.js.map +1 -1
  94. package/dist/commands/folder.d.ts +1 -1
  95. package/dist/commands/folder.js +3 -3
  96. package/dist/commands/folder.js.map +1 -1
  97. package/dist/commands/fork.d.ts +1 -1
  98. package/dist/commands/fork.js +4 -4
  99. package/dist/commands/fork.js.map +1 -1
  100. package/dist/commands/mountedagent.d.ts +6 -6
  101. package/dist/commands/mountedagent.js +21 -21
  102. package/dist/commands/mountedagent.js.map +1 -1
  103. package/dist/commands/msg.d.ts +2 -2
  104. package/dist/commands/msg.js +11 -11
  105. package/dist/commands/msg.js.map +1 -1
  106. package/dist/commands/patch.js +5 -5
  107. package/dist/commands/patch.js.map +1 -1
  108. package/dist/commands/publish.js +17 -17
  109. package/dist/commands/publish.js.map +1 -1
  110. package/dist/commands/search.d.ts +1 -1
  111. package/dist/commands/search.js +2 -2
  112. package/dist/commands/search.js.map +1 -1
  113. package/dist/commands/share.d.ts +1 -1
  114. package/dist/commands/share.js +4 -4
  115. package/dist/commands/share.js.map +1 -1
  116. package/dist/commands/stats.js +1 -1
  117. package/dist/commands/stats.js.map +1 -1
  118. package/dist/commands/status.js +3 -3
  119. package/dist/commands/status.js.map +1 -1
  120. package/dist/commands/thread.d.ts +1 -1
  121. package/dist/commands/thread.js +2 -2
  122. package/dist/commands/thread.js.map +1 -1
  123. package/dist/commands/tour.js +2 -2
  124. package/dist/commands/tour.js.map +1 -1
  125. package/dist/commands/update.js +3 -3
  126. package/dist/commands/update.js.map +1 -1
  127. package/dist/commands/upload.js +5 -5
  128. package/dist/commands/upload.js.map +1 -1
  129. package/dist/formatters.d.ts +8 -8
  130. package/dist/formatters.js +53 -53
  131. package/dist/formatters.js.map +1 -1
  132. package/dist/index.d.ts +1 -1
  133. package/dist/index.js +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/output.js +2 -2
  136. package/dist/output.js.map +1 -1
  137. package/dist/parse-artifact-id.d.ts +1 -0
  138. package/dist/parse-artifact-id.js +10 -0
  139. package/dist/parse-artifact-id.js.map +1 -0
  140. package/dist/refs.d.ts +1 -1
  141. package/dist/refs.js +2 -2
  142. package/dist/refs.js.map +1 -1
  143. package/dist/tour/agent-script.d.ts +1 -1
  144. package/dist/tour/agent-script.js +5 -5
  145. package/dist/tour/state.d.ts +1 -1
  146. package/dist/tour/steps.d.ts +3 -3
  147. package/dist/tour/steps.js +13 -13
  148. package/dist/tour/steps.js.map +1 -1
  149. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -5,20 +5,20 @@ import { configSetKey, configSetUrl, configShow } from './commands/config.js';
5
5
  import { upload } from './commands/upload.js';
6
6
  import { publish } from './commands/publish.js';
7
7
  import { status } from './commands/status.js';
8
- import { deleteAsset } from './commands/delete.js';
9
- import { archiveAsset, unarchiveAsset } from './commands/archive.js';
10
- import { forkAsset } from './commands/fork.js';
8
+ import { deleteArtifact } from './commands/delete.js';
9
+ import { archiveArtifact, unarchiveArtifact } from './commands/archive.js';
10
+ import { forkArtifact } from './commands/fork.js';
11
11
  import { update } from './commands/update.js';
12
12
  import { deleteVersion } from './commands/delete-version.js';
13
13
  import { stats } from './commands/stats.js';
14
14
  import { share } from './commands/share.js';
15
- import { assetGet } from './commands/asset-get.js';
16
- import { assetDownload } from './commands/asset-download.js';
17
- import { assetCat } from './commands/asset-cat.js';
18
- import { assetVersions } from './commands/asset-versions.js';
19
- import { assetComment, assetComments } from './commands/asset-comments.js';
15
+ import { artifactGet } from './commands/artifact-get.js';
16
+ import { artifactDownload } from './commands/artifact-download.js';
17
+ import { artifactCat } from './commands/artifact-cat.js';
18
+ import { artifactVersions } from './commands/artifact-versions.js';
19
+ import { artifactComment, artifactComments } from './commands/artifact-comments.js';
20
20
  import { patch } from './commands/patch.js';
21
- import { mountedAgentAssets, mountedAgentDelete, mountedAgentEnd, mountedAgentFork, mountedAgentList, mountedAgentLoad, mountedAgentMount, mountedAgentMountAssets, mountedAgentMountContext, mountedAgentMountRename, mountedAgentMounts, mountedAgentPublish, mountedAgentPublishToggle, mountedAgentRecord, mountedAgentRewriteAsset, mountedAgentSetDisplay, mountedAgentSetFeatured, mountedAgentShow, mountedAgentShowMount, mountedAgentUnmount, mountedAgentUnpublish } from './commands/mountedagent.js';
21
+ import { mountedAgentArtifacts, mountedAgentDelete, mountedAgentEnd, mountedAgentFork, mountedAgentList, mountedAgentLoad, mountedAgentMount, mountedAgentMountArtifacts, mountedAgentMountContext, mountedAgentMountRename, mountedAgentMounts, mountedAgentPublish, mountedAgentPublishToggle, mountedAgentRecord, mountedAgentRewriteArtifact, mountedAgentSetDisplay, mountedAgentSetFeatured, mountedAgentShow, mountedAgentShowMount, mountedAgentUnmount, mountedAgentUnpublish } from './commands/mountedagent.js';
22
22
  import { adminMountedAgentList, adminMountedAgentSessions, adminMountedAgentSetFeatured, adminMountedAgentShow, adminMountedAgentUnpublish } from './commands/admin-mountedagent.js';
23
23
  import { tour, tourNext, tourRestart } from './commands/tour.js';
24
24
  import { wrapCommand, setForceJson, setConfigHuman, outputSuccess } from './output.js';
@@ -43,44 +43,45 @@ program
43
43
  setAgentOverride(opts.agent);
44
44
  }
45
45
  });
46
- // ── asset commands ──────────────────────────────────────────────────
47
- const asset = program
48
- .command('asset')
49
- .description('Create, manage, and inspect assets');
50
- asset
46
+ // ── artifact commands ──────────────────────────────────────────────────
47
+ const artifact = program
48
+ .command('artifact')
49
+ .alias('art')
50
+ .description('Create, manage, and inspect artifacts');
51
+ artifact
51
52
  .command('upload')
52
53
  .argument('<file>', 'File path to upload (PDF, image, document, etc.)')
53
- .option('--title <title>', 'Display title for the asset')
54
- .option('--parent <uuid>', 'Parent asset ID for lineage tracking')
54
+ .option('--title <title>', 'Display title for the artifact')
55
+ .option('--parent <uuid>', 'Parent artifact ID for lineage tracking')
55
56
  .option('--context <text>', 'Creator context (your agent name, task, etc.)')
56
57
  .option('--refs <urls>', 'Comma-separated input reference URLs')
57
- .option('--team <slugs>', 'Comma-separated team slugs to share this asset with')
58
+ .option('--team <slugs>', 'Comma-separated team slugs to share this artifact with')
58
59
  .option('--folder <slug>', 'File into folder')
59
60
  .option('--dry-run', 'Validate inputs without uploading')
60
61
  .description('Upload a file and get a shareable link')
61
62
  .addHelpText('after', `
62
63
  EXAMPLES:
63
- $ rip asset upload report.pdf --title "Agent Analysis"
64
- $ rip asset upload chart.png --context "Claude Agent 1" \\
64
+ $ rip artifact upload report.pdf --title "Agent Analysis"
65
+ $ rip artifact upload chart.png --context "Claude Agent 1" \\
65
66
  --refs "https://source.example.com,https://another.com"
66
67
  `)
67
68
  .action(wrapCommand(upload));
68
- asset
69
+ artifact
69
70
  .command('publish')
70
71
  .argument('[file]', 'File containing the content to publish (omit if using --content)')
71
72
  .requiredOption('--type <type>', 'Content type: markdown, html, chart, code, text, json, csv, or collection')
72
- .option('--title <title>', 'Display title for the asset')
73
+ .option('--title <title>', 'Display title for the artifact')
73
74
  .option('--content <string>', 'Inline content to publish (alternative to a file; requires --title)')
74
- .option('--alias <alias>', 'Human-readable alias for the asset URL')
75
- .option('--parent <uuid>', 'Parent asset ID for lineage tracking')
75
+ .option('--alias <alias>', 'Human-readable alias for the artifact URL')
76
+ .option('--parent <uuid>', 'Parent artifact ID for lineage tracking')
76
77
  .option('--context <text>', 'Creator context (your agent name, task, etc.)')
77
78
  .option('--refs <urls>', 'Comma-separated input reference URLs')
78
79
  .option('--schema <json>', 'Column schema JSON (for collections, or to type CSV columns on import)')
79
80
  .option('--headers', 'CSV has a header row — use it for column names (pairs with --from-csv)')
80
81
  .option('--from-csv', 'Parse the file as CSV and populate a new collection (pairs with --type collection)')
81
- .option('--team <slugs>', 'Comma-separated team slugs to share this asset with')
82
+ .option('--team <slugs>', 'Comma-separated team slugs to share this artifact with')
82
83
  .option('--folder <slug>', 'File into folder')
83
- .option('--metadata <json>', 'Arbitrary metadata JSON object (merged into asset metadata)')
84
+ .option('--metadata <json>', 'Arbitrary metadata JSON object (merged into artifact metadata)')
84
85
  .option('--dry-run', 'Validate inputs without publishing')
85
86
  .description('Publish structured content with rich rendering support')
86
87
  .addHelpText('after', `
@@ -95,260 +96,260 @@ CONTENT TYPES:
95
96
  collection - Structured data table with row-level API (requires --schema or --from-csv)
96
97
 
97
98
  EXAMPLES:
98
- $ rip asset publish analysis.md --type markdown --title "Summary"
99
- $ rip asset publish data.json --type chart \\
99
+ $ rip artifact publish analysis.md --type markdown --title "Summary"
100
+ $ rip artifact publish data.json --type chart \\
100
101
  --context "Data viz agent" --refs "https://api.example.com"
101
- $ rip asset publish data.csv --type csv --title "Q1 leads"
102
- $ rip asset publish schema.json --type collection --title "Research"
103
- $ rip asset publish _ --type collection --title "Research" \\
102
+ $ rip artifact publish data.csv --type csv --title "Q1 leads"
103
+ $ rip artifact publish schema.json --type collection --title "Research"
104
+ $ rip artifact publish _ --type collection --title "Research" \\
104
105
  --schema '[{"name":"company","type":"text"},{"name":"signal","type":"text"}]'
105
- $ rip asset publish leads.csv --type collection --from-csv --headers \\
106
+ $ rip artifact publish leads.csv --type collection --from-csv --headers \\
106
107
  --title "Leads from CSV"
107
108
  `)
108
109
  .action(wrapCommand(publish));
109
- asset
110
+ artifact
110
111
  .command('list')
111
- .option('--since <iso-date>', 'Only show assets modified after this timestamp (ISO 8601)')
112
- .option('--limit <n>', 'Maximum number of assets to return (default: 20)', '20')
113
- .option('--type <type>', 'Filter by asset type (markdown, html, chart, code, text, file)')
114
- .option('--archived', 'Show only archived assets')
115
- .option('--include-archived', 'Include archived assets alongside active ones')
112
+ .option('--since <iso-date>', 'Only show artifacts modified after this timestamp (ISO 8601)')
113
+ .option('--limit <n>', 'Maximum number of artifacts to return (default: 20)', '20')
114
+ .option('--type <type>', 'Filter by artifact type (markdown, html, chart, code, text, file)')
115
+ .option('--archived', 'Show only archived artifacts')
116
+ .option('--include-archived', 'Include archived artifacts alongside active ones')
116
117
  .option('--folder <slug>', 'Filter by folder')
117
- .option('--unfiled', 'Show only unfiled assets')
118
- .option('--team <slug>', 'Filter to team assets')
119
- .description('List your published assets and their metadata')
118
+ .option('--unfiled', 'Show only unfiled artifacts')
119
+ .option('--team <slug>', 'Filter to team artifacts')
120
+ .description('List your published artifacts and their metadata')
120
121
  .addHelpText('after', `
121
122
  EXAMPLES:
122
- $ rip asset list
123
- $ rip asset list --since 2026-03-30T00:00:00Z
124
- $ rip asset list --type markdown --limit 5
125
- $ rip asset list --archived
126
- $ rip asset list --include-archived
127
- $ rip asset list --folder reports
128
- $ rip asset list --unfiled
129
- $ rip asset list --team acme
130
- $ rip asset list --team acme --folder reports
123
+ $ rip artifact list
124
+ $ rip artifact list --since 2026-03-30T00:00:00Z
125
+ $ rip artifact list --type markdown --limit 5
126
+ $ rip artifact list --archived
127
+ $ rip artifact list --include-archived
128
+ $ rip artifact list --folder reports
129
+ $ rip artifact list --unfiled
130
+ $ rip artifact list --team acme
131
+ $ rip artifact list --team acme --folder reports
131
132
  `)
132
133
  .action(wrapCommand(status));
133
- asset
134
+ artifact
134
135
  .command('delete')
135
- .argument('<identifier>', 'Asset UUID, alias, or full URL (https://tokenrip.com/s/...)')
136
+ .argument('<identifier>', 'Artifact UUID, alias, or full URL (https://tokenrip.com/s/...)')
136
137
  .option('--dry-run', 'Show what would be deleted without deleting')
137
- .description('Permanently delete an asset and its shareable link')
138
+ .description('Permanently delete an artifact and its shareable link')
138
139
  .addHelpText('after', `
139
140
  EXAMPLES:
140
- $ rip asset delete 550e8400-e29b-41d4-a716-446655440000
141
- $ rip asset delete my-alias
142
- $ rip asset delete https://tokenrip.com/s/my-alias
141
+ $ rip artifact delete 550e8400-e29b-41d4-a716-446655440000
142
+ $ rip artifact delete my-alias
143
+ $ rip artifact delete https://tokenrip.com/s/my-alias
143
144
 
144
145
  CAUTION:
145
- This permanently removes the asset and its shareable link.
146
+ This permanently removes the artifact and its shareable link.
146
147
  This action cannot be undone.
147
148
  `)
148
- .action(wrapCommand(deleteAsset));
149
- asset
149
+ .action(wrapCommand(deleteArtifact));
150
+ artifact
150
151
  .command('archive')
151
- .argument('<identifier>', 'Asset UUID, alias, or full URL (https://tokenrip.com/s/...)')
152
- .description('Archive an asset (hidden from listings but still accessible by ID)')
152
+ .argument('<identifier>', 'Artifact UUID, alias, or full URL (https://tokenrip.com/s/...)')
153
+ .description('Archive an artifact (hidden from listings but still accessible by ID)')
153
154
  .addHelpText('after', `
154
155
  EXAMPLES:
155
- $ rip asset archive 550e8400-e29b-41d4-a716-446655440000
156
- $ rip asset archive my-alias
157
- $ rip asset archive https://tokenrip.com/s/my-alias
156
+ $ rip artifact archive 550e8400-e29b-41d4-a716-446655440000
157
+ $ rip artifact archive my-alias
158
+ $ rip artifact archive https://tokenrip.com/s/my-alias
158
159
 
159
- Archived assets are hidden from listings and searches by default,
160
+ Archived artifacts are hidden from listings and searches by default,
160
161
  but remain accessible by ID and can be unarchived at any time.
161
162
  `)
162
- .action(wrapCommand(archiveAsset));
163
- asset
163
+ .action(wrapCommand(archiveArtifact));
164
+ artifact
164
165
  .command('unarchive')
165
- .argument('<identifier>', 'Asset UUID, alias, or full URL (https://tokenrip.com/s/...)')
166
- .description('Unarchive an asset, restoring it to published state')
166
+ .argument('<identifier>', 'Artifact UUID, alias, or full URL (https://tokenrip.com/s/...)')
167
+ .description('Unarchive an artifact, restoring it to published state')
167
168
  .addHelpText('after', `
168
169
  EXAMPLES:
169
- $ rip asset unarchive 550e8400-e29b-41d4-a716-446655440000
170
- $ rip asset unarchive my-alias
170
+ $ rip artifact unarchive 550e8400-e29b-41d4-a716-446655440000
171
+ $ rip artifact unarchive my-alias
171
172
  `)
172
- .action(wrapCommand(unarchiveAsset));
173
- asset
173
+ .action(wrapCommand(unarchiveArtifact));
174
+ artifact
174
175
  .command('fork')
175
- .argument('<identifier>', 'Asset public ID, alias, or scoped alias (~owner/alias) to fork')
176
+ .argument('<identifier>', 'Artifact public ID, alias, or scoped alias (~owner/alias) to fork')
176
177
  .option('--version <versionId>', 'Fork a specific version (defaults to latest)')
177
- .option('--title <title>', 'Title for the forked asset (defaults to original)')
178
+ .option('--title <title>', 'Title for the forked artifact (defaults to original)')
178
179
  .option('--folder <folder>', 'Folder slug to file the fork into')
179
- .description('Create your own copy of an existing asset')
180
+ .description('Create your own copy of an existing artifact')
180
181
  .addHelpText('after', `
181
182
  EXAMPLES:
182
- $ rip asset fork 550e8400-e29b-41d4-a716-446655440000
183
- $ rip asset fork my-skill --title "My Custom Skill"
184
- $ rip asset fork '~alice/dashboard' --title "My Dashboard"
185
- $ rip asset fork 550e8400 --version abc123 --folder tools
183
+ $ rip artifact fork 550e8400-e29b-41d4-a716-446655440000
184
+ $ rip artifact fork my-skill --title "My Custom Skill"
185
+ $ rip artifact fork '~alice/dashboard' --title "My Dashboard"
186
+ $ rip artifact fork 550e8400 --version abc123 --folder tools
186
187
  `)
187
- .action(wrapCommand(forkAsset));
188
- asset
188
+ .action(wrapCommand(forkArtifact));
189
+ artifact
189
190
  .command('update')
190
- .argument('<uuid>', 'Asset public ID')
191
+ .argument('<uuid>', 'Artifact public ID')
191
192
  .argument('<file>', 'File containing the new version content')
192
193
  .option('--type <type>', 'Content type (markdown, html, chart, code, text, json, csv) — omit for binary file upload')
193
194
  .option('--description <text>', 'Version description')
194
195
  .option('--context <text>', 'Creator context (your agent name, task, etc.)')
195
196
  .option('--dry-run', 'Validate without publishing')
196
- .description('Publish a new version of an existing asset')
197
+ .description('Publish a new version of an existing artifact')
197
198
  .addHelpText('after', `
198
199
  EXAMPLES:
199
- $ rip asset update 550e8400-... report-v2.md --type markdown
200
- $ rip asset update 550e8400-... chart.png --description "with axes fixed"
200
+ $ rip artifact update 550e8400-... report-v2.md --type markdown
201
+ $ rip artifact update 550e8400-... chart.png --description "with axes fixed"
201
202
  `)
202
203
  .action(wrapCommand(update));
203
- asset
204
+ artifact
204
205
  .command('delete-version')
205
- .argument('<uuid>', 'Asset ID')
206
+ .argument('<uuid>', 'Artifact ID')
206
207
  .argument('<versionId>', 'Version ID to delete')
207
208
  .option('--dry-run', 'Show what would be deleted without deleting')
208
- .description('Delete a specific version of an asset')
209
+ .description('Delete a specific version of an artifact')
209
210
  .addHelpText('after', `
210
211
  EXAMPLES:
211
- $ rip asset delete-version 550e8400-... 660f9500-...
212
+ $ rip artifact delete-version 550e8400-... 660f9500-...
212
213
 
213
214
  CAUTION:
214
215
  This permanently removes the version content.
215
- Cannot delete the last remaining version — delete the asset instead.
216
+ Cannot delete the last remaining version — delete the artifact instead.
216
217
  `)
217
218
  .action(wrapCommand(deleteVersion));
218
- asset
219
+ artifact
219
220
  .command('share')
220
- .argument('<uuid>', 'Asset public ID to generate a share link for')
221
+ .argument('<uuid>', 'Artifact public ID to generate a share link for')
221
222
  .option('--comment-only', 'Only allow commenting (no version creation)')
222
223
  .option('--expires <duration>', 'Token expiry: 30m, 1h, 7d, 30d, etc.')
223
224
  .option('--for <agentId>', 'Restrict token to a specific agent (rip1...)')
224
225
  .description('Generate a shareable link with scoped permissions')
225
226
  .addHelpText('after', `
226
227
  EXAMPLES:
227
- $ rip asset share 550e8400-e29b-41d4-a716-446655440000
228
- $ rip asset share 550e8400-... --comment-only --expires 7d
229
- $ rip asset share 550e8400-... --for rip1x9a2f...
228
+ $ rip artifact share 550e8400-e29b-41d4-a716-446655440000
229
+ $ rip artifact share 550e8400-... --comment-only --expires 7d
230
+ $ rip artifact share 550e8400-... --for rip1x9a2f...
230
231
  `)
231
232
  .action(wrapCommand(share));
232
- asset
233
+ artifact
233
234
  .command('stats')
234
235
  .description('Show storage usage statistics')
235
236
  .addHelpText('after', `
236
237
  EXAMPLES:
237
- $ rip asset stats
238
+ $ rip artifact stats
238
239
 
239
- Shows total asset count and storage bytes broken down by type.
240
+ Shows total artifact count and storage bytes broken down by type.
240
241
  `)
241
242
  .action(wrapCommand(stats));
242
- asset
243
+ artifact
243
244
  .command('get')
244
- .argument('<identifier>', 'Asset UUID, alias, scoped alias (~owner/alias), or full URL')
245
- .description('View details and permissions for any asset')
245
+ .argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
246
+ .description('View details and permissions for any artifact')
246
247
  .addHelpText('after', `
247
248
  EXAMPLES:
248
- $ rip asset get 550e8400-e29b-41d4-a716-446655440000
249
- $ rip asset get my-alias
250
- $ rip asset get '~alice/dashboard'
251
- $ rip asset get https://tokenrip.com/s/550e8400-e29b-41d4-a716-446655440000
249
+ $ rip artifact get 550e8400-e29b-41d4-a716-446655440000
250
+ $ rip artifact get my-alias
251
+ $ rip artifact get '~alice/dashboard'
252
+ $ rip artifact get https://tokenrip.com/s/550e8400-e29b-41d4-a716-446655440000
252
253
  `)
253
- .action(wrapCommand(assetGet));
254
- asset
254
+ .action(wrapCommand(artifactGet));
255
+ artifact
255
256
  .command('download')
256
- .argument('<identifier>', 'Asset UUID, alias, scoped alias (~owner/alias), or full URL')
257
+ .argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
257
258
  .option('--output <path>', 'Output file path (default: <uuid>.<ext> in current directory)')
258
259
  .option('--version <versionId>', 'Download a specific version')
259
260
  .option('--format <format>', 'Export format for collections: csv or json (default: csv)')
260
- .description('Download asset content to a local file')
261
+ .description('Download artifact content to a local file')
261
262
  .addHelpText('after', `
262
263
  EXAMPLES:
263
- $ rip asset download 550e8400-e29b-41d4-a716-446655440000
264
- $ rip asset download 550e8400-... --output ./report.pdf
265
- $ rip asset download 550e8400-... --version abc123
266
- $ rip asset download 550e8400-... --format json
264
+ $ rip artifact download 550e8400-e29b-41d4-a716-446655440000
265
+ $ rip artifact download 550e8400-... --output ./report.pdf
266
+ $ rip artifact download 550e8400-... --version abc123
267
+ $ rip artifact download 550e8400-... --format json
267
268
  `)
268
- .action(wrapCommand(assetDownload));
269
- asset
269
+ .action(wrapCommand(artifactDownload));
270
+ artifact
270
271
  .command('cat')
271
- .argument('<identifier>', 'Asset UUID, alias, scoped alias (~owner/alias), or full URL')
272
+ .argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
272
273
  .option('--version <versionId>', 'Output a specific version')
273
- .description('Print asset content to stdout')
274
+ .description('Print artifact content to stdout')
274
275
  .addHelpText('after', `
275
276
  EXAMPLES:
276
- $ rip asset cat 550e8400-e29b-41d4-a716-446655440000
277
- $ rip asset cat my-post
278
- $ rip asset cat '~alice/dashboard'
279
- $ rip asset cat my-post --version abc123
280
- $ rip asset cat my-post | head -20
277
+ $ rip artifact cat 550e8400-e29b-41d4-a716-446655440000
278
+ $ rip artifact cat my-post
279
+ $ rip artifact cat '~alice/dashboard'
280
+ $ rip artifact cat my-post --version abc123
281
+ $ rip artifact cat my-post | head -20
281
282
  `)
282
- .action(wrapCommand(assetCat));
283
- asset
283
+ .action(wrapCommand(artifactCat));
284
+ artifact
284
285
  .command('versions')
285
- .argument('<uuid>', 'Asset UUID or full URL')
286
+ .argument('<uuid>', 'Artifact UUID or full URL')
286
287
  .option('--version <versionId>', 'Get metadata for a specific version')
287
- .description('List versions of an asset')
288
+ .description('List versions of an artifact')
288
289
  .addHelpText('after', `
289
290
  EXAMPLES:
290
- $ rip asset versions 550e8400-e29b-41d4-a716-446655440000
291
- $ rip asset versions 550e8400-... --version abc123
291
+ $ rip artifact versions 550e8400-e29b-41d4-a716-446655440000
292
+ $ rip artifact versions 550e8400-... --version abc123
292
293
  `)
293
- .action(wrapCommand(assetVersions));
294
- asset
294
+ .action(wrapCommand(artifactVersions));
295
+ artifact
295
296
  .command('comment')
296
- .argument('<uuid>', 'Asset UUID or full URL')
297
+ .argument('<uuid>', 'Artifact UUID or full URL')
297
298
  .argument('<message>', 'Comment text')
298
299
  .option('--intent <intent>', 'Message intent: propose, accept, reject, inform, request')
299
300
  .option('--type <type>', 'Message type')
300
- .option('--version-id <uuid>', 'Asset version this comment refers to')
301
- .description('Post a comment on an asset')
301
+ .option('--version-id <uuid>', 'Artifact version this comment refers to')
302
+ .description('Post a comment on an artifact')
302
303
  .addHelpText('after', `
303
304
  EXAMPLES:
304
- $ rip asset comment 550e8400-... "Looks good, approved"
305
- $ rip asset comment 550e8400-... "Needs revision" --intent reject
305
+ $ rip artifact comment 550e8400-... "Looks good, approved"
306
+ $ rip artifact comment 550e8400-... "Needs revision" --intent reject
306
307
  `)
307
- .action(wrapCommand(assetComment));
308
- asset
308
+ .action(wrapCommand(artifactComment));
309
+ artifact
309
310
  .command('comments')
310
- .argument('<uuid>', 'Asset UUID or full URL')
311
+ .argument('<uuid>', 'Artifact UUID or full URL')
311
312
  .option('--since <sequence>', 'Show messages after this sequence number')
312
313
  .option('--limit <n>', 'Max messages to return')
313
- .description('List comments on an asset')
314
+ .description('List comments on an artifact')
314
315
  .addHelpText('after', `
315
316
  EXAMPLES:
316
- $ rip asset comments 550e8400-e29b-41d4-a716-446655440000
317
- $ rip asset comments 550e8400-... --since 5 --limit 10
317
+ $ rip artifact comments 550e8400-e29b-41d4-a716-446655440000
318
+ $ rip artifact comments 550e8400-... --since 5 --limit 10
318
319
  `)
319
- .action(wrapCommand(assetComments));
320
- asset
320
+ .action(wrapCommand(artifactComments));
321
+ artifact
321
322
  .command('move')
322
- .argument('<uuid>', 'Asset UUID')
323
+ .argument('<uuid>', 'Artifact UUID')
323
324
  .option('--folder <slug>', 'Target folder slug')
324
325
  .option('--team <slug>', 'Target team (for team folders)')
325
326
  .option('--unfiled', 'Remove from current folder')
326
- .description('Move an asset into a folder or unfile it')
327
+ .description('Move an artifact into a folder or unfile it')
327
328
  .addHelpText('after', `
328
329
  EXAMPLES:
329
- $ rip asset move 550e8400-... --folder reports
330
- $ rip asset move 550e8400-... --folder research --team my-team
331
- $ rip asset move 550e8400-... --unfiled
330
+ $ rip artifact move 550e8400-... --folder reports
331
+ $ rip artifact move 550e8400-... --folder research --team my-team
332
+ $ rip artifact move 550e8400-... --unfiled
332
333
  `)
333
334
  .action(wrapCommand(async (uuid, options) => {
334
- const { assetMove } = await import('./commands/folder.js');
335
- await assetMove(uuid, options);
335
+ const { artifactMove } = await import('./commands/folder.js');
336
+ await artifactMove(uuid, options);
336
337
  }));
337
- asset
338
+ artifact
338
339
  .command('patch')
339
- .argument('<identifier>', 'Asset UUID or alias')
340
+ .argument('<identifier>', 'Artifact UUID or alias')
340
341
  .option('--metadata <json>', 'Metadata JSON object (replaces existing metadata)')
341
- .option('--alias <alias>', 'New alias for the asset')
342
- .option('--title <title>', 'New title for the asset')
343
- .option('--description <description>', 'New description for the asset (empty string clears it)')
344
- .description('Update asset metadata and/or alias without creating a new version')
342
+ .option('--alias <alias>', 'New alias for the artifact')
343
+ .option('--title <title>', 'New title for the artifact')
344
+ .option('--description <description>', 'New description for the artifact (empty string clears it)')
345
+ .description('Update artifact metadata and/or alias without creating a new version')
345
346
  .addHelpText('after', `
346
347
  EXAMPLES:
347
- $ rip asset patch 550e8400-... --metadata '{"tags":["ai","agents"]}'
348
- $ rip asset patch my-post --alias new-slug
349
- $ rip asset patch my-post --metadata '{"featured":true}' --alias new-slug
350
- $ rip asset patch my-post --title "New Title"
351
- $ rip asset patch my-post --description "A helpful description"
348
+ $ rip artifact patch 550e8400-... --metadata '{"tags":["ai","agents"]}'
349
+ $ rip artifact patch my-post --alias new-slug
350
+ $ rip artifact patch my-post --metadata '{"featured":true}' --alias new-slug
351
+ $ rip artifact patch my-post --title "New Title"
352
+ $ rip artifact patch my-post --description "A helpful description"
352
353
  `)
353
354
  .action(wrapCommand(patch));
354
355
  // ── collection commands ─────────────────────────────────────────────
@@ -357,7 +358,7 @@ const collection = program
357
358
  .description('Manage collection rows (append, list, update, delete)');
358
359
  collection
359
360
  .command('append')
360
- .argument('<uuid>', 'Collection asset public ID')
361
+ .argument('<uuid>', 'Collection artifact public ID')
361
362
  .option('--data <json>', 'Row data as inline JSON (single object or array)')
362
363
  .option('--file <path>', 'Path to JSON file with row data (object or array)')
363
364
  .description('Append one or more rows to a collection (max 1000 per call)')
@@ -374,7 +375,7 @@ NOTE: Maximum 1000 rows per call. For larger datasets, split into multiple calls
374
375
  }));
375
376
  collection
376
377
  .command('rows')
377
- .argument('<uuid>', 'Collection asset public ID')
378
+ .argument('<uuid>', 'Collection artifact public ID')
378
379
  .option('--limit <n>', 'Max rows to return (default: 100, max: 500)')
379
380
  .option('--after <rowId>', 'Cursor: show rows after this row ID')
380
381
  .option('--sort-by <column>', 'Sort by column name')
@@ -394,7 +395,7 @@ EXAMPLES:
394
395
  }));
395
396
  collection
396
397
  .command('update')
397
- .argument('<uuid>', 'Collection asset public ID')
398
+ .argument('<uuid>', 'Collection artifact public ID')
398
399
  .argument('<rowId>', 'Row ID to update')
399
400
  .requiredOption('--data <json>', 'Fields to update as JSON (partial merge)')
400
401
  .description('Update a single row in a collection')
@@ -408,7 +409,7 @@ EXAMPLES:
408
409
  }));
409
410
  collection
410
411
  .command('delete')
411
- .argument('<uuid>', 'Collection asset public ID')
412
+ .argument('<uuid>', 'Collection artifact public ID')
412
413
  .requiredOption('--rows <ids>', 'Comma-separated row IDs to delete')
413
414
  .description('Delete rows from a collection')
414
415
  .addHelpText('after', `
@@ -439,11 +440,11 @@ EXAMPLES:
439
440
  $ rip mountedagent publish mountedagents/chief-of-staff/manifest.json --team acme
440
441
 
441
442
  NOTES:
442
- Brain asset aliases referenced by the manifest must already be published
443
+ Brain artifact aliases referenced by the manifest must already be published
443
444
  by the active agent identity. Shared memory collections are created or
444
445
  updated from the manifest during publish. Claude Code invocation surfaces
445
446
  should point at the generated bootloader URL, which installs as
446
- .claude/commands/<slug>.md and fetches brain assets at runtime.
447
+ .claude/commands/<slug>.md and fetches brain artifacts at runtime.
447
448
 
448
449
  --publish requests Tier 2 (public /agents listing) and requires an
449
450
  approved Publisher (see: rip publisher apply). --published is the
@@ -460,14 +461,14 @@ EXAMPLES:
460
461
  `)
461
462
  .action(wrapCommand(mountedAgentShow));
462
463
  mountedagent
463
- .command('assets')
464
+ .command('artifacts')
464
465
  .argument('<slug>', 'Mounted agent slug')
465
- .description('List every asset referenced by an owned mounted-agent imprint')
466
+ .description('List every artifact referenced by an owned mounted-agent imprint')
466
467
  .addHelpText('after', `
467
468
  EXAMPLES:
468
- $ rip mountedagent assets office-hours
469
+ $ rip mountedagent artifacts office-hours
469
470
  `)
470
- .action(wrapCommand(mountedAgentAssets));
471
+ .action(wrapCommand(mountedAgentArtifacts));
471
472
  mountedagent
472
473
  .command('list')
473
474
  .description('List mounted agents published by the active identity')
@@ -491,7 +492,7 @@ EXAMPLES:
491
492
  NOTES:
492
493
  Personal forks are now the default — omit --team to fork into a personal
493
494
  imprint owned by the calling agent. The fork is created unpublished. The
494
- CLI writes the manifest and forked brain/sample assets under
495
+ CLI writes the manifest and forked brain/sample artifacts under
495
496
  mountedagents/<slug>/, then you can run /moa --iterate <slug> to customize.
496
497
  `)
497
498
  .action(wrapCommand(mountedAgentFork));
@@ -500,7 +501,7 @@ mountedagent
500
501
  .argument('<slug>', 'Agent imprint slug')
501
502
  .option('--team <slug>', 'Bind the mount to a team (collaborative)')
502
503
  .option('--name <label>', 'Friendly mount name (required for a second mount of the same imprint)')
503
- .option('--context-from <file>', 'Seed the mount context asset from a markdown file')
504
+ .option('--context-from <file>', 'Seed the mount context artifact from a markdown file')
504
505
  .description('Create a deployment of an agent imprint (personal by default; --team makes it collaborative)')
505
506
  .addHelpText('after', `
506
507
  EXAMPLES:
@@ -533,16 +534,16 @@ mountedagent
533
534
  .description('Show mount context, imprint version, and materialized layers')
534
535
  .action(wrapCommand(mountedAgentShowMount));
535
536
  mountedagent
536
- .command('mount-assets')
537
+ .command('mount-artifacts')
537
538
  .argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
538
- .description('List context, materialized, and inherited assets for a mount')
539
- .action(wrapCommand(mountedAgentMountAssets));
539
+ .description('List context, materialized, and inherited artifacts for a mount')
540
+ .action(wrapCommand(mountedAgentMountArtifacts));
540
541
  mountedagent
541
542
  .command('mount-context')
542
543
  .argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
543
544
  .option('--from-file <file>', 'Replace mount context content from a markdown file')
544
- .option('--edit', 'Open $EDITOR and publish the edited context as a new asset version')
545
- .description('Print or update the mount context asset')
545
+ .option('--edit', 'Open $EDITOR and publish the edited context as a new artifact version')
546
+ .description('Print or update the mount context artifact')
546
547
  .action(wrapCommand(mountedAgentMountContext));
547
548
  mountedagent
548
549
  .command('unmount')
@@ -554,7 +555,7 @@ EXAMPLES:
554
555
 
555
556
  NOTES:
556
557
  Cascades all mount-owned memory (team-layer + per-operator private rows)
557
- through assetService.destroyAsset, then ends any open sessions, then
558
+ through artifactService.destroyArtifact, then ends any open sessions, then
558
559
  deletes the mount row. Operate on personal mounts you own; team mounts
559
560
  can only be destroyed by the team member who created them.
560
561
  `)
@@ -578,7 +579,7 @@ EXAMPLES:
578
579
  NOTES:
579
580
  Returns the session token, the compiled brain envelope, the layer map,
580
581
  and (when present) the mount-context block. Persist the session token —
581
- every record / rewrite-asset / end call needs it.
582
+ every record / rewrite-artifact / end call needs it.
582
583
  `)
583
584
  .action(wrapCommand(mountedAgentLoad));
584
585
  mountedagent
@@ -595,36 +596,36 @@ EXAMPLES:
595
596
  `)
596
597
  .action(wrapCommand(mountedAgentRecord));
597
598
  mountedagent
598
- .command('rewrite-asset')
599
+ .command('rewrite-artifact')
599
600
  .argument('<session-token>', 'Token returned by `mountedagent load`')
600
- .argument('<logical-alias>', 'Memory-asset logical alias from manifest.memoryAssets[].logicalAlias')
601
- .option('--content <string>', 'Inline content (UTF-8) for the asset rewrite')
601
+ .argument('<logical-alias>', 'Memory-artifact logical alias from manifest.memoryArtifacts[].logicalAlias')
602
+ .option('--content <string>', 'Inline content (UTF-8) for the artifact rewrite')
602
603
  .option('--content-from <file>', 'Read the new content from a file')
603
- .description('Rewrite a memory asset; publishes a new version on the concrete asset')
604
+ .description('Rewrite a memory artifact; publishes a new version on the concrete artifact')
604
605
  .addHelpText('after', `
605
606
  EXAMPLES:
606
- $ rip --json mountedagent rewrite-asset <token> <alias> \\
607
+ $ rip --json mountedagent rewrite-artifact <token> <alias> \\
607
608
  --content-from /tmp/new-context.md
608
609
  `)
609
- .action(wrapCommand(mountedAgentRewriteAsset));
610
+ .action(wrapCommand(mountedAgentRewriteArtifact));
610
611
  mountedagent
611
612
  .command('end')
612
613
  .argument('<session-token>', 'Token returned by `mountedagent load`')
613
614
  .option('--summary <text>', 'One-paragraph wrap-up summary')
614
- .option('--artifact-from <file>', 'Optional artifact content (markdown). Requires --artifact-title')
615
- .option('--artifact-title <title>', 'Artifact title (only meaningful with --artifact-from)')
616
- .option('--artifact-public', 'Mark the artifact public (default: private)', false)
617
- .description('End a session and optionally publish a markdown artifact')
615
+ .option('--output-from <file>', 'Optional session output content (markdown). Requires --output-title')
616
+ .option('--output-title <title>', 'Session output title (only meaningful with --output-from)')
617
+ .option('--output-public', 'Mark the session output public (default: private)', false)
618
+ .description('End a session and optionally publish a markdown session output')
618
619
  .addHelpText('after', `
619
620
  EXAMPLES:
620
621
  $ rip --json mountedagent end <token> --summary "Done."
621
622
  $ rip --json mountedagent end <token> --summary "..." \\
622
- --artifact-from /tmp/wrap-up.md --artifact-title "Office Hours wrap-up"
623
+ --output-from /tmp/wrap-up.md --output-title "Office Hours wrap-up"
623
624
 
624
625
  NOTES:
625
626
  Idempotent on repeat calls — re-running with the same token returns the
626
- prior artifact, if any. Imprints with session.produceArtifact: false
627
- return ARTIFACT_NOT_PERMITTED when --artifact-from is supplied.
627
+ prior session output, if any. Imprints with session.produceSessionOutput: false
628
+ return SESSION_OUTPUT_NOT_PERMITTED when --output-from is supplied.
628
629
  `)
629
630
  .action(wrapCommand(mountedAgentEnd));
630
631
  mountedagent
@@ -855,9 +856,9 @@ agent
855
856
  // ── inbox command ──────────────────────────────────────────────────
856
857
  program
857
858
  .command('inbox')
858
- .description('Poll for new thread messages and asset updates')
859
+ .description('Poll for new thread messages and artifact updates')
859
860
  .option('--since <value>', 'Override cursor: ISO 8601 timestamp or number of days (e.g. 1 = 24h, 7 = week)')
860
- .option('--types <types>', 'Filter: threads, assets, or both (comma-separated)')
861
+ .option('--types <types>', 'Filter: threads, artifacts, or both (comma-separated)')
861
862
  .option('--limit <n>', 'Max items per type (default: 50, max: 200)')
862
863
  .option('--clear', 'Advance the stored cursor after fetching (marks items as seen)')
863
864
  .option('--team <slug>', 'Filter inbox to a specific team')
@@ -865,13 +866,13 @@ program
865
866
  EXAMPLES:
866
867
  $ rip inbox
867
868
  $ rip inbox --types threads
868
- $ rip inbox --types assets --limit 10
869
+ $ rip inbox --types artifacts --limit 10
869
870
  $ rip inbox --since 1 # last 24 hours
870
871
  $ rip inbox --since 7 # last week
871
872
  $ rip inbox --since 2026-04-01T00:00:00Z # exact timestamp
872
873
  $ rip inbox --clear # advance cursor
873
874
 
874
- Shows new thread messages and asset updates since your last check.
875
+ Shows new thread messages and artifact updates since your last check.
875
876
  The cursor is NOT advanced unless --clear is passed.
876
877
  Use --since to look back without affecting the cursor.
877
878
  `)
@@ -883,22 +884,22 @@ EXAMPLES:
883
884
  program
884
885
  .command('search')
885
886
  .argument('<query>', 'Search text')
886
- .description('Full-text search across threads and assets')
887
- .option('--type <type>', 'Filter: thread or asset')
887
+ .description('Full-text search across threads and artifacts')
888
+ .option('--type <type>', 'Filter: thread or artifact')
888
889
  .option('--since <when>', 'ISO 8601 timestamp or integer days back (e.g. 7 = last week)')
889
890
  .option('--limit <n>', 'Max results (default: 50, max: 200)')
890
891
  .option('--offset <n>', 'Pagination offset')
891
892
  .option('--state <state>', 'Thread state: open or closed')
892
893
  .option('--intent <intent>', 'Filter by last message intent')
893
- .option('--ref <uuid>', 'Filter threads referencing this asset')
894
- .option('--asset-type <type>', 'Asset type: markdown, html, code, json, text, file, chart, collection')
895
- .option('--archived', 'Search only archived assets')
896
- .option('--include-archived', 'Include archived assets in search results')
894
+ .option('--ref <uuid>', 'Filter threads referencing this artifact')
895
+ .option('--artifact-type <type>', 'Artifact type: markdown, html, code, json, text, file, chart, collection')
896
+ .option('--archived', 'Search only archived artifacts')
897
+ .option('--include-archived', 'Include archived artifacts in search results')
897
898
  .addHelpText('after', `
898
899
  EXAMPLES:
899
900
  $ rip search "quarterly report"
900
901
  $ rip search "deploy" --type thread --state open
901
- $ rip search "chart" --asset-type chart --since 7
902
+ $ rip search "chart" --artifact-type chart --since 7
902
903
  $ rip search "proposal" --intent propose --limit 10
903
904
  $ rip search "old report" --archived
904
905
  $ rip search "report" --include-archived
@@ -945,19 +946,19 @@ msg
945
946
  .argument('<body>', 'Message text')
946
947
  .option('--to <recipient>', 'Recipient: agent ID, contact name, or alias')
947
948
  .option('--thread <id>', 'Reply to existing thread')
948
- .option('--asset <uuid>', 'Comment on an asset')
949
+ .option('--artifact <uuid>', 'Comment on an artifact')
949
950
  .option('--intent <intent>', 'Message intent: propose, accept, reject, counter, inform, request, confirm')
950
951
  .option('--type <type>', 'Message type: meeting, review, notification, status_update')
951
952
  .option('--data <json>', 'Structured JSON payload')
952
953
  .option('--in-reply-to <id>', 'Message ID being replied to')
953
- .option('--version-id <uuid>', 'Asset version this message refers to')
954
- .description('Send a message to an agent, thread, or asset')
954
+ .option('--version-id <uuid>', 'Artifact version this message refers to')
955
+ .description('Send a message to an agent, thread, or artifact')
955
956
  .addHelpText('after', `
956
957
  EXAMPLES:
957
958
  $ rip msg send --to alice "Can you generate the Q3 report?"
958
959
  $ rip msg send --to rip1x9a2... "Ready" --intent request
959
960
  $ rip msg send --thread 550e8400-... "Looks good" --intent accept
960
- $ rip msg send --asset 550e8400-... "Approved for distribution"
961
+ $ rip msg send --artifact 550e8400-... "Approved for distribution"
961
962
  `)
962
963
  .action(wrapCommand(async (body, options) => {
963
964
  const { msgSend } = await import('./commands/msg.js');
@@ -966,14 +967,14 @@ EXAMPLES:
966
967
  msg
967
968
  .command('list')
968
969
  .option('--thread <id>', 'Thread ID to read messages from')
969
- .option('--asset <uuid>', 'Asset ID to read comments from')
970
+ .option('--artifact <uuid>', 'Artifact ID to read comments from')
970
971
  .option('--since <sequence>', 'Show messages after this sequence number')
971
972
  .option('--limit <n>', 'Max messages to return (default: 50, max: 200)')
972
- .description('List messages in a thread or comments on an asset')
973
+ .description('List messages in a thread or comments on an artifact')
973
974
  .addHelpText('after', `
974
975
  EXAMPLES:
975
976
  $ rip msg list --thread 550e8400-...
976
- $ rip msg list --asset 550e8400-...
977
+ $ rip msg list --artifact 550e8400-...
977
978
  $ rip msg list --thread 550e8400-... --since 10 --limit 20
978
979
  `)
979
980
  .action(wrapCommand(async (options) => {
@@ -1001,8 +1002,8 @@ thread
1001
1002
  .command('create')
1002
1003
  .option('--collaborators <agents>', 'Comma-separated agent IDs, contact names, or aliases')
1003
1004
  .option('--message <text>', 'Initial message body')
1004
- .option('--refs <refs>', 'Comma-separated asset IDs or URLs to link')
1005
- .option('--asset <uuid>', 'Convenience: link a single asset to the thread')
1005
+ .option('--refs <refs>', 'Comma-separated artifact IDs or URLs to link')
1006
+ .option('--artifact <uuid>', 'Convenience: link a single artifact to the thread')
1006
1007
  .option('--title <title>', 'Thread title (stored in metadata)')
1007
1008
  .option('--team <slug>', 'Create as a team thread (all team members added automatically)')
1008
1009
  .option('--tour-welcome', 'Trigger @tokenrip welcome message (tour only)')
@@ -1012,7 +1013,7 @@ EXAMPLES:
1012
1013
  $ rip thread create --collaborators alice,bob
1013
1014
  $ rip thread create --collaborators alice --message "Kickoff"
1014
1015
  $ rip thread create --collaborators alice --refs 550e8400-...,https://figma.com/file/xyz
1015
- $ rip thread create --collaborators alice --asset 550e8400-... --title "Review"
1016
+ $ rip thread create --collaborators alice --artifact 550e8400-... --title "Review"
1016
1017
  `)
1017
1018
  .action(wrapCommand(async (options) => {
1018
1019
  const { threadCreate } = await import('./commands/thread.js');
@@ -1065,8 +1066,8 @@ EXAMPLES:
1065
1066
  thread
1066
1067
  .command('add-refs')
1067
1068
  .argument('<id>', 'Thread ID')
1068
- .argument('<refs>', 'Comma-separated asset IDs or URLs to link')
1069
- .description('Add linked resources (assets or URLs) to a thread')
1069
+ .argument('<refs>', 'Comma-separated artifact IDs or URLs to link')
1070
+ .description('Add linked resources (artifacts or URLs) to a thread')
1070
1071
  .addHelpText('after', `
1071
1072
  EXAMPLES:
1072
1073
  $ rip thread add-refs 550e8400-... aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
@@ -1475,7 +1476,7 @@ folder
1475
1476
  .command('delete')
1476
1477
  .argument('<slug>', 'Folder slug')
1477
1478
  .option('--team <slug>', 'Delete a team folder')
1478
- .description('Delete a folder (archives its assets)')
1479
+ .description('Delete a folder (archives its artifacts)')
1479
1480
  .action(wrapCommand(async (slug, options) => {
1480
1481
  const { folderDelete } = await import('./commands/folder.js');
1481
1482
  await folderDelete(slug, options);