@tokenrip/cli 1.3.12 → 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.
- package/AGENTS.md +103 -79
- package/README.md +21 -9
- package/SKILL.md +195 -124
- package/dist/cjs/client.js +1 -1
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/commands/admin-mountedagent.js +50 -0
- package/dist/cjs/commands/admin-mountedagent.js.map +1 -0
- package/dist/cjs/commands/archive.js +9 -9
- package/dist/cjs/commands/archive.js.map +1 -1
- package/dist/cjs/commands/artifact-cat.js +15 -0
- package/dist/cjs/commands/artifact-cat.js.map +1 -0
- package/dist/cjs/commands/artifact-comments.js +33 -0
- package/dist/cjs/commands/artifact-comments.js.map +1 -0
- package/dist/cjs/commands/artifact-download.js +76 -0
- package/dist/cjs/commands/artifact-download.js.map +1 -0
- package/dist/cjs/commands/artifact-get.js +14 -0
- package/dist/cjs/commands/artifact-get.js.map +1 -0
- package/dist/cjs/commands/artifact-versions.js +20 -0
- package/dist/cjs/commands/artifact-versions.js.map +1 -0
- package/dist/cjs/commands/collection.js +4 -4
- package/dist/cjs/commands/collection.js.map +1 -1
- package/dist/cjs/commands/delete-version.js +3 -3
- package/dist/cjs/commands/delete-version.js.map +1 -1
- package/dist/cjs/commands/delete.js +7 -7
- package/dist/cjs/commands/delete.js.map +1 -1
- package/dist/cjs/commands/folder.js +4 -4
- package/dist/cjs/commands/folder.js.map +1 -1
- package/dist/cjs/commands/fork.js +4 -4
- package/dist/cjs/commands/fork.js.map +1 -1
- package/dist/cjs/commands/mountedagent.js +246 -4
- package/dist/cjs/commands/mountedagent.js.map +1 -1
- package/dist/cjs/commands/msg.js +11 -11
- package/dist/cjs/commands/msg.js.map +1 -1
- package/dist/cjs/commands/patch.js +4 -4
- package/dist/cjs/commands/patch.js.map +1 -1
- package/dist/cjs/commands/publish.js +16 -16
- package/dist/cjs/commands/publish.js.map +1 -1
- package/dist/cjs/commands/search.js +2 -2
- package/dist/cjs/commands/search.js.map +1 -1
- package/dist/cjs/commands/share.js +4 -4
- package/dist/cjs/commands/share.js.map +1 -1
- package/dist/cjs/commands/stats.js +1 -1
- package/dist/cjs/commands/stats.js.map +1 -1
- package/dist/cjs/commands/status.js +2 -2
- package/dist/cjs/commands/status.js.map +1 -1
- package/dist/cjs/commands/thread.js +2 -2
- package/dist/cjs/commands/thread.js.map +1 -1
- package/dist/cjs/commands/tour.js +2 -2
- package/dist/cjs/commands/tour.js.map +1 -1
- package/dist/cjs/commands/update.js +3 -3
- package/dist/cjs/commands/update.js.map +1 -1
- package/dist/cjs/commands/upload.js +4 -4
- package/dist/cjs/commands/upload.js.map +1 -1
- package/dist/cjs/formatters.js +174 -33
- package/dist/cjs/formatters.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/output.js +2 -2
- package/dist/cjs/output.js.map +1 -1
- package/dist/cjs/parse-artifact-id.js +13 -0
- package/dist/cjs/parse-artifact-id.js.map +1 -0
- package/dist/cjs/refs.js +2 -2
- package/dist/cjs/refs.js.map +1 -1
- package/dist/cjs/tour/agent-script.js +5 -5
- package/dist/cjs/tour/steps.js +13 -13
- package/dist/cjs/tour/steps.js.map +1 -1
- package/dist/cli.js +352 -193
- package/dist/cli.js.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/admin-mountedagent.d.ts +5 -0
- package/dist/commands/admin-mountedagent.js +43 -0
- package/dist/commands/admin-mountedagent.js.map +1 -0
- package/dist/commands/archive.d.ts +2 -2
- package/dist/commands/archive.js +7 -7
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/artifact-cat.d.ts +3 -0
- package/dist/commands/artifact-cat.js +12 -0
- package/dist/commands/artifact-cat.js.map +1 -0
- package/dist/commands/artifact-comments.d.ts +9 -0
- package/dist/commands/artifact-comments.js +29 -0
- package/dist/commands/artifact-comments.js.map +1 -0
- package/dist/commands/artifact-download.d.ts +5 -0
- package/dist/commands/artifact-download.js +70 -0
- package/dist/commands/artifact-download.js.map +1 -0
- package/dist/commands/artifact-get.d.ts +1 -0
- package/dist/commands/artifact-get.js +11 -0
- package/dist/commands/artifact-get.js.map +1 -0
- package/dist/commands/artifact-versions.d.ts +3 -0
- package/dist/commands/artifact-versions.js +17 -0
- package/dist/commands/artifact-versions.js.map +1 -0
- package/dist/commands/collection.js +4 -4
- package/dist/commands/collection.js.map +1 -1
- package/dist/commands/delete-version.js +3 -3
- package/dist/commands/delete-version.js.map +1 -1
- package/dist/commands/delete.d.ts +1 -1
- package/dist/commands/delete.js +7 -7
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/folder.d.ts +1 -1
- package/dist/commands/folder.js +3 -3
- package/dist/commands/folder.js.map +1 -1
- package/dist/commands/fork.d.ts +1 -1
- package/dist/commands/fork.js +4 -4
- package/dist/commands/fork.js.map +1 -1
- package/dist/commands/mountedagent.d.ts +38 -0
- package/dist/commands/mountedagent.js +235 -6
- package/dist/commands/mountedagent.js.map +1 -1
- package/dist/commands/msg.d.ts +2 -2
- package/dist/commands/msg.js +11 -11
- package/dist/commands/msg.js.map +1 -1
- package/dist/commands/patch.js +5 -5
- package/dist/commands/patch.js.map +1 -1
- package/dist/commands/publish.js +17 -17
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/search.d.ts +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/share.d.ts +1 -1
- package/dist/commands/share.js +4 -4
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/stats.js +1 -1
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/status.js +3 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/thread.d.ts +1 -1
- package/dist/commands/thread.js +2 -2
- package/dist/commands/thread.js.map +1 -1
- package/dist/commands/tour.js +2 -2
- package/dist/commands/tour.js.map +1 -1
- package/dist/commands/update.js +3 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.js +5 -5
- package/dist/commands/upload.js.map +1 -1
- package/dist/formatters.d.ts +14 -6
- package/dist/formatters.js +158 -26
- package/dist/formatters.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/output.js +2 -2
- package/dist/output.js.map +1 -1
- package/dist/parse-artifact-id.d.ts +1 -0
- package/dist/parse-artifact-id.js +10 -0
- package/dist/parse-artifact-id.js.map +1 -0
- package/dist/refs.d.ts +1 -1
- package/dist/refs.js +2 -2
- package/dist/refs.js.map +1 -1
- package/dist/tour/agent-script.d.ts +1 -1
- package/dist/tour/agent-script.js +5 -5
- package/dist/tour/state.d.ts +1 -1
- package/dist/tour/steps.d.ts +3 -3
- package/dist/tour/steps.js +13 -13
- package/dist/tour/steps.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -5,20 +5,21 @@ 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 {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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 {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
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 { mountedAgentFork, mountedAgentList, mountedAgentMount, mountedAgentMountRename, mountedAgentMounts, mountedAgentPublish, mountedAgentShow, mountedAgentUnmount } 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
|
+
import { adminMountedAgentList, adminMountedAgentSessions, adminMountedAgentSetFeatured, adminMountedAgentShow, adminMountedAgentUnpublish } from './commands/admin-mountedagent.js';
|
|
22
23
|
import { tour, tourNext, tourRestart } from './commands/tour.js';
|
|
23
24
|
import { wrapCommand, setForceJson, setConfigHuman, outputSuccess } from './output.js';
|
|
24
25
|
import { loadConfig } from './config.js';
|
|
@@ -42,44 +43,45 @@ program
|
|
|
42
43
|
setAgentOverride(opts.agent);
|
|
43
44
|
}
|
|
44
45
|
});
|
|
45
|
-
// ──
|
|
46
|
-
const
|
|
47
|
-
.command('
|
|
48
|
-
.
|
|
49
|
-
|
|
46
|
+
// ── artifact commands ──────────────────────────────────────────────────
|
|
47
|
+
const artifact = program
|
|
48
|
+
.command('artifact')
|
|
49
|
+
.alias('art')
|
|
50
|
+
.description('Create, manage, and inspect artifacts');
|
|
51
|
+
artifact
|
|
50
52
|
.command('upload')
|
|
51
53
|
.argument('<file>', 'File path to upload (PDF, image, document, etc.)')
|
|
52
|
-
.option('--title <title>', 'Display title for the
|
|
53
|
-
.option('--parent <uuid>', 'Parent
|
|
54
|
+
.option('--title <title>', 'Display title for the artifact')
|
|
55
|
+
.option('--parent <uuid>', 'Parent artifact ID for lineage tracking')
|
|
54
56
|
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
55
57
|
.option('--refs <urls>', 'Comma-separated input reference URLs')
|
|
56
|
-
.option('--team <slugs>', 'Comma-separated team slugs to share this
|
|
58
|
+
.option('--team <slugs>', 'Comma-separated team slugs to share this artifact with')
|
|
57
59
|
.option('--folder <slug>', 'File into folder')
|
|
58
60
|
.option('--dry-run', 'Validate inputs without uploading')
|
|
59
61
|
.description('Upload a file and get a shareable link')
|
|
60
62
|
.addHelpText('after', `
|
|
61
63
|
EXAMPLES:
|
|
62
|
-
$ rip
|
|
63
|
-
$ rip
|
|
64
|
+
$ rip artifact upload report.pdf --title "Agent Analysis"
|
|
65
|
+
$ rip artifact upload chart.png --context "Claude Agent 1" \\
|
|
64
66
|
--refs "https://source.example.com,https://another.com"
|
|
65
67
|
`)
|
|
66
68
|
.action(wrapCommand(upload));
|
|
67
|
-
|
|
69
|
+
artifact
|
|
68
70
|
.command('publish')
|
|
69
71
|
.argument('[file]', 'File containing the content to publish (omit if using --content)')
|
|
70
72
|
.requiredOption('--type <type>', 'Content type: markdown, html, chart, code, text, json, csv, or collection')
|
|
71
|
-
.option('--title <title>', 'Display title for the
|
|
73
|
+
.option('--title <title>', 'Display title for the artifact')
|
|
72
74
|
.option('--content <string>', 'Inline content to publish (alternative to a file; requires --title)')
|
|
73
|
-
.option('--alias <alias>', 'Human-readable alias for the
|
|
74
|
-
.option('--parent <uuid>', 'Parent
|
|
75
|
+
.option('--alias <alias>', 'Human-readable alias for the artifact URL')
|
|
76
|
+
.option('--parent <uuid>', 'Parent artifact ID for lineage tracking')
|
|
75
77
|
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
76
78
|
.option('--refs <urls>', 'Comma-separated input reference URLs')
|
|
77
79
|
.option('--schema <json>', 'Column schema JSON (for collections, or to type CSV columns on import)')
|
|
78
80
|
.option('--headers', 'CSV has a header row — use it for column names (pairs with --from-csv)')
|
|
79
81
|
.option('--from-csv', 'Parse the file as CSV and populate a new collection (pairs with --type collection)')
|
|
80
|
-
.option('--team <slugs>', 'Comma-separated team slugs to share this
|
|
82
|
+
.option('--team <slugs>', 'Comma-separated team slugs to share this artifact with')
|
|
81
83
|
.option('--folder <slug>', 'File into folder')
|
|
82
|
-
.option('--metadata <json>', 'Arbitrary metadata JSON object (merged into
|
|
84
|
+
.option('--metadata <json>', 'Arbitrary metadata JSON object (merged into artifact metadata)')
|
|
83
85
|
.option('--dry-run', 'Validate inputs without publishing')
|
|
84
86
|
.description('Publish structured content with rich rendering support')
|
|
85
87
|
.addHelpText('after', `
|
|
@@ -94,260 +96,260 @@ CONTENT TYPES:
|
|
|
94
96
|
collection - Structured data table with row-level API (requires --schema or --from-csv)
|
|
95
97
|
|
|
96
98
|
EXAMPLES:
|
|
97
|
-
$ rip
|
|
98
|
-
$ rip
|
|
99
|
+
$ rip artifact publish analysis.md --type markdown --title "Summary"
|
|
100
|
+
$ rip artifact publish data.json --type chart \\
|
|
99
101
|
--context "Data viz agent" --refs "https://api.example.com"
|
|
100
|
-
$ rip
|
|
101
|
-
$ rip
|
|
102
|
-
$ rip
|
|
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" \\
|
|
103
105
|
--schema '[{"name":"company","type":"text"},{"name":"signal","type":"text"}]'
|
|
104
|
-
$ rip
|
|
106
|
+
$ rip artifact publish leads.csv --type collection --from-csv --headers \\
|
|
105
107
|
--title "Leads from CSV"
|
|
106
108
|
`)
|
|
107
109
|
.action(wrapCommand(publish));
|
|
108
|
-
|
|
110
|
+
artifact
|
|
109
111
|
.command('list')
|
|
110
|
-
.option('--since <iso-date>', 'Only show
|
|
111
|
-
.option('--limit <n>', 'Maximum number of
|
|
112
|
-
.option('--type <type>', 'Filter by
|
|
113
|
-
.option('--archived', 'Show only archived
|
|
114
|
-
.option('--include-archived', 'Include archived
|
|
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')
|
|
115
117
|
.option('--folder <slug>', 'Filter by folder')
|
|
116
|
-
.option('--unfiled', 'Show only unfiled
|
|
117
|
-
.option('--team <slug>', 'Filter to team
|
|
118
|
-
.description('List your published
|
|
118
|
+
.option('--unfiled', 'Show only unfiled artifacts')
|
|
119
|
+
.option('--team <slug>', 'Filter to team artifacts')
|
|
120
|
+
.description('List your published artifacts and their metadata')
|
|
119
121
|
.addHelpText('after', `
|
|
120
122
|
EXAMPLES:
|
|
121
|
-
$ rip
|
|
122
|
-
$ rip
|
|
123
|
-
$ rip
|
|
124
|
-
$ rip
|
|
125
|
-
$ rip
|
|
126
|
-
$ rip
|
|
127
|
-
$ rip
|
|
128
|
-
$ rip
|
|
129
|
-
$ rip
|
|
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
|
|
130
132
|
`)
|
|
131
133
|
.action(wrapCommand(status));
|
|
132
|
-
|
|
134
|
+
artifact
|
|
133
135
|
.command('delete')
|
|
134
|
-
.argument('<identifier>', '
|
|
136
|
+
.argument('<identifier>', 'Artifact UUID, alias, or full URL (https://tokenrip.com/s/...)')
|
|
135
137
|
.option('--dry-run', 'Show what would be deleted without deleting')
|
|
136
|
-
.description('Permanently delete an
|
|
138
|
+
.description('Permanently delete an artifact and its shareable link')
|
|
137
139
|
.addHelpText('after', `
|
|
138
140
|
EXAMPLES:
|
|
139
|
-
$ rip
|
|
140
|
-
$ rip
|
|
141
|
-
$ rip
|
|
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
|
|
142
144
|
|
|
143
145
|
CAUTION:
|
|
144
|
-
This permanently removes the
|
|
146
|
+
This permanently removes the artifact and its shareable link.
|
|
145
147
|
This action cannot be undone.
|
|
146
148
|
`)
|
|
147
|
-
.action(wrapCommand(
|
|
148
|
-
|
|
149
|
+
.action(wrapCommand(deleteArtifact));
|
|
150
|
+
artifact
|
|
149
151
|
.command('archive')
|
|
150
|
-
.argument('<identifier>', '
|
|
151
|
-
.description('Archive an
|
|
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)')
|
|
152
154
|
.addHelpText('after', `
|
|
153
155
|
EXAMPLES:
|
|
154
|
-
$ rip
|
|
155
|
-
$ rip
|
|
156
|
-
$ rip
|
|
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
|
|
157
159
|
|
|
158
|
-
Archived
|
|
160
|
+
Archived artifacts are hidden from listings and searches by default,
|
|
159
161
|
but remain accessible by ID and can be unarchived at any time.
|
|
160
162
|
`)
|
|
161
|
-
.action(wrapCommand(
|
|
162
|
-
|
|
163
|
+
.action(wrapCommand(archiveArtifact));
|
|
164
|
+
artifact
|
|
163
165
|
.command('unarchive')
|
|
164
|
-
.argument('<identifier>', '
|
|
165
|
-
.description('Unarchive an
|
|
166
|
+
.argument('<identifier>', 'Artifact UUID, alias, or full URL (https://tokenrip.com/s/...)')
|
|
167
|
+
.description('Unarchive an artifact, restoring it to published state')
|
|
166
168
|
.addHelpText('after', `
|
|
167
169
|
EXAMPLES:
|
|
168
|
-
$ rip
|
|
169
|
-
$ rip
|
|
170
|
+
$ rip artifact unarchive 550e8400-e29b-41d4-a716-446655440000
|
|
171
|
+
$ rip artifact unarchive my-alias
|
|
170
172
|
`)
|
|
171
|
-
.action(wrapCommand(
|
|
172
|
-
|
|
173
|
+
.action(wrapCommand(unarchiveArtifact));
|
|
174
|
+
artifact
|
|
173
175
|
.command('fork')
|
|
174
|
-
.argument('<identifier>', '
|
|
176
|
+
.argument('<identifier>', 'Artifact public ID, alias, or scoped alias (~owner/alias) to fork')
|
|
175
177
|
.option('--version <versionId>', 'Fork a specific version (defaults to latest)')
|
|
176
|
-
.option('--title <title>', 'Title for the forked
|
|
178
|
+
.option('--title <title>', 'Title for the forked artifact (defaults to original)')
|
|
177
179
|
.option('--folder <folder>', 'Folder slug to file the fork into')
|
|
178
|
-
.description('Create your own copy of an existing
|
|
180
|
+
.description('Create your own copy of an existing artifact')
|
|
179
181
|
.addHelpText('after', `
|
|
180
182
|
EXAMPLES:
|
|
181
|
-
$ rip
|
|
182
|
-
$ rip
|
|
183
|
-
$ rip
|
|
184
|
-
$ rip
|
|
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
|
|
185
187
|
`)
|
|
186
|
-
.action(wrapCommand(
|
|
187
|
-
|
|
188
|
+
.action(wrapCommand(forkArtifact));
|
|
189
|
+
artifact
|
|
188
190
|
.command('update')
|
|
189
|
-
.argument('<uuid>', '
|
|
191
|
+
.argument('<uuid>', 'Artifact public ID')
|
|
190
192
|
.argument('<file>', 'File containing the new version content')
|
|
191
193
|
.option('--type <type>', 'Content type (markdown, html, chart, code, text, json, csv) — omit for binary file upload')
|
|
192
194
|
.option('--description <text>', 'Version description')
|
|
193
195
|
.option('--context <text>', 'Creator context (your agent name, task, etc.)')
|
|
194
196
|
.option('--dry-run', 'Validate without publishing')
|
|
195
|
-
.description('Publish a new version of an existing
|
|
197
|
+
.description('Publish a new version of an existing artifact')
|
|
196
198
|
.addHelpText('after', `
|
|
197
199
|
EXAMPLES:
|
|
198
|
-
$ rip
|
|
199
|
-
$ rip
|
|
200
|
+
$ rip artifact update 550e8400-... report-v2.md --type markdown
|
|
201
|
+
$ rip artifact update 550e8400-... chart.png --description "with axes fixed"
|
|
200
202
|
`)
|
|
201
203
|
.action(wrapCommand(update));
|
|
202
|
-
|
|
204
|
+
artifact
|
|
203
205
|
.command('delete-version')
|
|
204
|
-
.argument('<uuid>', '
|
|
206
|
+
.argument('<uuid>', 'Artifact ID')
|
|
205
207
|
.argument('<versionId>', 'Version ID to delete')
|
|
206
208
|
.option('--dry-run', 'Show what would be deleted without deleting')
|
|
207
|
-
.description('Delete a specific version of an
|
|
209
|
+
.description('Delete a specific version of an artifact')
|
|
208
210
|
.addHelpText('after', `
|
|
209
211
|
EXAMPLES:
|
|
210
|
-
$ rip
|
|
212
|
+
$ rip artifact delete-version 550e8400-... 660f9500-...
|
|
211
213
|
|
|
212
214
|
CAUTION:
|
|
213
215
|
This permanently removes the version content.
|
|
214
|
-
Cannot delete the last remaining version — delete the
|
|
216
|
+
Cannot delete the last remaining version — delete the artifact instead.
|
|
215
217
|
`)
|
|
216
218
|
.action(wrapCommand(deleteVersion));
|
|
217
|
-
|
|
219
|
+
artifact
|
|
218
220
|
.command('share')
|
|
219
|
-
.argument('<uuid>', '
|
|
221
|
+
.argument('<uuid>', 'Artifact public ID to generate a share link for')
|
|
220
222
|
.option('--comment-only', 'Only allow commenting (no version creation)')
|
|
221
223
|
.option('--expires <duration>', 'Token expiry: 30m, 1h, 7d, 30d, etc.')
|
|
222
224
|
.option('--for <agentId>', 'Restrict token to a specific agent (rip1...)')
|
|
223
225
|
.description('Generate a shareable link with scoped permissions')
|
|
224
226
|
.addHelpText('after', `
|
|
225
227
|
EXAMPLES:
|
|
226
|
-
$ rip
|
|
227
|
-
$ rip
|
|
228
|
-
$ rip
|
|
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...
|
|
229
231
|
`)
|
|
230
232
|
.action(wrapCommand(share));
|
|
231
|
-
|
|
233
|
+
artifact
|
|
232
234
|
.command('stats')
|
|
233
235
|
.description('Show storage usage statistics')
|
|
234
236
|
.addHelpText('after', `
|
|
235
237
|
EXAMPLES:
|
|
236
|
-
$ rip
|
|
238
|
+
$ rip artifact stats
|
|
237
239
|
|
|
238
|
-
Shows total
|
|
240
|
+
Shows total artifact count and storage bytes broken down by type.
|
|
239
241
|
`)
|
|
240
242
|
.action(wrapCommand(stats));
|
|
241
|
-
|
|
243
|
+
artifact
|
|
242
244
|
.command('get')
|
|
243
|
-
.argument('<identifier>', '
|
|
244
|
-
.description('View details and permissions for any
|
|
245
|
+
.argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
|
|
246
|
+
.description('View details and permissions for any artifact')
|
|
245
247
|
.addHelpText('after', `
|
|
246
248
|
EXAMPLES:
|
|
247
|
-
$ rip
|
|
248
|
-
$ rip
|
|
249
|
-
$ rip
|
|
250
|
-
$ rip
|
|
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
|
|
251
253
|
`)
|
|
252
|
-
.action(wrapCommand(
|
|
253
|
-
|
|
254
|
+
.action(wrapCommand(artifactGet));
|
|
255
|
+
artifact
|
|
254
256
|
.command('download')
|
|
255
|
-
.argument('<identifier>', '
|
|
257
|
+
.argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
|
|
256
258
|
.option('--output <path>', 'Output file path (default: <uuid>.<ext> in current directory)')
|
|
257
259
|
.option('--version <versionId>', 'Download a specific version')
|
|
258
260
|
.option('--format <format>', 'Export format for collections: csv or json (default: csv)')
|
|
259
|
-
.description('Download
|
|
261
|
+
.description('Download artifact content to a local file')
|
|
260
262
|
.addHelpText('after', `
|
|
261
263
|
EXAMPLES:
|
|
262
|
-
$ rip
|
|
263
|
-
$ rip
|
|
264
|
-
$ rip
|
|
265
|
-
$ rip
|
|
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
|
|
266
268
|
`)
|
|
267
|
-
.action(wrapCommand(
|
|
268
|
-
|
|
269
|
+
.action(wrapCommand(artifactDownload));
|
|
270
|
+
artifact
|
|
269
271
|
.command('cat')
|
|
270
|
-
.argument('<identifier>', '
|
|
272
|
+
.argument('<identifier>', 'Artifact UUID, alias, scoped alias (~owner/alias), or full URL')
|
|
271
273
|
.option('--version <versionId>', 'Output a specific version')
|
|
272
|
-
.description('Print
|
|
274
|
+
.description('Print artifact content to stdout')
|
|
273
275
|
.addHelpText('after', `
|
|
274
276
|
EXAMPLES:
|
|
275
|
-
$ rip
|
|
276
|
-
$ rip
|
|
277
|
-
$ rip
|
|
278
|
-
$ rip
|
|
279
|
-
$ rip
|
|
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
|
|
280
282
|
`)
|
|
281
|
-
.action(wrapCommand(
|
|
282
|
-
|
|
283
|
+
.action(wrapCommand(artifactCat));
|
|
284
|
+
artifact
|
|
283
285
|
.command('versions')
|
|
284
|
-
.argument('<uuid>', '
|
|
286
|
+
.argument('<uuid>', 'Artifact UUID or full URL')
|
|
285
287
|
.option('--version <versionId>', 'Get metadata for a specific version')
|
|
286
|
-
.description('List versions of an
|
|
288
|
+
.description('List versions of an artifact')
|
|
287
289
|
.addHelpText('after', `
|
|
288
290
|
EXAMPLES:
|
|
289
|
-
$ rip
|
|
290
|
-
$ rip
|
|
291
|
+
$ rip artifact versions 550e8400-e29b-41d4-a716-446655440000
|
|
292
|
+
$ rip artifact versions 550e8400-... --version abc123
|
|
291
293
|
`)
|
|
292
|
-
.action(wrapCommand(
|
|
293
|
-
|
|
294
|
+
.action(wrapCommand(artifactVersions));
|
|
295
|
+
artifact
|
|
294
296
|
.command('comment')
|
|
295
|
-
.argument('<uuid>', '
|
|
297
|
+
.argument('<uuid>', 'Artifact UUID or full URL')
|
|
296
298
|
.argument('<message>', 'Comment text')
|
|
297
299
|
.option('--intent <intent>', 'Message intent: propose, accept, reject, inform, request')
|
|
298
300
|
.option('--type <type>', 'Message type')
|
|
299
|
-
.option('--version-id <uuid>', '
|
|
300
|
-
.description('Post a comment on an
|
|
301
|
+
.option('--version-id <uuid>', 'Artifact version this comment refers to')
|
|
302
|
+
.description('Post a comment on an artifact')
|
|
301
303
|
.addHelpText('after', `
|
|
302
304
|
EXAMPLES:
|
|
303
|
-
$ rip
|
|
304
|
-
$ rip
|
|
305
|
+
$ rip artifact comment 550e8400-... "Looks good, approved"
|
|
306
|
+
$ rip artifact comment 550e8400-... "Needs revision" --intent reject
|
|
305
307
|
`)
|
|
306
|
-
.action(wrapCommand(
|
|
307
|
-
|
|
308
|
+
.action(wrapCommand(artifactComment));
|
|
309
|
+
artifact
|
|
308
310
|
.command('comments')
|
|
309
|
-
.argument('<uuid>', '
|
|
311
|
+
.argument('<uuid>', 'Artifact UUID or full URL')
|
|
310
312
|
.option('--since <sequence>', 'Show messages after this sequence number')
|
|
311
313
|
.option('--limit <n>', 'Max messages to return')
|
|
312
|
-
.description('List comments on an
|
|
314
|
+
.description('List comments on an artifact')
|
|
313
315
|
.addHelpText('after', `
|
|
314
316
|
EXAMPLES:
|
|
315
|
-
$ rip
|
|
316
|
-
$ rip
|
|
317
|
+
$ rip artifact comments 550e8400-e29b-41d4-a716-446655440000
|
|
318
|
+
$ rip artifact comments 550e8400-... --since 5 --limit 10
|
|
317
319
|
`)
|
|
318
|
-
.action(wrapCommand(
|
|
319
|
-
|
|
320
|
+
.action(wrapCommand(artifactComments));
|
|
321
|
+
artifact
|
|
320
322
|
.command('move')
|
|
321
|
-
.argument('<uuid>', '
|
|
323
|
+
.argument('<uuid>', 'Artifact UUID')
|
|
322
324
|
.option('--folder <slug>', 'Target folder slug')
|
|
323
325
|
.option('--team <slug>', 'Target team (for team folders)')
|
|
324
326
|
.option('--unfiled', 'Remove from current folder')
|
|
325
|
-
.description('Move an
|
|
327
|
+
.description('Move an artifact into a folder or unfile it')
|
|
326
328
|
.addHelpText('after', `
|
|
327
329
|
EXAMPLES:
|
|
328
|
-
$ rip
|
|
329
|
-
$ rip
|
|
330
|
-
$ rip
|
|
330
|
+
$ rip artifact move 550e8400-... --folder reports
|
|
331
|
+
$ rip artifact move 550e8400-... --folder research --team my-team
|
|
332
|
+
$ rip artifact move 550e8400-... --unfiled
|
|
331
333
|
`)
|
|
332
334
|
.action(wrapCommand(async (uuid, options) => {
|
|
333
|
-
const {
|
|
334
|
-
await
|
|
335
|
+
const { artifactMove } = await import('./commands/folder.js');
|
|
336
|
+
await artifactMove(uuid, options);
|
|
335
337
|
}));
|
|
336
|
-
|
|
338
|
+
artifact
|
|
337
339
|
.command('patch')
|
|
338
|
-
.argument('<identifier>', '
|
|
340
|
+
.argument('<identifier>', 'Artifact UUID or alias')
|
|
339
341
|
.option('--metadata <json>', 'Metadata JSON object (replaces existing metadata)')
|
|
340
|
-
.option('--alias <alias>', 'New alias for the
|
|
341
|
-
.option('--title <title>', 'New title for the
|
|
342
|
-
.option('--description <description>', 'New description for the
|
|
343
|
-
.description('Update
|
|
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')
|
|
344
346
|
.addHelpText('after', `
|
|
345
347
|
EXAMPLES:
|
|
346
|
-
$ rip
|
|
347
|
-
$ rip
|
|
348
|
-
$ rip
|
|
349
|
-
$ rip
|
|
350
|
-
$ rip
|
|
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"
|
|
351
353
|
`)
|
|
352
354
|
.action(wrapCommand(patch));
|
|
353
355
|
// ── collection commands ─────────────────────────────────────────────
|
|
@@ -356,7 +358,7 @@ const collection = program
|
|
|
356
358
|
.description('Manage collection rows (append, list, update, delete)');
|
|
357
359
|
collection
|
|
358
360
|
.command('append')
|
|
359
|
-
.argument('<uuid>', 'Collection
|
|
361
|
+
.argument('<uuid>', 'Collection artifact public ID')
|
|
360
362
|
.option('--data <json>', 'Row data as inline JSON (single object or array)')
|
|
361
363
|
.option('--file <path>', 'Path to JSON file with row data (object or array)')
|
|
362
364
|
.description('Append one or more rows to a collection (max 1000 per call)')
|
|
@@ -373,7 +375,7 @@ NOTE: Maximum 1000 rows per call. For larger datasets, split into multiple calls
|
|
|
373
375
|
}));
|
|
374
376
|
collection
|
|
375
377
|
.command('rows')
|
|
376
|
-
.argument('<uuid>', 'Collection
|
|
378
|
+
.argument('<uuid>', 'Collection artifact public ID')
|
|
377
379
|
.option('--limit <n>', 'Max rows to return (default: 100, max: 500)')
|
|
378
380
|
.option('--after <rowId>', 'Cursor: show rows after this row ID')
|
|
379
381
|
.option('--sort-by <column>', 'Sort by column name')
|
|
@@ -393,7 +395,7 @@ EXAMPLES:
|
|
|
393
395
|
}));
|
|
394
396
|
collection
|
|
395
397
|
.command('update')
|
|
396
|
-
.argument('<uuid>', 'Collection
|
|
398
|
+
.argument('<uuid>', 'Collection artifact public ID')
|
|
397
399
|
.argument('<rowId>', 'Row ID to update')
|
|
398
400
|
.requiredOption('--data <json>', 'Fields to update as JSON (partial merge)')
|
|
399
401
|
.description('Update a single row in a collection')
|
|
@@ -407,7 +409,7 @@ EXAMPLES:
|
|
|
407
409
|
}));
|
|
408
410
|
collection
|
|
409
411
|
.command('delete')
|
|
410
|
-
.argument('<uuid>', 'Collection
|
|
412
|
+
.argument('<uuid>', 'Collection artifact public ID')
|
|
411
413
|
.requiredOption('--rows <ids>', 'Comma-separated row IDs to delete')
|
|
412
414
|
.description('Delete rows from a collection')
|
|
413
415
|
.addHelpText('after', `
|
|
@@ -438,11 +440,11 @@ EXAMPLES:
|
|
|
438
440
|
$ rip mountedagent publish mountedagents/chief-of-staff/manifest.json --team acme
|
|
439
441
|
|
|
440
442
|
NOTES:
|
|
441
|
-
Brain
|
|
443
|
+
Brain artifact aliases referenced by the manifest must already be published
|
|
442
444
|
by the active agent identity. Shared memory collections are created or
|
|
443
445
|
updated from the manifest during publish. Claude Code invocation surfaces
|
|
444
446
|
should point at the generated bootloader URL, which installs as
|
|
445
|
-
.claude/commands/<slug>.md and fetches brain
|
|
447
|
+
.claude/commands/<slug>.md and fetches brain artifacts at runtime.
|
|
446
448
|
|
|
447
449
|
--publish requests Tier 2 (public /agents listing) and requires an
|
|
448
450
|
approved Publisher (see: rip publisher apply). --published is the
|
|
@@ -458,6 +460,15 @@ EXAMPLES:
|
|
|
458
460
|
$ rip mountedagent show office-hours
|
|
459
461
|
`)
|
|
460
462
|
.action(wrapCommand(mountedAgentShow));
|
|
463
|
+
mountedagent
|
|
464
|
+
.command('artifacts')
|
|
465
|
+
.argument('<slug>', 'Mounted agent slug')
|
|
466
|
+
.description('List every artifact referenced by an owned mounted-agent imprint')
|
|
467
|
+
.addHelpText('after', `
|
|
468
|
+
EXAMPLES:
|
|
469
|
+
$ rip mountedagent artifacts office-hours
|
|
470
|
+
`)
|
|
471
|
+
.action(wrapCommand(mountedAgentArtifacts));
|
|
461
472
|
mountedagent
|
|
462
473
|
.command('list')
|
|
463
474
|
.description('List mounted agents published by the active identity')
|
|
@@ -481,7 +492,7 @@ EXAMPLES:
|
|
|
481
492
|
NOTES:
|
|
482
493
|
Personal forks are now the default — omit --team to fork into a personal
|
|
483
494
|
imprint owned by the calling agent. The fork is created unpublished. The
|
|
484
|
-
CLI writes the manifest and forked brain/sample
|
|
495
|
+
CLI writes the manifest and forked brain/sample artifacts under
|
|
485
496
|
mountedagents/<slug>/, then you can run /moa --iterate <slug> to customize.
|
|
486
497
|
`)
|
|
487
498
|
.action(wrapCommand(mountedAgentFork));
|
|
@@ -490,11 +501,13 @@ mountedagent
|
|
|
490
501
|
.argument('<slug>', 'Agent imprint slug')
|
|
491
502
|
.option('--team <slug>', 'Bind the mount to a team (collaborative)')
|
|
492
503
|
.option('--name <label>', 'Friendly mount name (required for a second mount of the same imprint)')
|
|
504
|
+
.option('--context-from <file>', 'Seed the mount context artifact from a markdown file')
|
|
493
505
|
.description('Create a deployment of an agent imprint (personal by default; --team makes it collaborative)')
|
|
494
506
|
.addHelpText('after', `
|
|
495
507
|
EXAMPLES:
|
|
496
508
|
$ rip mountedagent mount chief-of-staff
|
|
497
509
|
$ rip mountedagent mount chief-of-staff --team acme --name engineering
|
|
510
|
+
$ rip mountedagent mount blog-writing --name flowers --context-from ./flowers-context.md
|
|
498
511
|
`)
|
|
499
512
|
.action(wrapCommand(mountedAgentMount));
|
|
500
513
|
mountedagent
|
|
@@ -515,6 +528,23 @@ EXAMPLES:
|
|
|
515
528
|
$ rip mountedagent mount-rename <mount-id> engineering
|
|
516
529
|
`)
|
|
517
530
|
.action(wrapCommand(mountedAgentMountRename));
|
|
531
|
+
mountedagent
|
|
532
|
+
.command('show-mount')
|
|
533
|
+
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
534
|
+
.description('Show mount context, imprint version, and materialized layers')
|
|
535
|
+
.action(wrapCommand(mountedAgentShowMount));
|
|
536
|
+
mountedagent
|
|
537
|
+
.command('mount-artifacts')
|
|
538
|
+
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
539
|
+
.description('List context, materialized, and inherited artifacts for a mount')
|
|
540
|
+
.action(wrapCommand(mountedAgentMountArtifacts));
|
|
541
|
+
mountedagent
|
|
542
|
+
.command('mount-context')
|
|
543
|
+
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
544
|
+
.option('--from-file <file>', 'Replace mount context content from a markdown file')
|
|
545
|
+
.option('--edit', 'Open $EDITOR and publish the edited context as a new artifact version')
|
|
546
|
+
.description('Print or update the mount context artifact')
|
|
547
|
+
.action(wrapCommand(mountedAgentMountContext));
|
|
518
548
|
mountedagent
|
|
519
549
|
.command('unmount')
|
|
520
550
|
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
@@ -525,11 +555,140 @@ EXAMPLES:
|
|
|
525
555
|
|
|
526
556
|
NOTES:
|
|
527
557
|
Cascades all mount-owned memory (team-layer + per-operator private rows)
|
|
528
|
-
through
|
|
558
|
+
through artifactService.destroyArtifact, then ends any open sessions, then
|
|
529
559
|
deletes the mount row. Operate on personal mounts you own; team mounts
|
|
530
560
|
can only be destroyed by the team member who created them.
|
|
531
561
|
`)
|
|
532
562
|
.action(wrapCommand(mountedAgentUnmount));
|
|
563
|
+
// ── session lifecycle (used by the generic /tokenrip bootloader) ─────
|
|
564
|
+
//
|
|
565
|
+
// These four commands wrap `MASessionService` so the bootloader skill can
|
|
566
|
+
// drive a tracked session from Claude Code without any MCP setup.
|
|
567
|
+
// Pair them with `--json` (or set TOKENRIP_OUTPUT=json) — output is
|
|
568
|
+
// structured for programmatic consumption.
|
|
569
|
+
mountedagent
|
|
570
|
+
.command('load')
|
|
571
|
+
.argument('<slug>', 'Imprint slug to load')
|
|
572
|
+
.option('--team <slug>', 'Bind to a team mount (caller must be a current team member)')
|
|
573
|
+
.description('Start a session against a published imprint (lazy-creates the caller’s default mount)')
|
|
574
|
+
.addHelpText('after', `
|
|
575
|
+
EXAMPLES:
|
|
576
|
+
$ rip --json mountedagent load office-hours
|
|
577
|
+
$ rip --json mountedagent load chief-of-staff --team acme
|
|
578
|
+
|
|
579
|
+
NOTES:
|
|
580
|
+
Returns the session token, the compiled brain envelope, the layer map,
|
|
581
|
+
and (when present) the mount-context block. Persist the session token —
|
|
582
|
+
every record / rewrite-artifact / end call needs it.
|
|
583
|
+
`)
|
|
584
|
+
.action(wrapCommand(mountedAgentLoad));
|
|
585
|
+
mountedagent
|
|
586
|
+
.command('record')
|
|
587
|
+
.argument('<session-token>', 'Token returned by `mountedagent load`')
|
|
588
|
+
.option('--collection <slug>', 'Logical collection slug (defaults to the manifest default)')
|
|
589
|
+
.option('--row <json>', 'Inline JSON object payload')
|
|
590
|
+
.option('--row-file <file>', 'Read the JSON payload from a file')
|
|
591
|
+
.description('Record a memory row to the session’s collection')
|
|
592
|
+
.addHelpText('after', `
|
|
593
|
+
EXAMPLES:
|
|
594
|
+
$ rip --json mountedagent record <token> --collection patterns \\
|
|
595
|
+
--row '{"pattern":"...","recommendation":"..."}'
|
|
596
|
+
`)
|
|
597
|
+
.action(wrapCommand(mountedAgentRecord));
|
|
598
|
+
mountedagent
|
|
599
|
+
.command('rewrite-artifact')
|
|
600
|
+
.argument('<session-token>', 'Token returned by `mountedagent load`')
|
|
601
|
+
.argument('<logical-alias>', 'Memory-artifact logical alias from manifest.memoryArtifacts[].logicalAlias')
|
|
602
|
+
.option('--content <string>', 'Inline content (UTF-8) for the artifact rewrite')
|
|
603
|
+
.option('--content-from <file>', 'Read the new content from a file')
|
|
604
|
+
.description('Rewrite a memory artifact; publishes a new version on the concrete artifact')
|
|
605
|
+
.addHelpText('after', `
|
|
606
|
+
EXAMPLES:
|
|
607
|
+
$ rip --json mountedagent rewrite-artifact <token> <alias> \\
|
|
608
|
+
--content-from /tmp/new-context.md
|
|
609
|
+
`)
|
|
610
|
+
.action(wrapCommand(mountedAgentRewriteArtifact));
|
|
611
|
+
mountedagent
|
|
612
|
+
.command('end')
|
|
613
|
+
.argument('<session-token>', 'Token returned by `mountedagent load`')
|
|
614
|
+
.option('--summary <text>', 'One-paragraph wrap-up summary')
|
|
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')
|
|
619
|
+
.addHelpText('after', `
|
|
620
|
+
EXAMPLES:
|
|
621
|
+
$ rip --json mountedagent end <token> --summary "Done."
|
|
622
|
+
$ rip --json mountedagent end <token> --summary "..." \\
|
|
623
|
+
--output-from /tmp/wrap-up.md --output-title "Office Hours wrap-up"
|
|
624
|
+
|
|
625
|
+
NOTES:
|
|
626
|
+
Idempotent on repeat calls — re-running with the same token returns the
|
|
627
|
+
prior session output, if any. Imprints with session.produceSessionOutput: false
|
|
628
|
+
return SESSION_OUTPUT_NOT_PERMITTED when --output-from is supplied.
|
|
629
|
+
`)
|
|
630
|
+
.action(wrapCommand(mountedAgentEnd));
|
|
631
|
+
mountedagent
|
|
632
|
+
.command('unpublish')
|
|
633
|
+
.argument('<slug>', 'Imprint slug')
|
|
634
|
+
.description('Set is_published = false on an owned imprint')
|
|
635
|
+
.action(wrapCommand(mountedAgentUnpublish));
|
|
636
|
+
mountedagent
|
|
637
|
+
.command('publish-toggle')
|
|
638
|
+
.argument('<slug>', 'Imprint slug')
|
|
639
|
+
.description('Flip is_published on an owned imprint')
|
|
640
|
+
.action(wrapCommand(mountedAgentPublishToggle));
|
|
641
|
+
mountedagent
|
|
642
|
+
.command('set-featured')
|
|
643
|
+
.argument('<slug>', 'Imprint slug')
|
|
644
|
+
.argument('<weight>', 'Integer weight (higher sorts first) or "clear" to remove')
|
|
645
|
+
.description('Set or clear the featured-weight on an owned imprint')
|
|
646
|
+
.action(wrapCommand(mountedAgentSetFeatured));
|
|
647
|
+
mountedagent
|
|
648
|
+
.command('set-display')
|
|
649
|
+
.argument('<slug>', 'Imprint slug')
|
|
650
|
+
.option('--display-name <name>', 'Display name')
|
|
651
|
+
.option('--tagline <text>', 'Tagline')
|
|
652
|
+
.option('--description <text>', 'Description')
|
|
653
|
+
.option('--capability <text>', 'Capability (repeatable)', (v, prev = []) => prev.concat(v), [])
|
|
654
|
+
.description('Update display block fields without re-publishing the manifest')
|
|
655
|
+
.action(wrapCommand(mountedAgentSetDisplay));
|
|
656
|
+
mountedagent
|
|
657
|
+
.command('delete')
|
|
658
|
+
.argument('<slug>', 'Imprint slug')
|
|
659
|
+
.option('--force', 'Skip typed-slug confirmation', false)
|
|
660
|
+
.description('Destroy an imprint and cascade its mounts and memory (irreversible)')
|
|
661
|
+
.action(wrapCommand(mountedAgentDelete));
|
|
662
|
+
// ── admin commands ──────────────────────────────────────────────────
|
|
663
|
+
const adminCmd = program.command('admin').description('Admin-only commands');
|
|
664
|
+
const adminMountedAgentCmd = adminCmd
|
|
665
|
+
.command('mountedagent')
|
|
666
|
+
.description('Admin imprint management');
|
|
667
|
+
adminMountedAgentCmd
|
|
668
|
+
.command('list')
|
|
669
|
+
.description('List all imprints across all owners (admin)')
|
|
670
|
+
.action(wrapCommand(adminMountedAgentList));
|
|
671
|
+
adminMountedAgentCmd
|
|
672
|
+
.command('show')
|
|
673
|
+
.argument('<slug>', 'Imprint slug')
|
|
674
|
+
.description('Show any imprint by slug (admin)')
|
|
675
|
+
.action(wrapCommand(adminMountedAgentShow));
|
|
676
|
+
adminMountedAgentCmd
|
|
677
|
+
.command('unpublish')
|
|
678
|
+
.argument('<slug>', 'Imprint slug')
|
|
679
|
+
.description('Force-unpublish an imprint regardless of owner (admin)')
|
|
680
|
+
.action(wrapCommand(adminMountedAgentUnpublish));
|
|
681
|
+
adminMountedAgentCmd
|
|
682
|
+
.command('set-featured')
|
|
683
|
+
.argument('<slug>', 'Imprint slug')
|
|
684
|
+
.argument('<weight>', 'Integer weight or "clear" to remove')
|
|
685
|
+
.description('Set or clear featured weight on any imprint (admin)')
|
|
686
|
+
.action(wrapCommand(adminMountedAgentSetFeatured));
|
|
687
|
+
adminMountedAgentCmd
|
|
688
|
+
.command('sessions')
|
|
689
|
+
.argument('<slug>', 'Imprint slug')
|
|
690
|
+
.description('List recent sessions for an imprint (admin)')
|
|
691
|
+
.action(wrapCommand(adminMountedAgentSessions));
|
|
533
692
|
// ── publisher commands ──────────────────────────────────────────────
|
|
534
693
|
const publisher = program
|
|
535
694
|
.command('publisher')
|
|
@@ -697,9 +856,9 @@ agent
|
|
|
697
856
|
// ── inbox command ──────────────────────────────────────────────────
|
|
698
857
|
program
|
|
699
858
|
.command('inbox')
|
|
700
|
-
.description('Poll for new thread messages and
|
|
859
|
+
.description('Poll for new thread messages and artifact updates')
|
|
701
860
|
.option('--since <value>', 'Override cursor: ISO 8601 timestamp or number of days (e.g. 1 = 24h, 7 = week)')
|
|
702
|
-
.option('--types <types>', 'Filter: threads,
|
|
861
|
+
.option('--types <types>', 'Filter: threads, artifacts, or both (comma-separated)')
|
|
703
862
|
.option('--limit <n>', 'Max items per type (default: 50, max: 200)')
|
|
704
863
|
.option('--clear', 'Advance the stored cursor after fetching (marks items as seen)')
|
|
705
864
|
.option('--team <slug>', 'Filter inbox to a specific team')
|
|
@@ -707,13 +866,13 @@ program
|
|
|
707
866
|
EXAMPLES:
|
|
708
867
|
$ rip inbox
|
|
709
868
|
$ rip inbox --types threads
|
|
710
|
-
$ rip inbox --types
|
|
869
|
+
$ rip inbox --types artifacts --limit 10
|
|
711
870
|
$ rip inbox --since 1 # last 24 hours
|
|
712
871
|
$ rip inbox --since 7 # last week
|
|
713
872
|
$ rip inbox --since 2026-04-01T00:00:00Z # exact timestamp
|
|
714
873
|
$ rip inbox --clear # advance cursor
|
|
715
874
|
|
|
716
|
-
Shows new thread messages and
|
|
875
|
+
Shows new thread messages and artifact updates since your last check.
|
|
717
876
|
The cursor is NOT advanced unless --clear is passed.
|
|
718
877
|
Use --since to look back without affecting the cursor.
|
|
719
878
|
`)
|
|
@@ -725,22 +884,22 @@ EXAMPLES:
|
|
|
725
884
|
program
|
|
726
885
|
.command('search')
|
|
727
886
|
.argument('<query>', 'Search text')
|
|
728
|
-
.description('Full-text search across threads and
|
|
729
|
-
.option('--type <type>', 'Filter: thread or
|
|
887
|
+
.description('Full-text search across threads and artifacts')
|
|
888
|
+
.option('--type <type>', 'Filter: thread or artifact')
|
|
730
889
|
.option('--since <when>', 'ISO 8601 timestamp or integer days back (e.g. 7 = last week)')
|
|
731
890
|
.option('--limit <n>', 'Max results (default: 50, max: 200)')
|
|
732
891
|
.option('--offset <n>', 'Pagination offset')
|
|
733
892
|
.option('--state <state>', 'Thread state: open or closed')
|
|
734
893
|
.option('--intent <intent>', 'Filter by last message intent')
|
|
735
|
-
.option('--ref <uuid>', 'Filter threads referencing this
|
|
736
|
-
.option('--
|
|
737
|
-
.option('--archived', 'Search only archived
|
|
738
|
-
.option('--include-archived', 'Include archived
|
|
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')
|
|
739
898
|
.addHelpText('after', `
|
|
740
899
|
EXAMPLES:
|
|
741
900
|
$ rip search "quarterly report"
|
|
742
901
|
$ rip search "deploy" --type thread --state open
|
|
743
|
-
$ rip search "chart" --
|
|
902
|
+
$ rip search "chart" --artifact-type chart --since 7
|
|
744
903
|
$ rip search "proposal" --intent propose --limit 10
|
|
745
904
|
$ rip search "old report" --archived
|
|
746
905
|
$ rip search "report" --include-archived
|
|
@@ -787,19 +946,19 @@ msg
|
|
|
787
946
|
.argument('<body>', 'Message text')
|
|
788
947
|
.option('--to <recipient>', 'Recipient: agent ID, contact name, or alias')
|
|
789
948
|
.option('--thread <id>', 'Reply to existing thread')
|
|
790
|
-
.option('--
|
|
949
|
+
.option('--artifact <uuid>', 'Comment on an artifact')
|
|
791
950
|
.option('--intent <intent>', 'Message intent: propose, accept, reject, counter, inform, request, confirm')
|
|
792
951
|
.option('--type <type>', 'Message type: meeting, review, notification, status_update')
|
|
793
952
|
.option('--data <json>', 'Structured JSON payload')
|
|
794
953
|
.option('--in-reply-to <id>', 'Message ID being replied to')
|
|
795
|
-
.option('--version-id <uuid>', '
|
|
796
|
-
.description('Send a message to an agent, thread, or
|
|
954
|
+
.option('--version-id <uuid>', 'Artifact version this message refers to')
|
|
955
|
+
.description('Send a message to an agent, thread, or artifact')
|
|
797
956
|
.addHelpText('after', `
|
|
798
957
|
EXAMPLES:
|
|
799
958
|
$ rip msg send --to alice "Can you generate the Q3 report?"
|
|
800
959
|
$ rip msg send --to rip1x9a2... "Ready" --intent request
|
|
801
960
|
$ rip msg send --thread 550e8400-... "Looks good" --intent accept
|
|
802
|
-
$ rip msg send --
|
|
961
|
+
$ rip msg send --artifact 550e8400-... "Approved for distribution"
|
|
803
962
|
`)
|
|
804
963
|
.action(wrapCommand(async (body, options) => {
|
|
805
964
|
const { msgSend } = await import('./commands/msg.js');
|
|
@@ -808,14 +967,14 @@ EXAMPLES:
|
|
|
808
967
|
msg
|
|
809
968
|
.command('list')
|
|
810
969
|
.option('--thread <id>', 'Thread ID to read messages from')
|
|
811
|
-
.option('--
|
|
970
|
+
.option('--artifact <uuid>', 'Artifact ID to read comments from')
|
|
812
971
|
.option('--since <sequence>', 'Show messages after this sequence number')
|
|
813
972
|
.option('--limit <n>', 'Max messages to return (default: 50, max: 200)')
|
|
814
|
-
.description('List messages in a thread or comments on an
|
|
973
|
+
.description('List messages in a thread or comments on an artifact')
|
|
815
974
|
.addHelpText('after', `
|
|
816
975
|
EXAMPLES:
|
|
817
976
|
$ rip msg list --thread 550e8400-...
|
|
818
|
-
$ rip msg list --
|
|
977
|
+
$ rip msg list --artifact 550e8400-...
|
|
819
978
|
$ rip msg list --thread 550e8400-... --since 10 --limit 20
|
|
820
979
|
`)
|
|
821
980
|
.action(wrapCommand(async (options) => {
|
|
@@ -843,8 +1002,8 @@ thread
|
|
|
843
1002
|
.command('create')
|
|
844
1003
|
.option('--collaborators <agents>', 'Comma-separated agent IDs, contact names, or aliases')
|
|
845
1004
|
.option('--message <text>', 'Initial message body')
|
|
846
|
-
.option('--refs <refs>', 'Comma-separated
|
|
847
|
-
.option('--
|
|
1005
|
+
.option('--refs <refs>', 'Comma-separated artifact IDs or URLs to link')
|
|
1006
|
+
.option('--artifact <uuid>', 'Convenience: link a single artifact to the thread')
|
|
848
1007
|
.option('--title <title>', 'Thread title (stored in metadata)')
|
|
849
1008
|
.option('--team <slug>', 'Create as a team thread (all team members added automatically)')
|
|
850
1009
|
.option('--tour-welcome', 'Trigger @tokenrip welcome message (tour only)')
|
|
@@ -854,7 +1013,7 @@ EXAMPLES:
|
|
|
854
1013
|
$ rip thread create --collaborators alice,bob
|
|
855
1014
|
$ rip thread create --collaborators alice --message "Kickoff"
|
|
856
1015
|
$ rip thread create --collaborators alice --refs 550e8400-...,https://figma.com/file/xyz
|
|
857
|
-
$ rip thread create --collaborators alice --
|
|
1016
|
+
$ rip thread create --collaborators alice --artifact 550e8400-... --title "Review"
|
|
858
1017
|
`)
|
|
859
1018
|
.action(wrapCommand(async (options) => {
|
|
860
1019
|
const { threadCreate } = await import('./commands/thread.js');
|
|
@@ -907,8 +1066,8 @@ EXAMPLES:
|
|
|
907
1066
|
thread
|
|
908
1067
|
.command('add-refs')
|
|
909
1068
|
.argument('<id>', 'Thread ID')
|
|
910
|
-
.argument('<refs>', 'Comma-separated
|
|
911
|
-
.description('Add linked resources (
|
|
1069
|
+
.argument('<refs>', 'Comma-separated artifact IDs or URLs to link')
|
|
1070
|
+
.description('Add linked resources (artifacts or URLs) to a thread')
|
|
912
1071
|
.addHelpText('after', `
|
|
913
1072
|
EXAMPLES:
|
|
914
1073
|
$ rip thread add-refs 550e8400-... aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
|
|
@@ -1317,7 +1476,7 @@ folder
|
|
|
1317
1476
|
.command('delete')
|
|
1318
1477
|
.argument('<slug>', 'Folder slug')
|
|
1319
1478
|
.option('--team <slug>', 'Delete a team folder')
|
|
1320
|
-
.description('Delete a folder (archives its
|
|
1479
|
+
.description('Delete a folder (archives its artifacts)')
|
|
1321
1480
|
.action(wrapCommand(async (slug, options) => {
|
|
1322
1481
|
const { folderDelete } = await import('./commands/folder.js');
|
|
1323
1482
|
await folderDelete(slug, options);
|