@graph8/sdk 0.308.1 → 0.358.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 (659) hide show
  1. package/README.md +81 -0
  2. package/blocks/README.md +32 -0
  3. package/blocks/_foundation/README.md +78 -0
  4. package/blocks/_foundation/block.json +79 -0
  5. package/blocks/_foundation/components/api-error.tsx +62 -0
  6. package/blocks/_foundation/components/confirm-spend-dialog.tsx +142 -0
  7. package/blocks/_foundation/components/empty-state.tsx +24 -0
  8. package/blocks/_foundation/hooks/use-g8-mutation.ts +88 -0
  9. package/blocks/_foundation/hooks/use-g8-query.ts +87 -0
  10. package/blocks/_foundation/hooks/use-job-poll.ts +130 -0
  11. package/blocks/_foundation/hooks/use-paginated.ts +105 -0
  12. package/blocks/_foundation/lib/g8-client.ts +128 -0
  13. package/blocks/_foundation/recipes/verify-proxy-key.ts +18 -0
  14. package/blocks/_foundation/server/proxy.ts +233 -0
  15. package/blocks/_foundation/server/route.ts +30 -0
  16. package/blocks/agents/README.md +133 -0
  17. package/blocks/agents/block.json +223 -0
  18. package/blocks/agents/components/agent-builder.tsx +199 -0
  19. package/blocks/agents/components/agent-knowledge-panel.tsx +144 -0
  20. package/blocks/agents/components/agent-runs.tsx +175 -0
  21. package/blocks/agents/components/agent-skills-panel.tsx +126 -0
  22. package/blocks/agents/components/agent-test-console.tsx +175 -0
  23. package/blocks/agents/lib/agent-types.ts +114 -0
  24. package/blocks/agents/recipes/create-agent-and-attach-skill.ts +50 -0
  25. package/blocks/agents/recipes/run-and-follow-agent-run.ts +46 -0
  26. package/blocks/agents/recipes/test-agent-before-activating.ts +36 -0
  27. package/blocks/analytics/README.md +73 -0
  28. package/blocks/analytics/block.json +178 -0
  29. package/blocks/analytics/components/funnel-chart.tsx +79 -0
  30. package/blocks/analytics/components/kpi-tiles.tsx +74 -0
  31. package/blocks/analytics/components/leaderboard.tsx +86 -0
  32. package/blocks/analytics/components/report-builder.tsx +200 -0
  33. package/blocks/analytics/hooks/use-report.ts +26 -0
  34. package/blocks/analytics/lib/analytics-types.ts +108 -0
  35. package/blocks/analytics/lib/use-debounced.ts +16 -0
  36. package/blocks/analytics/recipes/01-weekly-outbound-report.ts +32 -0
  37. package/blocks/analytics/recipes/02-revenue-snapshot.ts +22 -0
  38. package/blocks/analytics/recipes/03-saved-report.ts +30 -0
  39. package/blocks/appointments/README.md +80 -0
  40. package/blocks/appointments/block.json +218 -0
  41. package/blocks/appointments/components/availability-editor.tsx +192 -0
  42. package/blocks/appointments/components/booking-page.tsx +154 -0
  43. package/blocks/appointments/components/event-type-editor.tsx +214 -0
  44. package/blocks/appointments/components/meeting-detail.tsx +147 -0
  45. package/blocks/appointments/components/meeting-list.tsx +148 -0
  46. package/blocks/appointments/hooks/use-available-slots.ts +29 -0
  47. package/blocks/appointments/hooks/use-schedules.ts +18 -0
  48. package/blocks/appointments/lib/appointments-types.ts +159 -0
  49. package/blocks/appointments/lib/idempotency.ts +30 -0
  50. package/blocks/appointments/recipes/01-create-event-type-and-hours.ts +27 -0
  51. package/blocks/appointments/recipes/02-find-slots-and-book.ts +34 -0
  52. package/blocks/appointments/recipes/03-bookings-digest.ts +22 -0
  53. package/blocks/appointments/recipes/04-calendar-invite.ts +21 -0
  54. package/blocks/block.schema.json +130 -0
  55. package/blocks/block.types.ts +109 -0
  56. package/blocks/campaigns/README.md +118 -0
  57. package/blocks/campaigns/block.json +361 -0
  58. package/blocks/campaigns/components/campaign-assets.tsx +180 -0
  59. package/blocks/campaigns/components/campaign-audience-step.tsx +91 -0
  60. package/blocks/campaigns/components/campaign-launch-step.tsx +147 -0
  61. package/blocks/campaigns/components/campaign-list.tsx +120 -0
  62. package/blocks/campaigns/components/campaign-metrics.tsx +93 -0
  63. package/blocks/campaigns/components/campaign-select.tsx +52 -0
  64. package/blocks/campaigns/components/campaign-sequence-step.tsx +158 -0
  65. package/blocks/campaigns/components/campaign-wizard.tsx +238 -0
  66. package/blocks/campaigns/components/form-field.tsx +29 -0
  67. package/blocks/campaigns/components/icp-editor.tsx +230 -0
  68. package/blocks/campaigns/components/persona-editor.tsx +210 -0
  69. package/blocks/campaigns/hooks/use-company-profile.ts +34 -0
  70. package/blocks/campaigns/lib/campaigns-utils.ts +155 -0
  71. package/blocks/campaigns/recipes/attach-audience-and-launch.ts +33 -0
  72. package/blocks/campaigns/recipes/campaign-report.ts +22 -0
  73. package/blocks/campaigns/recipes/generate-ideas-and-create-campaign.ts +51 -0
  74. package/blocks/campaigns/recipes/set-up-icp-and-personas.ts +37 -0
  75. package/blocks/coach/README.md +93 -0
  76. package/blocks/coach/block.json +125 -0
  77. package/blocks/coach/components/call-scorecard.tsx +126 -0
  78. package/blocks/coach/components/coaching-feed.tsx +140 -0
  79. package/blocks/coach/lib/coach-types.ts +116 -0
  80. package/blocks/coach/recipes/read-a-scorecard.ts +27 -0
  81. package/blocks/coach/recipes/weekly-coaching-digest.ts +53 -0
  82. package/blocks/copilot/README.md +99 -0
  83. package/blocks/copilot/block.json +151 -0
  84. package/blocks/copilot/components/copilot-memory.tsx +87 -0
  85. package/blocks/copilot/components/copilot-panel.tsx +189 -0
  86. package/blocks/copilot/components/copilot-team-chat.tsx +111 -0
  87. package/blocks/copilot/lib/copilot-types.ts +111 -0
  88. package/blocks/copilot/recipes/ask-the-copilot.ts +35 -0
  89. package/blocks/copilot/recipes/post-in-a-work-channel.ts +33 -0
  90. package/blocks/copilot/recipes/remember-and-recall.ts +19 -0
  91. package/blocks/crm/README.md +122 -0
  92. package/blocks/crm/block.json +378 -0
  93. package/blocks/crm/components/activity-timeline.tsx +99 -0
  94. package/blocks/crm/components/company-detail.tsx +118 -0
  95. package/blocks/crm/components/company-table.tsx +173 -0
  96. package/blocks/crm/components/contact-detail.tsx +135 -0
  97. package/blocks/crm/components/contact-table.tsx +217 -0
  98. package/blocks/crm/components/dedupe-review.tsx +164 -0
  99. package/blocks/crm/components/import-wizard.tsx +193 -0
  100. package/blocks/crm/components/notes-panel.tsx +112 -0
  101. package/blocks/crm/components/record-form.tsx +191 -0
  102. package/blocks/crm/components/task-list.tsx +107 -0
  103. package/blocks/crm/hooks/use-custom-fields.ts +18 -0
  104. package/blocks/crm/hooks/use-debounced.ts +13 -0
  105. package/blocks/crm/hooks/use-page-query.ts +52 -0
  106. package/blocks/crm/lib/crm-types.ts +136 -0
  107. package/blocks/crm/recipes/custom-fields-and-values.ts +28 -0
  108. package/blocks/crm/recipes/dedupe-and-merge.ts +30 -0
  109. package/blocks/crm/recipes/notes-tasks-and-activity.ts +23 -0
  110. package/blocks/crm/recipes/upsert-contact-with-company.ts +33 -0
  111. package/blocks/deals/README.md +78 -0
  112. package/blocks/deals/block.json +198 -0
  113. package/blocks/deals/components/deal-detail.tsx +134 -0
  114. package/blocks/deals/components/forecast-view.tsx +112 -0
  115. package/blocks/deals/components/pipeline-board.tsx +142 -0
  116. package/blocks/deals/components/stage-editor.tsx +96 -0
  117. package/blocks/deals/hooks/use-pipeline-deals.ts +67 -0
  118. package/blocks/deals/hooks/use-pipelines.ts +19 -0
  119. package/blocks/deals/lib/deals-types.ts +128 -0
  120. package/blocks/deals/recipes/01-create-deal-and-advance.ts +32 -0
  121. package/blocks/deals/recipes/02-pipeline-report.ts +35 -0
  122. package/blocks/deals/recipes/03-stale-deals-sweep.ts +20 -0
  123. package/blocks/dialer/README.md +114 -0
  124. package/blocks/dialer/block.json +260 -0
  125. package/blocks/dialer/components/call-log.tsx +78 -0
  126. package/blocks/dialer/components/call-queue.tsx +188 -0
  127. package/blocks/dialer/components/dialer-workspace.tsx +47 -0
  128. package/blocks/dialer/components/disposition-panel.tsx +75 -0
  129. package/blocks/dialer/components/live-calls-table.tsx +107 -0
  130. package/blocks/dialer/components/session-start-form.tsx +111 -0
  131. package/blocks/dialer/components/softphone.tsx +122 -0
  132. package/blocks/dialer/components/transcript-viewer.tsx +82 -0
  133. package/blocks/dialer/hooks/use-dialer-numbers.ts +19 -0
  134. package/blocks/dialer/hooks/use-dialer-session.ts +68 -0
  135. package/blocks/dialer/hooks/use-dispositions.ts +29 -0
  136. package/blocks/dialer/lib/dialer-types.ts +158 -0
  137. package/blocks/dialer/lib/softphone-transport.ts +67 -0
  138. package/blocks/dialer/lib/twilio-transport.ts +74 -0
  139. package/blocks/dialer/recipes/01-create-session-and-dial.ts +39 -0
  140. package/blocks/dialer/recipes/02-disposition-calls.ts +26 -0
  141. package/blocks/dialer/recipes/03-review-a-call.ts +23 -0
  142. package/blocks/enrichment/README.md +105 -0
  143. package/blocks/enrichment/block.json +204 -0
  144. package/blocks/enrichment/components/bulk-enrich-panel.tsx +205 -0
  145. package/blocks/enrichment/components/email-verify-badge.tsx +82 -0
  146. package/blocks/enrichment/components/enrich-button.tsx +136 -0
  147. package/blocks/enrichment/components/waterfall-config.tsx +127 -0
  148. package/blocks/enrichment/hooks/use-providers.ts +18 -0
  149. package/blocks/enrichment/lib/enrichment-types.ts +104 -0
  150. package/blocks/enrichment/recipes/bulk-enrich-and-poll.ts +41 -0
  151. package/blocks/enrichment/recipes/lookup-and-verify.ts +25 -0
  152. package/blocks/enrichment/recipes/waterfall-pipeline.ts +26 -0
  153. package/blocks/forms/README.md +112 -0
  154. package/blocks/forms/block.json +200 -0
  155. package/blocks/forms/components/form-builder.tsx +150 -0
  156. package/blocks/forms/components/form-embed.tsx +103 -0
  157. package/blocks/forms/components/form-mapping-editor.tsx +125 -0
  158. package/blocks/forms/components/site-audit-panel.tsx +73 -0
  159. package/blocks/forms/components/submissions-table.tsx +158 -0
  160. package/blocks/forms/lib/form-types.ts +127 -0
  161. package/blocks/forms/recipes/install-snippet-and-form.ts +21 -0
  162. package/blocks/forms/recipes/retry-failed-deliveries.ts +26 -0
  163. package/blocks/forms/recipes/route-form-to-list.ts +44 -0
  164. package/blocks/inbox/README.md +72 -0
  165. package/blocks/inbox/block.json +194 -0
  166. package/blocks/inbox/components/inbox-list.tsx +156 -0
  167. package/blocks/inbox/components/inbox-screen.tsx +49 -0
  168. package/blocks/inbox/components/reply-composer.tsx +183 -0
  169. package/blocks/inbox/components/tag-and-assign.tsx +189 -0
  170. package/blocks/inbox/components/thread-badge.tsx +17 -0
  171. package/blocks/inbox/components/thread-view.tsx +108 -0
  172. package/blocks/inbox/hooks/use-inbox-thread.ts +24 -0
  173. package/blocks/inbox/hooks/use-inbox-threads.ts +40 -0
  174. package/blocks/inbox/lib/idempotency.ts +30 -0
  175. package/blocks/inbox/lib/inbox-types.ts +100 -0
  176. package/blocks/inbox/recipes/01-triage-and-reply.ts +43 -0
  177. package/blocks/inbox/recipes/02-tag-and-assign.ts +31 -0
  178. package/blocks/inbox/recipes/03-hot-contacts-digest.ts +16 -0
  179. package/blocks/integrations/README.md +75 -0
  180. package/blocks/integrations/block.json +172 -0
  181. package/blocks/integrations/components/integration-list.tsx +165 -0
  182. package/blocks/integrations/components/sync-status.tsx +223 -0
  183. package/blocks/integrations/components/webhook-manager.tsx +300 -0
  184. package/blocks/integrations/lib/integrations-utils.ts +62 -0
  185. package/blocks/integrations/recipes/crm-sync-health.ts +19 -0
  186. package/blocks/integrations/recipes/push-contacts-to-crm.ts +20 -0
  187. package/blocks/integrations/recipes/register-webhook.ts +18 -0
  188. package/blocks/integrations/recipes/verify-webhook-route.ts +33 -0
  189. package/blocks/intent/README.md +57 -0
  190. package/blocks/intent/block.json +138 -0
  191. package/blocks/intent/components/account-intent-score.tsx +91 -0
  192. package/blocks/intent/components/intent-feed.tsx +215 -0
  193. package/blocks/intent/components/intent-keyword-manager.tsx +331 -0
  194. package/blocks/intent/hooks/use-account-intent.ts +46 -0
  195. package/blocks/intent/lib/intent-utils.ts +95 -0
  196. package/blocks/intent/recipes/rank-intent-accounts.ts +36 -0
  197. package/blocks/intent/recipes/track-competitor-domain.ts +23 -0
  198. package/blocks/intent/recipes/who-visited-url.ts +18 -0
  199. package/blocks/lifecycle/README.md +79 -0
  200. package/blocks/lifecycle/block.json +198 -0
  201. package/blocks/lifecycle/components/churn-list.tsx +92 -0
  202. package/blocks/lifecycle/components/customer-table.tsx +119 -0
  203. package/blocks/lifecycle/components/lead-queue.tsx +127 -0
  204. package/blocks/lifecycle/components/lifecycle-board.tsx +102 -0
  205. package/blocks/lifecycle/components/stage-move-dialog.tsx +75 -0
  206. package/blocks/lifecycle/hooks/use-debounced.ts +13 -0
  207. package/blocks/lifecycle/hooks/use-lifecycle-stages.ts +27 -0
  208. package/blocks/lifecycle/lib/lifecycle.ts +99 -0
  209. package/blocks/lifecycle/recipes/customer-brief.ts +23 -0
  210. package/blocks/lifecycle/recipes/move-company-stage.ts +17 -0
  211. package/blocks/lifecycle/recipes/read-lifecycle-board.ts +21 -0
  212. package/blocks/lifecycle/recipes/unlock-stage-contacts.ts +25 -0
  213. package/blocks/lists/README.md +96 -0
  214. package/blocks/lists/block.json +166 -0
  215. package/blocks/lists/components/add-to-list-button.tsx +111 -0
  216. package/blocks/lists/components/list-picker.tsx +94 -0
  217. package/blocks/lists/components/list-table.tsx +160 -0
  218. package/blocks/lists/components/suppression-manager.tsx +153 -0
  219. package/blocks/lists/recipes/create-list-and-add-contacts.ts +35 -0
  220. package/blocks/lists/recipes/refresh-and-check-lists.ts +21 -0
  221. package/blocks/lists/recipes/suppress-and-reinstate.ts +30 -0
  222. package/blocks/mailboxes/README.md +71 -0
  223. package/blocks/mailboxes/block.json +187 -0
  224. package/blocks/mailboxes/components/connect-mailbox.tsx +284 -0
  225. package/blocks/mailboxes/components/domain-purchase.tsx +271 -0
  226. package/blocks/mailboxes/components/mailbox-list.tsx +185 -0
  227. package/blocks/mailboxes/components/warmup-health.tsx +232 -0
  228. package/blocks/mailboxes/lib/mailboxes-utils.ts +69 -0
  229. package/blocks/mailboxes/recipes/buy-domain-and-mailboxes.ts +64 -0
  230. package/blocks/mailboxes/recipes/connect-imap-mailbox.ts +38 -0
  231. package/blocks/mailboxes/recipes/is-it-safe-to-send.ts +17 -0
  232. package/blocks/mailboxes/recipes/warmup-report.ts +31 -0
  233. package/blocks/newsletter/README.md +122 -0
  234. package/blocks/newsletter/block.json +224 -0
  235. package/blocks/newsletter/components/issue-form.tsx +124 -0
  236. package/blocks/newsletter/components/issue-scheduler.tsx +152 -0
  237. package/blocks/newsletter/components/newsletter-editor.tsx +131 -0
  238. package/blocks/newsletter/components/newsletter-stats.tsx +93 -0
  239. package/blocks/newsletter/components/subscriber-table.tsx +173 -0
  240. package/blocks/newsletter/lib/newsletter-types.ts +97 -0
  241. package/blocks/newsletter/recipes/create-newsletter-and-draft-issue.ts +27 -0
  242. package/blocks/newsletter/recipes/import-audience-and-send.ts +43 -0
  243. package/blocks/newsletter/recipes/issue-performance-report.ts +26 -0
  244. package/blocks/nurture/README.md +110 -0
  245. package/blocks/nurture/block.json +191 -0
  246. package/blocks/nurture/components/nurture-builder.tsx +114 -0
  247. package/blocks/nurture/components/nurture-enroll.tsx +107 -0
  248. package/blocks/nurture/components/nurture-form.tsx +120 -0
  249. package/blocks/nurture/components/nurture-stats.tsx +81 -0
  250. package/blocks/nurture/lib/nurture-types.ts +109 -0
  251. package/blocks/nurture/recipes/create-a-nurture.ts +34 -0
  252. package/blocks/nurture/recipes/enroll-contacts-and-launch.ts +24 -0
  253. package/blocks/nurture/recipes/nurture-health-check.ts +28 -0
  254. package/blocks/objects/README.md +120 -0
  255. package/blocks/objects/block.json +243 -0
  256. package/blocks/objects/components/attribute-field-input.tsx +82 -0
  257. package/blocks/objects/components/attribute-form-dialog.tsx +159 -0
  258. package/blocks/objects/components/object-not-found.tsx +34 -0
  259. package/blocks/objects/components/object-record-detail.tsx +143 -0
  260. package/blocks/objects/components/object-schema-editor.tsx +197 -0
  261. package/blocks/objects/components/object-table.tsx +130 -0
  262. package/blocks/objects/components/record-form-dialog.tsx +112 -0
  263. package/blocks/objects/components/record-roles-panel.tsx +106 -0
  264. package/blocks/objects/hooks/use-object-schema.ts +36 -0
  265. package/blocks/objects/lib/object-types.ts +214 -0
  266. package/blocks/objects/recipes/define-object-and-add-records.ts +24 -0
  267. package/blocks/objects/recipes/update-audit-and-archive-records.ts +39 -0
  268. package/blocks/objects/recipes/upsert-records-from-your-system.ts +30 -0
  269. package/blocks/pages/README.md +104 -0
  270. package/blocks/pages/block.json +223 -0
  271. package/blocks/pages/components/brand-kit-editor.tsx +152 -0
  272. package/blocks/pages/components/content-library.tsx +163 -0
  273. package/blocks/pages/components/page-editor.tsx +253 -0
  274. package/blocks/pages/components/page-list.tsx +159 -0
  275. package/blocks/pages/components/seo-report.tsx +159 -0
  276. package/blocks/pages/lib/studio.ts +77 -0
  277. package/blocks/pages/recipes/audit-site-seo.ts +28 -0
  278. package/blocks/pages/recipes/create-and-publish-page.ts +26 -0
  279. package/blocks/pages/recipes/edit-page-section.ts +25 -0
  280. package/blocks/pages/recipes/refresh-brand-kit.ts +22 -0
  281. package/blocks/quotes/README.md +79 -0
  282. package/blocks/quotes/block.json +183 -0
  283. package/blocks/quotes/components/product-picker.tsx +80 -0
  284. package/blocks/quotes/components/quote-builder.tsx +195 -0
  285. package/blocks/quotes/components/quote-list.tsx +79 -0
  286. package/blocks/quotes/components/quote-viewer.tsx +135 -0
  287. package/blocks/quotes/components/signature-status.tsx +77 -0
  288. package/blocks/quotes/hooks/use-debounced.ts +13 -0
  289. package/blocks/quotes/lib/quotes.ts +142 -0
  290. package/blocks/quotes/recipes/create-and-send-quote.ts +44 -0
  291. package/blocks/quotes/recipes/revise-sent-quote.ts +18 -0
  292. package/blocks/quotes/recipes/track-quote-signature.ts +22 -0
  293. package/blocks/radar/README.md +106 -0
  294. package/blocks/radar/block.json +189 -0
  295. package/blocks/radar/components/competitor-battle-card.tsx +53 -0
  296. package/blocks/radar/components/competitor-tracker.tsx +158 -0
  297. package/blocks/radar/components/radar-overview.tsx +67 -0
  298. package/blocks/radar/components/radar-report.tsx +86 -0
  299. package/blocks/radar/hooks/use-competitors.ts +23 -0
  300. package/blocks/radar/lib/radar-types.ts +124 -0
  301. package/blocks/radar/recipes/battle-card.ts +28 -0
  302. package/blocks/radar/recipes/deep-dive-report.ts +32 -0
  303. package/blocks/radar/recipes/marketing-snapshot.ts +18 -0
  304. package/blocks/radar/recipes/track-and-scan.ts +39 -0
  305. package/blocks/search/README.md +129 -0
  306. package/blocks/search/block.json +185 -0
  307. package/blocks/search/components/filter-builder.tsx +149 -0
  308. package/blocks/search/components/prospect-results.tsx +175 -0
  309. package/blocks/search/components/save-to-list-dialog.tsx +135 -0
  310. package/blocks/search/components/saved-searches.tsx +95 -0
  311. package/blocks/search/hooks/use-filter-options.ts +41 -0
  312. package/blocks/search/lib/search-types.ts +149 -0
  313. package/blocks/search/recipes/explore-filter-values.ts +27 -0
  314. package/blocks/search/recipes/saved-searches.ts +34 -0
  315. package/blocks/search/recipes/search-and-save-to-list.ts +37 -0
  316. package/blocks/sequencer/README.md +87 -0
  317. package/blocks/sequencer/block.json +214 -0
  318. package/blocks/sequencer/components/enroll-dialog.tsx +93 -0
  319. package/blocks/sequencer/components/sequence-builder.tsx +306 -0
  320. package/blocks/sequencer/components/sequence-list.tsx +200 -0
  321. package/blocks/sequencer/components/sequence-stats.tsx +256 -0
  322. package/blocks/sequencer/components/step-editor.tsx +213 -0
  323. package/blocks/sequencer/lib/sequencer-utils.ts +168 -0
  324. package/blocks/sequencer/recipes/create-multichannel-sequence.ts +51 -0
  325. package/blocks/sequencer/recipes/launch-and-enroll.ts +44 -0
  326. package/blocks/sequencer/recipes/pause-when-unsafe.ts +30 -0
  327. package/blocks/sequencer/recipes/sequence-report.ts +22 -0
  328. package/blocks/social-ads/README.md +128 -0
  329. package/blocks/social-ads/block.json +256 -0
  330. package/blocks/social-ads/components/ad-campaign-list.tsx +136 -0
  331. package/blocks/social-ads/components/audience-sync.tsx +150 -0
  332. package/blocks/social-ads/components/creative-gallery.tsx +121 -0
  333. package/blocks/social-ads/components/post-composer.tsx +122 -0
  334. package/blocks/social-ads/components/social-post-list.tsx +116 -0
  335. package/blocks/social-ads/hooks/use-social-accounts.ts +16 -0
  336. package/blocks/social-ads/lib/social-ads-types.ts +167 -0
  337. package/blocks/social-ads/recipes/creative-to-gallery.ts +41 -0
  338. package/blocks/social-ads/recipes/schedule-post.ts +51 -0
  339. package/blocks/social-ads/recipes/sync-audience-and-launch.ts +41 -0
  340. package/blocks/visitors/README.md +56 -0
  341. package/blocks/visitors/block.json +139 -0
  342. package/blocks/visitors/components/snippet-install.tsx +169 -0
  343. package/blocks/visitors/components/traffic-chart.tsx +156 -0
  344. package/blocks/visitors/components/visitor-company-card.tsx +92 -0
  345. package/blocks/visitors/components/visitor-feed.tsx +157 -0
  346. package/blocks/visitors/lib/visitors-utils.ts +78 -0
  347. package/blocks/visitors/recipes/check-snippet-installed.ts +24 -0
  348. package/blocks/visitors/recipes/recent-company-visits.ts +27 -0
  349. package/blocks/visitors/recipes/traffic-summary.ts +24 -0
  350. package/blocks/webchat/README.md +87 -0
  351. package/blocks/webchat/block.json +134 -0
  352. package/blocks/webchat/components/chat-widget-config.tsx +160 -0
  353. package/blocks/webchat/components/conversation-list.tsx +74 -0
  354. package/blocks/webchat/lib/webchat-types.ts +83 -0
  355. package/blocks/webchat/recipes/create-bot-and-style-widget.ts +24 -0
  356. package/blocks/webchat/recipes/list-chat-visitors.ts +24 -0
  357. package/blocks/workbench/README.md +135 -0
  358. package/blocks/workbench/block.json +259 -0
  359. package/blocks/workbench/components/column-recipe-editor.tsx +183 -0
  360. package/blocks/workbench/components/run-progress.tsx +132 -0
  361. package/blocks/workbench/components/workbench-add-rows.tsx +100 -0
  362. package/blocks/workbench/components/workbench-grid.tsx +159 -0
  363. package/blocks/workbench/components/workbench-row-actions.tsx +102 -0
  364. package/blocks/workbench/components/workbench-table-list.tsx +105 -0
  365. package/blocks/workbench/hooks/use-workbench-table.ts +30 -0
  366. package/blocks/workbench/lib/waterfall-presets.ts +119 -0
  367. package/blocks/workbench/lib/workbench-types.ts +191 -0
  368. package/blocks/workbench/recipes/build-enriched-table.ts +65 -0
  369. package/blocks/workbench/recipes/import-from-search.ts +42 -0
  370. package/blocks/workbench/recipes/scrape-into-table.ts +36 -0
  371. package/blocks/workbench/recipes/waterfall-column.ts +55 -0
  372. package/blocks/workflows/README.md +100 -0
  373. package/blocks/workflows/block.json +188 -0
  374. package/blocks/workflows/components/run-history.tsx +136 -0
  375. package/blocks/workflows/components/trigger-config.tsx +134 -0
  376. package/blocks/workflows/components/workflow-editor.tsx +142 -0
  377. package/blocks/workflows/components/workflow-list.tsx +153 -0
  378. package/blocks/workflows/hooks/use-workflow.ts +51 -0
  379. package/blocks/workflows/lib/graph.ts +187 -0
  380. package/blocks/workflows/recipes/create-workflow.ts +35 -0
  381. package/blocks/workflows/recipes/find-failed-runs.ts +15 -0
  382. package/blocks/workflows/recipes/run-workflow-and-wait.ts +32 -0
  383. package/blocks/workflows/recipes/set-trigger.ts +22 -0
  384. package/dist/cli.js +5330 -29
  385. package/dist/index.browser.js +7740 -0
  386. package/dist/index.browser.js.map +1 -0
  387. package/dist/index.browser.mjs +7717 -0
  388. package/dist/index.browser.mjs.map +1 -0
  389. package/dist/index.d.mts +1462 -23
  390. package/dist/index.d.ts +1462 -23
  391. package/dist/index.js +42 -3
  392. package/dist/index.js.map +1 -1
  393. package/dist/index.mjs +42 -3
  394. package/dist/index.mjs.map +1 -1
  395. package/dist/react.browser.js +7598 -0
  396. package/dist/react.browser.js.map +1 -0
  397. package/dist/react.browser.mjs +7568 -0
  398. package/dist/react.browser.mjs.map +1 -0
  399. package/dist/react.d.mts +1362 -20
  400. package/dist/react.d.ts +1362 -20
  401. package/dist/react.js +41 -2
  402. package/dist/react.js.map +1 -1
  403. package/dist/react.mjs +41 -2
  404. package/dist/react.mjs.map +1 -1
  405. package/dist/types/agentSetup.d.ts +6 -6
  406. package/dist/types/blocks/add.d.ts +53 -0
  407. package/dist/types/blocks/create.d.ts +46 -0
  408. package/dist/types/blocks/doctor.d.ts +26 -0
  409. package/dist/types/blocks/registry.d.ts +134 -0
  410. package/dist/types/cli.d.ts +16 -0
  411. package/dist/types/core.d.ts +1 -1
  412. package/dist/types/crypto-browser.d.ts +2 -0
  413. package/dist/types/crypto-node.d.ts +6 -0
  414. package/dist/types/react.d.ts +1 -1
  415. package/dist/types/version.d.ts +2 -2
  416. package/dist/types/webhooks.d.ts +2 -2
  417. package/dist/ui/index.d.mts +54 -0
  418. package/dist/ui/index.d.ts +54 -0
  419. package/dist/ui/index.js +105 -0
  420. package/dist/ui/index.js.map +1 -0
  421. package/dist/ui/index.mjs +44 -0
  422. package/dist/ui/index.mjs.map +1 -0
  423. package/dist/ui/lib/compose-refs.d.mts +19 -0
  424. package/dist/ui/lib/compose-refs.d.ts +19 -0
  425. package/dist/ui/lib/compose-refs.js +76 -0
  426. package/dist/ui/lib/compose-refs.js.map +1 -0
  427. package/dist/ui/lib/compose-refs.mjs +41 -0
  428. package/dist/ui/lib/compose-refs.mjs.map +1 -0
  429. package/dist/ui/lib/use-mobile.d.mts +4 -0
  430. package/dist/ui/lib/use-mobile.d.ts +4 -0
  431. package/dist/ui/lib/use-mobile.js +57 -0
  432. package/dist/ui/lib/use-mobile.js.map +1 -0
  433. package/dist/ui/lib/use-mobile.mjs +22 -0
  434. package/dist/ui/lib/use-mobile.mjs.map +1 -0
  435. package/dist/ui/lib/utils.d.mts +10 -0
  436. package/dist/ui/lib/utils.d.ts +10 -0
  437. package/dist/ui/lib/utils.js +33 -0
  438. package/dist/ui/lib/utils.js.map +1 -0
  439. package/dist/ui/lib/utils.mjs +9 -0
  440. package/dist/ui/lib/utils.mjs.map +1 -0
  441. package/dist/ui/primitives/alert-dialog.d.mts +22 -0
  442. package/dist/ui/primitives/alert-dialog.d.ts +22 -0
  443. package/dist/ui/primitives/alert-dialog.js +163 -0
  444. package/dist/ui/primitives/alert-dialog.js.map +1 -0
  445. package/dist/ui/primitives/alert-dialog.mjs +119 -0
  446. package/dist/ui/primitives/alert-dialog.mjs.map +1 -0
  447. package/dist/ui/primitives/avatar.d.mts +8 -0
  448. package/dist/ui/primitives/avatar.d.ts +8 -0
  449. package/dist/ui/primitives/avatar.js +91 -0
  450. package/dist/ui/primitives/avatar.js.map +1 -0
  451. package/dist/ui/primitives/avatar.mjs +55 -0
  452. package/dist/ui/primitives/avatar.mjs.map +1 -0
  453. package/dist/ui/primitives/breadcrumb.d.mts +13 -0
  454. package/dist/ui/primitives/breadcrumb.d.ts +13 -0
  455. package/dist/ui/primitives/breadcrumb.js +127 -0
  456. package/dist/ui/primitives/breadcrumb.js.map +1 -0
  457. package/dist/ui/primitives/breadcrumb.mjs +97 -0
  458. package/dist/ui/primitives/breadcrumb.mjs.map +1 -0
  459. package/dist/ui/primitives/button.d.mts +15 -0
  460. package/dist/ui/primitives/button.d.ts +15 -0
  461. package/dist/ui/primitives/button.js +91 -0
  462. package/dist/ui/primitives/button.js.map +1 -0
  463. package/dist/ui/primitives/button.mjs +56 -0
  464. package/dist/ui/primitives/button.mjs.map +1 -0
  465. package/dist/ui/primitives/card.d.mts +10 -0
  466. package/dist/ui/primitives/card.d.ts +10 -0
  467. package/dist/ui/primitives/card.js +101 -0
  468. package/dist/ui/primitives/card.js.map +1 -0
  469. package/dist/ui/primitives/card.mjs +62 -0
  470. package/dist/ui/primitives/card.mjs.map +1 -0
  471. package/dist/ui/primitives/carousel.d.mts +45 -0
  472. package/dist/ui/primitives/carousel.d.ts +45 -0
  473. package/dist/ui/primitives/carousel.js +300 -0
  474. package/dist/ui/primitives/carousel.js.map +1 -0
  475. package/dist/ui/primitives/carousel.mjs +261 -0
  476. package/dist/ui/primitives/carousel.mjs.map +1 -0
  477. package/dist/ui/primitives/chart.d.mts +68 -0
  478. package/dist/ui/primitives/chart.d.ts +68 -0
  479. package/dist/ui/primitives/chart.js +280 -0
  480. package/dist/ui/primitives/chart.js.map +1 -0
  481. package/dist/ui/primitives/chart.mjs +241 -0
  482. package/dist/ui/primitives/chart.mjs.map +1 -0
  483. package/dist/ui/primitives/collapsible.d.mts +8 -0
  484. package/dist/ui/primitives/collapsible.d.ts +8 -0
  485. package/dist/ui/primitives/collapsible.js +72 -0
  486. package/dist/ui/primitives/collapsible.js.map +1 -0
  487. package/dist/ui/primitives/collapsible.mjs +36 -0
  488. package/dist/ui/primitives/collapsible.mjs.map +1 -0
  489. package/dist/ui/primitives/context-menu.d.mts +29 -0
  490. package/dist/ui/primitives/context-menu.d.ts +29 -0
  491. package/dist/ui/primitives/context-menu.js +203 -0
  492. package/dist/ui/primitives/context-menu.js.map +1 -0
  493. package/dist/ui/primitives/context-menu.mjs +155 -0
  494. package/dist/ui/primitives/context-menu.mjs.map +1 -0
  495. package/dist/ui/primitives/dialog.d.mts +26 -0
  496. package/dist/ui/primitives/dialog.d.ts +26 -0
  497. package/dist/ui/primitives/dialog.js +192 -0
  498. package/dist/ui/primitives/dialog.js.map +1 -0
  499. package/dist/ui/primitives/dialog.mjs +148 -0
  500. package/dist/ui/primitives/dialog.mjs.map +1 -0
  501. package/dist/ui/primitives/drawer.d.mts +26 -0
  502. package/dist/ui/primitives/drawer.d.ts +26 -0
  503. package/dist/ui/primitives/drawer.js +146 -0
  504. package/dist/ui/primitives/drawer.js.map +1 -0
  505. package/dist/ui/primitives/drawer.mjs +103 -0
  506. package/dist/ui/primitives/drawer.mjs.map +1 -0
  507. package/dist/ui/primitives/input.d.mts +5 -0
  508. package/dist/ui/primitives/input.d.ts +5 -0
  509. package/dist/ui/primitives/input.js +46 -0
  510. package/dist/ui/primitives/input.js.map +1 -0
  511. package/dist/ui/primitives/input.mjs +22 -0
  512. package/dist/ui/primitives/input.mjs.map +1 -0
  513. package/dist/ui/primitives/item.d.mts +27 -0
  514. package/dist/ui/primitives/item.d.ts +27 -0
  515. package/dist/ui/primitives/item.js +221 -0
  516. package/dist/ui/primitives/item.js.map +1 -0
  517. package/dist/ui/primitives/item.mjs +188 -0
  518. package/dist/ui/primitives/item.mjs.map +1 -0
  519. package/dist/ui/primitives/kbd.d.mts +15 -0
  520. package/dist/ui/primitives/kbd.d.ts +15 -0
  521. package/dist/ui/primitives/kbd.js +45 -0
  522. package/dist/ui/primitives/kbd.js.map +1 -0
  523. package/dist/ui/primitives/kbd.mjs +21 -0
  524. package/dist/ui/primitives/kbd.mjs.map +1 -0
  525. package/dist/ui/primitives/label.d.mts +6 -0
  526. package/dist/ui/primitives/label.d.ts +6 -0
  527. package/dist/ui/primitives/label.js +55 -0
  528. package/dist/ui/primitives/label.js.map +1 -0
  529. package/dist/ui/primitives/label.mjs +21 -0
  530. package/dist/ui/primitives/label.mjs.map +1 -0
  531. package/dist/ui/primitives/resizable.d.mts +10 -0
  532. package/dist/ui/primitives/resizable.d.ts +10 -0
  533. package/dist/ui/primitives/resizable.js +68 -0
  534. package/dist/ui/primitives/resizable.js.map +1 -0
  535. package/dist/ui/primitives/resizable.mjs +42 -0
  536. package/dist/ui/primitives/resizable.mjs.map +1 -0
  537. package/dist/ui/primitives/save-status.d.mts +31 -0
  538. package/dist/ui/primitives/save-status.d.ts +31 -0
  539. package/dist/ui/primitives/save-status.js +150 -0
  540. package/dist/ui/primitives/save-status.js.map +1 -0
  541. package/dist/ui/primitives/save-status.mjs +126 -0
  542. package/dist/ui/primitives/save-status.mjs.map +1 -0
  543. package/dist/ui/primitives/separator.d.mts +6 -0
  544. package/dist/ui/primitives/separator.d.ts +6 -0
  545. package/dist/ui/primitives/separator.js +62 -0
  546. package/dist/ui/primitives/separator.js.map +1 -0
  547. package/dist/ui/primitives/separator.mjs +28 -0
  548. package/dist/ui/primitives/separator.mjs.map +1 -0
  549. package/dist/ui/primitives/sheet.d.mts +16 -0
  550. package/dist/ui/primitives/sheet.d.ts +16 -0
  551. package/dist/ui/primitives/sheet.js +170 -0
  552. package/dist/ui/primitives/sheet.js.map +1 -0
  553. package/dist/ui/primitives/sheet.mjs +129 -0
  554. package/dist/ui/primitives/sheet.mjs.map +1 -0
  555. package/dist/ui/primitives/sidebar.d.mts +74 -0
  556. package/dist/ui/primitives/sidebar.d.ts +74 -0
  557. package/dist/ui/primitives/sidebar.js +697 -0
  558. package/dist/ui/primitives/sidebar.js.map +1 -0
  559. package/dist/ui/primitives/sidebar.mjs +651 -0
  560. package/dist/ui/primitives/sidebar.mjs.map +1 -0
  561. package/dist/ui/primitives/skeleton.d.mts +5 -0
  562. package/dist/ui/primitives/skeleton.d.ts +5 -0
  563. package/dist/ui/primitives/skeleton.js +40 -0
  564. package/dist/ui/primitives/skeleton.js.map +1 -0
  565. package/dist/ui/primitives/skeleton.mjs +16 -0
  566. package/dist/ui/primitives/skeleton.mjs.map +1 -0
  567. package/dist/ui/primitives/slider.d.mts +20 -0
  568. package/dist/ui/primitives/slider.d.ts +20 -0
  569. package/dist/ui/primitives/slider.js +112 -0
  570. package/dist/ui/primitives/slider.js.map +1 -0
  571. package/dist/ui/primitives/slider.mjs +78 -0
  572. package/dist/ui/primitives/slider.mjs.map +1 -0
  573. package/dist/ui/primitives/sortable.d.mts +50 -0
  574. package/dist/ui/primitives/sortable.d.ts +50 -0
  575. package/dist/ui/primitives/sortable.js +456 -0
  576. package/dist/ui/primitives/sortable.js.map +1 -0
  577. package/dist/ui/primitives/sortable.mjs +435 -0
  578. package/dist/ui/primitives/sortable.mjs.map +1 -0
  579. package/dist/ui/primitives/switch.d.mts +6 -0
  580. package/dist/ui/primitives/switch.d.ts +6 -0
  581. package/dist/ui/primitives/switch.js +67 -0
  582. package/dist/ui/primitives/switch.js.map +1 -0
  583. package/dist/ui/primitives/switch.mjs +33 -0
  584. package/dist/ui/primitives/switch.mjs.map +1 -0
  585. package/dist/ui/primitives/table.d.mts +12 -0
  586. package/dist/ui/primitives/table.d.ts +12 -0
  587. package/dist/ui/primitives/table.js +130 -0
  588. package/dist/ui/primitives/table.js.map +1 -0
  589. package/dist/ui/primitives/table.mjs +89 -0
  590. package/dist/ui/primitives/table.mjs.map +1 -0
  591. package/dist/ui/primitives/tabs.d.mts +9 -0
  592. package/dist/ui/primitives/tabs.d.ts +9 -0
  593. package/dist/ui/primitives/tabs.js +86 -0
  594. package/dist/ui/primitives/tabs.js.map +1 -0
  595. package/dist/ui/primitives/tabs.mjs +49 -0
  596. package/dist/ui/primitives/tabs.mjs.map +1 -0
  597. package/dist/ui/primitives/textarea.d.mts +5 -0
  598. package/dist/ui/primitives/textarea.d.ts +5 -0
  599. package/dist/ui/primitives/textarea.js +43 -0
  600. package/dist/ui/primitives/textarea.js.map +1 -0
  601. package/dist/ui/primitives/textarea.mjs +19 -0
  602. package/dist/ui/primitives/textarea.mjs.map +1 -0
  603. package/dist/ui/primitives/tooltip.d.mts +9 -0
  604. package/dist/ui/primitives/tooltip.d.ts +9 -0
  605. package/dist/ui/primitives/tooltip.js +94 -0
  606. package/dist/ui/primitives/tooltip.js.map +1 -0
  607. package/dist/ui/primitives/tooltip.mjs +57 -0
  608. package/dist/ui/primitives/tooltip.mjs.map +1 -0
  609. package/docs/agents.md +72 -29
  610. package/docs/api/README.md +6 -3
  611. package/docs/api/appObjects.d.ts +1 -1
  612. package/docs/api/appObjects.md +1 -1
  613. package/docs/api/by-path.md +29 -0
  614. package/docs/api/enrichment.d.ts +18 -0
  615. package/docs/api/enrichment.md +25 -4
  616. package/docs/api/objects.d.ts +72 -5
  617. package/docs/api/objects.md +84 -7
  618. package/docs/api/processLists.d.ts +247 -0
  619. package/docs/api/processLists.md +409 -0
  620. package/docs/api/reports.d.ts +476 -0
  621. package/docs/api/reports.md +539 -0
  622. package/docs/api/revenueLifecycle.d.ts +3 -1
  623. package/docs/api/revenueLifecycle.md +12 -2
  624. package/docs/api/scheduleBuy.d.ts +12 -8
  625. package/docs/api/scheduleBuy.md +13 -10
  626. package/docs/api/seo.d.ts +407 -4
  627. package/docs/api/seo.md +506 -2
  628. package/docs/api/workflows.md +46 -2
  629. package/docs/api/workspaceBackup.d.ts +324 -0
  630. package/docs/api/workspaceBackup.md +427 -0
  631. package/package.json +174 -5
  632. package/stacks/6sense.json +46 -0
  633. package/stacks/README.md +20 -0
  634. package/stacks/apollo.json +128 -0
  635. package/stacks/clay.json +59 -0
  636. package/stacks/gong.json +72 -0
  637. package/stacks/hubspot.json +162 -0
  638. package/stacks/intercom.json +53 -0
  639. package/stacks/mailchimp.json +71 -0
  640. package/stacks/outreach.json +86 -0
  641. package/stacks/salesforce.json +94 -0
  642. package/stacks/stack.schema.json +32 -0
  643. package/stacks/starter.json +22 -0
  644. package/styles/styles.css +2 -0
  645. package/styles/theme.css +181 -0
  646. package/styles/tokens.css +284 -0
  647. package/templates/next-app/README.md.tmpl +35 -0
  648. package/templates/next-app/_pages/redirect-page.tsx.tmpl +5 -0
  649. package/templates/next-app/_pages/route-page.tsx.tmpl +9 -0
  650. package/templates/next-app/app/globals.css.tmpl +8 -0
  651. package/templates/next-app/app/layout.tsx.tmpl +19 -0
  652. package/templates/next-app/components/app-shell.tsx.tmpl +34 -0
  653. package/templates/next-app/dot-env.local.example.tmpl +6 -0
  654. package/templates/next-app/dot-gitignore.tmpl +7 -0
  655. package/templates/next-app/lib/nav.ts.tmpl +2 -0
  656. package/templates/next-app/next.config.mjs.tmpl +4 -0
  657. package/templates/next-app/package.json.tmpl +25 -0
  658. package/templates/next-app/postcss.config.mjs.tmpl +4 -0
  659. package/templates/next-app/tsconfig.json.tmpl +21 -0
package/docs/api/seo.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # `g8.api.seo`: SEO
4
4
 
5
- 14 operations (8 read, 2 write, 4 billable).
5
+ 22 operations (14 read, 4 write, 4 billable).
6
6
 
7
7
  No hand-written client covers this area. Call it through `g8.api.seo.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
8
8
 
@@ -22,14 +22,22 @@ Exact TypeScript types for every operation on this page, and every schema they u
22
22
 
23
23
  | Call | HTTP | Tier | Scope | Summary |
24
24
  |---|---|---|---|---|
25
+ | [`claimSeoFix`](#op-claimseofix) | `POST /api/v1/seo/fixes/{fix_id}/claim` | write | `intent:write` | Claim Seo Fix |
26
+ | [`completeSeoFix`](#op-completeseofix) | `POST /api/v1/seo/fixes/{fix_id}/complete` | write | `intent:write` | Complete Seo Fix |
27
+ | [`getSeoAgentHandoff`](#op-getseoagenthandoff) | `GET /api/v1/seo/fixes/agent-handoff` | read | `intent:read` | Get Seo Agent Handoff |
25
28
  | [`getSeoAudit`](#op-getseoaudit) | `GET /api/v1/seo/audits/{audit_id}` | read | `intent:read` | Get Seo Audit |
26
29
  | [`getSeoAuditIssues`](#op-getseoauditissues) | `GET /api/v1/seo/audits/{audit_id}/issues` | read | `intent:read` | Get Seo Audit Issues |
27
30
  | [`getSeoDomainBacklinks`](#op-getseodomainbacklinks) | `GET /api/v1/seo/domains/{domain}/backlinks` | billable | `intent:run` | Get Seo Domain Backlinks |
28
31
  | [`getSeoDomainOverview`](#op-getseodomainoverview) | `GET /api/v1/seo/domains/{domain}/overview` | billable | `intent:run` | Get Seo Domain Overview |
32
+ | [`getSeoFixPack`](#op-getseofixpack) | `GET /api/v1/seo/fixes/{fix_id}/pack` | read | `intent:read` | Get Seo Fix Pack |
33
+ | [`getSeoPage360`](#op-getseopage360) | `GET /api/v1/seo/pages/360/detail` | read | `intent:read` | Get Seo Page 360 |
29
34
  | [`getSeoRankHistory`](#op-getseorankhistory) | `GET /api/v1/seo/rank-tracking/{keyword_id}/history` | read | `intent:read` | Get Seo Rank History |
35
+ | [`getSeoToday`](#op-getseotoday) | `GET /api/v1/seo/today` | read | `intent:read` | Get Seo Today |
30
36
  | [`getSeoTrackedDomain`](#op-getseotrackeddomain) | `GET /api/v1/seo/domains/tracked/{domain}` | read | `intent:read` | Get Seo Tracked Domain |
31
37
  | [`listSeoAudits`](#op-listseoaudits) | `GET /api/v1/seo/audits` | read | `intent:read` | List Seo Audits |
32
38
  | [`listSeoDomainPages`](#op-listseodomainpages) | `GET /api/v1/seo/domains/tracked/{domain}/pages` | read | `intent:read` | List Seo Domain Pages |
39
+ | [`listSeoFixes`](#op-listseofixes) | `GET /api/v1/seo/fixes` | read | `intent:read` | List Seo Fixes |
40
+ | [`listSeoPages360`](#op-listseopages360) | `GET /api/v1/seo/pages/360` | read | `intent:read` | List Seo Pages 360 |
33
41
  | [`listSeoTrackedDomains`](#op-listseotrackeddomains) | `GET /api/v1/seo/domains/tracked` | read | `intent:read` | List Seo Tracked Domains |
34
42
  | [`listSeoTrackedKeywords`](#op-listseotrackedkeywords) | `GET /api/v1/seo/rank-tracking` | read | `intent:read` | List Seo Tracked Keywords |
35
43
  | [`removeSeoTrackedKeywords`](#op-removeseotrackedkeywords) | `POST /api/v1/seo/rank-tracking/keywords/remove` | write | `intent:write` | Remove Seo Tracked Keywords |
@@ -39,6 +47,152 @@ Exact TypeScript types for every operation on this page, and every schema they u
39
47
 
40
48
  ---
41
49
 
50
+ <a id="op-claimseofix"></a>
51
+
52
+ ### `g8.api.seo.claimSeoFix(input)`
53
+
54
+ **Claim Seo Fix**
55
+
56
+ - HTTP: `POST /api/v1/seo/fixes/{fix_id}/claim`
57
+ - operationId: `claim_seo_fix_seo_fixes__fix_id__claim_post` (also callable as `g8.api.call("claim_seo_fix_seo_fixes__fix_id__claim_post", input)`)
58
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
59
+ - API-key scope: `intent:write`
60
+
61
+ SPENDS NOTHING. Claim one queued fix for your coding agent.
62
+
63
+ Row-locked: if another agent already holds it the answer is 409. Claiming again with the same `agent` label
64
+ is a no-op. A claim nobody completes expires after a few hours and the fix is offered again.
65
+
66
+ **Input**
67
+
68
+ | Field | Type | Required | Description |
69
+ |---|---|---|---|
70
+ | `path.fix_id` | `string (uuid)` | yes | A fix id from `GET /seo/fixes`. |
71
+ | `body` | `SeoClaimFixRequest` | no | Request body; fields below. |
72
+
73
+ Body fields (`SeoClaimFixRequest`):
74
+
75
+ | Field | Type | Required | Description |
76
+ |---|---|---|---|
77
+ | `body.agent` | `string \| null` | no | A label for this agent, e.g. claude-code. max length 80 |
78
+
79
+ **Returns** `ApiResponse_SeoClaimFixResponse_`: the envelope `{ data: SeoClaimFixResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
80
+
81
+ Other envelope fields: `pagination` (PaginationMeta).
82
+
83
+ `SeoClaimFixResponse` fields:
84
+
85
+ | Field | Type | Required | Description |
86
+ |---|---|---|---|
87
+ | `claim_note` | `string` | yes | |
88
+ | `claimed` | `boolean` | yes | |
89
+ | `fix` | `SeoAgentFix` | yes | |
90
+ | `claimed_by` | `string \| null` | no | |
91
+
92
+ **Example**
93
+
94
+ ```ts
95
+ const result = await g8.api.seo.claimSeoFix({ path: { fix_id: "00000000-0000-0000-0000-000000000000" } });
96
+ ```
97
+
98
+ ---
99
+
100
+ <a id="op-completeseofix"></a>
101
+
102
+ ### `g8.api.seo.completeSeoFix(input)`
103
+
104
+ **Complete Seo Fix**
105
+
106
+ - HTTP: `POST /api/v1/seo/fixes/{fix_id}/complete`
107
+ - operationId: `complete_seo_fix_seo_fixes__fix_id__complete_post` (also callable as `g8.api.call("complete_seo_fix_seo_fixes__fix_id__complete_post", input)`)
108
+ - Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
109
+ - API-key scope: `intent:write`
110
+
111
+ SPENDS NOTHING. Report a claimed fix as done (with the commit or pull request) or as failed (with why).
112
+
113
+ `outcome=done` needs `ref`, a commit SHA or an http(s) URL, and moves the fix to `applied`; graph8 then
114
+ re-fetches the live page to verify it. `outcome=failed` needs `note`. 409 when the fix is not claimed by
115
+ this agent, 422 for a missing or malformed `ref`.
116
+
117
+ **Input**
118
+
119
+ | Field | Type | Required | Description |
120
+ |---|---|---|---|
121
+ | `path.fix_id` | `string (uuid)` | yes | A fix id from `GET /seo/fixes`. |
122
+ | `body` | `SeoCompleteFixRequest` | yes | Request body; fields below. |
123
+
124
+ Body fields (`SeoCompleteFixRequest`):
125
+
126
+ | Field | Type | Required | Description |
127
+ |---|---|---|---|
128
+ | `body.agent` | `string \| null` | no | max length 80 |
129
+ | `body.note` | `string` | no | default `""`, max length 2000 |
130
+ | `body.outcome` | `"done" \| "failed"` | no | default `"done"` |
131
+ | `body.ref` | `string \| null` | no | Commit SHA or commit/pull request URL. max length 500 |
132
+
133
+ **Returns** `ApiResponse_SeoCompleteFixResponse_`: the envelope `{ data: SeoCompleteFixResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
134
+
135
+ Other envelope fields: `pagination` (PaginationMeta).
136
+
137
+ `SeoCompleteFixResponse` fields:
138
+
139
+ | Field | Type | Required | Description |
140
+ |---|---|---|---|
141
+ | `fix_id` | `string` | yes | |
142
+ | `status` | `string` | yes | |
143
+ | `applied_ref` | `string \| null` | no | |
144
+ | `verification` | `string \| null` | no | |
145
+
146
+ **Example**
147
+
148
+ ```ts
149
+ const result = await g8.api.seo.completeSeoFix({ path: { fix_id: "00000000-0000-0000-0000-000000000000" }, body: {} });
150
+ ```
151
+
152
+ ---
153
+
154
+ <a id="op-getseoagenthandoff"></a>
155
+
156
+ ### `g8.api.seo.getSeoAgentHandoff(input?)`
157
+
158
+ **Get Seo Agent Handoff**
159
+
160
+ - HTTP: `GET /api/v1/seo/fixes/agent-handoff`
161
+ - operationId: `get_seo_agent_handoff_seo_fixes_agent_handoff_get` (also callable as `g8.api.call("get_seo_agent_handoff_seo_fixes_agent_handoff_get", input)`)
162
+ - Tier: `read`: reads data; safe to call and to retry
163
+ - API-key scope: `intent:read`
164
+
165
+ SPENDS NOTHING. AGENTS.md and CLAUDE.md for the queued fixes plus one-line MCP setup for Claude Code and Cursor.
166
+
167
+ The setup lines connect the coding agent to graph8 over MCP so it can list, claim and complete fixes itself.
168
+
169
+ **Input**
170
+
171
+ | Field | Type | Required | Description |
172
+ |---|---|---|---|
173
+ | `query.domain` | `string \| null` | no | Only fixes for this domain. |
174
+
175
+ **Returns** `ApiResponse_SeoAgentHandoff_`: the envelope `{ data: SeoAgentHandoff, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
176
+
177
+ Other envelope fields: `pagination` (PaginationMeta).
178
+
179
+ `SeoAgentHandoff` fields:
180
+
181
+ | Field | Type | Required | Description |
182
+ |---|---|---|---|
183
+ | `files` | `Record<string, string>` | yes | |
184
+ | `fix_count` | `integer` | yes | |
185
+ | `setup` | `SeoAgentSetup` | yes | |
186
+ | `domain` | `string \| null` | no | |
187
+
188
+ **Example**
189
+
190
+ ```ts
191
+ const result = await g8.api.seo.getSeoAgentHandoff();
192
+ ```
193
+
194
+ ---
195
+
42
196
  <a id="op-getseoaudit"></a>
43
197
 
44
198
  ### `g8.api.seo.getSeoAudit(input)`
@@ -218,6 +372,89 @@ const result = await g8.api.seo.getSeoDomainOverview({ path: { domain: "acme.com
218
372
 
219
373
  ---
220
374
 
375
+ <a id="op-getseofixpack"></a>
376
+
377
+ ### `g8.api.seo.getSeoFixPack(input)`
378
+
379
+ **Get Seo Fix Pack**
380
+
381
+ - HTTP: `GET /api/v1/seo/fixes/{fix_id}/pack`
382
+ - operationId: `get_seo_fix_pack_seo_fixes__fix_id__pack_get` (also callable as `g8.api.call("get_seo_fix_pack_seo_fixes__fix_id__pack_get", input)`)
383
+ - Tier: `read`: reads data; safe to call and to retry
384
+ - API-key scope: `intent:read`
385
+
386
+ SPENDS NOTHING. The pack for one fix: its instructions, any generated files, and AGENTS.md / CLAUDE.md.
387
+
388
+ 404 for a fix this organisation does not have.
389
+
390
+ **Input**
391
+
392
+ | Field | Type | Required | Description |
393
+ |---|---|---|---|
394
+ | `path.fix_id` | `string (uuid)` | yes | A fix id from `GET /seo/fixes`. |
395
+
396
+ **Returns** `ApiResponse_SeoAgentFixPack_`: the envelope `{ data: SeoAgentFixPack, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
397
+
398
+ Other envelope fields: `pagination` (PaginationMeta).
399
+
400
+ `SeoAgentFixPack` fields:
401
+
402
+ | Field | Type | Required | Description |
403
+ |---|---|---|---|
404
+ | `agents_md` | `string` | yes | |
405
+ | `claude_md` | `string` | yes | |
406
+ | `fix` | `SeoAgentFix` | yes | |
407
+ | `files` | `Record<string, string>` | no | |
408
+
409
+ **Example**
410
+
411
+ ```ts
412
+ const result = await g8.api.seo.getSeoFixPack({ path: { fix_id: "00000000-0000-0000-0000-000000000000" } });
413
+ ```
414
+
415
+ ---
416
+
417
+ <a id="op-getseopage360"></a>
418
+
419
+ ### `g8.api.seo.getSeoPage360(input)`
420
+
421
+ **Get Seo Page 360**
422
+
423
+ - HTTP: `GET /api/v1/seo/pages/360/detail`
424
+ - operationId: `get_seo_page_360_seo_pages_360_detail_get` (also callable as `g8.api.call("get_seo_page_360_seo_pages_360_detail_get", input)`)
425
+ - Tier: `read`: reads data; safe to call and to retry
426
+ - API-key scope: `intent:read`
427
+
428
+ SPENDS NOTHING. One page in full: Search Console, vitals, indexing, visitors, companies, top queries, open fixes.
429
+
430
+ 404 when the page has not been analysed yet.
431
+
432
+ **Input**
433
+
434
+ | Field | Type | Required | Description |
435
+ |---|---|---|---|
436
+ | `query.domain` | `string` | yes | A tracked domain. |
437
+ | `query.url` | `string` | yes | The page URL or path, e.g. /pricing. |
438
+
439
+ **Returns** `ApiResponse_SeoPage360_`: the envelope `{ data: SeoPage360, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
440
+
441
+ Other envelope fields: `pagination` (PaginationMeta).
442
+
443
+ `SeoPage360` fields:
444
+
445
+ | Field | Type | Required | Description |
446
+ |---|---|---|---|
447
+ | `fixes` | `Array<Record<string, unknown>>` | no | |
448
+ | `queries` | `Array<Record<string, unknown>>` | no | |
449
+
450
+ **Example**
451
+
452
+ ```ts
453
+ const result = await g8.api.seo.getSeoPage360({ query: { domain: "acme.com", url: "https://example.com" } });
454
+ ```
455
+
456
+ ---
457
+
221
458
  <a id="op-getseorankhistory"></a>
222
459
 
223
460
  ### `g8.api.seo.getSeoRankHistory(input)`
@@ -261,6 +498,56 @@ const result = await g8.api.seo.getSeoRankHistory({ path: { keyword_id: "0000000
261
498
 
262
499
  ---
263
500
 
501
+ <a id="op-getseotoday"></a>
502
+
503
+ ### `g8.api.seo.getSeoToday(input?)`
504
+
505
+ **Get Seo Today**
506
+
507
+ - HTTP: `GET /api/v1/seo/today`
508
+ - operationId: `get_seo_today_seo_today_get` (also callable as `g8.api.call("get_seo_today_seo_today_get", input)`)
509
+ - Tier: `read`: reads data; safe to call and to retry
510
+ - API-key scope: `intent:read`
511
+
512
+ SPENDS NOTHING. Today in Signals > SEO: health, KPIs, what changed, the approval queue and open alerts.
513
+
514
+ Every modelled number carries `confidence` (`measured`, `estimated` or `partial`). Sources that are not
515
+ connected degrade to a card saying so; `sources` lists which answered.
516
+
517
+ **Input**
518
+
519
+ | Field | Type | Required | Description |
520
+ |---|---|---|---|
521
+ | `query.domain` | `string \| null` | no | A tracked domain. Omit for the primary one. |
522
+
523
+ **Returns** `ApiResponse_SeoToday_`: the envelope `{ data: SeoToday, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
524
+
525
+ Other envelope fields: `pagination` (PaginationMeta).
526
+
527
+ `SeoToday` fields:
528
+
529
+ | Field | Type | Required | Description |
530
+ |---|---|---|---|
531
+ | `alerts` | `Array<SeoTodayAlert>` | yes | |
532
+ | `approval_queue` | `SeoApprovalQueue` | yes | |
533
+ | `briefing` | `Array<SeoTodayCard>` | yes | |
534
+ | `end_of_day` | `SeoEndOfDay` | yes | |
535
+ | `generated_at` | `string` | yes | |
536
+ | `kpis` | `Array<SeoTodayKpi>` | yes | |
537
+ | `movers` | `Array<SeoMover>` | yes | |
538
+ | `setup` | `SeoSetupChecklist` | yes | |
539
+ | `domain` | `string \| null` | no | |
540
+ | `health_score` | `integer \| null` | no | |
541
+ | `sources` | `Record<string, boolean>` | no | |
542
+
543
+ **Example**
544
+
545
+ ```ts
546
+ const result = await g8.api.seo.getSeoToday();
547
+ ```
548
+
549
+ ---
550
+
264
551
  <a id="op-getseotrackeddomain"></a>
265
552
 
266
553
  ### `g8.api.seo.getSeoTrackedDomain(input)`
@@ -412,6 +699,102 @@ const result = await g8.api.seo.listSeoDomainPages({ path: { domain: "acme.com"
412
699
 
413
700
  ---
414
701
 
702
+ <a id="op-listseofixes"></a>
703
+
704
+ ### `g8.api.seo.listSeoFixes(input?)`
705
+
706
+ **List Seo Fixes**
707
+
708
+ - HTTP: `GET /api/v1/seo/fixes`
709
+ - operationId: `list_seo_fixes_seo_fixes_get` (also callable as `g8.api.call("list_seo_fixes_seo_fixes_get", input)`)
710
+ - Tier: `read`: reads data; safe to call and to retry
711
+ - API-key scope: `intent:read`
712
+
713
+ SPENDS NOTHING. The SEO fixes queued for a coding agent, with exact instructions and code.
714
+
715
+ Only fixes the organisation approved for its coding agent appear (status `ready_for_agent`), plus any whose
716
+ claim expired. Each carries the page, ordered steps, the snippets to add and how success is checked.
717
+ `agents_md` is the same list as an AGENTS.md document.
718
+
719
+ **Input**
720
+
721
+ | Field | Type | Required | Description |
722
+ |---|---|---|---|
723
+ | `query.domain` | `string \| null` | no | Only fixes for this domain. |
724
+ | `query.limit` | `integer` | no | Fixes to return, most severe first. default `20` |
725
+
726
+ **Returns** `ApiResponse_SeoAgentFixQueue_`: the envelope `{ data: SeoAgentFixQueue, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
727
+
728
+ Other envelope fields: `pagination` (PaginationMeta).
729
+
730
+ `SeoAgentFixQueue` fields:
731
+
732
+ | Field | Type | Required | Description |
733
+ |---|---|---|---|
734
+ | `agents_md` | `string` | yes | |
735
+ | `count` | `integer` | yes | |
736
+ | `fixes` | `Array<SeoAgentFix>` | yes | |
737
+ | `domain` | `string \| null` | no | |
738
+
739
+ **Example**
740
+
741
+ ```ts
742
+ const result = await g8.api.seo.listSeoFixes();
743
+ ```
744
+
745
+ ---
746
+
747
+ <a id="op-listseopages360"></a>
748
+
749
+ ### `g8.api.seo.listSeoPages360(input)`
750
+
751
+ **List Seo Pages 360**
752
+
753
+ - HTTP: `GET /api/v1/seo/pages/360`
754
+ - operationId: `list_seo_pages_360_seo_pages_360_get` (also callable as `g8.api.call("list_seo_pages_360_seo_pages_360_get", input)`)
755
+ - Tier: `read`: reads data; safe to call and to retry
756
+ - API-key scope: `intent:read`
757
+
758
+ SPENDS NOTHING. The Page360 grid: every page with Search Console, vitals, visitors, companies and open fixes.
759
+
760
+ `filter=money` keeps pages that sit on a closed-won or open-deal path (an inference, labelled estimated).
761
+ `gsc_connected` is false until Search Console is linked; the rows then carry visitor data only.
762
+
763
+ **Input**
764
+
765
+ | Field | Type | Required | Description |
766
+ |---|---|---|---|
767
+ | `query.domain` | `string` | yes | A tracked domain. |
768
+ | `query.q` | `string` | no | Only pages whose path contains this text. default `""` |
769
+ | `query.sort` | `"pageviews" \| "clicks" \| "position" \| "companies" \| "pipeline" \| "issues"` | no | default `"pageviews"` |
770
+ | `query.order` | `"asc" \| "desc"` | no | default `"desc"` |
771
+ | `query.filter` | `"all" \| "money" \| "decay" \| "fixes" \| "companies" \| "slow"` | no | default `"all"` |
772
+ | `query.limit` | `integer` | no | Rows to return. default `50` |
773
+ | `query.offset` | `integer` | no | Rows to skip. default `0` |
774
+
775
+ **Returns** `ApiResponse_SeoPages360_`: the envelope `{ data: SeoPages360, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
776
+
777
+ Other envelope fields: `pagination` (PaginationMeta).
778
+
779
+ `SeoPages360` fields:
780
+
781
+ | Field | Type | Required | Description |
782
+ |---|---|---|---|
783
+ | `gsc_connected` | `boolean` | yes | |
784
+ | `limit` | `integer` | yes | |
785
+ | `offset` | `integer` | yes | |
786
+ | `rows` | `Array<Record<string, unknown>>` | yes | |
787
+ | `total` | `integer` | yes | |
788
+ | `last_sync_at` | `string \| null` | no | |
789
+
790
+ **Example**
791
+
792
+ ```ts
793
+ const result = await g8.api.seo.listSeoPages360({ query: { domain: "acme.com" } });
794
+ ```
795
+
796
+ ---
797
+
415
798
  <a id="op-listseotrackeddomains"></a>
416
799
 
417
800
  ### `g8.api.seo.listSeoTrackedDomains(input?)`
@@ -642,7 +1025,7 @@ Body fields (`SeoSaveTrackedKeywordsRequest`):
642
1025
  |---|---|---|---|
643
1026
  | `body.domain` | `string` | yes | min length 3, max length 255 |
644
1027
  | `body.keywords` | `Array<SeoTrackKeywordItem>` | yes | min items 1, max items 100 |
645
- | `body.cadence` | `"daily" \| "weekly"` | no | default `"daily"` |
1028
+ | `body.cadence` | `"daily" \| "weekly" \| "manual"` | no | default `"daily"` |
646
1029
  | `body.language_code` | `string` | no | default `"en"`, max length 10 |
647
1030
  | `body.location_code` | `integer` | no | default `2840` |
648
1031
 
@@ -743,6 +1126,48 @@ const result = await g8.api.seo.startSeoAudit({ body: { domain: "acme.com" } });
743
1126
 
744
1127
  Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
745
1128
 
1129
+ <a id="type-seoagentfix"></a>
1130
+
1131
+ ### `SeoAgentFix`
1132
+
1133
+ One fix with exact instructions: the page, the steps, the code to add and how success is checked.
1134
+
1135
+ | Field | Type | Required | Description |
1136
+ |---|---|---|---|
1137
+ | `acceptance` | `Array<string>` | yes | |
1138
+ | `category` | `string` | yes | |
1139
+ | `domain` | `string` | yes | |
1140
+ | `fix_id` | `string` | yes | |
1141
+ | `severity` | `string` | yes | |
1142
+ | `status` | `string` | yes | |
1143
+ | `steps` | `Array<string>` | yes | |
1144
+ | `title` | `string` | yes | |
1145
+ | `files` | `Record<string, string>` | no | |
1146
+ | `snippets` | `Array<SeoAgentSnippet>` | no | |
1147
+ | `target_url` | `string \| null` | no | |
1148
+ | `why` | `string` | no | default `""` |
1149
+
1150
+ <a id="type-seoagentsetup"></a>
1151
+
1152
+ ### `SeoAgentSetup`
1153
+
1154
+ | Field | Type | Required | Description |
1155
+ |---|---|---|---|
1156
+ | `claude_code` | `string` | yes | |
1157
+ | `cursor` | `SeoAgentSetupCursor` | yes | |
1158
+ | `mcp_url` | `string` | yes | |
1159
+ | `prompt` | `string` | yes | |
1160
+ | `tools` | `Array<string>` | yes | |
1161
+
1162
+ <a id="type-seoapprovalqueue"></a>
1163
+
1164
+ ### `SeoApprovalQueue`
1165
+
1166
+ | Field | Type | Required | Description |
1167
+ |---|---|---|---|
1168
+ | `count` | `integer` | yes | |
1169
+ | `items` | `Array<SeoApprovalItem>` | yes | |
1170
+
746
1171
  <a id="type-seoauditissue"></a>
747
1172
 
748
1173
  ### `SeoAuditIssue`
@@ -801,6 +1226,17 @@ Mirrors `DomainPageDTO`.
801
1226
  | `top_keyword` | `string \| null` | no | |
802
1227
  | `traffic_change_30d` | `number \| null` | no | |
803
1228
 
1229
+ <a id="type-seoendofday"></a>
1230
+
1231
+ ### `SeoEndOfDay`
1232
+
1233
+ | Field | Type | Required | Description |
1234
+ |---|---|---|---|
1235
+ | `ask` | `string` | yes | |
1236
+ | `risk` | `string` | yes | |
1237
+ | `win` | `string` | yes | |
1238
+ | `work_channel_id` | `string \| null` | no | |
1239
+
804
1240
  <a id="type-seokeywordrow"></a>
805
1241
 
806
1242
  ### `SeoKeywordRow`
@@ -816,6 +1252,21 @@ Mirrors `KeywordRow`.
816
1252
  | `keyword_difficulty` | `integer \| null` | no | |
817
1253
  | `search_volume` | `integer` | no | default `0` |
818
1254
 
1255
+ <a id="type-seomover"></a>
1256
+
1257
+ ### `SeoMover`
1258
+
1259
+ | Field | Type | Required | Description |
1260
+ |---|---|---|---|
1261
+ | `detail` | `string` | yes | |
1262
+ | `kind` | `"rank_up" \| "rank_down" \| "gsc_drop" \| "gsc_gain" \| "low_ctr"` | yes | |
1263
+ | `title` | `string` | yes | |
1264
+ | `confidence` | `"measured" \| "estimated" \| "partial"` | no | default `"measured"` |
1265
+ | `delta` | `number \| null` | no | |
1266
+ | `from_value` | `number \| null` | no | |
1267
+ | `to_value` | `number \| null` | no | |
1268
+ | `url` | `string \| null` | no | |
1269
+
819
1270
  <a id="type-seoranksnapshot"></a>
820
1271
 
821
1272
  ### `SeoRankSnapshot`
@@ -828,6 +1279,59 @@ Mirrors `RankSnapshotDTO`.
828
1279
  | `rank` | `integer \| null` | no | |
829
1280
  | `serp_url` | `string \| null` | no | |
830
1281
 
1282
+ <a id="type-seosetupchecklist"></a>
1283
+
1284
+ ### `SeoSetupChecklist`
1285
+
1286
+ | Field | Type | Required | Description |
1287
+ |---|---|---|---|
1288
+ | `done_count` | `integer` | yes | |
1289
+ | `items` | `Array<SeoSetupItem>` | yes | |
1290
+ | `total` | `integer` | yes | |
1291
+
1292
+ <a id="type-seotodayalert"></a>
1293
+
1294
+ ### `SeoTodayAlert`
1295
+
1296
+ | Field | Type | Required | Description |
1297
+ |---|---|---|---|
1298
+ | `body` | `string` | yes | |
1299
+ | `fired_at` | `string` | yes | |
1300
+ | `id` | `string` | yes | |
1301
+ | `kind` | `string` | yes | |
1302
+ | `severity` | `"critical" \| "high" \| "medium" \| "low"` | yes | |
1303
+ | `title` | `string` | yes | |
1304
+ | `action` | `SeoTodayAction \| null` | no | |
1305
+ | `payload` | `Record<string, unknown>` | no | |
1306
+
1307
+ <a id="type-seotodaycard"></a>
1308
+
1309
+ ### `SeoTodayCard`
1310
+
1311
+ | Field | Type | Required | Description |
1312
+ |---|---|---|---|
1313
+ | `action` | `SeoTodayAction` | yes | |
1314
+ | `category` | `string` | yes | |
1315
+ | `detail` | `string` | yes | |
1316
+ | `id` | `string` | yes | |
1317
+ | `severity` | `"critical" \| "high" \| "medium" \| "low"` | yes | |
1318
+ | `title` | `string` | yes | |
1319
+ | `confidence` | `"measured" \| "estimated" \| "partial"` | no | default `"measured"` |
1320
+ | `stake` | `string \| null` | no | |
1321
+
1322
+ <a id="type-seotodaykpi"></a>
1323
+
1324
+ ### `SeoTodayKpi`
1325
+
1326
+ | Field | Type | Required | Description |
1327
+ |---|---|---|---|
1328
+ | `key` | `string` | yes | |
1329
+ | `label` | `string` | yes | |
1330
+ | `confidence` | `"measured" \| "estimated" \| "partial"` | no | default `"measured"` |
1331
+ | `delta_pct` | `number \| null` | no | |
1332
+ | `hint` | `string \| null` | no | |
1333
+ | `value` | `number \| null` | no | |
1334
+
831
1335
  <a id="type-seotrackkeyworditem"></a>
832
1336
 
833
1337
  ### `SeoTrackKeywordItem`
@@ -193,6 +193,14 @@ Send an `Idempotency-Key` header as well for the app-wide guard.
193
193
  Every execution in the batch is scoped to the caller's org before it is
194
194
  touched; ids belonging to another tenant are simply not found.
195
195
 
196
+ A restart runs each workflow as it is NOW. When one has record steps or a
197
+ record trigger, the key needs the object scopes they exercise (403
198
+ ``missing_scopes`` refuses the whole batch, nothing restarts), and only the
199
+ workflow's owner or a graph8 admin may restart it: for any other member that
200
+ item is reported in ``failed`` with ``owner_or_admin_required`` while the
201
+ rest of the batch goes ahead. When graph8 cannot confirm who is an admin,
202
+ that item is refused, never guessed, and also reported in ``failed``.
203
+
196
204
  **Input**
197
205
 
198
206
  | Field | Type | Required | Description |
@@ -319,6 +327,13 @@ const result = await g8.api.workflows.createWorkbench({ body: {} });
319
327
  Create a new workflow. Pins ``org_id`` and ``runtime_type='workflow'``
320
328
  server-side - the body cannot override either.
321
329
 
330
+ The workflow's OWNER is the authenticated caller, never a body field: a
331
+ body ``created_by`` is dropped (see ``voice_owner_headers``). Record steps
332
+ and record triggers run with the owner's record access, so the key must hold
333
+ the object scopes they exercise (403 ``missing_scopes``). A node or trigger
334
+ config that carries the same key in snake_case and camelCase with values
335
+ that disagree is refused (422 ``conflicting_node_keys``): keep one spelling.
336
+
322
337
  Translates the public ``config`` field to voice's internal
323
338
  ``skill_config`` before forwarding (see module docstring).
324
339
 
@@ -573,6 +588,14 @@ const result = await g8.api.workflows.diffSkillVersions({ path: { action_id: "id
573
588
 
574
589
  Trigger a workflow run. Returns ``execution_id`` for polling.
575
590
 
591
+ A workflow with record steps or a record trigger runs them with its OWNER's
592
+ record access, and this run's input feeds them: the key must hold the object
593
+ scopes they exercise (403 ``missing_scopes``) and its member must own the
594
+ workflow or administer the org (403 ``owner_or_admin_required``, from the
595
+ workflow service, which receives the member as the verified identity). The
596
+ saved workflow is read before the run so that check is never skipped: when
597
+ it cannot be read, the answer is ``502`` and nothing runs.
598
+
576
599
  Pins ``org_id`` server-side; the caller cannot override which org's
577
600
  execution row is created. ``triggered_by`` defaults to the caller's
578
601
  user id when not supplied.
@@ -1908,6 +1931,14 @@ a paused run instead, use `POST /workflows/executions/{id}/resume`.
1908
1931
  The org is forwarded and voice scopes the lookup by it, so one tenant
1909
1932
  cannot restart another's run.
1910
1933
 
1934
+ A restart runs the workflow as it is NOW, with the original or new input.
1935
+ When it has record steps or a record trigger, the key needs the object
1936
+ scopes they exercise (403 ``missing_scopes``), and only the workflow's
1937
+ owner or a graph8 admin may restart it, with reused or new input (403
1938
+ ``owner_or_admin_required``). When graph8 cannot confirm who is an admin the
1939
+ restart is refused, never guessed: the workflow service answers 503, which
1940
+ reaches the caller as ``502`` like its other upstream failures; retry later.
1941
+
1911
1942
  **Input**
1912
1943
 
1913
1944
  | Field | Type | Required | Description |
@@ -1941,7 +1972,14 @@ const result = await g8.api.workflows.restartExecution({ path: { execution_id: "
1941
1972
 
1942
1973
  SPENDS NOTHING. Publishes the old snapshot as a NEW version, live for the
1943
1974
  next run - agents and workflows using the skill pick it up. Append-only, so
1944
- the restore can itself be rolled back. Routine-managed skills refuse (403).
1975
+ the restore can itself be rolled back. Routine-managed skills refuse (403). A
1976
+ restored graph with record steps or a record trigger needs the same object
1977
+ scopes as a create or an update (403 ``missing_scopes``), a restored graph
1978
+ whose snake_case and camelCase node keys disagree is refused (422
1979
+ ``conflicting_node_keys``), and a restore that changes such a workflow's
1980
+ graph is refused (403 ``owner_or_admin_required``) unless the key's member
1981
+ owns the workflow or administers the org. The version's graph is read first
1982
+ to run those checks: 404 when it cannot be found (unknown skill or version).
1945
1983
 
1946
1984
  **Input**
1947
1985
 
@@ -2250,7 +2288,13 @@ const result = await g8.api.workflows.updateSkillTestCase({ path: { action_id: "
2250
2288
  - ★ Hand-written: [`g8.workflows.update()`](../sdk-clients.md#g8-workflows-update)
2251
2289
 
2252
2290
  Update a workflow. The voice update endpoint takes ``org_id`` as a
2253
- query param and the partial body in JSON, so we forward both.
2291
+ query param and the partial body in JSON, so we forward both. A graph with
2292
+ record steps or a record trigger needs the object scopes they exercise
2293
+ (403 ``missing_scopes``), like create, and a node or trigger config whose
2294
+ snake_case and camelCase keys disagree is refused (422
2295
+ ``conflicting_node_keys``). On a workflow with record steps or a record
2296
+ trigger, only its owner or a graph8 admin may change what it runs (403
2297
+ ``owner_or_admin_required``); its name and description stay editable.
2254
2298
 
2255
2299
  Translates the public ``config`` field to voice's internal
2256
2300
  ``skill_config`` before forwarding (see module docstring).