@bongos/core 1.19.1063 → 1.19.1065

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 (65) hide show
  1. package/.bongos-core.json +136 -56
  2. package/.claude/skills/grade-recover/SKILL.md +1 -0
  3. package/.claude/skills/tweak/SKILL.md +70 -0
  4. package/clients/bongos-client/README.md +1 -1
  5. package/clients/bongos-client/bongos-client.global.js +12 -0
  6. package/clients/bongos-client/index.cjs +12 -0
  7. package/clients/bongos-client/index.d.ts +21 -1
  8. package/clients/bongos-client/index.mjs +12 -0
  9. package/docs/api/openapi.json +492 -4
  10. package/docs/api-reference.md +9 -3
  11. package/docs/copy-inventory.md +60 -41
  12. package/docs/copy-registry.json +228 -47
  13. package/docs/file-map.md +1 -0
  14. package/docs/module-api-changelog.md +4 -0
  15. package/docs/page-inventory.json +11 -2
  16. package/docs/page-readings.json +45 -22
  17. package/modules/copy-desk/page-decisions.js +71 -0
  18. package/modules/copy-desk/page-status.js +96 -0
  19. package/modules/copy-desk/pages.js +30 -0
  20. package/modules/copy-desk/routes/copy-desk.js +153 -0
  21. package/modules/copy-desk/tests/copy_no_cms.mjs +40 -4
  22. package/modules/hall-ui/public/approval-queue-lib.js +156 -0
  23. package/modules/hall-ui/public/approval-queue.css +286 -0
  24. package/modules/hall-ui/public/approval-queue.js +338 -0
  25. package/modules/hall-ui/public/studio.css +33 -0
  26. package/modules/hall-ui/public/studio.html +18 -1
  27. package/modules/hall-ui/public/studio.js +30 -0
  28. package/modules/hall-ui/public/studio.states.json +198 -0
  29. package/modules/hall-ui/records/approval-queue.md +32 -0
  30. package/modules/lifecycle/db-grade.js +96 -58
  31. package/modules/lifecycle/github-pr-close.js +41 -0
  32. package/modules/lifecycle/github-push.js +5 -2
  33. package/modules/lifecycle/lifecycle.js +12 -0
  34. package/modules/lifecycle/migrations/lifecycle_013_task_visual_slots.sql +52 -0
  35. package/modules/lifecycle/page-tweak-approve.js +242 -0
  36. package/modules/lifecycle/page-tweak-hold.js +74 -0
  37. package/modules/lifecycle/page-tweak-reads.js +33 -1
  38. package/modules/lifecycle/routes/gate-approvals.js +17 -2
  39. package/modules/lifecycle/routes/tasks.js +4 -2
  40. package/modules/lifecycle/routes/visuals.js +82 -0
  41. package/modules/lifecycle/task-visual-db.js +40 -1
  42. package/modules/lifecycle/task-visuals.js +24 -0
  43. package/package-lock.json +2 -2
  44. package/package.json +1 -1
  45. package/release-notes.json +12 -0
  46. package/scripts/gds/copy-apply.js +277 -1
  47. package/scripts/gds/page-reader.js +2 -0
  48. package/scripts/gds/ship-finish.js +27 -2
  49. package/scripts/gds/ship-flow.js +17 -1
  50. package/scripts/gds/ship-land.js +30 -7
  51. package/scripts/gds/ship-merge.js +43 -15
  52. package/scripts/gds/strand-watch.js +41 -1
  53. package/scripts/gds/task.js +23 -5
  54. package/scripts/gds/tweak-renders.js +200 -0
  55. package/scripts/hall-preview/server.js +18 -0
  56. package/src/module-api.js +1 -1
  57. package/tests/copy_desk_page_approve.mjs +307 -0
  58. package/tests/fixtures/page-ledger.mjs +41 -1
  59. package/tests/gate_approvals.mjs +93 -0
  60. package/tests/hall_approval_queue.mjs +327 -0
  61. package/tests/hall_audit.mjs +4 -0
  62. package/tests/page_tweak_hold.mjs +265 -0
  63. package/tests/publish_status_branch.mjs +23 -0
  64. package/tests/task_visual_slots.mjs +161 -0
  65. package/tests/tweak_batch_apply.mjs +265 -0
@@ -339,6 +339,8 @@ function createClient(opts = {}) {
339
339
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
340
340
  },
341
341
  "copyDesk": {
342
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
343
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
342
344
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
343
345
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
344
346
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -349,6 +351,8 @@ function createClient(opts = {}) {
349
351
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
350
352
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
351
353
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
354
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
355
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
352
356
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
353
357
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
354
358
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -361,6 +365,8 @@ function createClient(opts = {}) {
361
365
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
362
366
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
363
367
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
368
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
369
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
364
370
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
365
371
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
366
372
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -1087,6 +1093,12 @@ function createClient(opts = {}) {
1087
1093
  deleteTasksIdVisual: (args) => request("DELETE", "/tasks/{id}/visual", { hasBody: false }, args),
1088
1094
  // POST /tasks/{id}/visual — rank: any-builder — POST /tasks/:id/visual
1089
1095
  postTasksIdVisual: (args) => request("POST", "/tasks/{id}/visual", { hasBody: true }, args),
1096
+ // GET /tasks/{id}/visuals — rank: any-builder — GET /tasks/:id/visuals
1097
+ getTasksIdVisuals: (args) => request("GET", "/tasks/{id}/visuals", { hasBody: false }, args),
1098
+ // DELETE /tasks/{id}/visuals/{slot} — rank: any-builder — DELETE /tasks/:id/visuals/:slot
1099
+ deleteTasksIdVisualsSlot: (args) => request("DELETE", "/tasks/{id}/visuals/{slot}", { hasBody: false }, args),
1100
+ // POST /tasks/{id}/visuals/{slot} — rank: any-builder — POST /tasks/:id/visuals/:slot
1101
+ postTasksIdVisualsSlot: (args) => request("POST", "/tasks/{id}/visuals/{slot}", { hasBody: true }, args),
1090
1102
  // POST /tasks/{id}/vote — rank: metic+archon — POST /tasks/:id/vote
1091
1103
  postTasksIdVote: (args) => request("POST", "/tasks/{id}/vote", { hasBody: true }, args),
1092
1104
  // POST /tasks/{id}/water — rank: any-builder — POST /tasks/:id/water
@@ -338,6 +338,8 @@ function createClient(opts = {}) {
338
338
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
339
339
  },
340
340
  "copyDesk": {
341
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
342
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
341
343
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
342
344
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
343
345
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -348,6 +350,8 @@ function createClient(opts = {}) {
348
350
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
349
351
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
350
352
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
353
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
354
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
351
355
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
352
356
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
353
357
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -360,6 +364,8 @@ function createClient(opts = {}) {
360
364
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
361
365
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
362
366
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
367
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
368
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
363
369
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
364
370
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
365
371
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -1086,6 +1092,12 @@ function createClient(opts = {}) {
1086
1092
  deleteTasksIdVisual: (args) => request("DELETE", "/tasks/{id}/visual", { hasBody: false }, args),
1087
1093
  // POST /tasks/{id}/visual — rank: any-builder — POST /tasks/:id/visual
1088
1094
  postTasksIdVisual: (args) => request("POST", "/tasks/{id}/visual", { hasBody: true }, args),
1095
+ // GET /tasks/{id}/visuals — rank: any-builder — GET /tasks/:id/visuals
1096
+ getTasksIdVisuals: (args) => request("GET", "/tasks/{id}/visuals", { hasBody: false }, args),
1097
+ // DELETE /tasks/{id}/visuals/{slot} — rank: any-builder — DELETE /tasks/:id/visuals/:slot
1098
+ deleteTasksIdVisualsSlot: (args) => request("DELETE", "/tasks/{id}/visuals/{slot}", { hasBody: false }, args),
1099
+ // POST /tasks/{id}/visuals/{slot} — rank: any-builder — POST /tasks/:id/visuals/:slot
1100
+ postTasksIdVisualsSlot: (args) => request("POST", "/tasks/{id}/visuals/{slot}", { hasBody: true }, args),
1089
1101
  // POST /tasks/{id}/vote — rank: metic+archon — POST /tasks/:id/vote
1090
1102
  postTasksIdVote: (args) => request("POST", "/tasks/{id}/vote", { hasBody: true }, args),
1091
1103
  // POST /tasks/{id}/water — rank: any-builder — POST /tasks/:id/water
@@ -23,6 +23,7 @@ export interface DeleteSpecialitiesIdDocumentsDocIdResponse { ok: boolean }
23
23
  export interface DeleteTasksIdCriteriaCriterionIdResponse { ok: boolean; removed: unknown }
24
24
  export interface DeleteTasksIdDependenciesDepIdResponse { ok: boolean; removed: unknown }
25
25
  export interface DeleteTasksIdVisualResponse { ok: boolean; visual_url: unknown }
26
+ export interface DeleteTasksIdVisualsSlotResponse { ok: boolean; slot: unknown; visual_url: unknown }
26
27
  export interface ErrorEnvelope { error: ApiErrorObject }
27
28
  export interface GetAccessRequestsInvitesResponse { invites: unknown }
28
29
  export interface GetAccessRequestsResponse { requests: unknown }
@@ -170,6 +171,7 @@ export interface GetTasksClaimableResponse { claimable: unknown; claimable_total
170
171
  export interface GetTasksIdCriteriaResponse { criteria: unknown }
171
172
  export interface GetTasksIdDependenciesResponse { dependencies: unknown; dependents: unknown }
172
173
  export interface GetTasksIdRecommendationsResponse { recommendations: unknown; count: unknown }
174
+ export interface GetTasksIdVisualsResponse { ok: boolean; task_id: unknown; slots: unknown }
173
175
  export interface GetTasksNewcomerFloorResponse { disciplines: unknown }
174
176
  export interface GetTasksPeerVotesFeedResponse { tasks: unknown; can_vote: unknown }
175
177
  export interface GetTasksResponse { tasks: unknown }
@@ -297,8 +299,12 @@ export interface PostCopyDeskFlagsIdCloseRequest { status: string; resolution_no
297
299
  export interface PostCopyDeskFlagsIdCloseResponse { ok: boolean; flag: unknown }
298
300
  export interface PostCopyDeskFlagsRequest { scope?: string; surface: string; string_id?: string; reason: string; kind?: string }
299
301
  export interface PostCopyDeskFlagsResponse { ok: boolean; flag: unknown }
302
+ export interface PostCopyDeskPagesPageIdApproveRequest { task_id?: string }
303
+ export interface PostCopyDeskPagesPageIdApproveResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; status_after: unknown; land: unknown; next: unknown }
300
304
  export interface PostCopyDeskPagesPageIdAsksRequest { reason: string }
301
305
  export interface PostCopyDeskPagesPageIdDraftDocxResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; draft: unknown; counter: unknown; merge: unknown }
306
+ export interface PostCopyDeskPagesPageIdSendBackRequest { note: string; task_id?: string }
307
+ export interface PostCopyDeskPagesPageIdSendBackResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; sent_back: unknown; pr: unknown; next: unknown }
302
308
  export interface PostCopyDeskProposalsRequest { string_id: string; proposed_text: string; why: string; file?: string; line?: number; flag_id?: number }
303
309
  export interface PostCopyDeskProposalsResponse { ok: boolean; task: unknown; created: boolean; patch?: unknown }
304
310
  export interface PostCostRequest { task_id?: number; amount_usd: number; category: string; description?: string; source?: string; source_ref?: string; recorded_at?: string; fresh_input_usd?: number; cache_read_usd?: number; cache_write_usd?: number; output_usd?: number; builder_id?: number; skill_name?: string }
@@ -307,7 +313,7 @@ export interface PostDependenciesResponse { ok: boolean; dependency: unknown }
307
313
  export interface PostDiscordChannelsReconcileResponse { ok: boolean; applied: unknown; failed: unknown; total: unknown; warnings: unknown }
308
314
  export interface PostDoneWhenCriterionIdSatisfyRequest { satisfied_by_task_id?: number }
309
315
  export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
310
- export interface PostGateApprovalsPrApproveResponse { ok: boolean; pr: unknown; already_clear?: boolean; message: unknown; head_sha?: unknown; status_set?: boolean; recheck?: unknown }
316
+ export interface PostGateApprovalsPrApproveResponse { ok: boolean; pr: unknown; already_clear?: boolean; message: unknown; head_sha?: unknown; status_set?: boolean; recheck?: unknown; held_for_artist?: unknown }
311
317
  export interface PostGithubRepoVisibilityRequest { repo: string; visibility: "public" | "private" }
312
318
  export interface PostGithubRepoVisibilityResponse { ok: boolean; repo: unknown; private_deployable: boolean }
313
319
  export interface PostGithubReposRequest { name: string }
@@ -471,6 +477,8 @@ export interface PostTasksIdPublishBranchRequest { branch: string; head_sha: str
471
477
  export interface PostTasksIdShipResponse { ok: boolean; task: unknown }
472
478
  export interface PostTasksIdVisualRequest { image_b64: string; content_type: string; alt?: string }
473
479
  export interface PostTasksIdVisualResponse { ok: boolean; visual_url: unknown; visual_alt: unknown; bytes: unknown }
480
+ export interface PostTasksIdVisualsSlotRequest { image_b64: string; content_type: string; alt?: string }
481
+ export interface PostTasksIdVisualsSlotResponse { ok: boolean; slot: unknown; visual_url: unknown; visual_alt: unknown; bytes: unknown }
474
482
  export interface PostTasksIdVoteRequest { vote: -1 | 0 | 1 }
475
483
  export interface PostTasksIdVoteResponse { ok: boolean; task_id: unknown; my_vote: unknown; net_votes: unknown; total_votes: unknown }
476
484
  export interface PostTasksNewcomerRestockResponse { ok: boolean; stamped: unknown; results: unknown }
@@ -759,6 +767,8 @@ export interface BongosClient {
759
767
  getConnectionsSuggestions(args?: RequestArgs): Promise<GetConnectionsSuggestionsResponse>;
760
768
  };
761
769
  "copyDesk": {
770
+ /** GET /copy-desk/approvals — rank: any-builder */
771
+ getCopyDeskApprovals(args?: RequestArgs): Promise<ApiResponse>;
762
772
  /** POST /copy-desk/flags — rank: any-builder */
763
773
  postCopyDeskFlags(args: RequestArgs & { body: PostCopyDeskFlagsRequest }): Promise<PostCopyDeskFlagsResponse>;
764
774
  /** POST /copy-desk/flags/{id}/close — rank: any-builder */
@@ -769,6 +779,8 @@ export interface BongosClient {
769
779
  getCopyDeskPages(args?: RequestArgs): Promise<ApiResponse>;
770
780
  /** GET /copy-desk/pages/{pageId} — rank: any-builder */
771
781
  getCopyDeskPagesPageId(args?: RequestArgs): Promise<ApiResponse>;
782
+ /** POST /copy-desk/pages/{pageId}/approve — rank: any-builder */
783
+ postCopyDeskPagesPageIdApprove(args?: RequestArgs & { body?: PostCopyDeskPagesPageIdApproveRequest }): Promise<PostCopyDeskPagesPageIdApproveResponse>;
772
784
  /** POST /copy-desk/pages/{pageId}/asks — rank: any-builder */
773
785
  postCopyDeskPagesPageIdAsks(args: RequestArgs & { body: PostCopyDeskPagesPageIdAsksRequest }): Promise<ApiResponse>;
774
786
  /** POST /copy-desk/pages/{pageId}/claim — rank: any-builder */
@@ -781,6 +793,8 @@ export interface BongosClient {
781
793
  getCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<ApiResponse>;
782
794
  /** POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder */
783
795
  postCopyDeskPagesPageIdDraftDocx(args?: RequestArgs): Promise<PostCopyDeskPagesPageIdDraftDocxResponse>;
796
+ /** POST /copy-desk/pages/{pageId}/send-back — rank: any-builder */
797
+ postCopyDeskPagesPageIdSendBack(args: RequestArgs & { body: PostCopyDeskPagesPageIdSendBackRequest }): Promise<PostCopyDeskPagesPageIdSendBackResponse>;
784
798
  /** POST /copy-desk/pages/{pageId}/submit — rank: any-builder */
785
799
  postCopyDeskPagesPageIdSubmit(args?: RequestArgs): Promise<ApiResponse>;
786
800
  /** POST /copy-desk/proposals — rank: any-builder */
@@ -1507,6 +1521,12 @@ export interface BongosClient {
1507
1521
  deleteTasksIdVisual(args?: RequestArgs): Promise<DeleteTasksIdVisualResponse>;
1508
1522
  /** POST /tasks/{id}/visual — rank: any-builder */
1509
1523
  postTasksIdVisual(args: RequestArgs & { body: PostTasksIdVisualRequest }): Promise<PostTasksIdVisualResponse>;
1524
+ /** GET /tasks/{id}/visuals — rank: any-builder */
1525
+ getTasksIdVisuals(args?: RequestArgs): Promise<GetTasksIdVisualsResponse>;
1526
+ /** DELETE /tasks/{id}/visuals/{slot} — rank: any-builder */
1527
+ deleteTasksIdVisualsSlot(args?: RequestArgs): Promise<DeleteTasksIdVisualsSlotResponse>;
1528
+ /** POST /tasks/{id}/visuals/{slot} — rank: any-builder */
1529
+ postTasksIdVisualsSlot(args: RequestArgs & { body: PostTasksIdVisualsSlotRequest }): Promise<PostTasksIdVisualsSlotResponse>;
1510
1530
  /** POST /tasks/{id}/vote — rank: metic+archon */
1511
1531
  postTasksIdVote(args: RequestArgs & { body: PostTasksIdVoteRequest }): Promise<PostTasksIdVoteResponse>;
1512
1532
  /** POST /tasks/{id}/water — rank: any-builder */
@@ -335,6 +335,8 @@ export function createClient(opts = {}) {
335
335
  getConnectionsSuggestions: (args) => request("GET", "/connections/suggestions", { hasBody: false }, args),
336
336
  },
337
337
  "copyDesk": {
338
+ // GET /copy-desk/approvals — rank: any-builder — GET /copy-desk/approvals
339
+ getCopyDeskApprovals: (args) => request("GET", "/copy-desk/approvals", { hasBody: false }, args),
338
340
  // POST /copy-desk/flags — rank: any-builder — POST /copy-desk/flags
339
341
  postCopyDeskFlags: (args) => request("POST", "/copy-desk/flags", { hasBody: true }, args),
340
342
  // POST /copy-desk/flags/{id}/close — rank: any-builder — POST /copy-desk/flags/:id/close
@@ -345,6 +347,8 @@ export function createClient(opts = {}) {
345
347
  getCopyDeskPages: (args) => request("GET", "/copy-desk/pages", { hasBody: false }, args),
346
348
  // GET /copy-desk/pages/{pageId} — rank: any-builder — GET /copy-desk/pages/:pageId
347
349
  getCopyDeskPagesPageId: (args) => request("GET", "/copy-desk/pages/{pageId}", { hasBody: false }, args),
350
+ // POST /copy-desk/pages/{pageId}/approve — rank: any-builder — POST /copy-desk/pages/:pageId/approve
351
+ postCopyDeskPagesPageIdApprove: (args) => request("POST", "/copy-desk/pages/{pageId}/approve", { hasBody: true }, args),
348
352
  // POST /copy-desk/pages/{pageId}/asks — rank: any-builder — POST /copy-desk/pages/:pageId/asks
349
353
  postCopyDeskPagesPageIdAsks: (args) => request("POST", "/copy-desk/pages/{pageId}/asks", { hasBody: true }, args),
350
354
  // POST /copy-desk/pages/{pageId}/claim — rank: any-builder — POST /copy-desk/pages/:pageId/claim
@@ -357,6 +361,8 @@ export function createClient(opts = {}) {
357
361
  getCopyDeskPagesPageIdDraftDocx: (args) => request("GET", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: false }, args),
358
362
  // POST /copy-desk/pages/{pageId}/draft.docx — rank: any-builder — POST /copy-desk/pages/:pageId/draft.docx
359
363
  postCopyDeskPagesPageIdDraftDocx: (args) => request("POST", "/copy-desk/pages/{pageId}/draft.docx", { hasBody: true }, args),
364
+ // POST /copy-desk/pages/{pageId}/send-back — rank: any-builder — POST /copy-desk/pages/:pageId/send-back
365
+ postCopyDeskPagesPageIdSendBack: (args) => request("POST", "/copy-desk/pages/{pageId}/send-back", { hasBody: true }, args),
360
366
  // POST /copy-desk/pages/{pageId}/submit — rank: any-builder — POST /copy-desk/pages/:pageId/submit
361
367
  postCopyDeskPagesPageIdSubmit: (args) => request("POST", "/copy-desk/pages/{pageId}/submit", { hasBody: true }, args),
362
368
  // POST /copy-desk/proposals — rank: any-builder — POST /copy-desk/proposals
@@ -1083,6 +1089,12 @@ export function createClient(opts = {}) {
1083
1089
  deleteTasksIdVisual: (args) => request("DELETE", "/tasks/{id}/visual", { hasBody: false }, args),
1084
1090
  // POST /tasks/{id}/visual — rank: any-builder — POST /tasks/:id/visual
1085
1091
  postTasksIdVisual: (args) => request("POST", "/tasks/{id}/visual", { hasBody: true }, args),
1092
+ // GET /tasks/{id}/visuals — rank: any-builder — GET /tasks/:id/visuals
1093
+ getTasksIdVisuals: (args) => request("GET", "/tasks/{id}/visuals", { hasBody: false }, args),
1094
+ // DELETE /tasks/{id}/visuals/{slot} — rank: any-builder — DELETE /tasks/:id/visuals/:slot
1095
+ deleteTasksIdVisualsSlot: (args) => request("DELETE", "/tasks/{id}/visuals/{slot}", { hasBody: false }, args),
1096
+ // POST /tasks/{id}/visuals/{slot} — rank: any-builder — POST /tasks/:id/visuals/:slot
1097
+ postTasksIdVisualsSlot: (args) => request("POST", "/tasks/{id}/visuals/{slot}", { hasBody: true }, args),
1086
1098
  // POST /tasks/{id}/vote — rank: metic+archon — POST /tasks/:id/vote
1087
1099
  postTasksIdVote: (args) => request("POST", "/tasks/{id}/vote", { hasBody: true }, args),
1088
1100
  // POST /tasks/{id}/water — rank: any-builder — POST /tasks/:id/water