@gentbajko/slopify 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/dist/adapters/account-limits.js +1 -1
  2. package/dist/adapters/alignment/audio.js +1 -1
  3. package/dist/adapters/alignment/cache.js +1 -1
  4. package/dist/adapters/alignment/multilingual.js +2 -1
  5. package/dist/adapters/alignment/runner.js +1 -1
  6. package/dist/adapters/alignment/worker.js +1 -1
  7. package/dist/adapters/explain.js +10 -9
  8. package/dist/adapters/host-cli/index.js +2 -1
  9. package/dist/adapters/host-cli/transport.js +2 -1
  10. package/dist/adapters/image/bytes.js +2 -1
  11. package/dist/adapters/image/codex.js +6 -5
  12. package/dist/adapters/image/fal.js +4 -3
  13. package/dist/adapters/image/google.js +3 -2
  14. package/dist/adapters/image/models.js +2 -2
  15. package/dist/adapters/image/openai.js +2 -1
  16. package/dist/adapters/image/replicate.js +3 -2
  17. package/dist/adapters/image/video.js +2 -1
  18. package/dist/adapters/key-probes.js +1 -1
  19. package/dist/adapters/llm/antigravity-models.js +1 -1
  20. package/dist/adapters/llm/antigravity.js +7 -6
  21. package/dist/adapters/llm/assistant-cli.js +1 -1
  22. package/dist/adapters/llm/claude-code-models.js +1 -1
  23. package/dist/adapters/llm/claude-code.js +3 -2
  24. package/dist/adapters/llm/codex-models.js +1 -1
  25. package/dist/adapters/llm/document-workspace.js +3 -2
  26. package/dist/adapters/llm/image-workspace.js +3 -2
  27. package/dist/adapters/llm/openrouter.js +2 -1
  28. package/dist/adapters/llm/run-cli.js +3 -2
  29. package/dist/adapters/tts/gemini.js +2 -1
  30. package/dist/adapters/tts/inworld-async.js +2 -1
  31. package/dist/adapters/tts/inworld.js +3 -2
  32. package/dist/adapters/tts/system.js +2 -1
  33. package/dist/catalog/registry.js +20 -13
  34. package/dist/catalog/schema.js +2 -1
  35. package/dist/catalog/validate.js +5 -2
  36. package/dist/edge/http/actions.js +7 -7
  37. package/dist/edge/http/app.js +3 -3
  38. package/dist/edge/http/assistant.js +3 -1
  39. package/dist/edge/http/backups.js +1 -1
  40. package/dist/edge/http/channel-memory.js +2 -2
  41. package/dist/edge/http/channels.js +1 -1
  42. package/dist/edge/http/checkpoints.js +7 -5
  43. package/dist/edge/http/design-templates.js +3 -3
  44. package/dist/edge/http/designs.js +1 -1
  45. package/dist/edge/http/document-themes.js +3 -3
  46. package/dist/edge/http/draft-problem.js +1 -1
  47. package/dist/edge/http/extension-auth.js +1 -1
  48. package/dist/edge/http/home.js +9 -1
  49. package/dist/edge/http/model-checks.js +4 -4
  50. package/dist/edge/http/onboarding.js +29 -12
  51. package/dist/edge/http/outputs.js +3 -2
  52. package/dist/edge/http/patch-notes.js +2 -2
  53. package/dist/edge/http/planning.js +1 -1
  54. package/dist/edge/http/project-create.js +1 -1
  55. package/dist/edge/http/project-templates.js +2 -2
  56. package/dist/edge/http/projects.js +22 -4
  57. package/dist/edge/http/prompts.js +2 -2
  58. package/dist/edge/http/providers.js +9 -10
  59. package/dist/edge/http/refusal.js +1 -1
  60. package/dist/edge/http/remote-access.js +4 -4
  61. package/dist/edge/http/remote-guard.js +2 -2
  62. package/dist/edge/http/reviews.js +1 -1
  63. package/dist/edge/http/revision-files.js +1 -1
  64. package/dist/edge/http/revisions.js +4 -4
  65. package/dist/edge/http/schedules.js +13 -11
  66. package/dist/edge/http/settings.js +6 -2
  67. package/dist/edge/http/social.js +5 -4
  68. package/dist/edge/http/staging.js +1 -1
  69. package/dist/edge/http/storage.js +12 -4
  70. package/dist/edge/http/studio.js +71 -19
  71. package/dist/edge/http/style-preview.js +2 -2
  72. package/dist/edge/http/template-studio.js +12 -9
  73. package/dist/edge/http/trash.js +1 -1
  74. package/dist/edge/http/youtube-edits.js +1 -1
  75. package/dist/edge/mcp/excluded-routes.js +4 -3
  76. package/dist/edge/mcp/instructions.js +3 -3
  77. package/dist/edge/mcp/library-tools.js +8 -5
  78. package/dist/edge/mcp/remake-tools.js +7 -4
  79. package/dist/edge/mcp/server.js +1 -1
  80. package/dist/edge/mcp/tools-channels.js +9 -9
  81. package/dist/edge/mcp/tools-designs.js +9 -9
  82. package/dist/edge/mcp/tools-library.js +7 -7
  83. package/dist/edge/mcp/tools-planning.js +18 -18
  84. package/dist/edge/mcp/tools-projects.js +10 -10
  85. package/dist/edge/mcp/tools-publishing.js +9 -9
  86. package/dist/edge/mcp/tools-runs.js +9 -9
  87. package/dist/edge/mcp/tools-schedules.js +6 -6
  88. package/dist/edge/mcp/tools-setup.js +20 -14
  89. package/dist/edge/mcp/tools-social.js +5 -4
  90. package/dist/edge/mcp/tools-storage.js +3 -3
  91. package/dist/edge/mcp/tools-template-studio.js +18 -18
  92. package/dist/edge/remote-access/model.js +1 -1
  93. package/dist/extension/slopify-studio-chrome.zip +0 -0
  94. package/dist/extension/slopify-studio-firefox.zip +0 -0
  95. package/dist/kernel/db/migrations/0078-uploaded-from-links.sql +7 -0
  96. package/dist/kernel/pipeline.js +12 -0
  97. package/dist/kernel/ports/settings-places.js +31 -0
  98. package/dist/kernel/ports/system-speech.js +31 -3
  99. package/dist/kernel/runner/attempt.js +11 -3
  100. package/dist/kernel/runner/providers.js +3 -2
  101. package/dist/kernel/runner/standalone.js +2 -2
  102. package/dist/main.js +5 -3
  103. package/dist/model-catalog.js +20 -0
  104. package/dist/patch-notes/4.0.0.md +13 -13
  105. package/dist/patch-notes/4.1.0.md +42 -0
  106. package/dist/patch-notes/index.json +6 -0
  107. package/dist/slices/admission/listing-facts.js +95 -0
  108. package/dist/slices/admission/repo.js +9 -6
  109. package/dist/slices/admission/rules.js +7 -7
  110. package/dist/slices/admission/state-words.js +34 -5
  111. package/dist/slices/assistant/cost.js +1 -1
  112. package/dist/slices/assistant/model.js +10 -3
  113. package/dist/slices/assistant/turn.js +5 -3
  114. package/dist/slices/autopilot/warnings.js +1 -1
  115. package/dist/slices/backups/service.js +5 -5
  116. package/dist/slices/channels/cast-images.js +1 -1
  117. package/dist/slices/channels/schema.js +1 -1
  118. package/dist/slices/channels/videos.js +1 -1
  119. package/dist/slices/control/providers.js +2 -2
  120. package/dist/slices/designs/budget.js +1 -1
  121. package/dist/slices/designs/calls.js +2 -2
  122. package/dist/slices/designs/check-context.js +4 -4
  123. package/dist/slices/designs/fields.js +4 -4
  124. package/dist/slices/designs/gate.js +7 -5
  125. package/dist/slices/designs/render-input.js +1 -1
  126. package/dist/slices/designs/requests.js +1 -1
  127. package/dist/slices/designs/runner.js +1 -1
  128. package/dist/slices/designs/sample.js +2 -1
  129. package/dist/slices/designs/service.js +1 -1
  130. package/dist/slices/designs/template-checks.js +2 -2
  131. package/dist/slices/designs/template-make.js +3 -3
  132. package/dist/slices/designs/templates.js +3 -3
  133. package/dist/slices/document/fonts.js +1 -1
  134. package/dist/slices/document/model.js +7 -4
  135. package/dist/slices/document/render.js +2 -1
  136. package/dist/slices/document/theme-schema.js +1 -1
  137. package/dist/slices/document/theme.js +49 -3
  138. package/dist/slices/episodes/summarize.js +2 -2
  139. package/dist/slices/estimate/index.js +28 -22
  140. package/dist/slices/estimate/requests.js +4 -4
  141. package/dist/slices/fixes/rules.js +3 -1
  142. package/dist/slices/fonts/catalog.js +2 -1
  143. package/dist/slices/fonts/coverage.js +2 -1
  144. package/dist/slices/images/appearance.js +2 -1
  145. package/dist/slices/images/scenes.js +2 -1
  146. package/dist/slices/keywords/digest.js +2 -1
  147. package/dist/slices/keywords/rules.js +2 -2
  148. package/dist/slices/keywords/specs.js +5 -5
  149. package/dist/slices/keywords/values.js +1 -1
  150. package/dist/slices/library/transfer.js +3 -3
  151. package/dist/slices/loudness/loudnorm.js +2 -1
  152. package/dist/slices/loudness/model.js +3 -2
  153. package/dist/slices/loudness/sentence-level.js +2 -1
  154. package/dist/slices/model-checks/rules.js +13 -0
  155. package/dist/slices/model-upkeep/model.js +1 -1
  156. package/dist/slices/model-upkeep/switch.js +3 -3
  157. package/dist/slices/model-upkeep/usage.js +13 -2
  158. package/dist/slices/narration/breaths.js +2 -1
  159. package/dist/slices/narration/clean-pieces.js +2 -1
  160. package/dist/slices/narration/pauses-model.js +3 -2
  161. package/dist/slices/narration/pronunciation.js +3 -2
  162. package/dist/slices/notifications/subject.js +2 -2
  163. package/dist/slices/onboarding/copy.js +19 -2
  164. package/dist/slices/onboarding/first-run.js +13 -38
  165. package/dist/slices/onboarding/install.js +2 -1
  166. package/dist/slices/onboarding/model.js +26 -21
  167. package/dist/slices/onboarding/preferred-model.js +14 -0
  168. package/dist/slices/onboarding/quick-short.js +103 -64
  169. package/dist/slices/onboarding/sample.js +4 -1
  170. package/dist/slices/onboarding/state.js +7 -0
  171. package/dist/slices/onboarding/template.js +6 -5
  172. package/dist/slices/outputs/add.js +3 -2
  173. package/dist/slices/outputs/service.js +2 -2
  174. package/dist/slices/patch-notes/library.js +1 -1
  175. package/dist/slices/play-drafts/readiness.js +3 -3
  176. package/dist/slices/play-drafts/review-inputs.js +1 -1
  177. package/dist/slices/play-drafts/service.js +17 -7
  178. package/dist/slices/project-templates/next-chapter.js +2 -1
  179. package/dist/slices/project-templates/provider-defaults.js +22 -0
  180. package/dist/slices/project-templates/setup-sections.js +26 -0
  181. package/dist/slices/project-templates/setup.js +6 -1
  182. package/dist/slices/rebuild/preview-details.js +5 -5
  183. package/dist/slices/rebuild/recipe-preparation.js +1 -1
  184. package/dist/slices/rebuild/recipe-save.js +2 -2
  185. package/dist/slices/rebuild/recipe-validation.js +5 -4
  186. package/dist/slices/rebuild/recipe-voices.js +3 -2
  187. package/dist/slices/rebuild/recipe-work.js +4 -4
  188. package/dist/slices/rebuild/recovery.js +6 -6
  189. package/dist/slices/rebuild/remake-outdated.js +5 -5
  190. package/dist/slices/rebuild/review-redo.js +1 -1
  191. package/dist/slices/rebuild/runtime-animate.js +2 -2
  192. package/dist/slices/rebuild/runtime-article.js +4 -3
  193. package/dist/slices/rebuild/runtime-document.js +5 -4
  194. package/dist/slices/rebuild/runtime-export-bed.js +2 -1
  195. package/dist/slices/rebuild/runtime-export-edit.js +2 -1
  196. package/dist/slices/rebuild/runtime-export-inputs.js +5 -4
  197. package/dist/slices/rebuild/runtime-export-short.js +1 -1
  198. package/dist/slices/rebuild/runtime-export.js +4 -3
  199. package/dist/slices/rebuild/runtime-image.js +4 -3
  200. package/dist/slices/rebuild/runtime-local.js +3 -2
  201. package/dist/slices/rebuild/runtime-narration-text.js +3 -2
  202. package/dist/slices/rebuild/runtime-provider.js +7 -6
  203. package/dist/slices/rebuild/runtime-review.js +6 -5
  204. package/dist/slices/rebuild/runtime-shorts.js +6 -5
  205. package/dist/slices/rebuild/runtime-store.js +17 -2
  206. package/dist/slices/rebuild/runtime-subtitles.js +13 -12
  207. package/dist/slices/rebuild/runtime-voices.js +2 -1
  208. package/dist/slices/rebuild/runtime-youtube.js +3 -2
  209. package/dist/slices/rebuild/service-readiness.js +11 -3
  210. package/dist/slices/research/synthesis.js +3 -2
  211. package/dist/slices/reviews/external-model.js +1 -1
  212. package/dist/slices/reviews/holds.js +5 -4
  213. package/dist/slices/reviews/model.js +8 -5
  214. package/dist/slices/reviews/rules.js +3 -3
  215. package/dist/slices/reviews/verdict.js +2 -1
  216. package/dist/slices/revisions/image-plan.js +1 -1
  217. package/dist/slices/revisions/mutation-assets.js +2 -1
  218. package/dist/slices/revisions/mutations.js +3 -2
  219. package/dist/slices/schedules/agenda.js +7 -5
  220. package/dist/slices/schedules/design-check.js +4 -4
  221. package/dist/slices/schedules/design-run.js +3 -3
  222. package/dist/slices/schedules/repo.js +6 -5
  223. package/dist/slices/schedules/schema.js +3 -0
  224. package/dist/slices/schedules/topics.js +5 -5
  225. package/dist/slices/settings/first-run.js +6 -32
  226. package/dist/slices/settings/health.js +30 -15
  227. package/dist/slices/settings/key-test.js +1 -1
  228. package/dist/slices/settings/model.js +4 -2
  229. package/dist/slices/settings/playback.js +2 -2
  230. package/dist/slices/shorts/keep.js +2 -1
  231. package/dist/slices/shorts/pick.js +4 -3
  232. package/dist/slices/shorts/prompts.js +2 -1
  233. package/dist/slices/shorts/render.js +3 -2
  234. package/dist/slices/social/media.js +5 -4
  235. package/dist/slices/social/pack.js +1 -1
  236. package/dist/slices/social/post-prompt.js +2 -1
  237. package/dist/slices/social/reshape.js +2 -2
  238. package/dist/slices/social/serve.js +1 -1
  239. package/dist/slices/social/service.js +3 -2
  240. package/dist/slices/social/state.js +1 -1
  241. package/dist/slices/storage/backup-import.js +2 -2
  242. package/dist/slices/storage/portable.js +1 -1
  243. package/dist/slices/storage/trim.js +23 -13
  244. package/dist/slices/studio/calendar.js +3 -1
  245. package/dist/slices/studio/disclosure.js +4 -4
  246. package/dist/slices/studio/model.js +1 -1
  247. package/dist/slices/studio/pack.js +9 -8
  248. package/dist/slices/studio/plan.js +1 -1
  249. package/dist/slices/studio/settings.js +6 -6
  250. package/dist/slices/studio/videos.js +23 -4
  251. package/dist/slices/style-preview/render.js +3 -3
  252. package/dist/slices/style-preview/schema.js +1 -1
  253. package/dist/slices/subtitles/captions.js +1 -1
  254. package/dist/slices/template-studio/anatomy-view.js +46 -3
  255. package/dist/slices/template-studio/bakeoff.js +3 -3
  256. package/dist/slices/template-studio/budget.js +6 -3
  257. package/dist/slices/template-studio/cards.js +78 -0
  258. package/dist/slices/template-studio/checks.js +99 -50
  259. package/dist/slices/template-studio/for-all.js +5 -5
  260. package/dist/slices/template-studio/free-video.js +1 -1
  261. package/dist/slices/template-studio/free.js +5 -5
  262. package/dist/slices/template-studio/model.js +19 -15
  263. package/dist/slices/template-studio/pack-import.js +14 -14
  264. package/dist/slices/template-studio/pack.js +9 -7
  265. package/dist/slices/template-studio/paid.js +12 -5
  266. package/dist/slices/template-studio/quote.js +18 -11
  267. package/dist/slices/template-studio/ready.js +7 -7
  268. package/dist/slices/template-studio/runner.js +1 -1
  269. package/dist/slices/template-studio/save.js +12 -12
  270. package/dist/slices/template-studio/say-it-as.js +3 -3
  271. package/dist/slices/template-studio/schedule-gate.js +1 -1
  272. package/dist/slices/template-studio/schedule-price.js +3 -1
  273. package/dist/slices/template-studio/schedule-sample.js +5 -1
  274. package/dist/slices/template-studio/schema.js +25 -0
  275. package/dist/slices/template-studio/service.js +3 -1
  276. package/dist/slices/template-studio/status.js +26 -9
  277. package/dist/slices/template-studio/topic.js +3 -3
  278. package/dist/slices/thumbnail/by-llm.js +1 -1
  279. package/dist/slices/uploads/repo.js +37 -1
  280. package/dist/slices/uploads/rules.js +3 -2
  281. package/dist/slices/video/edit-list.js +2 -2
  282. package/dist/slices/video/edit-settings.js +1 -1
  283. package/dist/slices/video/encoding.js +14 -5
  284. package/dist/slices/video/ffmpeg.js +2 -2
  285. package/dist/slices/video/plan.js +2 -1
  286. package/dist/slices/video/slideshow.js +1 -1
  287. package/dist/slices/voices/attribution.js +3 -2
  288. package/dist/slices/voices/model.js +9 -8
  289. package/dist/slices/voices/script.js +2 -1
  290. package/dist/slices/youtube/answer.js +2 -1
  291. package/dist/slices/youtube/edits-repo.js +1 -1
  292. package/dist/tutorials/AI-CLIs.md +25 -25
  293. package/dist/tutorials/Agents-MCP.md +32 -32
  294. package/dist/tutorials/Assistant.md +5 -5
  295. package/dist/tutorials/Backups.md +7 -7
  296. package/dist/tutorials/Calendar.md +17 -25
  297. package/dist/tutorials/Cast-Library.md +19 -19
  298. package/dist/tutorials/Channels.md +40 -35
  299. package/dist/tutorials/Costs-and-Run-Cost.md +38 -40
  300. package/dist/tutorials/Create-Article.md +114 -0
  301. package/dist/tutorials/Create-Extras.md +112 -0
  302. package/dist/tutorials/Create-Images.md +165 -0
  303. package/dist/tutorials/Create-Narration.md +178 -0
  304. package/dist/tutorials/Create-Overview.md +244 -0
  305. package/dist/tutorials/Create-Video-and-Style.md +144 -0
  306. package/dist/tutorials/Docker.md +3 -3
  307. package/dist/tutorials/Document-Themes.md +32 -32
  308. package/dist/tutorials/Editing-a-Project.md +94 -94
  309. package/dist/tutorials/FAQ.md +18 -18
  310. package/dist/tutorials/First-Launch-and-Welcome.md +50 -64
  311. package/dist/tutorials/Home-and-Projects.md +101 -76
  312. package/dist/tutorials/Home.md +33 -33
  313. package/dist/tutorials/Install.md +13 -13
  314. package/dist/tutorials/Intros-and-Outros.md +33 -34
  315. package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +62 -58
  316. package/dist/tutorials/Keywords-Slopify-Fills.md +21 -21
  317. package/dist/tutorials/Models.md +27 -27
  318. package/dist/tutorials/Multiple-Voices.md +41 -40
  319. package/dist/tutorials/Narration-Aliases-and-Glossary.md +14 -14
  320. package/dist/tutorials/Notifications.md +21 -17
  321. package/dist/tutorials/Other-Languages.md +15 -15
  322. package/dist/tutorials/PDF-Documents.md +38 -29
  323. package/dist/tutorials/Posting-to-Social-Sites.md +12 -12
  324. package/dist/tutorials/Project-Page.md +118 -120
  325. package/dist/tutorials/Prompts-and-Templates.md +84 -0
  326. package/dist/tutorials/Prompts.md +45 -45
  327. package/dist/tutorials/Providers-and-Keys.md +105 -98
  328. package/dist/tutorials/Publishing-to-YouTube.md +31 -31
  329. package/dist/tutorials/Recovery-and-Retries.md +31 -31
  330. package/dist/tutorials/Remote-Access.md +2 -2
  331. package/dist/tutorials/Reviews-and-Checkpoints.md +90 -93
  332. package/dist/tutorials/Schedules.md +27 -28
  333. package/dist/tutorials/Settings-Reference.md +182 -204
  334. package/dist/tutorials/Shorts.md +34 -33
  335. package/dist/tutorials/Start-at-Login.md +3 -3
  336. package/dist/tutorials/Studio-Extension.md +22 -24
  337. package/dist/tutorials/Template-Studio.md +45 -42
  338. package/dist/tutorials/Templates.md +50 -79
  339. package/dist/tutorials/Trash.md +4 -4
  340. package/dist/tutorials/Troubleshooting.md +44 -44
  341. package/dist/tutorials/Uninstalling-and-Moving.md +5 -5
  342. package/dist/tutorials/Updating-and-Patch-Notes.md +18 -18
  343. package/dist/tutorials/Video-Editing.md +34 -34
  344. package/dist/tutorials/Where-Your-Files-Live.md +10 -10
  345. package/dist/tutorials/YouTube-Description.md +26 -26
  346. package/dist/tutorials/Your-First-Short.md +35 -35
  347. package/dist/tutorials/_Sidebar.md +15 -15
  348. package/dist/web/assets/index-BNftKQrA.css +1 -0
  349. package/dist/web/assets/index-Cpa58woP.js +459 -0
  350. package/dist/web/assets/pdf-BKh8f7R6.js +56 -0
  351. package/dist/web/assets/pdf.worker.min-BmVo14Nb.mjs +28 -0
  352. package/dist/web/assets/pdf.worker.min-D7i8o3wR.js +1 -0
  353. package/dist/web/index.html +2 -2
  354. package/package.json +2 -2
  355. package/dist/tutorials/Library-Overview.md +0 -76
  356. package/dist/tutorials/Play-Images.md +0 -165
  357. package/dist/tutorials/Play-Narration.md +0 -167
  358. package/dist/tutorials/Play-Outputs.md +0 -109
  359. package/dist/tutorials/Play-Overview.md +0 -227
  360. package/dist/tutorials/Play-Title-and-Article.md +0 -136
  361. package/dist/tutorials/Play-Video-and-Style.md +0 -143
  362. package/dist/web/assets/index-CkAI_2E7.css +0 -1
  363. package/dist/web/assets/index-DcD0cdfo.js +0 -334
  364. package/dist/web/assets/pdf-TODRwF31.js +0 -54
  365. package/dist/web/assets/pdf.worker.min-Dswkl-cV.mjs +0 -29
  366. package/dist/web/assets/pdf.worker.min-zC6nfbxG.js +0 -1
@@ -75,7 +75,7 @@ export const channelTools = [
75
75
  route: "POST /api/channels/cast/:memberId/generate",
76
76
  body: castGenerateSchema,
77
77
  title: "Generate a cast picture",
78
- description: "Draws a cast picture with the image provider, a paid call, like Generate on the Cast tab.",
78
+ description: "Draws a cast picture with the image service, a paid call, like Make the picture on the Cast tab.",
79
79
  },
80
80
  {
81
81
  name: "delete_cast_picture",
@@ -123,33 +123,33 @@ export const channelTools = [
123
123
  {
124
124
  name: "list_channel_videos",
125
125
  route: "GET /api/channels/:id/videos",
126
- title: "Read existing videos",
127
- description: "The channel's existing video titles imported from YouTube Studio.",
126
+ title: "Read the titles to avoid",
127
+ description: "The channel's titles to avoid: titles of videos it made before Slopify, pasted or imported from YouTube Studio.",
128
128
  },
129
129
  {
130
130
  name: "preview_channel_videos",
131
131
  route: "POST /api/channels/:id/videos/preview",
132
- title: "Preview an existing-videos import",
133
- description: formBody("the Existing videos import"),
132
+ title: "Preview a titles-to-avoid import",
133
+ description: formBody("the Titles to avoid tab's import"),
134
134
  unrecorded: true,
135
135
  },
136
136
  {
137
137
  name: "import_channel_videos",
138
138
  route: "POST /api/channels/:id/videos",
139
- title: "Import existing videos",
140
- description: formBody("the Existing videos import"),
139
+ title: "Import titles to avoid",
140
+ description: formBody("the Titles to avoid tab's import"),
141
141
  },
142
142
  {
143
143
  name: "remove_channel_videos",
144
144
  route: "DELETE /api/channels/:id/videos",
145
- title: "Remove every existing video",
145
+ title: "Remove every title to avoid",
146
146
  description: "Removes every imported title.",
147
147
  confirm: "This removes every imported video title of the channel.",
148
148
  },
149
149
  {
150
150
  name: "remove_channel_video",
151
151
  route: "DELETE /api/channels/:id/videos/:videoId",
152
- title: "Remove an existing video",
152
+ title: "Remove a title to avoid",
153
153
  description: "Removes one imported title.",
154
154
  },
155
155
  ];
@@ -104,7 +104,7 @@ export const designTools = [
104
104
  name: "list_design_templates",
105
105
  route: "GET /api/design-templates",
106
106
  title: "List design templates",
107
- description: "Every design template with its versions and the version marked ready.",
107
+ description: "Every design template with its versions and the version approved for schedules.",
108
108
  },
109
109
  {
110
110
  name: "create_design_template",
@@ -131,13 +131,13 @@ export const designTools = [
131
131
  route: "DELETE /api/design-templates/:id",
132
132
  title: "Delete a design template",
133
133
  description: "Moves the template to Settings → Trash, where it stays 30 days.",
134
- confirm: "It moves to Settings → Trash, and schedules that make from it stop making pieces. After 30 days it is removed for good with its versions and its sample.",
134
+ confirm: "It moves to Settings → Trash, and schedules that make from it stop making posters. After 30 days it is removed for good with its versions and its sample.",
135
135
  },
136
136
  {
137
137
  name: "quote_design_template",
138
138
  route: "POST /api/design-templates/:id/quote",
139
- title: "Price a piece from a template",
140
- description: "What one piece made from the template's newest version costs. With a body {document}: what saving that document would cost the editor's sample instead (only a changed picture is paid), with the sections it changes and whether it makes a picture. Records nothing.",
139
+ title: "Price a poster from a template",
140
+ description: "What one poster made from the template's newest version costs. With a body {document}: what saving that document would cost the editor's sample instead (only a changed picture is paid), with the sections it changes and whether it makes a picture. Records nothing.",
141
141
  unrecorded: true,
142
142
  },
143
143
  {
@@ -151,15 +151,15 @@ export const designTools = [
151
151
  name: "mark_design_template_ready",
152
152
  route: "POST /api/design-templates/:id/ready",
153
153
  body: markDesignReadySchema,
154
- title: "Mark a template version ready",
155
- description: "Runs the version's checks and marks it ready when they pass; refused with the checks that failed. Body: {version}.",
156
- confirm: "Schedules start making pieces from this version.",
154
+ title: "Approve a template version for schedules",
155
+ description: "Runs the version's checks and approves it for schedules when they pass, as the editor's Approve for schedules does; refused with the checks that failed. Body: {version}.",
156
+ confirm: "Schedules start making posters from this version.",
157
157
  },
158
158
  {
159
159
  name: "make_design_from_template",
160
160
  route: "POST /api/design-templates/:id/make",
161
161
  body: makeFromTemplateSchema,
162
- title: "Make a piece from a template",
163
- description: `Makes one designed piece from a template version with these values and starts its artwork. This is ${paid}. Body: {mutationId: a new UUID, values, acknowledgedHigh, version?, name?, projectId?}.`,
162
+ title: "Make a poster from a template",
163
+ description: `Makes one poster from a template version with these values and starts its artwork. This is ${paid}. Body: {mutationId: a new UUID, values, acknowledgedHigh, version?, name?, projectId?}.`,
164
164
  },
165
165
  ];
@@ -4,7 +4,7 @@ export const libraryTools = [
4
4
  name: "list_prompts",
5
5
  route: "GET /api/prompts",
6
6
  title: "List prompts",
7
- description: "Library prompts of every kind.",
7
+ description: "Your prompts of every kind, as Prompts lists them.",
8
8
  },
9
9
  {
10
10
  name: "create_prompt",
@@ -16,7 +16,7 @@ export const libraryTools = [
16
16
  name: "update_prompt",
17
17
  route: "PUT /api/prompts/:id",
18
18
  title: "Save a prompt",
19
- description: "Body: {kind, name, body}. Saving adds a history version; a rename follows into templates and Play drafts. The body follows create_prompt's keyword rules; an unknown Slopify_ name the prompt already had is kept.",
19
+ description: "Body: {kind, name, body}. Saving adds a history version; a rename follows into templates and drafts on Create. The body follows create_prompt's keyword rules; an unknown Slopify_ name the prompt already had is kept.",
20
20
  },
21
21
  {
22
22
  name: "list_keywords",
@@ -28,7 +28,7 @@ export const libraryTools = [
28
28
  name: "get_keyword_facts",
29
29
  route: "GET /api/keywords/facts/:projectId",
30
30
  title: "Read a project's keyword facts as they are now",
31
- description: "The facts keywords like {{Slopify_Channel}}, {{Slopify_Links}} and {{Slopify_Previous_Video}} are filled from, copied again from the project's channel and its other projects, like Refresh keyword facts in Edit project. Put the answer's keywordFacts into the revision's config and save it with save_revision.",
31
+ description: "The facts keywords like {{Slopify_Channel}}, {{Slopify_Links}} and {{Slopify_Previous_Video}} are filled from, copied again from the project's channel and its other projects, like Refresh keyword facts in Edit settings → Title and keywords. Put the answer's keywordFacts into the revision's config and save it with save_revision.",
32
32
  },
33
33
  {
34
34
  name: "set_prompt_photorealistic",
@@ -65,7 +65,7 @@ export const libraryTools = [
65
65
  name: "list_entries",
66
66
  route: "GET /api/entries",
67
67
  title: "List intros and outros",
68
- description: "Library intros and outros.",
68
+ description: "Your intros and outros (Prompts → Intros and outros).",
69
69
  },
70
70
  {
71
71
  name: "create_entry",
@@ -107,8 +107,8 @@ export const libraryTools = [
107
107
  {
108
108
  name: "list_document_themes",
109
109
  route: "GET /api/document-themes",
110
- title: "List PDF themes",
111
- description: "The built-in PDF themes and the ones saved in the Library.",
110
+ title: "List PDF looks",
111
+ description: "The built-in PDF looks and the ones you saved.",
112
112
  },
113
113
  {
114
114
  name: "create_document_theme",
@@ -152,7 +152,7 @@ export const libraryTools = [
152
152
  name: "get_narration_aliases",
153
153
  route: "GET /api/pronunciations/aliases",
154
154
  title: "Read narration aliases",
155
- description: "Library → Narration aliases: words the narration says differently from how they are written.",
155
+ description: "Settings → Voices → Pronunciation: words the narration says differently from how they are written.",
156
156
  },
157
157
  {
158
158
  name: "set_narration_aliases",
@@ -8,41 +8,41 @@ const drafts = [
8
8
  {
9
9
  name: "list_drafts",
10
10
  route: "GET /api/drafts",
11
- title: "List Play drafts",
12
- description: "Play drafts: saved setups for Create, not started yet.",
11
+ title: "List the drafts on Create",
12
+ description: "Drafts on Create: videos set up there and not started yet.",
13
13
  },
14
14
  {
15
15
  name: "create_draft",
16
16
  route: "POST /api/drafts",
17
17
  body: createDraftInputSchema,
18
- title: "Create a Play draft",
19
- description: "Create, like New project: a draft whose document is the Play form (kind and outputs, format including square 1:1, sources, prompts, voices, reviews, the queue switch). Body: {id: a new UUID, document}. get_draft shows a document's shape; instantiate_template makes one from a template.",
18
+ title: "Make a new draft on Create",
19
+ description: "New draft, as on Create: a draft whose document is Create's form (kind and outputs, format including square 1:1, sources, prompts, voices, reviews, the One after another switch). Body: {id: a new UUID, document}. get_draft shows a document's shape; instantiate_template makes one from a template.",
20
20
  },
21
21
  {
22
22
  name: "get_draft",
23
23
  route: "GET /api/drafts/:id",
24
- title: "Read a Play draft",
25
- description: "A Play draft: its document, version, attachments, latest review and start.",
24
+ title: "Read a draft",
25
+ description: "A draft on Create: its document, version, attachments, latest review and start.",
26
26
  },
27
27
  {
28
28
  name: "save_draft",
29
29
  route: "PUT /api/drafts/:id",
30
30
  body: saveBody,
31
- title: "Save a Play draft",
32
- description: "Saves the draft's document; queue: true is Play's Queue switch, so several videos run one after another. Body: {baseVersion: the draft's version, mutationId: a new UUID, document}.",
31
+ title: "Save a draft",
32
+ description: "Saves the draft's document; queue: true is Create's One after another switch, so several videos run one after another. Body: {baseVersion: the draft's version, mutationId: a new UUID, document}.",
33
33
  },
34
34
  {
35
35
  name: "fork_draft",
36
36
  route: "POST /api/drafts/:id/fork",
37
37
  body: createDraftInputSchema,
38
- title: "Copy a Play draft",
38
+ title: "Copy a draft",
39
39
  description: "Body: {id: a new UUID for the copy, sourceId: this draft's id, document}.",
40
40
  },
41
41
  {
42
42
  name: "discard_draft",
43
43
  route: "DELETE /api/drafts/:id",
44
44
  body: versionBody,
45
- title: "Discard a Play draft",
45
+ title: "Discard a draft",
46
46
  description: "Body: {baseVersion}.",
47
47
  confirm: "This discards the draft and its uploaded files for good.",
48
48
  },
@@ -50,16 +50,16 @@ const drafts = [
50
50
  name: "review_draft",
51
51
  route: "POST /api/drafts/:id/review",
52
52
  body: versionBody,
53
- title: "Review a Play draft",
54
- description: "Play's Review step: readiness, warnings and the cost estimate the person sees before Start. Body: {baseVersion}. start_draft needs this review's id.",
53
+ title: "Review a draft",
54
+ description: "Create's review: readiness, warnings and the cost estimate the person sees before Make the video. Body: {baseVersion}. start_draft needs this review's id.",
55
55
  unrecorded: true,
56
56
  },
57
57
  {
58
58
  name: "start_draft",
59
59
  route: "POST /api/drafts/:id/start",
60
60
  body: startBody,
61
- title: "Start a Play draft",
62
- description: "Start in Play: starts the reviewed draft's runs, which spend what the review estimated. Body: {baseVersion, reviewId: the id review_draft returned}.",
61
+ title: "Start a draft",
62
+ description: "Make the video on Create: starts the reviewed draft's runs, which spend what the review estimated. Body: {baseVersion, reviewId: the id review_draft returned}.",
63
63
  },
64
64
  {
65
65
  name: "upload_draft_attachment",
@@ -95,7 +95,7 @@ const drafts = [
95
95
  },
96
96
  ];
97
97
  // Which version a schedule runs after a save (`template-studio/gate.ts`).
98
- const templateGateRule = "Schedules use a new version from their next run unless a version of this template was marked ready in its Template studio (mark_template_ready); from then on a new version waits until it is marked ready.";
98
+ const templateGateRule = "Schedules use a new version from their next run unless a version of this template was approved for schedules in Edit template (mark_template_ready); from then on a new version waits until it is approved.";
99
99
  const templates = [
100
100
  {
101
101
  name: "list_templates",
@@ -142,15 +142,15 @@ const templates = [
142
142
  route: "DELETE /api/project-templates/:id",
143
143
  body: templateDeleteBody,
144
144
  title: "Delete a template",
145
- description: formBody("Delete in Library → Templates"),
145
+ description: formBody("Delete on Templates"),
146
146
  confirm: "Moves it to the trash for 30 days (Settings → Trash). Existing projects and drafts keep their setup.",
147
147
  },
148
148
  {
149
149
  name: "instantiate_template",
150
150
  route: "POST /api/project-templates/:id/instantiate",
151
151
  body: templateInstantiateBody,
152
- title: "Use a template",
153
- description: "Opens a new Play draft from the template, like Use template.",
152
+ title: "Make a video from a template",
153
+ description: "Opens a new draft on Create from the template, like Make a video on Templates.",
154
154
  },
155
155
  ];
156
156
  export const planningTools = [...drafts, ...templates];
@@ -13,7 +13,7 @@ const projects = [
13
13
  name: "list_projects",
14
14
  route: "GET /api/projects",
15
15
  title: "List projects",
16
- description: "Every project as the Projects list shows it: id, title, status, stateWord (how Slopify's pages say it: Queued, Running, Paused, Waiting for your review, Waiting for the agent, Stopped (only Continue the run, resume_project, goes on), Prepared, Kept as is, Failed, Done with problems, Done, Canceled; an uploaded project reads Done once nothing it admitted is left to run; a run whose step failed while another step waits for the agent or the person reads by that wait, with stepFailed: true, and Failed once nothing else can go on), stepFailures (each step that failed while another step waits for the agent, the person or its day, even while a third still runs, as kind@finishedAt; absent otherwise), progress from 0 to 1, channelId and uploadedAt.",
16
+ description: "Every project as the Projects list shows it: id, title, status, stateWord (how Slopify's pages say it: Queued, Running, Paused, Waiting for your review, Waiting for the agent, Stopped (only Continue the run, resume_project, goes on), Waiting for its day (made ahead by its schedule), Kept as is, Failed, Done with problems, Done, Canceled; an uploaded project reads Done once nothing it admitted is left to run; a run whose step failed while another step waits for the agent or the person reads by that wait, with stepFailed: true, and Failed once nothing else can go on), stepFailures (each step that failed while another step waits for the agent, the person or its day, even while a third still runs, as kind@finishedAt; absent otherwise), progress from 0 to 1, channelId and uploadedAt.",
17
17
  shape: listWithStateWords,
18
18
  },
19
19
  {
@@ -28,7 +28,7 @@ const projects = [
28
28
  route: "DELETE /api/projects/:id",
29
29
  title: "Delete a project",
30
30
  description: "Delete on the Projects list: moves the project to the trash. A running project is refused: cancel it first.",
31
- confirm: "This moves the project to Settings → Backup & storage → Trash, where it is kept 30 days before it is deleted for good.",
31
+ confirm: "This moves the project to Settings → Trash, where it is kept 30 days before it is deleted for good.",
32
32
  },
33
33
  {
34
34
  name: "move_projects_to_channel",
@@ -40,7 +40,7 @@ const projects = [
40
40
  name: "get_run_queue",
41
41
  route: "GET /api/projects/queue",
42
42
  title: "Read the run queue",
43
- description: "The batch queue: projects waiting their turn, in order. Play's Queue switch (the draft's queue field) puts a run's videos here.",
43
+ description: "The batch queue: projects waiting their turn, in order. Create's One after another switch (the draft's queue field) puts a run's videos here.",
44
44
  },
45
45
  {
46
46
  name: "move_in_run_queue",
@@ -52,7 +52,7 @@ const projects = [
52
52
  name: "estimate_run",
53
53
  route: "POST /api/projects/estimate",
54
54
  title: "Estimate a run",
55
- description: "The cost estimate Play shows before Start. Body: {draft: a run draft, expectedWords?: 1-100000, items?}. For a Play draft, review_draft returns the same estimate.",
55
+ description: "The cost estimate Create shows before Make the video. Body: {draft: a run draft, expectedWords?: 1-100000, items?}. For a draft on Create, review_draft returns the same estimate.",
56
56
  unrecorded: true,
57
57
  },
58
58
  {
@@ -148,22 +148,22 @@ const decisions = [
148
148
  {
149
149
  name: "get_checkpoints",
150
150
  route: "GET /api/projects/:id/checkpoints",
151
- title: "Read review checkpoints",
152
- description: "The project's review checkpoints: each gate's stage, state, fingerprint and currentFingerprint. A gate is Waiting for your review while held.",
151
+ title: "Read the pauses for your review",
152
+ description: "The project's pauses for your review (Pauses and checks): each gate's stage, state, fingerprint and currentFingerprint. A gate is Waiting for your review while held.",
153
153
  },
154
154
  {
155
155
  name: "approve_checkpoint",
156
156
  route: "POST /api/projects/:id/checkpoints/:checkpointId/approve",
157
157
  body: approvalBody,
158
- title: "Approve a checkpoint",
159
- description: "Approves a held checkpoint so the stages after it run, like Approve on the project page. Body: {revisionId, fingerprint: the gate's currentFingerprint, idempotencyKey: a new UUID}.",
158
+ title: "Approve a pause",
159
+ description: "Approves a held pause so the stages after it run, like Approve and make the … on the project page. Body: {revisionId, fingerprint: the gate's currentFingerprint, idempotencyKey: a new UUID}.",
160
160
  },
161
161
  {
162
162
  name: "change_checkpoints",
163
163
  route: "PATCH /api/projects/:id/checkpoints",
164
164
  body: checkpointChangeSchema,
165
- title: "Change checkpoints",
166
- description: 'Sets the stages that stop for approval, like the Checkpoints tab. Body: {revisionId, stages: ["audio" | "images" | "video"]}.',
165
+ title: "Change the pauses",
166
+ description: 'Sets the stages that stop for approval, like Pause after … in Edit settings → Pauses and checks. Body: {revisionId, stages: ["audio" | "images" | "video"]}.',
167
167
  },
168
168
  {
169
169
  name: "list_reviews",
@@ -36,32 +36,32 @@ const uploadPrep = [
36
36
  {
37
37
  name: "get_upload_pack",
38
38
  route: "GET /api/studio/packs/:projectId",
39
- title: "Read the upload pack",
40
- description: "Prepare upload: the title, description, tags, thumbnails, playlists and release time of each upload (the video and each short), and the plan's free slots. The agent's work ends here, at Ready to upload: uploading is the person's.",
39
+ title: "Read Copy for YouTube Studio",
40
+ description: "Copy for YouTube Studio: the title, description, tags, thumbnails, playlists and release time of each upload (the video and each short), and the plan's free release times (slots). The agent's work ends here, at Ready to upload: uploading is the person's.",
41
41
  },
42
42
  {
43
43
  name: "set_pack_slot",
44
44
  route: "PUT /api/studio/packs/:projectId/slot",
45
- title: "Choose the release slot",
46
- description: "Prepare upload's slot picker: one of the free slots get_upload_pack lists, or none. Body: {slot: {row, longAt} | null}.",
45
+ title: "Choose the release time",
46
+ description: "Copy for YouTube Studio's release picker: one of the free release times (slots) get_upload_pack lists, or none. Body: {slot: {row, longAt} | null}.",
47
47
  },
48
48
  {
49
49
  name: "set_pack_real_footage",
50
50
  route: "PUT /api/studio/packs/:projectId/real-footage",
51
51
  title: "Set the altered-content answer",
52
- description: "Prepare upload's AI use tick: the project's uploaded clips are real footage. Body: {realFootage: true | false}.",
52
+ description: "Copy for YouTube Studio's AI use tick: the project's uploaded clips are real footage. Body: {realFootage: true | false}.",
53
53
  },
54
54
  {
55
55
  name: "set_pack_pick",
56
56
  route: "PUT /api/studio/packs/:projectId/pick",
57
57
  title: "Pick the title and thumbnail",
58
- description: "Prepare upload's pick: which title and thumbnail the upload carries (the A/B test tries the others once the video is public). Body: {title: 0-9, thumbnail: 0-9}.",
58
+ description: "Copy for YouTube Studio's pick: which title and thumbnail the upload carries (the A/B test tries the others once the video is public). Body: {title: 0-9, thumbnail: 0-9}.",
59
59
  },
60
60
  {
61
61
  name: "set_pack_playlists",
62
62
  route: "PUT /api/studio/packs/:projectId/playlists",
63
- title: "Set the pack's playlists",
64
- description: "Prepare upload's playlist ticks. Body: {playlists: [names] | null for the channel's defaults}.",
63
+ title: "Set the upload's playlists",
64
+ description: "Copy for YouTube Studio's playlist ticks. Body: {playlists: [names] | null for the channel's defaults}.",
65
65
  },
66
66
  {
67
67
  name: "get_fill_queue",
@@ -137,7 +137,7 @@ const youtube = [
137
137
  name: "get_ab_results",
138
138
  route: "GET /api/studio/ab-results",
139
139
  title: "Read A/B results",
140
- description: "Library → A/B results: every finished title and thumbnail test.",
140
+ description: "What worked on YouTube (on a channel's page): every finished title and thumbnail test.",
141
141
  },
142
142
  ];
143
143
  export const publishingTools = [
@@ -44,9 +44,9 @@ const runs = [
44
44
  name: "rerun_stage",
45
45
  route: "POST /api/projects/:id/stages/:kind/rerun",
46
46
  body: revisionControlSchema,
47
- title: "Re-run a stage",
48
- description: `Re-run section: makes a stage again and everything built on it. A re-run that costs money is refused until it is reviewed: use preview_rebuild (Choose what to remake), then start_rebuild. ${control}`,
49
- confirm: "Re-run this stage? It generates the stage and its dependent outputs again, which costs what the stage cost the first time; previous outputs stay in History.",
47
+ title: "Make a stage again",
48
+ description: `A section's Make … again button (Write the article again, Make all images again): makes a stage again and everything built on it. Making again what costs money is refused until it is reviewed: use preview_rebuild (Choose what to make again), then start_rebuild. ${control}`,
49
+ confirm: "Make this stage again? It makes the stage and what is built on it again, which costs what the stage cost the first time; the previous outputs stay under Versions.",
50
50
  },
51
51
  ];
52
52
  const revisions = [
@@ -79,29 +79,29 @@ const revisions = [
79
79
  route: "POST /api/projects/:id/revisions",
80
80
  body: saveBody,
81
81
  title: "Save an edit",
82
- description: "Saves an edit as a new version, like Save in Edit project; it starts nothing. Body: {baseRevisionId, idempotencyKey: a new UUID, edit: {config, content, regenerate?: [work keys to make again, such as a narration chunk key], uploads?: [{stagedFileId, destination}]}}; send get_revision's revision.config and revision.content with your change. One chunk's wording or delivery note is content.narrationOverrides[chunk key] = {kind: \"text\", text, direction?}. Finished shorts kept through a new pick are content.shortsKeep: leave one out to pick a new moment for it, and lower config.shorts.count as well to drop it. Then preview_rebuild (Choose what to remake) says what it makes and costs, and start_rebuild starts it.",
82
+ description: "Saves an edit as a new version, like Save in Edit settings; it starts nothing. Body: {baseRevisionId, idempotencyKey: a new UUID, edit: {config, content, regenerate?: [work keys to make again, such as a narration chunk key], uploads?: [{stagedFileId, destination}]}}; send get_revision's revision.config and revision.content with your change. One chunk's wording or delivery note is content.narrationOverrides[chunk key] = {kind: \"text\", text, direction?}. Finished shorts kept through a new pick are content.shortsKeep: leave one out to pick a new moment for it, and lower config.shorts.count as well to drop it. Then preview_rebuild (Choose what to make again) says what it makes and costs, and start_rebuild starts it.",
83
83
  },
84
84
  {
85
85
  name: "restore_revision",
86
86
  route: "POST /api/projects/:id/revisions/restore",
87
87
  body: restoreBody,
88
88
  title: "Restore a version",
89
- description: "Makes an earlier version current again, like Restore this revision; it starts nothing. Body: {baseRevisionId, idempotencyKey: a new UUID, targetRevisionId}.",
89
+ description: "Makes an earlier version current again, like Restore on a row of Versions; it starts nothing. Body: {baseRevisionId, idempotencyKey: a new UUID, targetRevisionId}.",
90
90
  },
91
91
  {
92
92
  name: "preview_rebuild",
93
93
  route: "POST /api/projects/:id/rebuild/preview",
94
94
  body: previewRebuildSchema,
95
- title: "Choose what to remake",
96
- description: 'Choose what to remake: what a remake makes again, reuses or leaves blocked, each output\'s estimate and the total, like the project\'s Choose what to remake. Body: {baseRevisionId, request: {kind: "allAffected"} | {kind: "selected", workKeys: [...]}}. Nothing starts; start_rebuild does, with this preview\'s id.',
95
+ title: "Choose what to make again",
96
+ description: 'Choose what to make again: what making it again makes, reuses or leaves blocked, each output\'s estimate and the total, like the project\'s Choose what to make again. Body: {baseRevisionId, request: {kind: "allAffected"} | {kind: "selected", workKeys: [...]}}. Nothing starts; start_rebuild does, with this preview\'s id.',
97
97
  unrecorded: true,
98
98
  },
99
99
  {
100
100
  name: "start_rebuild",
101
101
  route: "POST /api/projects/:id/rebuild",
102
102
  body: startRebuildSchema,
103
- title: "Start a remake",
104
- description: "Starts the remake you previewed: the acknowledgement Choose what to remake asks for. Body: {baseRevisionId, idempotencyKey: a new UUID, previewId: the preview's id, acknowledgeUnknownCosts: true only after reading the preview's unknown costs, confirmedProvidedWorkKeys: the preview's providedReuseRequired keys you accept replacing}.",
103
+ title: "Make the previewed parts again",
104
+ description: "Starts making again what you previewed: the acknowledgement Choose what to make again asks for. Body: {baseRevisionId, idempotencyKey: a new UUID, previewId: the preview's id, acknowledgeUnknownCosts: true only after reading the preview's unknown costs, confirmedProvidedWorkKeys: the preview's providedReuseRequired keys you accept replacing}.",
105
105
  },
106
106
  ];
107
107
  export const runTools = [...runs, ...revisions];
@@ -13,7 +13,7 @@ export const scheduleTools = [
13
13
  route: "POST /api/schedules",
14
14
  body: scheduleCreateSchema,
15
15
  title: "Create a schedule",
16
- description: `${formBody("the schedule editor")} Duplicate on a schedule is this with get_schedule's settings, a new id, a new name ending "(copy)" and items: [], then pause_schedule on the copy. A design schedule (one designed piece per row, made ahead of the row's date) is {templateKind: "design", templateId: the design template's id, templateVersion: its headVersion, cadence: {kind: "by-date", time: "HH:MM"}, items: [{title, values: {every field, the date field as YYYY-MM-DD}}]}; it has no topic generation or release days, and makes only from a version marked ready.`,
16
+ description: `${formBody("the schedule editor")} Duplicate on a schedule is this with get_schedule's settings, a new id, a new name ending "(copy)" and items: [], then pause_schedule on the copy. A design schedule (one designed piece per row, made ahead of the row's date) is {templateKind: "design", templateId: the design template's id, templateVersion: its headVersion, cadence: {kind: "by-date", time: "HH:MM"}, items: [{title, values: {every field, the date field as YYYY-MM-DD}}]}; it has no topic generation or release days, and makes only from a version approved for schedules.`,
17
17
  },
18
18
  {
19
19
  name: "get_schedule",
@@ -67,21 +67,21 @@ export const scheduleTools = [
67
67
  {
68
68
  name: "list_prepared_topics",
69
69
  route: "GET /api/schedules/:id/prepared",
70
- title: "Read prepared topics",
71
- description: "Which queued topics are Prepared ahead, and their projects.",
70
+ title: "Read topics made ahead",
71
+ description: "Which queued topics are made ahead (Make ahead), and their projects.",
72
72
  },
73
73
  {
74
74
  name: "prepare_topic",
75
75
  route: "POST /api/schedules/:id/topics/prepare",
76
76
  body: prepareTopicBody,
77
- title: "Prepare a topic",
78
- description: "Prepare, from the schedule's topics or Open on calendar: makes the topic's project now, exactly as the schedule would, and runs everything but the video, which its scheduled day renders. It spends what Play's review estimates and is refused over the schedule's spend limit and while the schedule is paused. Body: {topic: the topic's title}.",
77
+ title: "Make a topic ahead",
78
+ description: "Make ahead, on a topic in the calendar: makes the topic's project now, exactly as the schedule would, and runs everything but the video, which its scheduled day puts together. It spends what Create's estimate says and is refused over the schedule's spend limit and while the schedule is paused. Body: {topic: the topic's title}.",
79
79
  },
80
80
  {
81
81
  name: "generate_topics",
82
82
  route: "POST /api/schedules/:id/topics/generate",
83
83
  title: "Suggest topics",
84
- description: "Asks the schedule's text model for topics, a paid call, like Suggest topics.",
84
+ description: "Asks the schedule's AI model for topics, a paid call, like Suggest topics.",
85
85
  },
86
86
  {
87
87
  name: "score_topics",
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { readinessIsUsable } from "../../kernel/ports/model.js";
3
+ import { costPhrase } from "../../slices/model-checks/rules.js";
3
4
  import { quoteBody } from "../http/auditions.js";
4
5
  import { checkBody } from "../http/model-checks.js";
5
6
  import { switchBody } from "../http/providers.js";
@@ -56,7 +57,7 @@ const settings = [
56
57
  name: "get_remote_access",
57
58
  route: "GET /api/settings/remote-access",
58
59
  title: "Read remote access",
59
- description: "Settings → General → Remote access: whether Slopify's page is open on the person's other devices through Tailscale serve (their tailnet only, never the public internet), its https address, and any problem with the exact fix. Turning it on or off is the person's; agents can't.",
60
+ description: "Settings → Remote access: whether Slopify's page is open on the person's other devices through Tailscale serve (their tailnet only, never the public internet), its https address, and any problem with the exact fix. Turning it on or off is the person's; agents can't.",
60
61
  },
61
62
  {
62
63
  name: "get_settings",
@@ -80,7 +81,7 @@ const settings = [
80
81
  name: "get_default_channel_links",
81
82
  route: "GET /api/settings/channel-links",
82
83
  title: "Read the default channel links",
83
- description: "Settings → Channel links: the links a description's {{Name}} placeholders fill from.",
84
+ description: "Settings → YouTube Studio and posting: the links a description's {{Name}} placeholders fill from.",
84
85
  },
85
86
  {
86
87
  name: "set_default_channel_links",
@@ -147,7 +148,7 @@ const settings = [
147
148
  route: "POST /api/auditions/quote",
148
149
  body: quoteBody,
149
150
  title: "Price a voice sample",
150
- description: "Try a sample's price, as Play shows it before playing one. Body: {lines: [{speaker, provider, model, text}]}.",
151
+ description: "Try a sample's price, as Create shows it before playing one. Body: {lines: [{speaker, provider, model, text}]}.",
151
152
  unrecorded: true,
152
153
  },
153
154
  {
@@ -166,7 +167,7 @@ const settings = [
166
167
  name: "get_studio_settings",
167
168
  route: "GET /api/studio/settings",
168
169
  title: "Read YouTube Studio settings",
169
- description: "Settings → YouTube Studio: the playlists upload packs name, and whether the comment is posted.",
170
+ description: "Settings → YouTube Studio and posting: the playlists upload packs name, and whether the comment is posted.",
170
171
  shape: withoutExtensionSecrets,
171
172
  },
172
173
  {
@@ -186,14 +187,14 @@ const providers = [
186
187
  {
187
188
  name: "list_providers",
188
189
  route: "GET /api/providers",
189
- title: "List providers",
190
- description: "Each provider as configured or missing.",
190
+ title: "List the services",
191
+ description: "Each service on Settings → Keys & services, as configured or missing.",
191
192
  shape: configuredOrMissing,
192
193
  },
193
194
  {
194
195
  name: "list_models",
195
196
  route: "GET /api/providers/:id/models",
196
- title: "List a provider's models",
197
+ title: "List a service's models",
197
198
  description: "The models Slopify offers for the provider, with prices where known, and each model's standing for the saved key or CLI under standings: works (a check or a run succeeded), listed (the key's own model list names it), known (only Slopify's model list does), no-access (the provider said it is not on the plan, with its sentence), and retiring with its replacement when one is due. Standings never stop a run: a model chosen anywhere keeps working as before.",
198
199
  },
199
200
  {
@@ -205,26 +206,31 @@ const providers = [
205
206
  {
206
207
  name: "estimate_model_checks",
207
208
  route: "GET /api/providers/:id/models/check/estimate",
208
- title: "Estimate checking a provider's models",
209
+ title: "Estimate checking a service's models",
209
210
  description: "What Check models in Settings → Models would check for this provider and what it costs at list price, before anything is sent. Query: models (optional, comma-separated ids).",
210
211
  },
211
212
  {
212
213
  name: "check_models",
213
214
  route: "POST /api/providers/:id/models/check",
214
215
  body: checkBody,
215
- title: "Check a provider's models",
216
+ title: "Check a service's models",
216
217
  description: "Settings → Models' Check models: sends each model the smallest request (one word, a spoken Hi, one small image) to learn whether it works for the saved key or CLI, in the background. A check that costs money is refused with its estimate until the body carries confirmedDollars of at least the estimate's totalDollars (read estimate_model_checks first). Body: {models?: [ids], confirmedDollars?: number}.",
217
218
  confirm: "Each model checked is sent one small paid request at list price (a CLI's checks use its plan's allowance instead).",
218
219
  confirmFrom: {
219
220
  route: "/api/providers/:id/models/check/estimate",
220
221
  text: (value) => {
221
222
  const estimate = z
222
- .object({ count: z.number(), text: z.string(), planAccounts: z.array(z.string()) })
223
+ .object({
224
+ count: z.number(),
225
+ totalDollars: z.number(),
226
+ unpriced: z.number(),
227
+ planAccounts: z.array(z.string()),
228
+ })
223
229
  .safeParse(value);
224
230
  if (!estimate.success)
225
231
  return undefined;
226
- const { count, text, planAccounts } = estimate.data;
227
- return `Checks ${String(count)} model${count === 1 ? "" : "s"}, one small request each: ${text} at list price${planAccounts.length > 0 ? ", using the CLI plan's allowance" : ""}.`;
232
+ const { count, totalDollars, unpriced, planAccounts } = estimate.data;
233
+ return `Checks ${String(count)} model${count === 1 ? "" : "s"}, one small request each: ${costPhrase(totalDollars, unpriced)}${planAccounts.length > 0 ? ", using the CLI plan's allowance" : ""}.`;
228
234
  },
229
235
  },
230
236
  reachesOut: "asks",
@@ -244,8 +250,8 @@ const providers = [
244
250
  {
245
251
  name: "check_providers",
246
252
  route: "POST /api/providers/health",
247
- title: "Check providers",
248
- description: "Settings → Providers' Check all: which providers answer and which CLIs are signed in.",
253
+ title: "Check every service",
254
+ description: "Settings → Keys & services' Check every service: which services answer and which CLIs are signed in.",
249
255
  unrecorded: true,
250
256
  reachesOut: "asks",
251
257
  },
@@ -1,18 +1,19 @@
1
+ import { setupSectionNames } from "../../slices/project-templates/setup-sections.js";
1
2
  import { choiceBody, linkBody, redditBody, textBody } from "../../slices/social/schema.js";
2
- // A project's posts to X, LinkedIn, Instagram, TikTok, Reddit and Bluesky, as Prepare upload
3
- // shows them. Agents prepare them; Fill in <site> and posting are the person's.
3
+ // A project's posts to X, LinkedIn, Instagram, TikTok, Reddit and Bluesky, as Copy for YouTube
4
+ // Studio shows them. Agents prepare them; Fill in <site> and posting are the person's.
4
5
  export const socialTools = [
5
6
  {
6
7
  name: "get_post_packs",
7
8
  route: "GET /api/social/packs/:projectId",
8
9
  title: "Read the posts for other sites",
9
- description: "Prepare upload's posts: for each site the project posts to, the text as it goes in (with its count and limit), hashtags, link, media, AI label, when it goes out, warnings and where the post stands. The agent's work ends here: filling a site's form and posting are the person's.",
10
+ description: "Copy for YouTube Studio's posts: for each site the project posts to, the text as it goes in (with its count and limit), hashtags, link, media, AI label, when it goes out, warnings and where the post stands. The agent's work ends here: filling a site's form and posting are the person's.",
10
11
  },
11
12
  {
12
13
  name: "set_post_choice",
13
14
  route: "PUT /api/social/packs/:projectId/:platform/choice",
14
15
  title: "Change what a post carries",
15
- description: "The project's own settings for one site (platform: x, linkedin, instagram, tiktok, reddit or bluesky): its text source, media, hashtags and link; {off: true} to not post there; null to go back to the template's. A post prompt (text \"prompt\") is a paid step picked only in the template (Template Studio → Upload pack) or on Play, where Save shows its cost. Body: {choice}.",
16
+ description: `The project's own settings for one site (platform: x, linkedin, instagram, tiktok, reddit or bluesky): its text source, media, hashtags and link; {off: true} to not post there; null to go back to the template's. A post prompt (text "prompt") is a paid step picked only in the template (Edit template → ${setupSectionNames.youtube}) or in Create, where Save shows its cost. Body: {choice}.`,
16
17
  body: choiceBody,
17
18
  },
18
19
  {
@@ -63,13 +63,13 @@ const onboarding = [
63
63
  name: "get_onboarding",
64
64
  route: "GET /api/onboarding",
65
65
  title: "Read the welcome state",
66
- description: "Starter packs and what the welcome offers.",
66
+ description: "Starter templates and what the welcome offers.",
67
67
  },
68
68
  {
69
69
  name: "install_starter_pack",
70
70
  route: "POST /api/onboarding/packs/:id",
71
- title: "Install a starter pack",
72
- description: "Adds a starter pack's prompts and templates.",
71
+ title: "Install a starter template",
72
+ description: "Adds a starter template's prompts and templates.",
73
73
  },
74
74
  {
75
75
  name: "make_quick_short",