twentythree-skills 1.0.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.
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: comment
3
+ description: Moderate and manage comments, questions, and chat on videos, categories, and webinars.
4
+ ---
5
+
6
+ # TwentyThree Comment Commands
7
+
8
+ > List, moderate, and manage comments, questions, and chat messages on TwentyThree content.
9
+ > Always use `--json` in agentic contexts for structured output.
10
+
11
+ ## Prerequisites
12
+
13
+ Auth scope required: read (list), write (add, update, delete, promote, clone, set-order, reaction add).
14
+ Run `twentythree auth credentials` if not already configured.
15
+ Verify: `twentythree auth status --json`
16
+
17
+ > For any flag not listed here, run `twentythree comment <cmd> --agent` to get the complete flag list, types, and defaults.
18
+
19
+ ## Commands
20
+
21
+ ### comment list
22
+
23
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Author, Content, Type, Date)
24
+
25
+ Flags:
26
+
27
+ | Flag | Required | Description |
28
+ |------|----------|-------------|
29
+ | `--object-id` | no | Filter by object ID |
30
+ | `--object-type` | no | Filter by object type (photo, album, live) |
31
+ | `--comment-type` | no | Filter by comment type (comment, question, chat) |
32
+ | `--search` | no | Search comments by content |
33
+ | `--order` | no | Sort order for results |
34
+ | `--include-reactions` | no | Include reactions on each comment |
35
+ | `--include-replies` | no | Include reply-to comments |
36
+ | `--promoted` | no | Filter to promoted comments only |
37
+
38
+ ```bash
39
+ # List all comments in the workspace
40
+ twentythree comment list --json
41
+
42
+ # List only questions on a specific webinar
43
+ twentythree comment list --object-id <webinar-id> --object-type live --comment-type question --json
44
+ ```
45
+
46
+ ### comment add
47
+
48
+ **Auth scope:** write **Side effects:** creates **Output:** none
49
+
50
+ Flags:
51
+
52
+ | Flag | Required | Description |
53
+ |------|----------|-------------|
54
+ | `--object-id` | yes | Object ID to comment on |
55
+ | `--object-type` | yes | Object type (photo, album, live) |
56
+ | `--content` | no | Comment text content |
57
+ | `--name` | no | Author name for the comment |
58
+ | `--email` | no | Author email for the comment |
59
+ | `--url` | no | URL associated with the comment |
60
+ | `--comment-type` | no | Comment type (comment, question, chat) |
61
+ | `--reply-to` | no | Comment ID to reply to |
62
+ | `--comment-time` | no | Timestamp for the comment |
63
+ | `--object-token` | no | Object token for the target object |
64
+
65
+ ```bash
66
+ # Add a comment to a video
67
+ twentythree comment add --object-id <video-id> --object-type photo --content "Great video!" --json
68
+
69
+ # Add a question to a webinar chat
70
+ twentythree comment add --object-id <webinar-id> --object-type live --content "What is next?" --comment-type question --json
71
+ ```
72
+
73
+ ### comment update
74
+
75
+ **Auth scope:** write **Side effects:** updates **Output:** none
76
+
77
+ Flags:
78
+
79
+ | Flag | Required | Description |
80
+ |------|----------|-------------|
81
+ | `--object-id` | yes | Object ID the comment belongs to |
82
+ | `--status` | no | Comment status (answered, dismissed, or empty to clear) |
83
+
84
+ ```bash
85
+ # Mark a question as answered
86
+ twentythree comment update <comment-id> --object-id <webinar-id> --status answered --json
87
+
88
+ # Dismiss an inappropriate comment
89
+ twentythree comment update <comment-id> --object-id <video-id> --status dismissed --json
90
+ ```
91
+
92
+ ### comment delete
93
+
94
+ **Auth scope:** write **Side effects:** destructive **Output:** none
95
+
96
+ Takes `<comment-id>` as positional argument. No additional flags.
97
+
98
+ ```bash
99
+ # Delete a comment
100
+ twentythree comment delete <comment-id> --json
101
+
102
+ # Delete a question from a webinar
103
+ twentythree comment delete <comment-id> --json
104
+ ```
105
+
106
+ ### comment promote
107
+
108
+ **Auth scope:** write **Side effects:** updates **Output:** none
109
+
110
+ Takes `<comment-id>` as positional argument. Toggles promoted status if `--promoted` is omitted.
111
+
112
+ Flags:
113
+
114
+ | Flag | Required | Description |
115
+ |------|----------|-------------|
116
+ | `--promoted` | no | Set promoted status explicitly (omit to toggle) |
117
+
118
+ ```bash
119
+ # Promote a comment (toggle on)
120
+ twentythree comment promote <comment-id> --json
121
+
122
+ # Explicitly set promoted status to true
123
+ twentythree comment promote <comment-id> --promoted --json
124
+ ```
125
+
126
+ ### comment clone
127
+
128
+ **Auth scope:** write **Side effects:** creates **Output:** none
129
+
130
+ Takes `<comment-id>` as positional argument. Clones the comment, optionally changing its type.
131
+
132
+ Flags:
133
+
134
+ | Flag | Required | Description |
135
+ |------|----------|-------------|
136
+ | `--clone-type` | no | Type for the cloned comment (chat, question, comment) |
137
+
138
+ ```bash
139
+ # Clone a comment as-is
140
+ twentythree comment clone <comment-id> --json
141
+
142
+ # Clone a comment and set it as a question type
143
+ twentythree comment clone <comment-id> --clone-type question --json
144
+ ```
145
+
146
+ ### comment set-order
147
+
148
+ **Auth scope:** write **Side effects:** updates **Output:** none
149
+
150
+ Flags:
151
+
152
+ | Flag | Required | Description |
153
+ |------|----------|-------------|
154
+ | `--object-id` | yes | Object ID whose comments are being reordered |
155
+ | `--order` | yes | Comma-separated list of comment IDs in desired display order |
156
+ | `--comment-type` | no | Comment type to reorder (default: question) |
157
+
158
+ ```bash
159
+ # Reorder questions on a webinar
160
+ twentythree comment set-order --object-id <webinar-id> --order "<id1>,<id2>,<id3>" --json
161
+
162
+ # Reorder only chat-type comments
163
+ twentythree comment set-order --object-id <webinar-id> --order "<id1>,<id2>" --comment-type chat --json
164
+ ```
165
+
166
+ ## Subtopic: comment reaction
167
+
168
+ ### comment reaction add
169
+
170
+ **Auth scope:** write **Side effects:** creates **Output:** none
171
+
172
+ Takes `<comment-id>` as positional argument.
173
+
174
+ Flags:
175
+
176
+ | Flag | Required | Description |
177
+ |------|----------|-------------|
178
+ | `--reaction` | yes | Reaction emoji to add |
179
+ | `--object-id` | yes | Object ID the comment belongs to |
180
+ | `--object-token` | yes | Object token for the target object |
181
+ | `--object-type` | no | Object type (live, photo, album) |
182
+ | `--uuid` | no | UUID identifier |
183
+
184
+ ```bash
185
+ # Add a thumbs-up reaction to a comment
186
+ twentythree comment reaction add <comment-id> --object-id <webinar-id> --object-token <token> --reaction "👍" --json
187
+
188
+ # Add a heart reaction to a video comment
189
+ twentythree comment reaction add <comment-id> --object-id <video-id> --object-token <token> --reaction "❤️" --object-type photo --json
190
+ ```
191
+
192
+ ## Common Patterns
193
+
194
+ ### Moderate webinar Q&A session
195
+
196
+ ```bash
197
+ # List all questions from a webinar
198
+ twentythree comment list --object-id <webinar-id> --object-type live --comment-type question --json
199
+
200
+ # Promote an important question for visibility
201
+ twentythree comment promote <question-id> --json
202
+
203
+ # Mark a question as answered after responding
204
+ twentythree comment update <question-id> --object-id <webinar-id> --status answered --json
205
+ ```
206
+
207
+ ### Reorder promoted questions for display
208
+
209
+ ```bash
210
+ # Step 1: List promoted questions to get their IDs
211
+ twentythree comment list --object-id <webinar-id> --object-type live --comment-type question --promoted --json
212
+
213
+ # Step 2: Set the display order using captured IDs
214
+ twentythree comment set-order --object-id <webinar-id> --order "<id1>,<id2>,<id3>" --comment-type question --json
215
+ ```
216
+
217
+ ## Terminology Notes
218
+
219
+ The `--object-type` flag uses the legacy API object names:
220
+ - pass `photo` for a video
221
+ - pass `album` for a category
222
+ - pass `live` for a webinar
223
+
224
+ This is the only place in the `comment` topic where terminology diverges from CLI naming.
225
+ The `api_endpoint` field in `--agent` output also uses these legacy names (e.g. `GET /comment/list`).
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: openupload
3
+ description: Third-party upload tokens — allow anonymous users to upload files using a pre-issued token.
4
+ ---
5
+
6
+ # TwentyThree Open Upload Commands
7
+
8
+ > Issue tokens that let third parties upload files without full API credentials.
9
+ > The chunked upload engine handles large files automatically — never construct multipart requests directly.
10
+ > Always use `--json` in agentic contexts for structured output.
11
+
12
+ ## Prerequisites
13
+
14
+ Auth scope required: read (list), write (upload-file, update-file).
15
+ `upload-file` and `update-file` additionally require `--token-upload-id` and `--token` values
16
+ provided by the workspace admin who issued the token.
17
+ Run `twentythree auth credentials` if not already configured.
18
+ Verify: `twentythree auth status --json`
19
+
20
+ > For any flag not listed here, run `twentythree openupload <cmd> --agent` to get the complete flag list, types, and defaults.
21
+
22
+ ## Commands
23
+
24
+ ### openupload list
25
+
26
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Token, Public)
27
+
28
+ Flags:
29
+
30
+ | Flag | Required | Description |
31
+ |------|----------|-------------|
32
+ | `--token-upload-id` | no | Filter by open upload token upload ID |
33
+ | `--token` | no | Filter by open upload token value |
34
+ | `--app` | no | Filter by app open uploads (boolean) |
35
+
36
+ ```bash
37
+ # List all open upload tokens in the workspace
38
+ twentythree openupload list --json
39
+
40
+ # Filter to a specific token upload
41
+ twentythree openupload list --token-upload-id 123 --json
42
+ ```
43
+
44
+ ### openupload upload-file
45
+
46
+ **Auth scope:** write **Side effects:** creates **Output:** key-value
47
+
48
+ > **Memory rule:** Always use chunked upload for file uploads. This command handles chunking
49
+ > automatically — never construct multipart requests directly.
50
+
51
+ The returned `upload-key` identifies the uploaded file and is required for subsequent metadata
52
+ updates via `openupload update-file`.
53
+
54
+ Flags:
55
+
56
+ | Flag | Required | Description |
57
+ |------|----------|-------------|
58
+ | `--file-path` | yes | Path to the file to upload |
59
+ | `--token-upload-id` | yes | Open upload token upload ID (provided by workspace admin) |
60
+ | `--token` | yes | Open upload token (provided by workspace admin) |
61
+ | `--chunk-size` | no | Chunk size in bytes (default: 5242880) |
62
+ | `--concurrency` | no | Parallel chunk uploads (default: 5) |
63
+
64
+ ```bash
65
+ # Upload a video file using a token
66
+ twentythree openupload upload-file --file-path ./video.mp4 \
67
+ --token-upload-id <id> --token <tok> --json
68
+
69
+ # Upload with custom chunk size for a slow connection
70
+ twentythree openupload upload-file --file-path ./recording.mp4 \
71
+ --token-upload-id <id> --token <tok> --chunk-size 2097152 --json
72
+ ```
73
+
74
+ ### openupload update-file
75
+
76
+ **Auth scope:** write **Side effects:** updates **Output:** key-value
77
+
78
+ Updates metadata for an already-uploaded file. Requires the `--upload-key` returned by `upload-file`.
79
+
80
+ Flags:
81
+
82
+ | Flag | Required | Description |
83
+ |------|----------|-------------|
84
+ | `--token-upload-id` | yes | Open upload token upload ID |
85
+ | `--token` | yes | Open upload token |
86
+ | `--upload-key` | yes | Upload key identifying the uploaded file |
87
+ | `--title` | no | New title for the uploaded file |
88
+ | `--description` | no | New description for the uploaded file |
89
+ | `--tags` | no | Tags for the uploaded file (space-separated) |
90
+
91
+ ```bash
92
+ # Set title and description after upload
93
+ twentythree openupload update-file \
94
+ --token-upload-id <id> --token <tok> --upload-key <key> \
95
+ --title "Product Demo" --description "Q2 launch demo" --json
96
+
97
+ # Set tags on the uploaded file
98
+ twentythree openupload update-file \
99
+ --token-upload-id <id> --token <tok> --upload-key <key> \
100
+ --tags "demo product q2" --json
101
+ ```
102
+
103
+ ## Common Patterns
104
+
105
+ ### Full third-party upload workflow
106
+
107
+ ```bash
108
+ # Step 1: Workspace admin shares token-upload-id and token out-of-band with the third party.
109
+ # The third party runs:
110
+
111
+ # Step 2: Upload the file (chunking is automatic)
112
+ twentythree openupload upload-file \
113
+ --file-path ./presentation.mp4 \
114
+ --token-upload-id <token-upload-id> \
115
+ --token <token> \
116
+ --json
117
+ # => Returns { upload_key: "<key>", ... }
118
+ # Capture: upload_key for the next step
119
+
120
+ # Step 3: Set metadata on the uploaded file
121
+ twentythree openupload update-file \
122
+ --token-upload-id <token-upload-id> \
123
+ --token <token> \
124
+ --upload-key <key> \
125
+ --title "Partner Submission" \
126
+ --tags "partner external" \
127
+ --json
128
+ ```
129
+
130
+ ### Verify uploaded files as workspace admin
131
+
132
+ ```bash
133
+ # List all open uploads to review received files
134
+ twentythree openupload list --json
135
+
136
+ # Filter to a specific token upload ID
137
+ twentythree openupload list --token-upload-id <token-upload-id> --json
138
+ ```
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: player
3
+ description: List and configure TwentyThree embed players, generate embed HTML, and discover available styles.
4
+ ---
5
+
6
+ # TwentyThree Player Commands
7
+
8
+ > List and update embed players, generate embed code for videos/webinars/categories, and
9
+ > discover available player styles and embed versions.
10
+ > Always use `--json` in agentic contexts for structured output.
11
+
12
+ ## Prerequisites
13
+
14
+ Auth scope required: anonymous (embed), read (list, embed-versions, styles), write (update, delete).
15
+ Run `twentythree auth credentials` if not already configured.
16
+ Verify: `twentythree auth status --json`
17
+
18
+ > For any flag not listed here, run `twentythree player <cmd> --agent` to get the complete flag list, types, and defaults.
19
+
20
+ ## Commands
21
+
22
+ ### player list
23
+
24
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Default)
25
+
26
+ Flags:
27
+
28
+ | Flag | Required | Description |
29
+ |------|----------|-------------|
30
+ | `--source` | no | Analytics source tag to filter by |
31
+
32
+ ```bash
33
+ # List all players in the workspace
34
+ twentythree player list --json
35
+
36
+ # List players tagged with a specific analytics source
37
+ twentythree player list --source embed --json
38
+ ```
39
+
40
+ ### player update
41
+
42
+ **Auth scope:** write **Side effects:** updates **Output:** none
43
+
44
+ Takes `<player-id>` as positional argument.
45
+
46
+ Flags:
47
+
48
+ | Flag | Required | Description |
49
+ |------|----------|-------------|
50
+ | `--name` | no | New name for the player |
51
+ | `--description` | no | New description for the player |
52
+ | `--data` | no | JSON-encoded player properties to merge into the request body |
53
+
54
+ ```bash
55
+ # Rename a player
56
+ twentythree player update 42 --name "Brand Player v2" --json
57
+
58
+ # Update a player with custom data properties
59
+ twentythree player update 42 --name "Campaign Player" --description "Q2 campaign" --json
60
+ ```
61
+
62
+ ### player delete
63
+
64
+ **Auth scope:** write **Side effects:** destructive **Output:** none
65
+
66
+ Takes `<player-id>` as positional argument. No flags.
67
+
68
+ ```bash
69
+ # Delete a player by ID
70
+ twentythree player delete 42 --json
71
+
72
+ # List players first to confirm the ID before deletion
73
+ twentythree player list --json
74
+ twentythree player delete 42 --json
75
+ ```
76
+
77
+ ### player embed
78
+
79
+ **Auth scope:** anonymous **Side effects:** none **Output:** key-value (HTML embed code)
80
+
81
+ Generates embed HTML for a video, webinar, or category. Because this command returns HTML,
82
+ redirecting to a file is more practical than `--json` for most uses.
83
+
84
+ **Exception:** `player embed` outputs HTML. Use redirect (`> embed.html`) to save output to a file.
85
+ Use `--json` only when capturing the raw embed code string in a structured response.
86
+
87
+ Flags:
88
+
89
+ | Flag | Required | Description |
90
+ |------|----------|-------------|
91
+ | `--video-id` | no | Video ID to embed (maps to photo_id in API) |
92
+ | `--webinar-id` | no | Webinar ID to embed (maps to live_id in API) |
93
+ | `--category-id` | no | Category ID to embed (maps to album_id in API) |
94
+ | `--player-id` | no | Player ID to use (default: workspace default player) |
95
+ | `--url` | no | Workspace URL to resolve to an embed code |
96
+ | `--width` | no | Desired embed width in pixels |
97
+ | `--height` | no | Desired embed height in pixels |
98
+ | `--responsive` | no | Return a responsive embed code |
99
+ | `--autoplay` | no | Enable auto-play in the embed code |
100
+ | `--iframe` | no | Return an iframe-based embed code |
101
+ | `--start` | no | Start position in seconds |
102
+ | `--include-unpublished` | no | Include unpublished content in player parameters |
103
+ | `--token` | no | Video token for private or token-protected videos |
104
+ | `--source` | no | Analytics source tag |
105
+
106
+ ```bash
107
+ # Generate embed HTML and save to file (most common usage)
108
+ twentythree player embed --video-id 123 --responsive > embed.html
109
+
110
+ # Generate embed code as structured JSON for programmatic use
111
+ twentythree player embed --video-id 123 --responsive --autoplay --json
112
+ ```
113
+
114
+ ### player embed-versions
115
+
116
+ **Auth scope:** read **Side effects:** none **Output:** table (Type, Key, Label)
117
+
118
+ Lists available embed versions for a specific object. Requires both `--object-type` and `--object-id`.
119
+
120
+ Flags:
121
+
122
+ | Flag | Required | Description |
123
+ |------|----------|-------------|
124
+ | `--object-type` | yes | Object type: `photo`, `live`, `album`, or `site` |
125
+ | `--object-id` | yes | Object ID |
126
+ | `--source` | no | Embed source parameter (e.g. `embed`, `share`) |
127
+
128
+ ```bash
129
+ # List embed versions for a video (use API legacy name 'photo')
130
+ twentythree player embed-versions --object-type photo --object-id 123 --json
131
+
132
+ # List embed versions for a webinar (use API legacy name 'live')
133
+ twentythree player embed-versions --object-type live --object-id 456 --json
134
+ ```
135
+
136
+ ### player styles
137
+
138
+ **Auth scope:** read **Side effects:** none **Output:** table (Style, Name, Icon)
139
+
140
+ Lists available player visual styles. No required flags.
141
+
142
+ Flags:
143
+
144
+ | Flag | Required | Description |
145
+ |------|----------|-------------|
146
+ | `--fields` | no | Comma-separated list of fields to return |
147
+
148
+ ```bash
149
+ # Discover all available player styles
150
+ twentythree player styles --json
151
+
152
+ # Request specific fields only
153
+ twentythree player styles --fields style,name --json
154
+ ```
155
+
156
+ ## Common Patterns
157
+
158
+ ### Generate responsive embed code for a video
159
+
160
+ ```bash
161
+ # Discover players to pick one, or use the workspace default
162
+ twentythree player list --json
163
+
164
+ # Generate a responsive, autoplay embed
165
+ twentythree player embed --video-id <id> --responsive --autoplay --json
166
+
167
+ # Save to file for use in HTML templates
168
+ twentythree player embed --video-id <id> --responsive > embed.html
169
+ ```
170
+
171
+ ### Discover available styles before updating a player
172
+
173
+ ```bash
174
+ # Step 1: List current players
175
+ twentythree player list --json
176
+
177
+ # Step 2: Check available visual styles
178
+ twentythree player styles --json
179
+
180
+ # Step 3: Update the player with a chosen style via --data
181
+ twentythree player update <player-id> --name "Styled Player" --data '{"style":"minimal"}' --json
182
+ ```
183
+
184
+ ### Generate webinar embed for a live event
185
+
186
+ ```bash
187
+ # Generate an iframe embed for a webinar (use API name 'live')
188
+ twentythree player embed --webinar-id <webinar-id> --iframe --responsive --json
189
+
190
+ # List embed versions for the webinar
191
+ twentythree player embed-versions --object-type live --object-id <webinar-id> --json
192
+ ```