@rolino/cli 0.4.0 → 0.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,85 @@
1
1
  # @rolino/cli
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 4f9e790: Add the optional `blog:manage` capability and synchronized agent-first Blog
8
+ setup, import, cadence planning, plan review, article creation, confirmed
9
+ connection provisioning, and safe verification operations.
10
+ - 1edd1e7: Add published Blog Studio delivery contracts and the server-only Next.js 16 Blog Studio package.
11
+ - 74a13ea: Expose immediate versus scheduled delivery and destination lifecycle stages,
12
+ preserve YouTube visibility for immediate publishing, and clarify remote
13
+ schedule confirmation across public clients.
14
+ - 4af607d: Add independent exact-bundle Blog approval, reviewed image upload and generation,
15
+ confirmed publication scheduling and cancellation, and the complete authorized
16
+ agent workflow without widening existing credentials.
17
+ - 4a893dd: Add provider-neutral Blog publishing destinations, safe delivery inspection,
18
+ and exact destination binding across public agent interfaces.
19
+ - 843a1db: Add the exact optional `seo:read` capability and bounded read-only SEO
20
+ opportunity and weekly-report parity across public agent contracts, clients,
21
+ CLI commands, and closed-world MCP tools. SEO reads now use the version 3 task
22
+ contract with the exact Ready, Research, or Rejected decision, selected format,
23
+ complete deliverables, bounded evidence, safe URLs, limitations, and no-publish
24
+ rules. Public output uses readable topic names and separate topic-relevance and
25
+ action-readiness confidence. Research tasks compare all supported formats and
26
+ must validate or reject the finding before a separate draft action is allowed.
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [4f9e790]
31
+ - Updated dependencies [1edd1e7]
32
+ - Updated dependencies [74a13ea]
33
+ - Updated dependencies [4af607d]
34
+ - Updated dependencies [4a893dd]
35
+ - Updated dependencies [843a1db]
36
+ - @rolino/contracts@0.5.0
37
+ - @rolino/sdk@0.5.0
38
+ - @rolino/local-auth@0.5.0
39
+
40
+ ## 0.5.0-beta.0
41
+
42
+ ### Minor Changes
43
+
44
+ - 4f9e790: Add the optional `blog:manage` capability and synchronized agent-first Blog
45
+ setup, import, cadence planning, plan review, article creation, confirmed
46
+ connection provisioning, and safe verification operations.
47
+ - 1edd1e7: Add published Blog Studio delivery contracts and the server-only Next.js 16 Blog Studio package.
48
+ - 74a13ea: Expose immediate versus scheduled delivery and destination lifecycle stages,
49
+ preserve YouTube visibility for immediate publishing, and clarify remote
50
+ schedule confirmation across public clients.
51
+ - 4a893dd: Add provider-neutral Blog publishing destinations, safe delivery inspection,
52
+ and exact destination binding across public agent interfaces.
53
+ - 843a1db: Add the exact optional `seo:read` capability and bounded read-only SEO
54
+ opportunity and weekly-report parity across public agent contracts, clients,
55
+ CLI commands, and closed-world MCP tools. SEO reads now use the version 3 task
56
+ contract with the exact Ready, Research, or Rejected decision, selected format,
57
+ complete deliverables, bounded evidence, safe URLs, limitations, and no-publish
58
+ rules. Public output uses readable topic names and separate topic-relevance and
59
+ action-readiness confidence. Research tasks compare all supported formats and
60
+ must validate or reject the finding before a separate draft action is allowed.
61
+
62
+ ### Patch Changes
63
+
64
+ - Updated dependencies [4f9e790]
65
+ - Updated dependencies [1edd1e7]
66
+ - Updated dependencies [74a13ea]
67
+ - Updated dependencies [4a893dd]
68
+ - Updated dependencies [843a1db]
69
+ - @rolino/contracts@0.5.0-beta.0
70
+ - @rolino/sdk@0.5.0-beta.0
71
+ - @rolino/local-auth@0.5.0-beta.0
72
+
73
+ ## Unreleased
74
+
75
+ ### Minor Changes
76
+
77
+ - Add Blog image generation, exact local-file upload, image review, confirmed
78
+ exact-bundle approval, future scheduling, and schedule cancellation commands
79
+ with deterministic agent output, stable idempotency, safe errors, and
80
+ independent `blog:write`, `blog:approve`, and `blog:publish` boundaries.
81
+ - Add Blog destination discovery, delivery inspection, and exact destination selection for publication commands.
82
+
3
83
  ## 0.4.0
4
84
 
5
85
  ### Minor Changes
package/README.md CHANGED
@@ -51,6 +51,22 @@ rolino posts publish execute POST_ID --project PROJECT_ID --expected-version VER
51
51
  rolino integrations health --project PROJECT_ID
52
52
  rolino integrations delivery-options --project PROJECT_ID --provider TIKTOK|LINKEDIN
53
53
  rolino calendar list --project PROJECT_ID [--from ISO_DATE --to ISO_DATE] [--limit 50] [--cursor CURSOR]
54
+ rolino seo opportunities list --project PROJECT_ID [--limit 20] [--cursor CURSOR] [--kind KIND] [--impact HIGH|MEDIUM|LOW]
55
+ rolino seo opportunities show OPPORTUNITY_ID --project PROJECT_ID
56
+ rolino seo reports list --project PROJECT_ID [--limit 10] [--cursor CURSOR] [--status COMPLETE|PARTIAL]
57
+ rolino seo reports show REPORT_ID --project PROJECT_ID
58
+ rolino blog destinations providers --project PROJECT_ID
59
+ rolino blog destinations list --project PROJECT_ID
60
+ rolino blog destinations deliveries --project PROJECT_ID [--article ARTICLE_ID]
61
+ rolino blog images generate ARTICLE_ID --project PROJECT_ID --revision REVISION_ID
62
+ rolino blog images upload ARTICLE_ID FILE --project PROJECT_ID --revision REVISION_ID --alt-text TEXT
63
+ rolino blog images review ARTICLE_ID IMAGE_ID --project PROJECT_ID --decision APPROVED|REJECTED --expected-version VERSION [--alt-text TEXT]
64
+ rolino blog approve preview ARTICLE_ID --project PROJECT_ID --revision REVISION_ID
65
+ rolino blog approve execute ARTICLE_ID --project PROJECT_ID --revision REVISION_ID --confirmation-token TOKEN --idempotency-key KEY --yes
66
+ rolino blog schedule preview ARTICLE_ID --project PROJECT_ID --revision REVISION_ID --at ISO --timezone IANA [--destination ID...]
67
+ rolino blog schedule execute ARTICLE_ID --project PROJECT_ID --revision REVISION_ID --at ISO --timezone IANA --confirmation-token TOKEN --idempotency-key KEY --yes
68
+ rolino blog schedule cancel preview ARTICLE_ID --project PROJECT_ID
69
+ rolino blog schedule cancel execute ARTICLE_ID --project PROJECT_ID --confirmation-token TOKEN --idempotency-key KEY --yes
54
70
  rolino doctor
55
71
  ```
56
72
 
@@ -58,9 +74,20 @@ Interactive login opens the configured Rolino instance in a browser, obtains
58
74
  explicit workspace approval, and exchanges a single-use code with PKCE S256.
59
75
  The approval screen always includes identity and workspace reads and lets the
60
76
  user independently opt into project creation, draft writing, confirmed
61
- scheduling, and confirmed immediate publishing. Optional permissions start off,
77
+ scheduling, confirmed immediate publishing, and read-only SEO Intelligence.
78
+ The SEO option explains that it permits reading opportunities, evidence,
79
+ complete tasks, and weekly reports. It cannot run analysis or change SEO settings.
80
+ Opportunity detail prints the exact decision, selected format, target,
81
+ deliverables, research, safe URLs, separate topic-relevance and action-readiness
82
+ confidence, limitations, and no-publish rules. A Ready
83
+ task can request complete final deliverables for review. A Research task must
84
+ select only `RESEARCH_TASK`, compare all reasonable formats without a preferred
85
+ final format, and return `VALIDATED` with a complete next task or `REJECTED`
86
+ with evidence. It cannot create a final draft in the same action.
87
+ Optional permissions start off,
62
88
  and existing credentials never gain a newly selected permission. Revoke and
63
- reauthorize an existing connection to grant project creation. The bearer
89
+ reauthorize an existing connection to grant project creation or `seo:read`.
90
+ Existing credentials never receive `seo:read` automatically. The bearer
64
91
  credential never passes through a browser URL. Saved credentials are scoped by
65
92
  base URL and stored in the operating-system configuration directory;
66
93
  `ROLINO_CONFIG_DIR` overrides that location. `auth logout` revokes the calling
@@ -107,9 +134,11 @@ rolino posts create --project PROJECT_ID --caption "Launch description" --platfo
107
134
  ```
108
135
 
109
136
  Google may restrict uploads from unaudited API projects to Private. Rolino does
110
- not infer audit approval from configuration. A scheduled YouTube post must
111
- target Public; confirmed scheduling starts its private resumable upload
112
- immediately so processing can finish before the target time.
137
+ not infer audit approval from configuration. `posts publish` preserves the
138
+ chosen Public, Unlisted, or Private visibility and does not create a schedule.
139
+ A future `posts schedule` delivery must target Public; confirmed scheduling
140
+ starts its private resumable upload immediately so processing can finish before
141
+ the target time.
113
142
 
114
143
  TikTok drafts require account-specific choices. Refresh them immediately before
115
144
  preparing the draft:
@@ -134,23 +163,23 @@ images. Use `--bluesky-caption` for a destination-specific override of up to
134
163
  rolino posts create --project PROJECT_ID --caption "Shared launch" --platform BLUESKY --bluesky-caption "Launch day 🦋" --yes
135
164
  ```
136
165
 
137
- LinkedIn drafts can be text-only, include up to ten stored JPEG/PNG images, or
138
- contain exactly one stored MP4 without mixing images and video. Native video
139
- must be 75 KB to 500 MB and 3 seconds to 30 minutes. Refresh the connected
140
- member and server policy before preparing the draft, and use
141
- `--linkedin-caption` for a destination override:
166
+ LinkedIn drafts can be text-only, include up to ten stored JPEG/PNG images, or
167
+ contain exactly one stored MP4 without mixing images and video. Native video
168
+ must be 75 KB to 500 MB and 3 seconds to 30 minutes. Refresh the connected
169
+ member and server policy before preparing the draft, and use
170
+ `--linkedin-caption` for a destination override:
142
171
 
143
172
  ```text
144
- rolino integrations delivery-options --project PROJECT_ID --provider LINKEDIN
145
- rolino posts create --project PROJECT_ID --caption "Shared launch" --platform LINKEDIN --linkedin-caption "Launch day for our LinkedIn network" --media IMAGE_ASSET_ID --yes
146
- rolino posts create --project PROJECT_ID --caption "Product demo" --platform LINKEDIN --media VIDEO_ASSET_ID --yes
173
+ rolino integrations delivery-options --project PROJECT_ID --provider LINKEDIN
174
+ rolino posts create --project PROJECT_ID --caption "Shared launch" --platform LINKEDIN --linkedin-caption "Launch day for our LinkedIn network" --media IMAGE_ASSET_ID --yes
175
+ rolino posts create --project PROJECT_ID --caption "Product demo" --platform LINKEDIN --media VIDEO_ASSET_ID --yes
147
176
  ```
148
177
 
149
- The connected OAuth member is the author; the developer app's associated
150
- Company Page is not a publishing target. Native video publish and schedule
151
- execution remains in preparation until LinkedIn confirms upload and processing.
152
- If final post creation has an unknown outcome, inspect that member's LinkedIn
153
- feed before retrying.
178
+ The connected OAuth member is the author; the developer app's associated
179
+ Company Page is not a publishing target. Native video publish and schedule
180
+ execution remains in preparation until LinkedIn confirms upload and processing.
181
+ If final post creation has an unknown outcome, inspect that member's LinkedIn
182
+ feed before retrying.
154
183
 
155
184
  Project creation also requires interactive confirmation or `--yes`. It
156
185
  atomically saves a project and its paired brand, but does not start research,
@@ -170,8 +199,10 @@ server confirmation.
170
199
 
171
200
  When YouTube is selected, the preview states whether confirmed execution starts
172
201
  or resumes early private preparation. A schedule execution may return
173
- `PENDING` while YouTube confirms a remote schedule change; that result is not a
174
- published state, and the same idempotency key is safe to replay.
202
+ `PENDING` with phase `REMOTE_SCHEDULE_CONFIRMATION` after the upload completes
203
+ while YouTube acknowledges the requested Public publish time. The video remains
204
+ private, no second publish action is required, and the same idempotency key is
205
+ safe to replay.
175
206
 
176
207
  Immediate publishing uses the same server-enforced pattern. `posts publish
177
208
  preview` validates the current version, exact destination set, readiness, live
@@ -182,8 +213,9 @@ delivery; Rolino's worker performs provider calls and reconciles ambiguous
182
213
  network results so an unsafe retry cannot duplicate a post. Use
183
214
  `ROLINO_CONFIRMATION_TOKEN` for scripts instead of putting the token in process
184
215
  arguments. YouTube remains `PREPARING` while its resumable upload and provider
185
- processing are incomplete; only provider-confirmed visibility becomes
186
- published.
216
+ processing are incomplete. The preview identifies the delivery as `IMMEDIATE`,
217
+ shows the exact visibility, and confirms that no schedule will be created; only
218
+ provider-confirmed visibility becomes published.
187
219
 
188
220
  The CLI cannot enable YouTube, Bluesky, or LinkedIn, or infer provider approval.
189
221
  Those are server-side deployment controls. Self-hosted operators should
@@ -229,3 +261,64 @@ issues through the repository's
229
261
  [security policy](https://github.com/deifos/rolino/security/policy).
230
262
 
231
263
  `@rolino/cli` is available under the MIT License.
264
+ ## Agent-first Blog Studio setup
265
+
266
+ Authorize the optional `blog:manage` capability separately from Blog reading,
267
+ draft writing, and approved-revision publishing. Existing credentials never
268
+ gain it automatically. Start every setup with:
269
+
270
+ ```bash
271
+ rolino --agent blog setup status --project PROJECT_ID
272
+ ```
273
+
274
+ The `blog site`, `blog plan`, `blog article`, `blog connection`, and
275
+ `blog destinations` command groups mirror the versioned API. Use these safe
276
+ publishing reads before setup or publication:
277
+
278
+ ```bash
279
+ rolino --agent blog destinations providers --project PROJECT_ID
280
+ rolino --agent blog destinations list --project PROJECT_ID
281
+ rolino --agent blog destinations deliveries --project PROJECT_ID
282
+ rolino --agent blog destinations deliveries --project PROJECT_ID --article ARTICLE_ID
283
+ ```
284
+
285
+ The provider catalog requires `blog:manage`. It returns only providers enabled
286
+ for the workspace, safe capabilities, and official documentation. Destination
287
+ and delivery-attempt reads require `blog:read`. They omit draft content,
288
+ prompts, evidence, secrets, and raw provider responses. A returned remote URL
289
+ is not proof that a queued or failed delivery is live.
290
+
291
+ Mutations require a stable idempotency key.
292
+ Connection provisioning also requires preview, explicit confirmation, and
293
+ execute. A first successful execute can return a delivery token or webhook
294
+ secret once; save it only in server-side environment configuration. Replays
295
+ do not reveal it again. Blog publication remains the separate approved exact
296
+ revision preview/execute workflow.
297
+
298
+ Blog image commands require `blog:write`; they cannot approve an article or
299
+ publish it. Image upload reads only the path in the command, accepts JPEG, PNG,
300
+ or WebP, and keeps its signed upload URL and storage key private. Approving an
301
+ exact revision and image bundle requires the independent `blog:approve`
302
+ capability and cannot publish. Scheduling, rescheduling, or canceling a future
303
+ publication requires the independent `blog:publish` capability and does not
304
+ grant approval.
305
+
306
+ Approval, schedule, and cancellation execution bind the short-lived token from
307
+ the matching preview and a stable idempotency key. Human output requires
308
+ `--yes`. JSON mode does not prompt, but it still requires the confirmation
309
+ token and idempotency key. A safe replay uses the same exact input and key.
310
+
311
+ Use this order for complete Blog work:
312
+
313
+ 1. Read setup status and current article or plan state.
314
+ 2. Ask for any missing website, cadence, destination, and access level.
315
+ 3. Import and plan through durable jobs, then poll instead of retrying blindly.
316
+ 4. Present evidence before accepting a plan item unless the user already authorized that exact bounded action.
317
+ 5. Create or update one immutable revision with catalog-backed links.
318
+ 6. Generate or upload one approved image, review it, and verify alt text.
319
+ 7. Without `blog:approve`, stop and ask the user to approve in Rolino.
320
+ 8. With `blog:approve`, preview and execute the unchanged exact bundle with confirmation and a stable idempotency key.
321
+ 9. Without `blog:publish`, stop after approval.
322
+ 10. With `blog:publish`, preview and execute unchanged immediate publication or scheduling with a stable idempotency key.
323
+ 11. Poll delivery attempts and verify the live remote URL; queued is not published.
324
+ 12. After any content or image change, restart from approval preview.