@gentbajko/slopify 3.25.9 → 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 (718) hide show
  1. package/dist/adapters/account-limits.js +30 -0
  2. package/dist/adapters/alignment/audio.js +1 -1
  3. package/dist/adapters/alignment/cache.js +4 -6
  4. package/dist/adapters/alignment/ctc.js +1 -2
  5. package/dist/adapters/alignment/lock.js +4 -3
  6. package/dist/adapters/alignment/multilingual.js +2 -4
  7. package/dist/adapters/alignment/prefetch.js +2 -1
  8. package/dist/adapters/alignment/runner.js +1 -1
  9. package/dist/adapters/alignment/worker.js +3 -2
  10. package/dist/adapters/explain.js +10 -12
  11. package/dist/adapters/ffmpeg.js +19 -1
  12. package/dist/adapters/host-cli/index.js +21 -4
  13. package/dist/adapters/host-cli/transport.js +2 -1
  14. package/dist/adapters/http-failure.js +53 -0
  15. package/dist/adapters/image/bytes.js +2 -1
  16. package/dist/adapters/image/codex.js +42 -9
  17. package/dist/adapters/image/fal.js +21 -53
  18. package/dist/adapters/image/google.js +33 -56
  19. package/dist/adapters/image/models.js +2 -2
  20. package/dist/adapters/image/openai.js +22 -48
  21. package/dist/adapters/image/reference.js +36 -0
  22. package/dist/adapters/image/replicate.js +21 -49
  23. package/dist/adapters/image/video.js +2 -1
  24. package/dist/adapters/interest/search-interest.js +113 -0
  25. package/dist/adapters/key-probes.js +54 -3
  26. package/dist/adapters/llm/antigravity-models.js +1 -1
  27. package/dist/adapters/llm/antigravity.js +11 -6
  28. package/dist/adapters/llm/assistant-cli.js +388 -0
  29. package/dist/adapters/llm/child-session.js +83 -0
  30. package/dist/adapters/llm/claude-code-models.js +52 -99
  31. package/dist/adapters/llm/claude-code.js +16 -4
  32. package/dist/adapters/llm/codex-limits.js +27 -68
  33. package/dist/adapters/llm/codex-models.js +1 -1
  34. package/dist/adapters/llm/codex-server-models.js +61 -109
  35. package/dist/adapters/llm/codex.js +12 -1
  36. package/dist/adapters/llm/document-workspace.js +3 -2
  37. package/dist/adapters/llm/image-workspace.js +3 -2
  38. package/dist/adapters/llm/openrouter.js +12 -48
  39. package/dist/adapters/llm/run-cli.js +9 -24
  40. package/dist/adapters/llm/sse-lines.js +5 -1
  41. package/dist/adapters/model-access.js +37 -0
  42. package/dist/adapters/tts/cartesia.js +15 -46
  43. package/dist/adapters/tts/elevenlabs.js +20 -52
  44. package/dist/adapters/tts/gemini.js +21 -41
  45. package/dist/adapters/tts/inworld-async.js +6 -2
  46. package/dist/adapters/tts/inworld.js +6 -2
  47. package/dist/adapters/tts/openai.js +20 -50
  48. package/dist/adapters/tts/system.js +2 -1
  49. package/dist/assets/models-lifecycle.yaml +6 -0
  50. package/dist/assistant-wiring.js +60 -0
  51. package/dist/autopilot-timers.js +59 -0
  52. package/dist/catalog/lifecycle.js +52 -0
  53. package/dist/catalog/propose.js +204 -0
  54. package/dist/catalog/registry.js +23 -14
  55. package/dist/catalog/schema.js +4 -1
  56. package/dist/catalog/store.js +39 -0
  57. package/dist/catalog/validate.js +5 -2
  58. package/dist/edge/autostart/native.js +3 -5
  59. package/dist/edge/autostart/prompt.js +2 -1
  60. package/dist/edge/autostart/service.js +3 -4
  61. package/dist/edge/cli-args.js +3 -4
  62. package/dist/edge/cli.js +2 -1
  63. package/dist/edge/docker-install/apply.js +11 -11
  64. package/dist/edge/docker-install/run.js +2 -1
  65. package/dist/edge/docker-install/state.js +4 -3
  66. package/dist/edge/docker-install/tree.js +2 -4
  67. package/dist/edge/docker-install/volume.js +3 -2
  68. package/dist/edge/docker.js +5 -4
  69. package/dist/edge/events/hub.js +5 -5
  70. package/dist/edge/http/actions.js +11 -32
  71. package/dist/edge/http/actor.js +5 -3
  72. package/dist/edge/http/app.js +86 -11
  73. package/dist/edge/http/assistant.js +129 -0
  74. package/dist/edge/http/audio-preview.js +4 -11
  75. package/dist/edge/http/auditions.js +1 -1
  76. package/dist/edge/http/autostart.js +5 -5
  77. package/dist/edge/http/backups.js +2 -4
  78. package/dist/edge/http/channel-memory.js +9 -22
  79. package/dist/edge/http/channels.js +14 -27
  80. package/dist/edge/http/checkpoints.js +39 -21
  81. package/dist/edge/http/design-templates.js +167 -0
  82. package/dist/edge/http/designs.js +178 -0
  83. package/dist/edge/http/diagnostics.js +5 -1
  84. package/dist/edge/http/document-themes.js +5 -14
  85. package/dist/edge/http/draft-files.js +1 -3
  86. package/dist/edge/http/draft-problem.js +5 -10
  87. package/dist/edge/http/drafts.js +3 -3
  88. package/dist/edge/http/entries.js +6 -9
  89. package/dist/edge/http/extension-auth.js +27 -0
  90. package/dist/edge/http/external-reviews.js +12 -11
  91. package/dist/edge/http/files.js +5 -11
  92. package/dist/edge/http/folder-location.js +1 -4
  93. package/dist/edge/http/fonts.js +0 -7
  94. package/dist/edge/http/home.js +47 -14
  95. package/dist/edge/http/host-cli.js +18 -8
  96. package/dist/edge/http/ids.js +8 -0
  97. package/dist/edge/http/keywords.js +35 -0
  98. package/dist/edge/http/model-checks.js +132 -0
  99. package/dist/edge/http/narration-peaks.js +5 -13
  100. package/dist/edge/http/onboarding.js +30 -26
  101. package/dist/edge/http/open-folder.js +5 -10
  102. package/dist/edge/http/outputs.js +7 -14
  103. package/dist/edge/http/patch-notes.js +6 -12
  104. package/dist/edge/http/planning.js +3 -7
  105. package/dist/edge/http/problem.js +2 -4
  106. package/dist/edge/http/project-create.js +2 -1
  107. package/dist/edge/http/project-templates.js +31 -19
  108. package/dist/edge/http/projects.js +24 -16
  109. package/dist/edge/http/prompts.js +9 -16
  110. package/dist/edge/http/pronunciations.js +1 -2
  111. package/dist/edge/http/providers.js +48 -34
  112. package/dist/edge/http/refusal.js +29 -0
  113. package/dist/edge/http/remote-access.js +40 -0
  114. package/dist/edge/http/remote-guard.js +71 -0
  115. package/dist/edge/http/request-guard.js +91 -0
  116. package/dist/edge/http/reviews.js +12 -25
  117. package/dist/edge/http/revision-files.js +6 -11
  118. package/dist/edge/http/revisions.js +14 -19
  119. package/dist/edge/http/run-cost.js +1 -2
  120. package/dist/edge/http/same-page.js +80 -0
  121. package/dist/edge/http/schedules.js +69 -40
  122. package/dist/edge/http/settings.js +27 -14
  123. package/dist/edge/http/social.js +283 -0
  124. package/dist/edge/http/staging.js +3 -5
  125. package/dist/edge/http/storage-files.js +5 -7
  126. package/dist/edge/http/storage.js +33 -25
  127. package/dist/edge/http/studio.js +94 -69
  128. package/dist/edge/http/style-preview.js +3 -6
  129. package/dist/edge/http/subtitles.js +3 -17
  130. package/dist/edge/http/template-studio.js +436 -0
  131. package/dist/edge/http/trash.js +11 -12
  132. package/dist/edge/http/tutorial.js +1 -2
  133. package/dist/edge/http/tutorials.js +5 -11
  134. package/dist/edge/http/update.js +7 -13
  135. package/dist/edge/http/waveform.js +3 -6
  136. package/dist/edge/http/youtube-edits.js +3 -4
  137. package/dist/edge/mcp/assistant.js +279 -0
  138. package/dist/edge/mcp/attribution.js +8 -2
  139. package/dist/edge/mcp/call-route.js +11 -2
  140. package/dist/edge/mcp/excluded-routes.js +29 -3
  141. package/dist/edge/mcp/http.js +11 -2
  142. package/dist/edge/mcp/instructions.js +6 -4
  143. package/dist/edge/mcp/library-tools.js +9 -5
  144. package/dist/edge/mcp/remake-tools.js +7 -4
  145. package/dist/edge/mcp/route-tool.js +35 -15
  146. package/dist/edge/mcp/server.js +13 -8
  147. package/dist/edge/mcp/tools-channels.js +11 -9
  148. package/dist/edge/mcp/tools-designs.js +165 -0
  149. package/dist/edge/mcp/tools-library.js +19 -7
  150. package/dist/edge/mcp/tools-planning.js +40 -21
  151. package/dist/edge/mcp/tools-projects.js +38 -11
  152. package/dist/edge/mcp/tools-publishing.js +9 -9
  153. package/dist/edge/mcp/tools-runs.js +23 -10
  154. package/dist/edge/mcp/tools-schedules.js +32 -8
  155. package/dist/edge/mcp/tools-setup.js +75 -11
  156. package/dist/edge/mcp/tools-social.js +47 -0
  157. package/dist/edge/mcp/tools-storage.js +11 -3
  158. package/dist/edge/mcp/tools-template-studio.js +166 -0
  159. package/dist/edge/mcp/tools.js +6 -0
  160. package/dist/edge/remote-access/cli.js +71 -0
  161. package/dist/edge/remote-access/model.js +32 -0
  162. package/dist/edge/remote-access/rules.js +207 -0
  163. package/dist/edge/remote-access/service.js +203 -0
  164. package/dist/edge/remote-access/store.js +44 -0
  165. package/dist/edge/remote-access/views.js +43 -0
  166. package/dist/extension/slopify-studio-chrome.zip +0 -0
  167. package/dist/extension/slopify-studio-firefox.zip +0 -0
  168. package/dist/host-cli/install.js +2 -2
  169. package/dist/host-cli/open-folder.js +2 -2
  170. package/dist/host-cli/paths.js +2 -4
  171. package/dist/host-cli/server.js +4 -4
  172. package/dist/host-cli/service.js +3 -3
  173. package/dist/host-cli/status.js +7 -7
  174. package/dist/kernel/db/migrations/0063-model-checks.sql +20 -0
  175. package/dist/kernel/db/migrations/0064-template-studio.sql +46 -0
  176. package/dist/kernel/db/migrations/0065-promise-and-assistant-reviews.sql +58 -0
  177. package/dist/kernel/db/migrations/0066-assistant.sql +44 -0
  178. package/dist/kernel/db/migrations/0067-autopilot.sql +6 -0
  179. package/dist/kernel/db/migrations/0068-topic-scores.sql +17 -0
  180. package/dist/kernel/db/migrations/0070-designs.sql +53 -0
  181. package/dist/kernel/db/migrations/0071-design-usage.sql +33 -0
  182. package/dist/kernel/db/migrations/0072-design-templates.sql +33 -0
  183. package/dist/kernel/db/migrations/0073-schedule-design-kind.sql +5 -0
  184. package/dist/kernel/db/migrations/0074-template-bakeoffs.sql +44 -0
  185. package/dist/kernel/db/migrations/0075-social-posts.sql +25 -0
  186. package/dist/kernel/db/migrations/0076-channel-social.sql +5 -0
  187. package/dist/kernel/db/migrations/0077-post-prompts.sql +17 -0
  188. package/dist/kernel/db/migrations/0078-uploaded-from-links.sql +7 -0
  189. package/dist/kernel/db/tx.js +2 -4
  190. package/dist/kernel/errors.js +27 -1
  191. package/dist/kernel/json-answer.js +15 -0
  192. package/dist/kernel/lock.js +4 -9
  193. package/dist/kernel/paths.js +8 -0
  194. package/dist/kernel/pipeline.js +12 -0
  195. package/dist/kernel/ports/assistant-cli.js +4 -0
  196. package/dist/kernel/ports/host-cli.js +3 -0
  197. package/dist/kernel/ports/interest.js +4 -0
  198. package/dist/kernel/ports/languages.js +0 -3
  199. package/dist/kernel/ports/model.js +2 -0
  200. package/dist/kernel/ports/settings-places.js +31 -0
  201. package/dist/kernel/ports/system-speech.js +31 -3
  202. package/dist/kernel/runner/attempt.js +14 -4
  203. package/dist/kernel/runner/audition.js +3 -1
  204. package/dist/kernel/runner/checkpoint-authority.js +2 -1
  205. package/dist/kernel/runner/index.js +8 -10
  206. package/dist/kernel/runner/model-access.js +40 -0
  207. package/dist/kernel/runner/model-check.js +153 -0
  208. package/dist/kernel/runner/providers.js +18 -12
  209. package/dist/kernel/runner/standalone.js +11 -7
  210. package/dist/main.js +338 -21
  211. package/dist/model-catalog.js +20 -0
  212. package/dist/model-checks.js +166 -0
  213. package/dist/patch-notes/4.0.0.md +51 -0
  214. package/dist/patch-notes/4.1.0.md +42 -0
  215. package/dist/patch-notes/index.json +12 -0
  216. package/dist/slices/admission/heads.js +2 -1
  217. package/dist/slices/admission/listing-facts.js +95 -0
  218. package/dist/slices/admission/repo.js +11 -7
  219. package/dist/slices/admission/rules.js +50 -15
  220. package/dist/slices/admission/schema.js +8 -0
  221. package/dist/slices/admission/stage-writes.js +0 -3
  222. package/dist/slices/admission/start.js +48 -31
  223. package/dist/slices/admission/state-words.js +34 -5
  224. package/dist/slices/admission/substitute.js +7 -4
  225. package/dist/slices/agents/attention-posts.js +31 -0
  226. package/dist/slices/agents/attention-templates.js +33 -0
  227. package/dist/slices/agents/attention.js +10 -1
  228. package/dist/slices/agents/connection.js +2 -6
  229. package/dist/slices/agents/model.js +6 -3
  230. package/dist/slices/agents/repo.js +15 -7
  231. package/dist/slices/article/continuation.js +0 -63
  232. package/dist/slices/article/plain.js +3 -2
  233. package/dist/slices/article/segments.js +2 -62
  234. package/dist/slices/assistant/access.js +1 -0
  235. package/dist/slices/assistant/asks.js +80 -0
  236. package/dist/slices/assistant/cost.js +54 -0
  237. package/dist/slices/assistant/gate.js +222 -0
  238. package/dist/slices/assistant/model.js +86 -0
  239. package/dist/slices/assistant/names.js +23 -0
  240. package/dist/slices/assistant/prompt.js +74 -0
  241. package/dist/slices/assistant/repo.js +74 -0
  242. package/dist/slices/assistant/tokens.js +18 -0
  243. package/dist/slices/assistant/turn.js +344 -0
  244. package/dist/slices/autopilot/buffer.js +76 -0
  245. package/dist/slices/autopilot/model.js +14 -0
  246. package/dist/slices/autopilot/notify.js +27 -0
  247. package/dist/slices/autopilot/repo.js +34 -0
  248. package/dist/slices/autopilot/signals.js +194 -0
  249. package/dist/slices/autopilot/warnings.js +85 -0
  250. package/dist/slices/autopilot/weekly.js +100 -0
  251. package/dist/slices/backups/files.js +2 -6
  252. package/dist/slices/backups/repo.js +3 -15
  253. package/dist/slices/backups/service.js +8 -7
  254. package/dist/slices/channels/cast-images.js +3 -2
  255. package/dist/slices/channels/model.js +0 -1
  256. package/dist/slices/channels/rebrand.js +0 -3
  257. package/dist/slices/channels/repo.js +4 -0
  258. package/dist/slices/channels/schema.js +7 -1
  259. package/dist/slices/channels/service.js +10 -0
  260. package/dist/slices/channels/videos.js +3 -15
  261. package/dist/slices/checkpoints/index.js +0 -1
  262. package/dist/slices/control/providers.js +2 -28
  263. package/dist/slices/designs/artwork.js +66 -0
  264. package/dist/slices/designs/budget.js +23 -0
  265. package/dist/slices/designs/calls.js +124 -0
  266. package/dist/slices/designs/check-context.js +38 -0
  267. package/dist/slices/designs/check-text.js +43 -0
  268. package/dist/slices/designs/fields.js +88 -0
  269. package/dist/slices/designs/frames.js +34 -0
  270. package/dist/slices/designs/gate.js +130 -0
  271. package/dist/slices/designs/layout.js +293 -0
  272. package/dist/slices/designs/model.js +35 -0
  273. package/dist/slices/designs/pdf-job.js +23 -0
  274. package/dist/slices/designs/pdf-pages.js +30 -0
  275. package/dist/slices/designs/pdf-runner.js +68 -0
  276. package/dist/slices/designs/pdf-worker.js +24 -0
  277. package/dist/slices/designs/picture-size.js +79 -0
  278. package/dist/slices/designs/pictures.js +55 -0
  279. package/dist/slices/designs/quote.js +24 -0
  280. package/dist/slices/designs/render-args.js +36 -0
  281. package/dist/slices/designs/render-input.js +59 -0
  282. package/dist/slices/designs/render.js +215 -0
  283. package/dist/slices/designs/repo.js +101 -0
  284. package/dist/slices/designs/requests.js +80 -0
  285. package/dist/slices/designs/runner.js +239 -0
  286. package/dist/slices/designs/sample-repo.js +91 -0
  287. package/dist/slices/designs/sample.js +223 -0
  288. package/dist/slices/designs/schema.js +87 -0
  289. package/dist/slices/designs/sections.js +44 -0
  290. package/dist/slices/designs/service.js +233 -0
  291. package/dist/slices/designs/steps-repo.js +102 -0
  292. package/dist/slices/designs/studio-kind.js +39 -0
  293. package/dist/slices/designs/template-checks.js +44 -0
  294. package/dist/slices/designs/template-make.js +118 -0
  295. package/dist/slices/designs/templates.js +218 -0
  296. package/dist/slices/document/fonts.js +2 -1
  297. package/dist/slices/document/model.js +7 -4
  298. package/dist/slices/document/render.js +2 -1
  299. package/dist/slices/document/theme-schema.js +1 -1
  300. package/dist/slices/document/theme.js +49 -3
  301. package/dist/slices/episodes/summarize.js +6 -2
  302. package/dist/slices/estimate/index.js +72 -28
  303. package/dist/slices/estimate/requests.js +4 -4
  304. package/dist/slices/fixes/rules.js +3 -1
  305. package/dist/slices/fonts/catalog.js +5 -3
  306. package/dist/slices/fonts/coverage.js +2 -1
  307. package/dist/slices/fonts/discovery.js +3 -2
  308. package/dist/slices/fonts/files.js +2 -6
  309. package/dist/slices/fonts/index.js +0 -1
  310. package/dist/slices/fonts/sfnt.js +45 -10
  311. package/dist/slices/images/appearance.js +8 -16
  312. package/dist/slices/images/scenes.js +102 -28
  313. package/dist/slices/keywords/digest.js +85 -0
  314. package/dist/slices/keywords/facts.js +92 -0
  315. package/dist/slices/keywords/fill.js +80 -0
  316. package/dist/slices/keywords/model.js +75 -0
  317. package/dist/slices/keywords/rules.js +187 -0
  318. package/dist/slices/keywords/schema.js +28 -0
  319. package/dist/slices/keywords/specs.js +260 -0
  320. package/dist/slices/keywords/values.js +74 -0
  321. package/dist/slices/library/lint.js +29 -12
  322. package/dist/slices/library/model.js +2 -0
  323. package/dist/slices/library/photorealistic.js +4 -12
  324. package/dist/slices/library/rename.js +9 -7
  325. package/dist/slices/library/save.js +14 -10
  326. package/dist/slices/library/slots.js +37 -11
  327. package/dist/slices/library/transfer.js +5 -4
  328. package/dist/slices/library/used-by.js +25 -10
  329. package/dist/slices/loudness/loudnorm.js +53 -12
  330. package/dist/slices/loudness/model.js +3 -2
  331. package/dist/slices/loudness/sentence-level.js +2 -1
  332. package/dist/slices/model-checks/cost.js +61 -0
  333. package/dist/slices/model-checks/listing.js +124 -0
  334. package/dist/slices/model-checks/model.js +20 -0
  335. package/dist/slices/model-checks/record.js +32 -0
  336. package/dist/slices/model-checks/repo.js +120 -0
  337. package/dist/slices/model-checks/rules.js +125 -0
  338. package/dist/slices/model-checks/run.js +143 -0
  339. package/dist/slices/model-checks/service.js +198 -0
  340. package/dist/slices/model-upkeep/model.js +1 -1
  341. package/dist/slices/model-upkeep/switch.js +72 -27
  342. package/dist/slices/model-upkeep/usage.js +39 -13
  343. package/dist/slices/narration/breaths.js +3 -1
  344. package/dist/slices/narration/clean-pieces.js +3 -1
  345. package/dist/slices/narration/concat.js +2 -1
  346. package/dist/slices/narration/pauses-model.js +3 -2
  347. package/dist/slices/narration/peaks.js +3 -4
  348. package/dist/slices/narration/pronunciation-chunks.js +4 -3
  349. package/dist/slices/narration/pronunciation.js +6 -4
  350. package/dist/slices/narration/steering.js +4 -3
  351. package/dist/slices/notifications/notifier.js +4 -3
  352. package/dist/slices/notifications/rules.js +5 -2
  353. package/dist/slices/notifications/settings.js +4 -12
  354. package/dist/slices/notifications/subject.js +4 -3
  355. package/dist/slices/onboarding/copy.js +21 -3
  356. package/dist/slices/onboarding/first-run.js +16 -40
  357. package/dist/slices/onboarding/full-video.js +3 -2
  358. package/dist/slices/onboarding/install.js +6 -4
  359. package/dist/slices/onboarding/model.js +26 -37
  360. package/dist/slices/onboarding/packs.js +22 -22
  361. package/dist/slices/onboarding/preferred-model.js +14 -0
  362. package/dist/slices/onboarding/quick-short.js +105 -65
  363. package/dist/slices/onboarding/sample.js +4 -2
  364. package/dist/slices/onboarding/state.js +9 -11
  365. package/dist/slices/onboarding/template.js +8 -6
  366. package/dist/slices/outputs/add.js +3 -2
  367. package/dist/slices/outputs/service.js +2 -2
  368. package/dist/slices/patch-notes/library.js +4 -3
  369. package/dist/slices/play-drafts/convert.js +4 -0
  370. package/dist/slices/play-drafts/readiness.js +3 -3
  371. package/dist/slices/play-drafts/review-inputs.js +9 -3
  372. package/dist/slices/play-drafts/review.js +5 -4
  373. package/dist/slices/play-drafts/schema.js +4 -0
  374. package/dist/slices/play-drafts/service.js +17 -7
  375. package/dist/slices/project-templates/from-project.js +9 -2
  376. package/dist/slices/project-templates/next-chapter.js +2 -1
  377. package/dist/slices/project-templates/provider-defaults.js +22 -0
  378. package/dist/slices/project-templates/repo.js +6 -1
  379. package/dist/slices/project-templates/setup-sections.js +26 -0
  380. package/dist/slices/project-templates/setup.js +14 -1
  381. package/dist/slices/project-templates/stand-ins.js +22 -0
  382. package/dist/slices/rebuild/activity.js +2 -0
  383. package/dist/slices/rebuild/admission-repo.js +3 -2
  384. package/dist/slices/rebuild/narration-history.js +4 -5
  385. package/dist/slices/rebuild/narration-retry.js +2 -1
  386. package/dist/slices/rebuild/preview-details.js +32 -14
  387. package/dist/slices/rebuild/preview-plan.js +3 -8
  388. package/dist/slices/rebuild/recipe-build.js +8 -3
  389. package/dist/slices/rebuild/recipe-describe.js +3 -3
  390. package/dist/slices/rebuild/recipe-digest.js +58 -0
  391. package/dist/slices/rebuild/recipe-input-schema.js +10 -0
  392. package/dist/slices/rebuild/recipe-keywords.js +71 -0
  393. package/dist/slices/rebuild/recipe-legacy.js +5 -1
  394. package/dist/slices/rebuild/recipe-model.js +4 -0
  395. package/dist/slices/rebuild/recipe-narration-text.js +2 -1
  396. package/dist/slices/rebuild/recipe-preparation.js +4 -4
  397. package/dist/slices/rebuild/recipe-reference.js +8 -4
  398. package/dist/slices/rebuild/recipe-reviews.js +27 -7
  399. package/dist/slices/rebuild/recipe-save.js +8 -5
  400. package/dist/slices/rebuild/recipe-scenes.js +40 -11
  401. package/dist/slices/rebuild/recipe-shorts.js +8 -8
  402. package/dist/slices/rebuild/recipe-social.js +46 -0
  403. package/dist/slices/rebuild/recipe-text.js +64 -20
  404. package/dist/slices/rebuild/recipe-validation.js +102 -31
  405. package/dist/slices/rebuild/recipe-visual.js +55 -16
  406. package/dist/slices/rebuild/recipe-voices.js +3 -2
  407. package/dist/slices/rebuild/recipe-work.js +19 -7
  408. package/dist/slices/rebuild/recipe-youtube.js +4 -3
  409. package/dist/slices/rebuild/recovery-selection.js +3 -1
  410. package/dist/slices/rebuild/recovery.js +9 -8
  411. package/dist/slices/rebuild/remake-outdated.js +5 -5
  412. package/dist/slices/rebuild/repo.js +4 -3
  413. package/dist/slices/rebuild/review-promise.js +25 -0
  414. package/dist/slices/rebuild/review-redo.js +3 -2
  415. package/dist/slices/rebuild/runtime-admission.js +4 -3
  416. package/dist/slices/rebuild/runtime-agent-review.js +11 -5
  417. package/dist/slices/rebuild/runtime-animate.js +10 -9
  418. package/dist/slices/rebuild/runtime-article.js +7 -5
  419. package/dist/slices/rebuild/runtime-checkpoints.js +5 -4
  420. package/dist/slices/rebuild/runtime-document.js +11 -13
  421. package/dist/slices/rebuild/runtime-export-bed.js +8 -12
  422. package/dist/slices/rebuild/runtime-export-edit.js +8 -16
  423. package/dist/slices/rebuild/runtime-export-inputs.js +12 -11
  424. package/dist/slices/rebuild/runtime-export-short.js +9 -5
  425. package/dist/slices/rebuild/runtime-export.js +38 -15
  426. package/dist/slices/rebuild/runtime-figure-card.js +2 -1
  427. package/dist/slices/rebuild/runtime-image.js +8 -12
  428. package/dist/slices/rebuild/runtime-instructions.js +2 -0
  429. package/dist/slices/rebuild/runtime-keywords.js +59 -0
  430. package/dist/slices/rebuild/runtime-lines.js +2 -11
  431. package/dist/slices/rebuild/runtime-local.js +17 -22
  432. package/dist/slices/rebuild/runtime-narration-publication.js +2 -5
  433. package/dist/slices/rebuild/runtime-narration-reuse.js +9 -13
  434. package/dist/slices/rebuild/runtime-narration-text.js +13 -17
  435. package/dist/slices/rebuild/runtime-pictures.js +2 -4
  436. package/dist/slices/rebuild/runtime-piece-label.js +10 -6
  437. package/dist/slices/rebuild/runtime-plan.js +31 -5
  438. package/dist/slices/rebuild/runtime-provider.js +67 -25
  439. package/dist/slices/rebuild/runtime-publication.js +10 -9
  440. package/dist/slices/rebuild/runtime-review.js +39 -33
  441. package/dist/slices/rebuild/runtime-run.js +4 -1
  442. package/dist/slices/rebuild/runtime-shorts.js +31 -50
  443. package/dist/slices/rebuild/runtime-store.js +20 -10
  444. package/dist/slices/rebuild/runtime-subtitles.js +28 -25
  445. package/dist/slices/rebuild/runtime-voices.js +10 -16
  446. package/dist/slices/rebuild/runtime-youtube.js +14 -31
  447. package/dist/slices/rebuild/service-readiness.js +11 -3
  448. package/dist/slices/rebuild/transition-repo.js +6 -5
  449. package/dist/slices/rebuild/work-records.js +6 -0
  450. package/dist/slices/reruns/cascade.js +1 -2
  451. package/dist/slices/reruns/index.js +6 -9
  452. package/dist/slices/research/synthesis.js +3 -2
  453. package/dist/slices/reviews/external-model.js +4 -1
  454. package/dist/slices/reviews/external-repo.js +2 -1
  455. package/dist/slices/reviews/external-rows.js +2 -3
  456. package/dist/slices/reviews/holds.js +5 -4
  457. package/dist/slices/reviews/model.js +32 -11
  458. package/dist/slices/reviews/repo.js +2 -1
  459. package/dist/slices/reviews/rules.js +4 -3
  460. package/dist/slices/reviews/verdict.js +2 -1
  461. package/dist/slices/reviews/view.js +5 -2
  462. package/dist/slices/revisions/downloads.js +4 -5
  463. package/dist/slices/revisions/image-plan.js +1 -1
  464. package/dist/slices/revisions/mutation-assets.js +9 -5
  465. package/dist/slices/revisions/mutation-cues.js +2 -5
  466. package/dist/slices/revisions/mutations.js +3 -3
  467. package/dist/slices/revisions/repo.js +3 -1
  468. package/dist/slices/revisions/schema.js +1 -0
  469. package/dist/slices/revisions/view.js +20 -0
  470. package/dist/slices/run-cost/limits.js +5 -2
  471. package/dist/slices/run-cost/meter.js +12 -5
  472. package/dist/slices/run-cost/panel.js +8 -74
  473. package/dist/slices/run-cost/plan-readings.js +127 -0
  474. package/dist/slices/run-cost/plan-use.js +169 -0
  475. package/dist/slices/run-cost/pricing.js +3 -3
  476. package/dist/slices/run-cost/week.js +32 -4
  477. package/dist/slices/schedules/agenda.js +18 -7
  478. package/dist/slices/schedules/by-date.js +42 -0
  479. package/dist/slices/schedules/calendar.js +5 -0
  480. package/dist/slices/schedules/design-agenda.js +36 -0
  481. package/dist/slices/schedules/design-check.js +41 -0
  482. package/dist/slices/schedules/design-run.js +126 -0
  483. package/dist/slices/schedules/next-run.js +62 -0
  484. package/dist/slices/schedules/prepare.js +18 -2
  485. package/dist/slices/schedules/repo.js +30 -21
  486. package/dist/slices/schedules/rescore.js +35 -0
  487. package/dist/slices/schedules/scheduler.js +13 -3
  488. package/dist/slices/schedules/schema.js +57 -3
  489. package/dist/slices/schedules/score.js +107 -0
  490. package/dist/slices/schedules/service.js +57 -24
  491. package/dist/slices/schedules/topic-list.js +15 -0
  492. package/dist/slices/schedules/topic-scores.js +104 -0
  493. package/dist/slices/schedules/topics.js +53 -41
  494. package/dist/slices/settings/cli-paths.js +4 -6
  495. package/dist/slices/settings/first-run.js +8 -43
  496. package/dist/slices/settings/health.js +30 -15
  497. package/dist/slices/settings/key-test.js +1 -1
  498. package/dist/slices/settings/model-reach.js +3 -17
  499. package/dist/slices/settings/model.js +14 -2
  500. package/dist/slices/settings/playback.js +34 -23
  501. package/dist/slices/settings/probe-read.js +16 -0
  502. package/dist/slices/settings/repo.js +33 -0
  503. package/dist/slices/settings/tutorial.js +2 -2
  504. package/dist/slices/settings/voices.js +4 -12
  505. package/dist/slices/shorts/keep.js +2 -1
  506. package/dist/slices/shorts/pick.js +6 -18
  507. package/dist/slices/shorts/prompts.js +4 -14
  508. package/dist/slices/shorts/render.js +6 -2
  509. package/dist/slices/social/channel.js +44 -0
  510. package/dist/slices/social/defaults.js +17 -0
  511. package/dist/slices/social/due.js +36 -0
  512. package/dist/slices/social/extension.js +18 -0
  513. package/dist/slices/social/fit.js +115 -0
  514. package/dist/slices/social/limits.js +186 -0
  515. package/dist/slices/social/links.js +21 -0
  516. package/dist/slices/social/media.js +132 -0
  517. package/dist/slices/social/model.js +75 -0
  518. package/dist/slices/social/notice.js +19 -0
  519. package/dist/slices/social/pack.js +176 -0
  520. package/dist/slices/social/post-prompt.js +56 -0
  521. package/dist/slices/social/queue.js +31 -0
  522. package/dist/slices/social/repo.js +133 -0
  523. package/dist/slices/social/reshape.js +97 -0
  524. package/dist/slices/social/rules.js +5 -0
  525. package/dist/slices/social/schema.js +70 -0
  526. package/dist/slices/social/serve.js +51 -0
  527. package/dist/slices/social/service.js +129 -0
  528. package/dist/slices/social/settings.js +21 -0
  529. package/dist/slices/social/sources.js +114 -0
  530. package/dist/slices/social/state.js +110 -0
  531. package/dist/slices/social/text.js +149 -0
  532. package/dist/slices/storage/arrange.js +3 -1
  533. package/dist/slices/storage/assets.js +8 -10
  534. package/dist/slices/storage/backup-designs.js +74 -0
  535. package/dist/slices/storage/backup-export.js +8 -3
  536. package/dist/slices/storage/backup-format.js +10 -0
  537. package/dist/slices/storage/backup-import.js +22 -4
  538. package/dist/slices/storage/delete-project.js +6 -5
  539. package/dist/slices/storage/files-location.js +6 -8
  540. package/dist/slices/storage/layout.js +13 -2
  541. package/dist/slices/storage/model.js +3 -0
  542. package/dist/slices/storage/portable.js +17 -12
  543. package/dist/slices/storage/schema.js +2 -0
  544. package/dist/slices/storage/staging-refs.js +2 -1
  545. package/dist/slices/storage/staging.js +6 -9
  546. package/dist/slices/storage/trim.js +26 -9
  547. package/dist/slices/studio/calendar.js +7 -2
  548. package/dist/slices/studio/disclosure.js +4 -4
  549. package/dist/slices/studio/model.js +1 -1
  550. package/dist/slices/studio/pack.js +9 -8
  551. package/dist/slices/studio/pick.js +2 -11
  552. package/dist/slices/studio/plan.js +7 -16
  553. package/dist/slices/studio/queue.js +3 -14
  554. package/dist/slices/studio/releases.js +26 -0
  555. package/dist/slices/studio/settings.js +20 -57
  556. package/dist/slices/studio/videos.js +35 -4
  557. package/dist/slices/style-preview/render.js +37 -16
  558. package/dist/slices/style-preview/schema.js +14 -1
  559. package/dist/slices/style-preview/service.js +2 -1
  560. package/dist/slices/style-preview/settings.js +33 -5
  561. package/dist/slices/subtitles/captions.js +1 -1
  562. package/dist/slices/telemetry/collector-client.js +2 -4
  563. package/dist/slices/telemetry/flush.js +2 -4
  564. package/dist/slices/telemetry/model.js +0 -7
  565. package/dist/slices/telemetry/record.js +10 -3
  566. package/dist/slices/template-studio/anatomy-view.js +161 -0
  567. package/dist/slices/template-studio/anatomy.js +73 -0
  568. package/dist/slices/template-studio/bakeoff-make.js +225 -0
  569. package/dist/slices/template-studio/bakeoff-repo.js +83 -0
  570. package/dist/slices/template-studio/bakeoff.js +333 -0
  571. package/dist/slices/template-studio/budget.js +106 -0
  572. package/dist/slices/template-studio/cards.js +78 -0
  573. package/dist/slices/template-studio/checks.js +322 -0
  574. package/dist/slices/template-studio/document-sample.js +56 -0
  575. package/dist/slices/template-studio/edit.js +15 -0
  576. package/dist/slices/template-studio/for-all.js +161 -0
  577. package/dist/slices/template-studio/free-video.js +31 -0
  578. package/dist/slices/template-studio/free.js +176 -0
  579. package/dist/slices/template-studio/gate.js +40 -0
  580. package/dist/slices/template-studio/hidden.js +20 -0
  581. package/dist/slices/template-studio/jobs.js +79 -0
  582. package/dist/slices/template-studio/loudness.js +111 -0
  583. package/dist/slices/template-studio/make.js +40 -0
  584. package/dist/slices/template-studio/model.js +58 -0
  585. package/dist/slices/template-studio/pack-import.js +253 -0
  586. package/dist/slices/template-studio/pack-samples.js +60 -0
  587. package/dist/slices/template-studio/pack.js +207 -0
  588. package/dist/slices/template-studio/paid-view.js +66 -0
  589. package/dist/slices/template-studio/paid.js +355 -0
  590. package/dist/slices/template-studio/quote.js +155 -0
  591. package/dist/slices/template-studio/ready.js +104 -0
  592. package/dist/slices/template-studio/repo.js +134 -0
  593. package/dist/slices/template-studio/reviews-path.js +58 -0
  594. package/dist/slices/template-studio/runner.js +84 -0
  595. package/dist/slices/template-studio/save.js +236 -0
  596. package/dist/slices/template-studio/say-it-as.js +248 -0
  597. package/dist/slices/template-studio/schedule-gate.js +34 -0
  598. package/dist/slices/template-studio/schedule-price.js +32 -0
  599. package/dist/slices/template-studio/schedule-sample.js +91 -0
  600. package/dist/slices/template-studio/schema.js +243 -0
  601. package/dist/slices/template-studio/scope.js +124 -0
  602. package/dist/slices/template-studio/sections.js +176 -0
  603. package/dist/slices/template-studio/service.js +175 -0
  604. package/dist/slices/template-studio/status.js +191 -0
  605. package/dist/slices/template-studio/topic.js +223 -0
  606. package/dist/slices/thumbnail/by-llm.js +1 -1
  607. package/dist/slices/trash/designs.js +76 -0
  608. package/dist/slices/trash/model.js +13 -4
  609. package/dist/slices/trash/service.js +52 -2
  610. package/dist/slices/tutorials/library.js +3 -2
  611. package/dist/slices/uploads/repo.js +37 -1
  612. package/dist/slices/uploads/rules.js +3 -2
  613. package/dist/slices/video/ass-text.js +17 -0
  614. package/dist/slices/video/audio-export.js +2 -64
  615. package/dist/slices/video/edit-list.js +2 -2
  616. package/dist/slices/video/edit-settings.js +1 -1
  617. package/dist/slices/video/encoding.js +169 -0
  618. package/dist/slices/video/ffmpeg.js +23 -21
  619. package/dist/slices/video/figure-card.js +1 -15
  620. package/dist/slices/video/plan.js +2 -1
  621. package/dist/slices/video/slideshow.js +43 -18
  622. package/dist/slices/voices/attribution.js +3 -2
  623. package/dist/slices/voices/model.js +9 -8
  624. package/dist/slices/voices/palette.js +0 -3
  625. package/dist/slices/voices/script.js +2 -1
  626. package/dist/slices/youtube/answer.js +4 -16
  627. package/dist/slices/youtube/edits-repo.js +3 -12
  628. package/dist/tutorials/AI-CLIs.md +25 -25
  629. package/dist/tutorials/Agents-MCP.md +34 -33
  630. package/dist/tutorials/Assistant.md +42 -0
  631. package/dist/tutorials/Backups.md +7 -7
  632. package/dist/tutorials/Calendar.md +17 -25
  633. package/dist/tutorials/Cast-Library.md +19 -19
  634. package/dist/tutorials/Channels.md +42 -35
  635. package/dist/tutorials/Costs-and-Run-Cost.md +38 -40
  636. package/dist/tutorials/Create-Article.md +114 -0
  637. package/dist/tutorials/Create-Extras.md +112 -0
  638. package/dist/tutorials/Create-Images.md +165 -0
  639. package/dist/tutorials/Create-Narration.md +178 -0
  640. package/dist/tutorials/Create-Overview.md +244 -0
  641. package/dist/tutorials/Create-Video-and-Style.md +144 -0
  642. package/dist/tutorials/Docker.md +3 -3
  643. package/dist/tutorials/Document-Themes.md +32 -32
  644. package/dist/tutorials/Editing-a-Project.md +94 -94
  645. package/dist/tutorials/FAQ.md +18 -18
  646. package/dist/tutorials/First-Launch-and-Welcome.md +50 -64
  647. package/dist/tutorials/Home-and-Projects.md +115 -71
  648. package/dist/tutorials/Home.md +33 -33
  649. package/dist/tutorials/Install.md +14 -13
  650. package/dist/tutorials/Intros-and-Outros.md +33 -34
  651. package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +62 -58
  652. package/dist/tutorials/Keywords-Slopify-Fills.md +87 -0
  653. package/dist/tutorials/Models.md +53 -21
  654. package/dist/tutorials/Multiple-Voices.md +41 -40
  655. package/dist/tutorials/Narration-Aliases-and-Glossary.md +14 -14
  656. package/dist/tutorials/Notifications.md +27 -17
  657. package/dist/tutorials/Other-Languages.md +15 -15
  658. package/dist/tutorials/PDF-Documents.md +38 -29
  659. package/dist/tutorials/Posting-to-Social-Sites.md +121 -0
  660. package/dist/tutorials/Project-Page.md +118 -120
  661. package/dist/tutorials/Prompts-and-Templates.md +84 -0
  662. package/dist/tutorials/Prompts.md +48 -44
  663. package/dist/tutorials/Providers-and-Keys.md +105 -98
  664. package/dist/tutorials/Publishing-to-YouTube.md +31 -31
  665. package/dist/tutorials/Recovery-and-Retries.md +31 -31
  666. package/dist/tutorials/Remote-Access.md +63 -0
  667. package/dist/tutorials/Reviews-and-Checkpoints.md +98 -90
  668. package/dist/tutorials/Schedules.md +46 -27
  669. package/dist/tutorials/Settings-Reference.md +194 -174
  670. package/dist/tutorials/Shorts.md +34 -33
  671. package/dist/tutorials/Start-at-Login.md +3 -3
  672. package/dist/tutorials/Studio-Extension.md +22 -24
  673. package/dist/tutorials/Template-Studio.md +128 -0
  674. package/dist/tutorials/Templates.md +51 -77
  675. package/dist/tutorials/Trash.md +4 -4
  676. package/dist/tutorials/Troubleshooting.md +44 -44
  677. package/dist/tutorials/Uninstalling-and-Moving.md +5 -5
  678. package/dist/tutorials/Updating-and-Patch-Notes.md +18 -18
  679. package/dist/tutorials/Video-Editing.md +34 -34
  680. package/dist/tutorials/Where-Your-Files-Live.md +10 -10
  681. package/dist/tutorials/YouTube-Description.md +26 -26
  682. package/dist/tutorials/Your-First-Short.md +35 -35
  683. package/dist/tutorials/_Sidebar.md +19 -14
  684. package/dist/updater/work-in-progress.js +42 -12
  685. package/dist/web/assets/index-BNftKQrA.css +1 -0
  686. package/dist/web/assets/index-Cpa58woP.js +459 -0
  687. package/dist/web/assets/pdf-BKh8f7R6.js +56 -0
  688. package/dist/web/assets/pdf.worker.min-BmVo14Nb.mjs +28 -0
  689. package/dist/web/assets/pdf.worker.min-D7i8o3wR.js +1 -0
  690. package/dist/web/index.html +2 -2
  691. package/package.json +6 -2
  692. package/dist/slices/article/provided-entries.js +0 -66
  693. package/dist/slices/article/run.js +0 -145
  694. package/dist/slices/images/run.js +0 -234
  695. package/dist/slices/narration/legacy-plan.js +0 -58
  696. package/dist/slices/narration/run.js +0 -270
  697. package/dist/slices/rebuild/runtime-actions.js +0 -90
  698. package/dist/slices/research/run.js +0 -224
  699. package/dist/slices/subtitles/prepare.js +0 -194
  700. package/dist/slices/subtitles/transcript.js +0 -34
  701. package/dist/slices/thumbnail/run.js +0 -219
  702. package/dist/slices/video/audio-inputs.js +0 -33
  703. package/dist/slices/video/reuse-audio.js +0 -62
  704. package/dist/slices/video/run.js +0 -78
  705. package/dist/slices/video/write-export.js +0 -158
  706. package/dist/slices/video/write-subtitles.js +0 -59
  707. package/dist/tutorials/Library-Overview.md +0 -76
  708. package/dist/tutorials/Play-Images.md +0 -161
  709. package/dist/tutorials/Play-Narration.md +0 -167
  710. package/dist/tutorials/Play-Outputs.md +0 -109
  711. package/dist/tutorials/Play-Overview.md +0 -227
  712. package/dist/tutorials/Play-Title-and-Article.md +0 -136
  713. package/dist/tutorials/Play-Video-and-Style.md +0 -143
  714. package/dist/web/assets/index-BadsoORk.css +0 -1
  715. package/dist/web/assets/index-D8LqNsCl.js +0 -326
  716. package/dist/web/assets/pdf-T7MCwjIv.js +0 -54
  717. package/dist/web/assets/pdf.worker.min-Dswkl-cV.mjs +0 -29
  718. package/dist/web/assets/pdf.worker.min-zC6nfbxG.js +0 -1
@@ -31,7 +31,11 @@ export const fileArg = z
31
31
  export function formBody(screen) {
32
32
  return `Body: the fields ${screen} sends; a wrong body is refused with every wrong field named.`;
33
33
  }
34
- export function inputShape(tool) {
34
+ // `confirmed` is what the confirmed argument is said to mean; the assistant offers it on every
35
+ // ask-first tool, including ones the page doesn't confirm.
36
+ export function inputShape(tool, confirmed = tool.confirm === undefined
37
+ ? undefined
38
+ : "true once you accept the consequence the description states.") {
35
39
  const { method, path } = routeOf(tool);
36
40
  return {
37
41
  ...Object.fromEntries(paramsOf(path).map((name) => [name, pathParam])),
@@ -42,20 +46,36 @@ export function inputShape(tool) {
42
46
  ...(method === "GET"
43
47
  ? {}
44
48
  : tool.upload === undefined
45
- ? {
46
- body: z
47
- .record(z.string(), z.unknown())
48
- .optional()
49
- .describe("The JSON body the description names."),
50
- }
49
+ ? { body: bodyArg(tool) }
51
50
  : { file: fileArg }),
52
- ...(tool.confirm === undefined
53
- ? {}
54
- : {
55
- confirmed: z
56
- .boolean()
57
- .optional()
58
- .describe("true once you accept the consequence the description states."),
59
- }),
51
+ ...(confirmed === undefined ? {} : { confirmed: z.boolean().optional().describe(confirmed) }),
60
52
  };
61
53
  }
54
+ // The body argument: any JSON object, so a wrong one reaches the route's own check (and its
55
+ // wording) instead of the MCP client's; with the route's schema, its JSON Schema is listed too.
56
+ function bodyArg(tool) {
57
+ const loose = z.record(z.string(), z.unknown()).optional();
58
+ if (tool.body === undefined)
59
+ return loose.describe("The JSON body the description names.");
60
+ const { $schema: _draft, ...listed } = z.toJSONSchema(tool.body, {
61
+ io: "input",
62
+ unrepresentable: "any",
63
+ });
64
+ return loose.meta({
65
+ ...listed,
66
+ description: "The JSON body, exactly these fields with these types.",
67
+ });
68
+ }
69
+ // The route's own reasons for refusing this body, as its validator states them; undefined when
70
+ // the route would take it (or the tool names no schema).
71
+ export function bodyIssues(tool, body) {
72
+ if (tool.body === undefined)
73
+ return undefined;
74
+ const parsed = tool.body.safeParse(body);
75
+ return parsed.success
76
+ ? undefined
77
+ : parsed.error.issues.map((issue) => ({
78
+ path: issue.path.map(String).join("."),
79
+ message: issue.message,
80
+ }));
81
+ }
@@ -20,25 +20,30 @@ export function createMcpServer(deps) {
20
20
  registerReviewTools(server, deps);
21
21
  registerLibraryTools(server, deps);
22
22
  registerRemakeTools(server, deps);
23
+ registerAttention(server, deps);
24
+ server.registerPrompt("attend", {
25
+ title: "Attend to Slopify",
26
+ description: "The routine that clears what waits for a person; run it on a schedule.",
27
+ }, () => ({ messages: [{ role: "user", content: { type: "text", text: attendRoutine } }] }));
28
+ return server;
29
+ }
30
+ export function registerAttention(server, deps) {
23
31
  server.registerTool("needs_attention", {
24
32
  title: "What needs attention",
25
- description: "Everything waiting for someone, oldest first: external reviews waiting for a verdict, flagged review verdicts, review checkpoints waiting for approval, failed steps, paused runs, runs a restart stopped, held topics, videos marked Late · upload now and the extension's failed finishing touches. Each entry has its kind, the project (or schedule), stage and item, the reason or error text, autoRetryInFlight (skip it while true), agentCanAct (report it when false), the fixing tools' ids and the tools to use.",
33
+ description: "Everything waiting for someone, oldest first: external reviews waiting for a verdict, flagged review verdicts, review checkpoints waiting for approval, failed steps, paused runs, runs a restart stopped, held topics, videos marked Late · upload now, the extension's failed finishing touches and fills, posts filled in another site's form waiting for the person's Post, and schedules that skip their runs because their template has no version approved for schedules. Each entry has its kind, the project (or schedule), stage and item, the reason or error text, autoRetryInFlight (skip it while true), agentCanAct (report it when false), the fixing tools' ids and the tools to use.",
26
34
  annotations: { readOnlyHint: true, openWorldHint: false },
27
35
  }, () => text(JSON.stringify({
28
36
  entries: needsAttention({ db: deps.db, paths: deps.paths, log: deps.log }, deps.clock.now()),
29
37
  })));
30
- server.registerPrompt("attend", {
31
- title: "Attend to Slopify",
32
- description: "The routine that clears what waits for a person; run it on a schedule.",
33
- }, () => ({ messages: [{ role: "user", content: { type: "text", text: attendRoutine } }] }));
34
- return server;
35
38
  }
36
- function registerRouteTool(server, deps, tool) {
39
+ export function registerRouteTool(server, deps, tool,
40
+ // The assistant's ask-first tools take confirmed: true with this meaning.
41
+ confirmed) {
37
42
  const { method } = routeOf(tool);
38
43
  server.registerTool(tool.name, {
39
44
  title: tool.title,
40
45
  description: tool.description,
41
- inputSchema: inputShape(tool),
46
+ inputSchema: confirmed === undefined ? inputShape(tool) : inputShape(tool, confirmed),
42
47
  annotations: {
43
48
  readOnlyHint: method === "GET" || (tool.unrecorded === true && tool.reachesOut !== "sends"),
44
49
  destructiveHint: method === "DELETE" || tool.confirm !== undefined,
@@ -1,3 +1,4 @@
1
+ import { castGenerateSchema } from "../../slices/channels/schema.js";
1
2
  import { formBody } from "./route-tool.js";
2
3
  export const channelTools = [
3
4
  {
@@ -72,8 +73,9 @@ export const channelTools = [
72
73
  {
73
74
  name: "generate_cast_picture",
74
75
  route: "POST /api/channels/cast/:memberId/generate",
76
+ body: castGenerateSchema,
75
77
  title: "Generate a cast picture",
76
- 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.",
77
79
  },
78
80
  {
79
81
  name: "delete_cast_picture",
@@ -121,33 +123,33 @@ export const channelTools = [
121
123
  {
122
124
  name: "list_channel_videos",
123
125
  route: "GET /api/channels/:id/videos",
124
- title: "Read existing videos",
125
- 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.",
126
128
  },
127
129
  {
128
130
  name: "preview_channel_videos",
129
131
  route: "POST /api/channels/:id/videos/preview",
130
- title: "Preview an existing-videos import",
131
- description: formBody("the Existing videos import"),
132
+ title: "Preview a titles-to-avoid import",
133
+ description: formBody("the Titles to avoid tab's import"),
132
134
  unrecorded: true,
133
135
  },
134
136
  {
135
137
  name: "import_channel_videos",
136
138
  route: "POST /api/channels/:id/videos",
137
- title: "Import existing videos",
138
- description: formBody("the Existing videos import"),
139
+ title: "Import titles to avoid",
140
+ description: formBody("the Titles to avoid tab's import"),
139
141
  },
140
142
  {
141
143
  name: "remove_channel_videos",
142
144
  route: "DELETE /api/channels/:id/videos",
143
- title: "Remove every existing video",
145
+ title: "Remove every title to avoid",
144
146
  description: "Removes every imported title.",
145
147
  confirm: "This removes every imported video title of the channel.",
146
148
  },
147
149
  {
148
150
  name: "remove_channel_video",
149
151
  route: "DELETE /api/channels/:id/videos/:videoId",
150
- title: "Remove an existing video",
152
+ title: "Remove a title to avoid",
151
153
  description: "Removes one imported title.",
152
154
  },
153
155
  ];
@@ -0,0 +1,165 @@
1
+ import { editPictureSchema, makeArtworkSchema, quoteEditSchema, retryStepSchema, } from "../../slices/designs/requests.js";
2
+ import { makeFromTemplateSchema } from "../../slices/designs/template-make.js";
3
+ import { createTemplateSchema, markReadySchema as markDesignReadySchema, saveTemplateSchema, } from "../../slices/designs/templates.js";
4
+ import { sampleRequestSchema } from "../http/design-templates.js";
5
+ import { formBody } from "./route-tool.js";
6
+ // Library → Designs: pictures edited step by step and designed pieces (posters, flyers,
7
+ // brochures, social images), and the design templates they are made from. Every paid step
8
+ // starts only with the acknowledgedHigh its quote gave.
9
+ const paid = "a paid call: send acknowledgedHigh as the quote's high (refused with the new quote when the price rose)";
10
+ export const designTools = [
11
+ {
12
+ name: "list_designs",
13
+ route: "GET /api/designs",
14
+ title: "List designs",
15
+ description: "Every design with its versions, newest first. Query: projectId to list one project's.",
16
+ },
17
+ {
18
+ name: "upload_design_picture",
19
+ route: "POST /api/designs/pictures",
20
+ title: "Upload a picture to design with",
21
+ description: "Keeps a PNG or JPEG (at most 10 MB) and answers its sha256, which create_design takes as fromStepSha.",
22
+ upload: "raw",
23
+ },
24
+ {
25
+ name: "create_design",
26
+ route: "POST /api/designs",
27
+ title: "Start a design",
28
+ description: `Starts an edit from a picture (kind "edit" with fromStepSha or stagedFileId) or a designed piece (kind "design" with its document). Body: {id: a new id of letters, digits, - and _, mutationId: a new UUID, kind, name, channelId?, projectId?, stagedFileId? | fromStepSha?, document?, values?}.`,
29
+ },
30
+ {
31
+ name: "get_design",
32
+ route: "GET /api/designs/:id",
33
+ title: "Read a design",
34
+ description: "One design: its settings, values, current version (headStepId) and every version.",
35
+ },
36
+ {
37
+ name: "update_design",
38
+ route: "PUT /api/designs/:id",
39
+ title: "Save a design",
40
+ description: `Renames it, links it to a project (projectId, or null to unlink), saves its settings (document; an edit with a document becomes a designed piece) and values. Body: {baseUpdatedAt: the updatedAt get_design returns, name?, projectId?, document?, values?}. ${formBody("the design's Text and Formats tabs")}`,
41
+ },
42
+ {
43
+ name: "delete_design",
44
+ route: "DELETE /api/designs/:id",
45
+ title: "Delete a design",
46
+ description: "Moves the design to Settings → Trash, where it stays 30 days.",
47
+ confirm: "It moves to Settings → Trash. After 30 days it is removed for good with every version and every file drawn from it.",
48
+ },
49
+ {
50
+ name: "quote_design_edit",
51
+ route: "POST /api/designs/:id/quote",
52
+ body: quoteEditSchema,
53
+ title: "Price a picture edit",
54
+ description: "What one edit costs with this model. Body: {provider, model, castMemberIds?}. Records nothing.",
55
+ unrecorded: true,
56
+ },
57
+ {
58
+ name: "quote_design_artwork",
59
+ route: "POST /api/designs/:id/artwork/quote",
60
+ title: "Price a design's artwork",
61
+ description: "What drawing the designed piece's artwork costs. Records nothing.",
62
+ unrecorded: true,
63
+ },
64
+ {
65
+ name: "edit_design_picture",
66
+ route: "POST /api/designs/:id/edit",
67
+ body: editPictureSchema,
68
+ title: "Edit the picture",
69
+ description: `Changes a version of the picture as the instruction says; the result lands as the next version (read get_design until it is ready or failed). This is ${paid}. Body: {mutationId: a new UUID, fromStepId, instruction, provider, model, castMemberIds?, acknowledgedHigh}.`,
70
+ },
71
+ {
72
+ name: "make_design_artwork",
73
+ route: "POST /api/designs/:id/artwork",
74
+ body: makeArtworkSchema,
75
+ title: "Make the artwork",
76
+ description: `Draws the designed piece's artwork from its picture prompt with its fields filled. This is ${paid}. Body: {mutationId: a new UUID, acknowledgedHigh}.`,
77
+ },
78
+ {
79
+ name: "retry_design_step",
80
+ route: "POST /api/designs/:id/steps/:stepId/retry",
81
+ body: retryStepSchema,
82
+ title: "Try a failed version again",
83
+ description: "Asks the provider again for a version that failed, as Try again does. It is paid again, even for a version a restart stopped that may already have been charged: send acknowledgedHigh as the high price quote_design_edit (an edited picture) or quote_design_artwork (artwork) gives for that version's provider and model, and acknowledgedUnknown: true when that price is unknown; refused with the current quote when it differs. Body: {acknowledgedHigh, acknowledgedUnknown?}.",
84
+ },
85
+ {
86
+ name: "set_design_version",
87
+ route: "PUT /api/designs/:id/head",
88
+ title: "Continue from a version",
89
+ description: "Makes a ready version the one the next edit starts from and the files are drawn from. Free. Body: {stepId}.",
90
+ },
91
+ {
92
+ name: "get_design_picture",
93
+ route: "GET /api/designs/:id/steps/:stepId/picture",
94
+ title: "See a version",
95
+ description: "One version of the design's picture, as an image.",
96
+ },
97
+ {
98
+ name: "get_design_file",
99
+ route: "GET /api/designs/:id/files/:file",
100
+ title: "Draw a finished piece",
101
+ description: "Draws the piece in one format with Slopify's text layer, as the design page's Download does: file is <format>.png (a4, a3, flyer, square, portrait, story, wide) or <format>.pdf (a4, a3, flyer, brochure). A PNG comes back as an image; a PDF is drawn and its size reported.",
102
+ },
103
+ {
104
+ name: "list_design_templates",
105
+ route: "GET /api/design-templates",
106
+ title: "List design templates",
107
+ description: "Every design template with its versions and the version approved for schedules.",
108
+ },
109
+ {
110
+ name: "create_design_template",
111
+ route: "POST /api/design-templates",
112
+ body: createTemplateSchema,
113
+ title: "Create a design template",
114
+ description: "Body: {id: a new id, mutationId: a new UUID, name, document, channelId?}.",
115
+ },
116
+ {
117
+ name: "get_design_template",
118
+ route: "GET /api/design-templates/:id",
119
+ title: "Read a design template",
120
+ description: "One design template: its newest version, its checks and every version.",
121
+ },
122
+ {
123
+ name: "save_design_template",
124
+ route: "PUT /api/design-templates/:id",
125
+ body: saveTemplateSchema,
126
+ title: "Save a design template",
127
+ description: `Saves a new version. Body: {baseVersion: the headVersion get_design_template returns, name, document, sample?: "make" | "skip", acknowledgedHigh?}. ${formBody("the template editor")}`,
128
+ },
129
+ {
130
+ name: "delete_design_template",
131
+ route: "DELETE /api/design-templates/:id",
132
+ title: "Delete a design template",
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 posters. After 30 days it is removed for good with its versions and its sample.",
135
+ },
136
+ {
137
+ name: "quote_design_template",
138
+ route: "POST /api/design-templates/:id/quote",
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
+ unrecorded: true,
142
+ },
143
+ {
144
+ name: "make_design_template_sample",
145
+ route: "POST /api/design-templates/:id/sample",
146
+ body: sampleRequestSchema,
147
+ title: "Make a template's sample",
148
+ description: `Makes the template editor's sample of a version now, when it is held (it cost more than shown, a price is unknown or the day's sample budget is spent), failed or not made yet. This is ${paid}. Body: {version, acknowledgedHigh: the quote's high}.`,
149
+ },
150
+ {
151
+ name: "mark_design_template_ready",
152
+ route: "POST /api/design-templates/:id/ready",
153
+ body: markDesignReadySchema,
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
+ },
158
+ {
159
+ name: "make_design_from_template",
160
+ route: "POST /api/design-templates/:id/make",
161
+ body: makeFromTemplateSchema,
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
+ },
165
+ ];
@@ -4,19 +4,31 @@ 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",
11
11
  route: "POST /api/prompts",
12
12
  title: "Create a prompt",
13
- description: "Body: {kind: article | image | thumbnail | narration | description | shorts | review | script, name, body}.",
13
+ description: "Body: {kind: article | image | thumbnail | narration | description | shorts | review | script, name, body}. A body can use the keywords Slopify fills ({{Slopify_Title}}, {{Slopify_Summary}}, {{Slopify_Scene}}…; list_keywords says which work in which kind); any other name starting with Slopify_ is refused.",
14
14
  },
15
15
  {
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.",
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
+ },
21
+ {
22
+ name: "list_keywords",
23
+ route: "GET /api/keywords",
24
+ title: "List the keywords Slopify fills",
25
+ description: "Every {{Slopify_…}} keyword: what it fills in, an example, when it exists, which prompt kinds can use it and what it costs (free, or part of one AI call per run). {{Scene}} and {{Appearance}} are the old names of {{Slopify_Scene}} and {{Slopify_Appearance}}.",
26
+ },
27
+ {
28
+ name: "get_keyword_facts",
29
+ route: "GET /api/keywords/facts/:projectId",
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 settings → Title and keywords. Put the answer's keywordFacts into the revision's config and save it with save_revision.",
20
32
  },
21
33
  {
22
34
  name: "set_prompt_photorealistic",
@@ -53,7 +65,7 @@ export const libraryTools = [
53
65
  name: "list_entries",
54
66
  route: "GET /api/entries",
55
67
  title: "List intros and outros",
56
- description: "Library intros and outros.",
68
+ description: "Your intros and outros (Prompts → Intros and outros).",
57
69
  },
58
70
  {
59
71
  name: "create_entry",
@@ -95,8 +107,8 @@ export const libraryTools = [
95
107
  {
96
108
  name: "list_document_themes",
97
109
  route: "GET /api/document-themes",
98
- title: "List PDF themes",
99
- 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.",
100
112
  },
101
113
  {
102
114
  name: "create_document_theme",
@@ -140,7 +152,7 @@ export const libraryTools = [
140
152
  name: "get_narration_aliases",
141
153
  route: "GET /api/pronunciations/aliases",
142
154
  title: "Read narration aliases",
143
- 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.",
144
156
  },
145
157
  {
146
158
  name: "set_narration_aliases",
@@ -1,54 +1,65 @@
1
+ import { createDraftInputSchema } from "../../slices/play-drafts/schema.js";
2
+ import { templateCreateSchema } from "../../slices/project-templates/schema.js";
3
+ import { startBody, versionBody } from "../http/drafts.js";
4
+ import { nextChapterBody, templateDeleteBody, templateFromProjectBody, templateInstantiateBody, templateUpdateBody, } from "../http/project-templates.js";
5
+ import { saveBody } from "../http/revisions.js";
1
6
  import { formBody } from "./route-tool.js";
2
7
  const drafts = [
3
8
  {
4
9
  name: "list_drafts",
5
10
  route: "GET /api/drafts",
6
- title: "List Play drafts",
7
- 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.",
8
13
  },
9
14
  {
10
15
  name: "create_draft",
11
16
  route: "POST /api/drafts",
12
- title: "Create a Play draft",
13
- 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.",
17
+ body: createDraftInputSchema,
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.",
14
20
  },
15
21
  {
16
22
  name: "get_draft",
17
23
  route: "GET /api/drafts/:id",
18
- title: "Read a Play draft",
19
- 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.",
20
26
  },
21
27
  {
22
28
  name: "save_draft",
23
29
  route: "PUT /api/drafts/:id",
24
- title: "Save a Play draft",
25
- 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}.",
30
+ body: saveBody,
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}.",
26
33
  },
27
34
  {
28
35
  name: "fork_draft",
29
36
  route: "POST /api/drafts/:id/fork",
30
- title: "Copy a Play draft",
37
+ body: createDraftInputSchema,
38
+ title: "Copy a draft",
31
39
  description: "Body: {id: a new UUID for the copy, sourceId: this draft's id, document}.",
32
40
  },
33
41
  {
34
42
  name: "discard_draft",
35
43
  route: "DELETE /api/drafts/:id",
36
- title: "Discard a Play draft",
44
+ body: versionBody,
45
+ title: "Discard a draft",
37
46
  description: "Body: {baseVersion}.",
38
47
  confirm: "This discards the draft and its uploaded files for good.",
39
48
  },
40
49
  {
41
50
  name: "review_draft",
42
51
  route: "POST /api/drafts/:id/review",
43
- title: "Review a Play draft",
44
- 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.",
52
+ body: versionBody,
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.",
45
55
  unrecorded: true,
46
56
  },
47
57
  {
48
58
  name: "start_draft",
49
59
  route: "POST /api/drafts/:id/start",
50
- title: "Start a Play draft",
51
- description: "Start in Play: starts the reviewed draft's runs, which spend what the review estimated. Body: {baseVersion, reviewId: the id review_draft returned}.",
60
+ body: startBody,
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}.",
52
63
  },
53
64
  {
54
65
  name: "upload_draft_attachment",
@@ -83,6 +94,8 @@ const drafts = [
83
94
  description: "Removes an uploaded file no edit used.",
84
95
  },
85
96
  ];
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 approved for schedules in Edit template (mark_template_ready); from then on a new version waits until it is approved.";
86
99
  const templates = [
87
100
  {
88
101
  name: "list_templates",
@@ -93,20 +106,23 @@ const templates = [
93
106
  {
94
107
  name: "create_template",
95
108
  route: "POST /api/project-templates",
109
+ body: templateCreateSchema,
96
110
  title: "Create a template",
97
- description: formBody("the template editor"),
111
+ description: `${formBody("the template editor")} ${templateGateRule}`,
98
112
  },
99
113
  {
100
114
  name: "template_from_project",
101
115
  route: "POST /api/project-templates/from-project/:projectId",
116
+ body: templateFromProjectBody,
102
117
  title: "Save a project as a template",
103
- description: formBody("Save as template on the project page"),
118
+ description: `${formBody("Save as template on the project page")} ${templateGateRule}`,
104
119
  },
105
120
  {
106
121
  name: "next_chapter_template",
107
122
  route: "POST /api/project-templates/next-chapter/:projectId",
123
+ body: nextChapterBody,
108
124
  title: "Template for the next chapter",
109
- description: formBody("Next chapter on the project page"),
125
+ description: `${formBody("Next chapter on the project page")} ${templateGateRule}`,
110
126
  },
111
127
  {
112
128
  name: "get_template",
@@ -117,21 +133,24 @@ const templates = [
117
133
  {
118
134
  name: "update_template",
119
135
  route: "PUT /api/project-templates/:id",
136
+ body: templateUpdateBody,
120
137
  title: "Save a template",
121
- description: `${formBody("the template editor")} Saving adds a version.`,
138
+ description: `${formBody("the template editor")} Saving adds a version. ${templateGateRule}`,
122
139
  },
123
140
  {
124
141
  name: "delete_template",
125
142
  route: "DELETE /api/project-templates/:id",
143
+ body: templateDeleteBody,
126
144
  title: "Delete a template",
127
- description: formBody("Delete in Library → Templates"),
145
+ description: formBody("Delete on Templates"),
128
146
  confirm: "Moves it to the trash for 30 days (Settings → Trash). Existing projects and drafts keep their setup.",
129
147
  },
130
148
  {
131
149
  name: "instantiate_template",
132
150
  route: "POST /api/project-templates/:id/instantiate",
133
- title: "Use a template",
134
- description: "Opens a new Play draft from the template, like Use template.",
151
+ body: templateInstantiateBody,
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.",
135
154
  },
136
155
  ];
137
156
  export const planningTools = [...drafts, ...templates];