@tokenrip/cli 1.3.13 → 1.4.1
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 +129 -127
- package/README.md +10 -10
- package/SKILL.md +220 -216
- package/dist/agent-crypto.js +1 -1
- package/dist/agent-crypto.js.map +1 -1
- package/dist/cjs/agent-crypto.js +1 -1
- package/dist/cjs/agent-crypto.js.map +1 -1
- package/dist/cjs/client.js +1 -1
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/commands/account.js +130 -0
- package/dist/cjs/commands/account.js.map +1 -0
- package/dist/cjs/commands/admin-agent.js +50 -0
- package/dist/cjs/commands/admin-agent.js.map +1 -0
- package/dist/cjs/commands/agent.js +335 -106
- package/dist/cjs/commands/agent.js.map +1 -1
- 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/auth.js +8 -8
- package/dist/cjs/commands/auth.js.map +1 -1
- 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/link.js +4 -4
- package/dist/cjs/commands/link.js.map +1 -1
- package/dist/cjs/commands/mountedagent.js +8 -179
- 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/operator-link.js +3 -3
- package/dist/cjs/commands/operator-link.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/config.js.map +1 -1
- package/dist/cjs/crypto.js +8 -5
- package/dist/cjs/crypto.js.map +1 -1
- package/dist/cjs/formatters.js +78 -78
- package/dist/cjs/formatters.js.map +1 -1
- package/dist/cjs/identities.js +30 -15
- package/dist/cjs/identities.js.map +1 -1
- package/dist/cjs/index.js +4 -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 +328 -327
- package/dist/cli.js.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts +14 -0
- package/dist/commands/account.js +119 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/admin-agent.d.ts +5 -0
- package/dist/commands/admin-agent.js +43 -0
- package/dist/commands/admin-agent.js.map +1 -0
- package/dist/commands/agent.d.ts +58 -14
- package/dist/commands/agent.js +315 -101
- package/dist/commands/agent.js.map +1 -1
- 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/auth.js +8 -8
- package/dist/commands/auth.js.map +1 -1
- 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/link.js +4 -4
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/mountedagent.d.ts +0 -26
- package/dist/commands/mountedagent.js +10 -173
- 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/operator-link.js +3 -3
- package/dist/commands/operator-link.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/config.d.ts +2 -0
- package/dist/config.js.map +1 -1
- package/dist/crypto.d.ts +4 -2
- package/dist/crypto.js +5 -3
- package/dist/crypto.js.map +1 -1
- package/dist/formatters.d.ts +13 -13
- package/dist/formatters.js +63 -63
- package/dist/formatters.js.map +1 -1
- package/dist/identities.d.ts +6 -2
- package/dist/identities.js +28 -14
- package/dist/identities.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- 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,21 +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 {
|
|
22
|
-
import {
|
|
21
|
+
import { agentArtifacts, agentDelete, agentEnd, agentFork, agentList, agentLoad, agentMount, agentMountArtifacts, agentMountContext, agentMountRename, agentMounts, agentPublish, agentPublishToggle, agentRecord, agentRewriteArtifact, agentSetDisplay, agentSetFeatured, agentShow, agentShowMount, agentUnmount, agentUnpublish } from './commands/agent.js';
|
|
22
|
+
import { adminAgentList, adminAgentSessions, adminAgentSetFeatured, adminAgentShow, adminAgentUnpublish } from './commands/admin-agent.js';
|
|
23
23
|
import { tour, tourNext, tourRestart } from './commands/tour.js';
|
|
24
24
|
import { wrapCommand, setForceJson, setConfigHuman, outputSuccess } from './output.js';
|
|
25
25
|
import { loadConfig } from './config.js';
|
|
@@ -43,44 +43,45 @@ program
|
|
|
43
43
|
setAgentOverride(opts.agent);
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
|
-
// ──
|
|
47
|
-
const
|
|
48
|
-
.command('
|
|
49
|
-
.
|
|
50
|
-
|
|
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
|
|
54
|
-
.option('--parent <uuid>', 'Parent
|
|
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
|
|
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
|
|
64
|
-
$ rip
|
|
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
|
-
|
|
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
|
|
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
|
|
75
|
-
.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')
|
|
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
|
|
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
|
|
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
|
|
99
|
-
$ rip
|
|
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
|
|
102
|
-
$ rip
|
|
103
|
-
$ 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" \\
|
|
104
105
|
--schema '[{"name":"company","type":"text"},{"name":"signal","type":"text"}]'
|
|
105
|
-
$ rip
|
|
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
|
-
|
|
110
|
+
artifact
|
|
110
111
|
.command('list')
|
|
111
|
-
.option('--since <iso-date>', 'Only show
|
|
112
|
-
.option('--limit <n>', 'Maximum number of
|
|
113
|
-
.option('--type <type>', 'Filter by
|
|
114
|
-
.option('--archived', 'Show only archived
|
|
115
|
-
.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')
|
|
116
117
|
.option('--folder <slug>', 'Filter by folder')
|
|
117
|
-
.option('--unfiled', 'Show only unfiled
|
|
118
|
-
.option('--team <slug>', 'Filter to team
|
|
119
|
-
.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')
|
|
120
121
|
.addHelpText('after', `
|
|
121
122
|
EXAMPLES:
|
|
122
|
-
$ rip
|
|
123
|
-
$ rip
|
|
124
|
-
$ rip
|
|
125
|
-
$ rip
|
|
126
|
-
$ rip
|
|
127
|
-
$ rip
|
|
128
|
-
$ rip
|
|
129
|
-
$ rip
|
|
130
|
-
$ 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
|
|
131
132
|
`)
|
|
132
133
|
.action(wrapCommand(status));
|
|
133
|
-
|
|
134
|
+
artifact
|
|
134
135
|
.command('delete')
|
|
135
|
-
.argument('<identifier>', '
|
|
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
|
|
138
|
+
.description('Permanently delete an artifact and its shareable link')
|
|
138
139
|
.addHelpText('after', `
|
|
139
140
|
EXAMPLES:
|
|
140
|
-
$ rip
|
|
141
|
-
$ rip
|
|
142
|
-
$ 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
|
|
143
144
|
|
|
144
145
|
CAUTION:
|
|
145
|
-
This permanently removes the
|
|
146
|
+
This permanently removes the artifact and its shareable link.
|
|
146
147
|
This action cannot be undone.
|
|
147
148
|
`)
|
|
148
|
-
.action(wrapCommand(
|
|
149
|
-
|
|
149
|
+
.action(wrapCommand(deleteArtifact));
|
|
150
|
+
artifact
|
|
150
151
|
.command('archive')
|
|
151
|
-
.argument('<identifier>', '
|
|
152
|
-
.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)')
|
|
153
154
|
.addHelpText('after', `
|
|
154
155
|
EXAMPLES:
|
|
155
|
-
$ rip
|
|
156
|
-
$ rip
|
|
157
|
-
$ 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
|
|
158
159
|
|
|
159
|
-
Archived
|
|
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(
|
|
163
|
-
|
|
163
|
+
.action(wrapCommand(archiveArtifact));
|
|
164
|
+
artifact
|
|
164
165
|
.command('unarchive')
|
|
165
|
-
.argument('<identifier>', '
|
|
166
|
-
.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')
|
|
167
168
|
.addHelpText('after', `
|
|
168
169
|
EXAMPLES:
|
|
169
|
-
$ rip
|
|
170
|
-
$ rip
|
|
170
|
+
$ rip artifact unarchive 550e8400-e29b-41d4-a716-446655440000
|
|
171
|
+
$ rip artifact unarchive my-alias
|
|
171
172
|
`)
|
|
172
|
-
.action(wrapCommand(
|
|
173
|
-
|
|
173
|
+
.action(wrapCommand(unarchiveArtifact));
|
|
174
|
+
artifact
|
|
174
175
|
.command('fork')
|
|
175
|
-
.argument('<identifier>', '
|
|
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
|
|
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
|
|
180
|
+
.description('Create your own copy of an existing artifact')
|
|
180
181
|
.addHelpText('after', `
|
|
181
182
|
EXAMPLES:
|
|
182
|
-
$ rip
|
|
183
|
-
$ rip
|
|
184
|
-
$ rip
|
|
185
|
-
$ 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
|
|
186
187
|
`)
|
|
187
|
-
.action(wrapCommand(
|
|
188
|
-
|
|
188
|
+
.action(wrapCommand(forkArtifact));
|
|
189
|
+
artifact
|
|
189
190
|
.command('update')
|
|
190
|
-
.argument('<uuid>', '
|
|
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
|
|
197
|
+
.description('Publish a new version of an existing artifact')
|
|
197
198
|
.addHelpText('after', `
|
|
198
199
|
EXAMPLES:
|
|
199
|
-
$ rip
|
|
200
|
-
$ rip
|
|
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
|
-
|
|
204
|
+
artifact
|
|
204
205
|
.command('delete-version')
|
|
205
|
-
.argument('<uuid>', '
|
|
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
|
|
209
|
+
.description('Delete a specific version of an artifact')
|
|
209
210
|
.addHelpText('after', `
|
|
210
211
|
EXAMPLES:
|
|
211
|
-
$ rip
|
|
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
|
|
216
|
+
Cannot delete the last remaining version — delete the artifact instead.
|
|
216
217
|
`)
|
|
217
218
|
.action(wrapCommand(deleteVersion));
|
|
218
|
-
|
|
219
|
+
artifact
|
|
219
220
|
.command('share')
|
|
220
|
-
.argument('<uuid>', '
|
|
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
|
|
228
|
-
$ rip
|
|
229
|
-
$ 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...
|
|
230
231
|
`)
|
|
231
232
|
.action(wrapCommand(share));
|
|
232
|
-
|
|
233
|
+
artifact
|
|
233
234
|
.command('stats')
|
|
234
235
|
.description('Show storage usage statistics')
|
|
235
236
|
.addHelpText('after', `
|
|
236
237
|
EXAMPLES:
|
|
237
|
-
$ rip
|
|
238
|
+
$ rip artifact stats
|
|
238
239
|
|
|
239
|
-
Shows total
|
|
240
|
+
Shows total artifact count and storage bytes broken down by type.
|
|
240
241
|
`)
|
|
241
242
|
.action(wrapCommand(stats));
|
|
242
|
-
|
|
243
|
+
artifact
|
|
243
244
|
.command('get')
|
|
244
|
-
.argument('<identifier>', '
|
|
245
|
-
.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')
|
|
246
247
|
.addHelpText('after', `
|
|
247
248
|
EXAMPLES:
|
|
248
|
-
$ rip
|
|
249
|
-
$ rip
|
|
250
|
-
$ rip
|
|
251
|
-
$ 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
|
|
252
253
|
`)
|
|
253
|
-
.action(wrapCommand(
|
|
254
|
-
|
|
254
|
+
.action(wrapCommand(artifactGet));
|
|
255
|
+
artifact
|
|
255
256
|
.command('download')
|
|
256
|
-
.argument('<identifier>', '
|
|
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
|
|
261
|
+
.description('Download artifact content to a local file')
|
|
261
262
|
.addHelpText('after', `
|
|
262
263
|
EXAMPLES:
|
|
263
|
-
$ rip
|
|
264
|
-
$ rip
|
|
265
|
-
$ rip
|
|
266
|
-
$ 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
|
|
267
268
|
`)
|
|
268
|
-
.action(wrapCommand(
|
|
269
|
-
|
|
269
|
+
.action(wrapCommand(artifactDownload));
|
|
270
|
+
artifact
|
|
270
271
|
.command('cat')
|
|
271
|
-
.argument('<identifier>', '
|
|
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
|
|
274
|
+
.description('Print artifact content to stdout')
|
|
274
275
|
.addHelpText('after', `
|
|
275
276
|
EXAMPLES:
|
|
276
|
-
$ rip
|
|
277
|
-
$ rip
|
|
278
|
-
$ rip
|
|
279
|
-
$ rip
|
|
280
|
-
$ 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
|
|
281
282
|
`)
|
|
282
|
-
.action(wrapCommand(
|
|
283
|
-
|
|
283
|
+
.action(wrapCommand(artifactCat));
|
|
284
|
+
artifact
|
|
284
285
|
.command('versions')
|
|
285
|
-
.argument('<uuid>', '
|
|
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
|
|
288
|
+
.description('List versions of an artifact')
|
|
288
289
|
.addHelpText('after', `
|
|
289
290
|
EXAMPLES:
|
|
290
|
-
$ rip
|
|
291
|
-
$ rip
|
|
291
|
+
$ rip artifact versions 550e8400-e29b-41d4-a716-446655440000
|
|
292
|
+
$ rip artifact versions 550e8400-... --version abc123
|
|
292
293
|
`)
|
|
293
|
-
.action(wrapCommand(
|
|
294
|
-
|
|
294
|
+
.action(wrapCommand(artifactVersions));
|
|
295
|
+
artifact
|
|
295
296
|
.command('comment')
|
|
296
|
-
.argument('<uuid>', '
|
|
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>', '
|
|
301
|
-
.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')
|
|
302
303
|
.addHelpText('after', `
|
|
303
304
|
EXAMPLES:
|
|
304
|
-
$ rip
|
|
305
|
-
$ rip
|
|
305
|
+
$ rip artifact comment 550e8400-... "Looks good, approved"
|
|
306
|
+
$ rip artifact comment 550e8400-... "Needs revision" --intent reject
|
|
306
307
|
`)
|
|
307
|
-
.action(wrapCommand(
|
|
308
|
-
|
|
308
|
+
.action(wrapCommand(artifactComment));
|
|
309
|
+
artifact
|
|
309
310
|
.command('comments')
|
|
310
|
-
.argument('<uuid>', '
|
|
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
|
|
314
|
+
.description('List comments on an artifact')
|
|
314
315
|
.addHelpText('after', `
|
|
315
316
|
EXAMPLES:
|
|
316
|
-
$ rip
|
|
317
|
-
$ rip
|
|
317
|
+
$ rip artifact comments 550e8400-e29b-41d4-a716-446655440000
|
|
318
|
+
$ rip artifact comments 550e8400-... --since 5 --limit 10
|
|
318
319
|
`)
|
|
319
|
-
.action(wrapCommand(
|
|
320
|
-
|
|
320
|
+
.action(wrapCommand(artifactComments));
|
|
321
|
+
artifact
|
|
321
322
|
.command('move')
|
|
322
|
-
.argument('<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
|
|
327
|
+
.description('Move an artifact into a folder or unfile it')
|
|
327
328
|
.addHelpText('after', `
|
|
328
329
|
EXAMPLES:
|
|
329
|
-
$ rip
|
|
330
|
-
$ rip
|
|
331
|
-
$ rip
|
|
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 {
|
|
335
|
-
await
|
|
335
|
+
const { artifactMove } = await import('./commands/folder.js');
|
|
336
|
+
await artifactMove(uuid, options);
|
|
336
337
|
}));
|
|
337
|
-
|
|
338
|
+
artifact
|
|
338
339
|
.command('patch')
|
|
339
|
-
.argument('<identifier>', '
|
|
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
|
|
342
|
-
.option('--title <title>', 'New title for the
|
|
343
|
-
.option('--description <description>', 'New description for the
|
|
344
|
-
.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')
|
|
345
346
|
.addHelpText('after', `
|
|
346
347
|
EXAMPLES:
|
|
347
|
-
$ rip
|
|
348
|
-
$ rip
|
|
349
|
-
$ rip
|
|
350
|
-
$ rip
|
|
351
|
-
$ 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"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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', `
|
|
@@ -419,104 +420,104 @@ EXAMPLES:
|
|
|
419
420
|
const { collectionDelete } = await import('./commands/collection.js');
|
|
420
421
|
await collectionDelete(uuid, options);
|
|
421
422
|
}));
|
|
422
|
-
// ──
|
|
423
|
+
// ── agent commands ───────────────────────────────────────────────────
|
|
423
424
|
const mountedagent = program
|
|
424
|
-
.command('
|
|
425
|
+
.command('agent')
|
|
425
426
|
.alias('ma')
|
|
426
|
-
.description('Publish and
|
|
427
|
+
.description('Publish and manage agents');
|
|
427
428
|
mountedagent
|
|
428
429
|
.command('publish')
|
|
429
|
-
.argument('<manifest>', 'Path to
|
|
430
|
+
.argument('<manifest>', 'Path to agent manifest JSON')
|
|
430
431
|
.option('--publish', 'Tier 2 — request public listing (requires an approved Publisher)')
|
|
431
432
|
.option('--published', '[deprecated] alias for --publish; mapped automatically with a warning')
|
|
432
433
|
.option('--featured <weight>', 'Set featured display weight; higher values sort first')
|
|
433
|
-
.option('--team <slug>', 'Publish as a team-owned
|
|
434
|
-
.description('Publish or update
|
|
434
|
+
.option('--team <slug>', 'Publish as a team-owned agent (maps to teamSlug in v2)')
|
|
435
|
+
.description('Publish or update an agent from a manifest')
|
|
435
436
|
.addHelpText('after', `
|
|
436
437
|
EXAMPLES:
|
|
437
|
-
$ rip
|
|
438
|
-
$ rip
|
|
439
|
-
$ rip
|
|
438
|
+
$ rip agent publish agents/office-hours/manifest.json
|
|
439
|
+
$ rip agent publish agents/office-hours/manifest.json --publish --featured 10
|
|
440
|
+
$ rip agent publish agents/chief-of-staff/manifest.json --team acme
|
|
440
441
|
|
|
441
442
|
NOTES:
|
|
442
|
-
Brain
|
|
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
|
|
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
|
|
450
451
|
legacy v1 flag and is mapped to --publish for backward compatibility.
|
|
451
452
|
`)
|
|
452
|
-
.action(wrapCommand(
|
|
453
|
+
.action(wrapCommand(agentPublish));
|
|
453
454
|
mountedagent
|
|
454
455
|
.command('show')
|
|
455
|
-
.argument('<slug>', '
|
|
456
|
-
.description('Show
|
|
456
|
+
.argument('<slug>', 'Agent slug')
|
|
457
|
+
.description('Show an agent published by the active identity')
|
|
457
458
|
.addHelpText('after', `
|
|
458
459
|
EXAMPLES:
|
|
459
|
-
$ rip
|
|
460
|
+
$ rip agent show office-hours
|
|
460
461
|
`)
|
|
461
|
-
.action(wrapCommand(
|
|
462
|
+
.action(wrapCommand(agentShow));
|
|
462
463
|
mountedagent
|
|
463
|
-
.command('
|
|
464
|
-
.argument('<slug>', '
|
|
465
|
-
.description('List every
|
|
464
|
+
.command('artifacts')
|
|
465
|
+
.argument('<slug>', 'Agent slug')
|
|
466
|
+
.description('List every artifact referenced by an owned agent')
|
|
466
467
|
.addHelpText('after', `
|
|
467
468
|
EXAMPLES:
|
|
468
|
-
$ rip
|
|
469
|
+
$ rip agent artifacts office-hours
|
|
469
470
|
`)
|
|
470
|
-
.action(wrapCommand(
|
|
471
|
+
.action(wrapCommand(agentArtifacts));
|
|
471
472
|
mountedagent
|
|
472
473
|
.command('list')
|
|
473
|
-
.description('List
|
|
474
|
+
.description('List agents published by the active identity')
|
|
474
475
|
.addHelpText('after', `
|
|
475
476
|
EXAMPLES:
|
|
476
|
-
$ rip
|
|
477
|
+
$ rip agent list
|
|
477
478
|
`)
|
|
478
|
-
.action(wrapCommand(
|
|
479
|
+
.action(wrapCommand(agentList));
|
|
479
480
|
mountedagent
|
|
480
481
|
.command('fork')
|
|
481
|
-
.argument('<template-slug>', 'Published
|
|
482
|
+
.argument('<template-slug>', 'Published agent template slug')
|
|
482
483
|
.option('--team <team-slug>', 'Team slug that will own the fork (omit for a personal fork)')
|
|
483
|
-
.option('--slug <new-slug>', 'Override the generated
|
|
484
|
-
.description('Fork a published
|
|
484
|
+
.option('--slug <new-slug>', 'Override the generated agent slug')
|
|
485
|
+
.description('Fork a published agent template into a personal or team-owned scaffold')
|
|
485
486
|
.addHelpText('after', `
|
|
486
487
|
EXAMPLES:
|
|
487
|
-
$ rip
|
|
488
|
-
$ rip
|
|
489
|
-
$ rip
|
|
488
|
+
$ rip agent fork chief-of-staff
|
|
489
|
+
$ rip agent fork chief-of-staff --team my-team
|
|
490
|
+
$ rip agent fork chief-of-staff --team my-team --slug my-team-cos
|
|
490
491
|
|
|
491
492
|
NOTES:
|
|
492
493
|
Personal forks are now the default — omit --team to fork into a personal
|
|
493
|
-
|
|
494
|
-
CLI writes the manifest and forked brain/sample
|
|
495
|
-
|
|
494
|
+
agent owned by the calling account. The fork is created unpublished. The
|
|
495
|
+
CLI writes the manifest and forked brain/sample artifacts under
|
|
496
|
+
agents/<slug>/, then you can run /moa --iterate <slug> to customize.
|
|
496
497
|
`)
|
|
497
|
-
.action(wrapCommand(
|
|
498
|
+
.action(wrapCommand(agentFork));
|
|
498
499
|
mountedagent
|
|
499
500
|
.command('mount')
|
|
500
|
-
.argument('<slug>', 'Agent
|
|
501
|
+
.argument('<slug>', 'Agent slug')
|
|
501
502
|
.option('--team <slug>', 'Bind the mount to a team (collaborative)')
|
|
502
|
-
.option('--name <label>', 'Friendly mount name (required for a second mount of the same
|
|
503
|
-
.option('--context-from <file>', 'Seed the mount context
|
|
504
|
-
.description('Create a deployment of an agent
|
|
503
|
+
.option('--name <label>', 'Friendly mount name (required for a second mount of the same agent)')
|
|
504
|
+
.option('--context-from <file>', 'Seed the mount context artifact from a markdown file')
|
|
505
|
+
.description('Create a deployment of an agent (personal by default; --team makes it collaborative)')
|
|
505
506
|
.addHelpText('after', `
|
|
506
507
|
EXAMPLES:
|
|
507
|
-
$ rip
|
|
508
|
-
$ rip
|
|
509
|
-
$ rip
|
|
508
|
+
$ rip agent mount chief-of-staff
|
|
509
|
+
$ rip agent mount chief-of-staff --team acme --name engineering
|
|
510
|
+
$ rip agent mount blog-writing --name flowers --context-from ./flowers-context.md
|
|
510
511
|
`)
|
|
511
|
-
.action(wrapCommand(
|
|
512
|
+
.action(wrapCommand(agentMount));
|
|
512
513
|
mountedagent
|
|
513
514
|
.command('mounts')
|
|
514
515
|
.description("List the caller's mounts (personal + accessible team mounts)")
|
|
515
516
|
.addHelpText('after', `
|
|
516
517
|
EXAMPLES:
|
|
517
|
-
$ rip
|
|
518
|
+
$ rip agent mounts
|
|
518
519
|
`)
|
|
519
|
-
.action(wrapCommand(
|
|
520
|
+
.action(wrapCommand(agentMounts));
|
|
520
521
|
mountedagent
|
|
521
522
|
.command('mount-rename')
|
|
522
523
|
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
@@ -524,170 +525,170 @@ mountedagent
|
|
|
524
525
|
.description('Rename a mount')
|
|
525
526
|
.addHelpText('after', `
|
|
526
527
|
EXAMPLES:
|
|
527
|
-
$ rip
|
|
528
|
+
$ rip agent mount-rename <mount-id> engineering
|
|
528
529
|
`)
|
|
529
|
-
.action(wrapCommand(
|
|
530
|
+
.action(wrapCommand(agentMountRename));
|
|
530
531
|
mountedagent
|
|
531
532
|
.command('show-mount')
|
|
532
533
|
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
533
|
-
.description('Show mount context,
|
|
534
|
-
.action(wrapCommand(
|
|
534
|
+
.description('Show mount context, agent version, and materialized layers')
|
|
535
|
+
.action(wrapCommand(agentShowMount));
|
|
535
536
|
mountedagent
|
|
536
|
-
.command('mount-
|
|
537
|
+
.command('mount-artifacts')
|
|
537
538
|
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
538
|
-
.description('List context, materialized, and inherited
|
|
539
|
-
.action(wrapCommand(
|
|
539
|
+
.description('List context, materialized, and inherited artifacts for a mount')
|
|
540
|
+
.action(wrapCommand(agentMountArtifacts));
|
|
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
|
|
545
|
-
.description('Print or update the mount context
|
|
546
|
-
.action(wrapCommand(
|
|
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(agentMountContext));
|
|
547
548
|
mountedagent
|
|
548
549
|
.command('unmount')
|
|
549
550
|
.argument('<mount-id>', 'Mount ID returned by `mount` or `mounts`')
|
|
550
551
|
.description('Destroy a mount and its mount-owned memory (irreversible)')
|
|
551
552
|
.addHelpText('after', `
|
|
552
553
|
EXAMPLES:
|
|
553
|
-
$ rip
|
|
554
|
+
$ rip agent unmount <mount-id>
|
|
554
555
|
|
|
555
556
|
NOTES:
|
|
556
557
|
Cascades all mount-owned memory (team-layer + per-operator private rows)
|
|
557
|
-
through
|
|
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
|
`)
|
|
561
|
-
.action(wrapCommand(
|
|
562
|
+
.action(wrapCommand(agentUnmount));
|
|
562
563
|
// ── session lifecycle (used by the generic /tokenrip bootloader) ─────
|
|
563
564
|
//
|
|
564
|
-
// These four commands wrap `
|
|
565
|
+
// These four commands wrap `AgentSessionService` so the bootloader skill can
|
|
565
566
|
// drive a tracked session from Claude Code without any MCP setup.
|
|
566
567
|
// Pair them with `--json` (or set TOKENRIP_OUTPUT=json) — output is
|
|
567
568
|
// structured for programmatic consumption.
|
|
568
569
|
mountedagent
|
|
569
570
|
.command('load')
|
|
570
|
-
.argument('<slug>', '
|
|
571
|
+
.argument('<slug>', 'Agent slug to load')
|
|
571
572
|
.option('--team <slug>', 'Bind to a team mount (caller must be a current team member)')
|
|
572
|
-
.description('Start a session against a published
|
|
573
|
+
.description('Start a session against a published agent (lazy-creates the caller\'s default mount)')
|
|
573
574
|
.addHelpText('after', `
|
|
574
575
|
EXAMPLES:
|
|
575
|
-
$ rip --json
|
|
576
|
-
$ rip --json
|
|
576
|
+
$ rip --json agent load office-hours
|
|
577
|
+
$ rip --json agent load chief-of-staff --team acme
|
|
577
578
|
|
|
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-
|
|
582
|
+
every record / rewrite-artifact / end call needs it.
|
|
582
583
|
`)
|
|
583
|
-
.action(wrapCommand(
|
|
584
|
+
.action(wrapCommand(agentLoad));
|
|
584
585
|
mountedagent
|
|
585
586
|
.command('record')
|
|
586
|
-
.argument('<session-token>', 'Token returned by `
|
|
587
|
+
.argument('<session-token>', 'Token returned by `agent load`')
|
|
587
588
|
.option('--collection <slug>', 'Logical collection slug (defaults to the manifest default)')
|
|
588
589
|
.option('--row <json>', 'Inline JSON object payload')
|
|
589
590
|
.option('--row-file <file>', 'Read the JSON payload from a file')
|
|
590
|
-
.description(
|
|
591
|
+
.description("Record a memory row to the session's collection")
|
|
591
592
|
.addHelpText('after', `
|
|
592
593
|
EXAMPLES:
|
|
593
|
-
$ rip --json
|
|
594
|
+
$ rip --json agent record <token> --collection patterns \\
|
|
594
595
|
--row '{"pattern":"...","recommendation":"..."}'
|
|
595
596
|
`)
|
|
596
|
-
.action(wrapCommand(
|
|
597
|
+
.action(wrapCommand(agentRecord));
|
|
597
598
|
mountedagent
|
|
598
|
-
.command('rewrite-
|
|
599
|
-
.argument('<session-token>', 'Token returned by `
|
|
600
|
-
.argument('<logical-alias>', 'Memory-
|
|
601
|
-
.option('--content <string>', 'Inline content (UTF-8) for the
|
|
599
|
+
.command('rewrite-artifact')
|
|
600
|
+
.argument('<session-token>', 'Token returned by `agent 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')
|
|
602
603
|
.option('--content-from <file>', 'Read the new content from a file')
|
|
603
|
-
.description('Rewrite a memory
|
|
604
|
+
.description('Rewrite a memory artifact; publishes a new version on the concrete artifact')
|
|
604
605
|
.addHelpText('after', `
|
|
605
606
|
EXAMPLES:
|
|
606
|
-
$ rip --json
|
|
607
|
+
$ rip --json agent rewrite-artifact <token> <alias> \\
|
|
607
608
|
--content-from /tmp/new-context.md
|
|
608
609
|
`)
|
|
609
|
-
.action(wrapCommand(
|
|
610
|
+
.action(wrapCommand(agentRewriteArtifact));
|
|
610
611
|
mountedagent
|
|
611
612
|
.command('end')
|
|
612
|
-
.argument('<session-token>', 'Token returned by `
|
|
613
|
+
.argument('<session-token>', 'Token returned by `agent load`')
|
|
613
614
|
.option('--summary <text>', 'One-paragraph wrap-up summary')
|
|
614
|
-
.option('--
|
|
615
|
-
.option('--
|
|
616
|
-
.option('--
|
|
617
|
-
.description('End a session and optionally publish a markdown
|
|
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
|
-
$ rip --json
|
|
621
|
-
$ rip --json
|
|
622
|
-
--
|
|
621
|
+
$ rip --json agent end <token> --summary "Done."
|
|
622
|
+
$ rip --json agent end <token> --summary "..." \\
|
|
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
|
|
627
|
-
return
|
|
627
|
+
prior session output, if any. Agents with session.produceSessionOutput: false
|
|
628
|
+
return SESSION_OUTPUT_NOT_PERMITTED when --output-from is supplied.
|
|
628
629
|
`)
|
|
629
|
-
.action(wrapCommand(
|
|
630
|
+
.action(wrapCommand(agentEnd));
|
|
630
631
|
mountedagent
|
|
631
632
|
.command('unpublish')
|
|
632
|
-
.argument('<slug>', '
|
|
633
|
-
.description('Set is_published = false on an owned
|
|
634
|
-
.action(wrapCommand(
|
|
633
|
+
.argument('<slug>', 'Agent slug')
|
|
634
|
+
.description('Set is_published = false on an owned agent')
|
|
635
|
+
.action(wrapCommand(agentUnpublish));
|
|
635
636
|
mountedagent
|
|
636
637
|
.command('publish-toggle')
|
|
637
|
-
.argument('<slug>', '
|
|
638
|
-
.description('Flip is_published on an owned
|
|
639
|
-
.action(wrapCommand(
|
|
638
|
+
.argument('<slug>', 'Agent slug')
|
|
639
|
+
.description('Flip is_published on an owned agent')
|
|
640
|
+
.action(wrapCommand(agentPublishToggle));
|
|
640
641
|
mountedagent
|
|
641
642
|
.command('set-featured')
|
|
642
|
-
.argument('<slug>', '
|
|
643
|
+
.argument('<slug>', 'Agent slug')
|
|
643
644
|
.argument('<weight>', 'Integer weight (higher sorts first) or "clear" to remove')
|
|
644
|
-
.description('Set or clear the featured-weight on an owned
|
|
645
|
-
.action(wrapCommand(
|
|
645
|
+
.description('Set or clear the featured-weight on an owned agent')
|
|
646
|
+
.action(wrapCommand(agentSetFeatured));
|
|
646
647
|
mountedagent
|
|
647
648
|
.command('set-display')
|
|
648
|
-
.argument('<slug>', '
|
|
649
|
+
.argument('<slug>', 'Agent slug')
|
|
649
650
|
.option('--display-name <name>', 'Display name')
|
|
650
651
|
.option('--tagline <text>', 'Tagline')
|
|
651
652
|
.option('--description <text>', 'Description')
|
|
652
653
|
.option('--capability <text>', 'Capability (repeatable)', (v, prev = []) => prev.concat(v), [])
|
|
653
|
-
.description('Update display block fields without
|
|
654
|
-
.action(wrapCommand(
|
|
654
|
+
.description('Update display block fields without republishing the agent')
|
|
655
|
+
.action(wrapCommand(agentSetDisplay));
|
|
655
656
|
mountedagent
|
|
656
657
|
.command('delete')
|
|
657
|
-
.argument('<slug>', '
|
|
658
|
+
.argument('<slug>', 'Agent slug')
|
|
658
659
|
.option('--force', 'Skip typed-slug confirmation', false)
|
|
659
|
-
.description('Destroy an
|
|
660
|
-
.action(wrapCommand(
|
|
660
|
+
.description('Destroy an agent and cascade its mounts and memory (irreversible)')
|
|
661
|
+
.action(wrapCommand(agentDelete));
|
|
661
662
|
// ── admin commands ──────────────────────────────────────────────────
|
|
662
663
|
const adminCmd = program.command('admin').description('Admin-only commands');
|
|
663
|
-
const
|
|
664
|
-
.command('
|
|
665
|
-
.description('Admin
|
|
666
|
-
|
|
664
|
+
const adminAgentCmd = adminCmd
|
|
665
|
+
.command('agent')
|
|
666
|
+
.description('Admin agent management');
|
|
667
|
+
adminAgentCmd
|
|
667
668
|
.command('list')
|
|
668
|
-
.description('List all
|
|
669
|
-
.action(wrapCommand(
|
|
670
|
-
|
|
669
|
+
.description('List all agents across all owners (admin)')
|
|
670
|
+
.action(wrapCommand(adminAgentList));
|
|
671
|
+
adminAgentCmd
|
|
671
672
|
.command('show')
|
|
672
|
-
.argument('<slug>', '
|
|
673
|
-
.description('Show any
|
|
674
|
-
.action(wrapCommand(
|
|
675
|
-
|
|
673
|
+
.argument('<slug>', 'Agent slug')
|
|
674
|
+
.description('Show any agent by slug (admin)')
|
|
675
|
+
.action(wrapCommand(adminAgentShow));
|
|
676
|
+
adminAgentCmd
|
|
676
677
|
.command('unpublish')
|
|
677
|
-
.argument('<slug>', '
|
|
678
|
-
.description('Force-unpublish an
|
|
679
|
-
.action(wrapCommand(
|
|
680
|
-
|
|
678
|
+
.argument('<slug>', 'Agent slug')
|
|
679
|
+
.description('Force-unpublish an agent regardless of owner (admin)')
|
|
680
|
+
.action(wrapCommand(adminAgentUnpublish));
|
|
681
|
+
adminAgentCmd
|
|
681
682
|
.command('set-featured')
|
|
682
|
-
.argument('<slug>', '
|
|
683
|
+
.argument('<slug>', 'Agent slug')
|
|
683
684
|
.argument('<weight>', 'Integer weight or "clear" to remove')
|
|
684
|
-
.description('Set or clear featured weight on any
|
|
685
|
-
.action(wrapCommand(
|
|
686
|
-
|
|
685
|
+
.description('Set or clear featured weight on any agent (admin)')
|
|
686
|
+
.action(wrapCommand(adminAgentSetFeatured));
|
|
687
|
+
adminAgentCmd
|
|
687
688
|
.command('sessions')
|
|
688
|
-
.argument('<slug>', '
|
|
689
|
-
.description('List recent sessions for an
|
|
690
|
-
.action(wrapCommand(
|
|
689
|
+
.argument('<slug>', 'Agent slug')
|
|
690
|
+
.description('List recent sessions for an agent (admin)')
|
|
691
|
+
.action(wrapCommand(adminAgentSessions));
|
|
691
692
|
// ── publisher commands ──────────────────────────────────────────────
|
|
692
693
|
const publisher = program
|
|
693
694
|
.command('publisher')
|
|
@@ -806,58 +807,58 @@ EXAMPLES:
|
|
|
806
807
|
await link(options);
|
|
807
808
|
}));
|
|
808
809
|
// ── agent commands ──────────────────────────────────────────────────
|
|
809
|
-
const agent = program.command('
|
|
810
|
+
const agent = program.command('account').description('Manage account identities');
|
|
810
811
|
agent
|
|
811
812
|
.command('create')
|
|
812
813
|
.description('Create and register a new agent identity')
|
|
813
814
|
.option('--alias <name>', 'Human-readable alias')
|
|
814
815
|
.action(wrapCommand(async (options) => {
|
|
815
|
-
const {
|
|
816
|
-
await
|
|
816
|
+
const { accountCreate } = await import('./commands/account.js');
|
|
817
|
+
await accountCreate(options);
|
|
817
818
|
}));
|
|
818
819
|
agent
|
|
819
820
|
.command('list')
|
|
820
821
|
.description('List local agent identities')
|
|
821
822
|
.action(wrapCommand(async () => {
|
|
822
|
-
const {
|
|
823
|
-
const {
|
|
824
|
-
outputSuccess({
|
|
823
|
+
const { accountList } = await import('./commands/account.js');
|
|
824
|
+
const { formatAccountList } = await import('./formatters.js');
|
|
825
|
+
outputSuccess({ accounts: accountList() }, formatAccountList);
|
|
825
826
|
}));
|
|
826
827
|
agent
|
|
827
828
|
.command('use <name>')
|
|
828
829
|
.description('Switch the current agent identity')
|
|
829
830
|
.action(wrapCommand(async (name) => {
|
|
830
|
-
const {
|
|
831
|
-
|
|
831
|
+
const { accountUse } = await import('./commands/account.js');
|
|
832
|
+
accountUse(name);
|
|
832
833
|
}));
|
|
833
834
|
agent
|
|
834
835
|
.command('remove <name>')
|
|
835
836
|
.description('Remove an agent identity from this machine')
|
|
836
837
|
.action(wrapCommand(async (name) => {
|
|
837
|
-
const {
|
|
838
|
-
|
|
838
|
+
const { accountRemove } = await import('./commands/account.js');
|
|
839
|
+
accountRemove(name);
|
|
839
840
|
}));
|
|
840
841
|
agent
|
|
841
842
|
.command('export <name>')
|
|
842
843
|
.description('Export an agent identity encrypted for another agent')
|
|
843
844
|
.requiredOption('--to <agentId>', 'Target agent ID to encrypt for')
|
|
844
845
|
.action(wrapCommand(async (name, options) => {
|
|
845
|
-
const {
|
|
846
|
-
await
|
|
846
|
+
const { accountExport } = await import('./commands/account.js');
|
|
847
|
+
await accountExport(name, options);
|
|
847
848
|
}));
|
|
848
849
|
agent
|
|
849
850
|
.command('import <file>')
|
|
850
851
|
.description('Import an encrypted agent identity (use - for stdin)')
|
|
851
852
|
.action(wrapCommand(async (file) => {
|
|
852
|
-
const {
|
|
853
|
-
await
|
|
853
|
+
const { accountImport } = await import('./commands/account.js');
|
|
854
|
+
await accountImport(file);
|
|
854
855
|
}));
|
|
855
856
|
// ── inbox command ──────────────────────────────────────────────────
|
|
856
857
|
program
|
|
857
858
|
.command('inbox')
|
|
858
|
-
.description('Poll for new thread messages and
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
887
|
-
.option('--type <type>', 'Filter: thread or
|
|
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
|
|
894
|
-
.option('--
|
|
895
|
-
.option('--archived', 'Search only archived
|
|
896
|
-
.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')
|
|
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" --
|
|
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('--
|
|
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>', '
|
|
954
|
-
.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')
|
|
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 --
|
|
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('--
|
|
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
|
|
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 --
|
|
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
|
|
1005
|
-
.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')
|
|
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 --
|
|
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
|
|
1069
|
-
.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')
|
|
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
|
|
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);
|