@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.
- package/README.md +81 -0
- package/blocks/README.md +32 -0
- package/blocks/_foundation/README.md +78 -0
- package/blocks/_foundation/block.json +79 -0
- package/blocks/_foundation/components/api-error.tsx +62 -0
- package/blocks/_foundation/components/confirm-spend-dialog.tsx +142 -0
- package/blocks/_foundation/components/empty-state.tsx +24 -0
- package/blocks/_foundation/hooks/use-g8-mutation.ts +88 -0
- package/blocks/_foundation/hooks/use-g8-query.ts +87 -0
- package/blocks/_foundation/hooks/use-job-poll.ts +130 -0
- package/blocks/_foundation/hooks/use-paginated.ts +105 -0
- package/blocks/_foundation/lib/g8-client.ts +128 -0
- package/blocks/_foundation/recipes/verify-proxy-key.ts +18 -0
- package/blocks/_foundation/server/proxy.ts +233 -0
- package/blocks/_foundation/server/route.ts +30 -0
- package/blocks/agents/README.md +133 -0
- package/blocks/agents/block.json +223 -0
- package/blocks/agents/components/agent-builder.tsx +199 -0
- package/blocks/agents/components/agent-knowledge-panel.tsx +144 -0
- package/blocks/agents/components/agent-runs.tsx +175 -0
- package/blocks/agents/components/agent-skills-panel.tsx +126 -0
- package/blocks/agents/components/agent-test-console.tsx +175 -0
- package/blocks/agents/lib/agent-types.ts +114 -0
- package/blocks/agents/recipes/create-agent-and-attach-skill.ts +50 -0
- package/blocks/agents/recipes/run-and-follow-agent-run.ts +46 -0
- package/blocks/agents/recipes/test-agent-before-activating.ts +36 -0
- package/blocks/analytics/README.md +73 -0
- package/blocks/analytics/block.json +178 -0
- package/blocks/analytics/components/funnel-chart.tsx +79 -0
- package/blocks/analytics/components/kpi-tiles.tsx +74 -0
- package/blocks/analytics/components/leaderboard.tsx +86 -0
- package/blocks/analytics/components/report-builder.tsx +200 -0
- package/blocks/analytics/hooks/use-report.ts +26 -0
- package/blocks/analytics/lib/analytics-types.ts +108 -0
- package/blocks/analytics/lib/use-debounced.ts +16 -0
- package/blocks/analytics/recipes/01-weekly-outbound-report.ts +32 -0
- package/blocks/analytics/recipes/02-revenue-snapshot.ts +22 -0
- package/blocks/analytics/recipes/03-saved-report.ts +30 -0
- package/blocks/appointments/README.md +80 -0
- package/blocks/appointments/block.json +218 -0
- package/blocks/appointments/components/availability-editor.tsx +192 -0
- package/blocks/appointments/components/booking-page.tsx +154 -0
- package/blocks/appointments/components/event-type-editor.tsx +214 -0
- package/blocks/appointments/components/meeting-detail.tsx +147 -0
- package/blocks/appointments/components/meeting-list.tsx +148 -0
- package/blocks/appointments/hooks/use-available-slots.ts +29 -0
- package/blocks/appointments/hooks/use-schedules.ts +18 -0
- package/blocks/appointments/lib/appointments-types.ts +159 -0
- package/blocks/appointments/lib/idempotency.ts +30 -0
- package/blocks/appointments/recipes/01-create-event-type-and-hours.ts +27 -0
- package/blocks/appointments/recipes/02-find-slots-and-book.ts +34 -0
- package/blocks/appointments/recipes/03-bookings-digest.ts +22 -0
- package/blocks/appointments/recipes/04-calendar-invite.ts +21 -0
- package/blocks/block.schema.json +130 -0
- package/blocks/block.types.ts +109 -0
- package/blocks/campaigns/README.md +118 -0
- package/blocks/campaigns/block.json +361 -0
- package/blocks/campaigns/components/campaign-assets.tsx +180 -0
- package/blocks/campaigns/components/campaign-audience-step.tsx +91 -0
- package/blocks/campaigns/components/campaign-launch-step.tsx +147 -0
- package/blocks/campaigns/components/campaign-list.tsx +120 -0
- package/blocks/campaigns/components/campaign-metrics.tsx +93 -0
- package/blocks/campaigns/components/campaign-select.tsx +52 -0
- package/blocks/campaigns/components/campaign-sequence-step.tsx +158 -0
- package/blocks/campaigns/components/campaign-wizard.tsx +238 -0
- package/blocks/campaigns/components/form-field.tsx +29 -0
- package/blocks/campaigns/components/icp-editor.tsx +230 -0
- package/blocks/campaigns/components/persona-editor.tsx +210 -0
- package/blocks/campaigns/hooks/use-company-profile.ts +34 -0
- package/blocks/campaigns/lib/campaigns-utils.ts +155 -0
- package/blocks/campaigns/recipes/attach-audience-and-launch.ts +33 -0
- package/blocks/campaigns/recipes/campaign-report.ts +22 -0
- package/blocks/campaigns/recipes/generate-ideas-and-create-campaign.ts +51 -0
- package/blocks/campaigns/recipes/set-up-icp-and-personas.ts +37 -0
- package/blocks/coach/README.md +93 -0
- package/blocks/coach/block.json +125 -0
- package/blocks/coach/components/call-scorecard.tsx +126 -0
- package/blocks/coach/components/coaching-feed.tsx +140 -0
- package/blocks/coach/lib/coach-types.ts +116 -0
- package/blocks/coach/recipes/read-a-scorecard.ts +27 -0
- package/blocks/coach/recipes/weekly-coaching-digest.ts +53 -0
- package/blocks/copilot/README.md +99 -0
- package/blocks/copilot/block.json +151 -0
- package/blocks/copilot/components/copilot-memory.tsx +87 -0
- package/blocks/copilot/components/copilot-panel.tsx +189 -0
- package/blocks/copilot/components/copilot-team-chat.tsx +111 -0
- package/blocks/copilot/lib/copilot-types.ts +111 -0
- package/blocks/copilot/recipes/ask-the-copilot.ts +35 -0
- package/blocks/copilot/recipes/post-in-a-work-channel.ts +33 -0
- package/blocks/copilot/recipes/remember-and-recall.ts +19 -0
- package/blocks/crm/README.md +122 -0
- package/blocks/crm/block.json +378 -0
- package/blocks/crm/components/activity-timeline.tsx +99 -0
- package/blocks/crm/components/company-detail.tsx +118 -0
- package/blocks/crm/components/company-table.tsx +173 -0
- package/blocks/crm/components/contact-detail.tsx +135 -0
- package/blocks/crm/components/contact-table.tsx +217 -0
- package/blocks/crm/components/dedupe-review.tsx +164 -0
- package/blocks/crm/components/import-wizard.tsx +193 -0
- package/blocks/crm/components/notes-panel.tsx +112 -0
- package/blocks/crm/components/record-form.tsx +191 -0
- package/blocks/crm/components/task-list.tsx +107 -0
- package/blocks/crm/hooks/use-custom-fields.ts +18 -0
- package/blocks/crm/hooks/use-debounced.ts +13 -0
- package/blocks/crm/hooks/use-page-query.ts +52 -0
- package/blocks/crm/lib/crm-types.ts +136 -0
- package/blocks/crm/recipes/custom-fields-and-values.ts +28 -0
- package/blocks/crm/recipes/dedupe-and-merge.ts +30 -0
- package/blocks/crm/recipes/notes-tasks-and-activity.ts +23 -0
- package/blocks/crm/recipes/upsert-contact-with-company.ts +33 -0
- package/blocks/deals/README.md +78 -0
- package/blocks/deals/block.json +198 -0
- package/blocks/deals/components/deal-detail.tsx +134 -0
- package/blocks/deals/components/forecast-view.tsx +112 -0
- package/blocks/deals/components/pipeline-board.tsx +142 -0
- package/blocks/deals/components/stage-editor.tsx +96 -0
- package/blocks/deals/hooks/use-pipeline-deals.ts +67 -0
- package/blocks/deals/hooks/use-pipelines.ts +19 -0
- package/blocks/deals/lib/deals-types.ts +128 -0
- package/blocks/deals/recipes/01-create-deal-and-advance.ts +32 -0
- package/blocks/deals/recipes/02-pipeline-report.ts +35 -0
- package/blocks/deals/recipes/03-stale-deals-sweep.ts +20 -0
- package/blocks/dialer/README.md +114 -0
- package/blocks/dialer/block.json +260 -0
- package/blocks/dialer/components/call-log.tsx +78 -0
- package/blocks/dialer/components/call-queue.tsx +188 -0
- package/blocks/dialer/components/dialer-workspace.tsx +47 -0
- package/blocks/dialer/components/disposition-panel.tsx +75 -0
- package/blocks/dialer/components/live-calls-table.tsx +107 -0
- package/blocks/dialer/components/session-start-form.tsx +111 -0
- package/blocks/dialer/components/softphone.tsx +122 -0
- package/blocks/dialer/components/transcript-viewer.tsx +82 -0
- package/blocks/dialer/hooks/use-dialer-numbers.ts +19 -0
- package/blocks/dialer/hooks/use-dialer-session.ts +68 -0
- package/blocks/dialer/hooks/use-dispositions.ts +29 -0
- package/blocks/dialer/lib/dialer-types.ts +158 -0
- package/blocks/dialer/lib/softphone-transport.ts +67 -0
- package/blocks/dialer/lib/twilio-transport.ts +74 -0
- package/blocks/dialer/recipes/01-create-session-and-dial.ts +39 -0
- package/blocks/dialer/recipes/02-disposition-calls.ts +26 -0
- package/blocks/dialer/recipes/03-review-a-call.ts +23 -0
- package/blocks/enrichment/README.md +105 -0
- package/blocks/enrichment/block.json +204 -0
- package/blocks/enrichment/components/bulk-enrich-panel.tsx +205 -0
- package/blocks/enrichment/components/email-verify-badge.tsx +82 -0
- package/blocks/enrichment/components/enrich-button.tsx +136 -0
- package/blocks/enrichment/components/waterfall-config.tsx +127 -0
- package/blocks/enrichment/hooks/use-providers.ts +18 -0
- package/blocks/enrichment/lib/enrichment-types.ts +104 -0
- package/blocks/enrichment/recipes/bulk-enrich-and-poll.ts +41 -0
- package/blocks/enrichment/recipes/lookup-and-verify.ts +25 -0
- package/blocks/enrichment/recipes/waterfall-pipeline.ts +26 -0
- package/blocks/forms/README.md +112 -0
- package/blocks/forms/block.json +200 -0
- package/blocks/forms/components/form-builder.tsx +150 -0
- package/blocks/forms/components/form-embed.tsx +103 -0
- package/blocks/forms/components/form-mapping-editor.tsx +125 -0
- package/blocks/forms/components/site-audit-panel.tsx +73 -0
- package/blocks/forms/components/submissions-table.tsx +158 -0
- package/blocks/forms/lib/form-types.ts +127 -0
- package/blocks/forms/recipes/install-snippet-and-form.ts +21 -0
- package/blocks/forms/recipes/retry-failed-deliveries.ts +26 -0
- package/blocks/forms/recipes/route-form-to-list.ts +44 -0
- package/blocks/inbox/README.md +72 -0
- package/blocks/inbox/block.json +194 -0
- package/blocks/inbox/components/inbox-list.tsx +156 -0
- package/blocks/inbox/components/inbox-screen.tsx +49 -0
- package/blocks/inbox/components/reply-composer.tsx +183 -0
- package/blocks/inbox/components/tag-and-assign.tsx +189 -0
- package/blocks/inbox/components/thread-badge.tsx +17 -0
- package/blocks/inbox/components/thread-view.tsx +108 -0
- package/blocks/inbox/hooks/use-inbox-thread.ts +24 -0
- package/blocks/inbox/hooks/use-inbox-threads.ts +40 -0
- package/blocks/inbox/lib/idempotency.ts +30 -0
- package/blocks/inbox/lib/inbox-types.ts +100 -0
- package/blocks/inbox/recipes/01-triage-and-reply.ts +43 -0
- package/blocks/inbox/recipes/02-tag-and-assign.ts +31 -0
- package/blocks/inbox/recipes/03-hot-contacts-digest.ts +16 -0
- package/blocks/integrations/README.md +75 -0
- package/blocks/integrations/block.json +172 -0
- package/blocks/integrations/components/integration-list.tsx +165 -0
- package/blocks/integrations/components/sync-status.tsx +223 -0
- package/blocks/integrations/components/webhook-manager.tsx +300 -0
- package/blocks/integrations/lib/integrations-utils.ts +62 -0
- package/blocks/integrations/recipes/crm-sync-health.ts +19 -0
- package/blocks/integrations/recipes/push-contacts-to-crm.ts +20 -0
- package/blocks/integrations/recipes/register-webhook.ts +18 -0
- package/blocks/integrations/recipes/verify-webhook-route.ts +33 -0
- package/blocks/intent/README.md +57 -0
- package/blocks/intent/block.json +138 -0
- package/blocks/intent/components/account-intent-score.tsx +91 -0
- package/blocks/intent/components/intent-feed.tsx +215 -0
- package/blocks/intent/components/intent-keyword-manager.tsx +331 -0
- package/blocks/intent/hooks/use-account-intent.ts +46 -0
- package/blocks/intent/lib/intent-utils.ts +95 -0
- package/blocks/intent/recipes/rank-intent-accounts.ts +36 -0
- package/blocks/intent/recipes/track-competitor-domain.ts +23 -0
- package/blocks/intent/recipes/who-visited-url.ts +18 -0
- package/blocks/lifecycle/README.md +79 -0
- package/blocks/lifecycle/block.json +198 -0
- package/blocks/lifecycle/components/churn-list.tsx +92 -0
- package/blocks/lifecycle/components/customer-table.tsx +119 -0
- package/blocks/lifecycle/components/lead-queue.tsx +127 -0
- package/blocks/lifecycle/components/lifecycle-board.tsx +102 -0
- package/blocks/lifecycle/components/stage-move-dialog.tsx +75 -0
- package/blocks/lifecycle/hooks/use-debounced.ts +13 -0
- package/blocks/lifecycle/hooks/use-lifecycle-stages.ts +27 -0
- package/blocks/lifecycle/lib/lifecycle.ts +99 -0
- package/blocks/lifecycle/recipes/customer-brief.ts +23 -0
- package/blocks/lifecycle/recipes/move-company-stage.ts +17 -0
- package/blocks/lifecycle/recipes/read-lifecycle-board.ts +21 -0
- package/blocks/lifecycle/recipes/unlock-stage-contacts.ts +25 -0
- package/blocks/lists/README.md +96 -0
- package/blocks/lists/block.json +166 -0
- package/blocks/lists/components/add-to-list-button.tsx +111 -0
- package/blocks/lists/components/list-picker.tsx +94 -0
- package/blocks/lists/components/list-table.tsx +160 -0
- package/blocks/lists/components/suppression-manager.tsx +153 -0
- package/blocks/lists/recipes/create-list-and-add-contacts.ts +35 -0
- package/blocks/lists/recipes/refresh-and-check-lists.ts +21 -0
- package/blocks/lists/recipes/suppress-and-reinstate.ts +30 -0
- package/blocks/mailboxes/README.md +71 -0
- package/blocks/mailboxes/block.json +187 -0
- package/blocks/mailboxes/components/connect-mailbox.tsx +284 -0
- package/blocks/mailboxes/components/domain-purchase.tsx +271 -0
- package/blocks/mailboxes/components/mailbox-list.tsx +185 -0
- package/blocks/mailboxes/components/warmup-health.tsx +232 -0
- package/blocks/mailboxes/lib/mailboxes-utils.ts +69 -0
- package/blocks/mailboxes/recipes/buy-domain-and-mailboxes.ts +64 -0
- package/blocks/mailboxes/recipes/connect-imap-mailbox.ts +38 -0
- package/blocks/mailboxes/recipes/is-it-safe-to-send.ts +17 -0
- package/blocks/mailboxes/recipes/warmup-report.ts +31 -0
- package/blocks/newsletter/README.md +122 -0
- package/blocks/newsletter/block.json +224 -0
- package/blocks/newsletter/components/issue-form.tsx +124 -0
- package/blocks/newsletter/components/issue-scheduler.tsx +152 -0
- package/blocks/newsletter/components/newsletter-editor.tsx +131 -0
- package/blocks/newsletter/components/newsletter-stats.tsx +93 -0
- package/blocks/newsletter/components/subscriber-table.tsx +173 -0
- package/blocks/newsletter/lib/newsletter-types.ts +97 -0
- package/blocks/newsletter/recipes/create-newsletter-and-draft-issue.ts +27 -0
- package/blocks/newsletter/recipes/import-audience-and-send.ts +43 -0
- package/blocks/newsletter/recipes/issue-performance-report.ts +26 -0
- package/blocks/nurture/README.md +110 -0
- package/blocks/nurture/block.json +191 -0
- package/blocks/nurture/components/nurture-builder.tsx +114 -0
- package/blocks/nurture/components/nurture-enroll.tsx +107 -0
- package/blocks/nurture/components/nurture-form.tsx +120 -0
- package/blocks/nurture/components/nurture-stats.tsx +81 -0
- package/blocks/nurture/lib/nurture-types.ts +109 -0
- package/blocks/nurture/recipes/create-a-nurture.ts +34 -0
- package/blocks/nurture/recipes/enroll-contacts-and-launch.ts +24 -0
- package/blocks/nurture/recipes/nurture-health-check.ts +28 -0
- package/blocks/objects/README.md +120 -0
- package/blocks/objects/block.json +243 -0
- package/blocks/objects/components/attribute-field-input.tsx +82 -0
- package/blocks/objects/components/attribute-form-dialog.tsx +159 -0
- package/blocks/objects/components/object-not-found.tsx +34 -0
- package/blocks/objects/components/object-record-detail.tsx +143 -0
- package/blocks/objects/components/object-schema-editor.tsx +197 -0
- package/blocks/objects/components/object-table.tsx +130 -0
- package/blocks/objects/components/record-form-dialog.tsx +112 -0
- package/blocks/objects/components/record-roles-panel.tsx +106 -0
- package/blocks/objects/hooks/use-object-schema.ts +36 -0
- package/blocks/objects/lib/object-types.ts +214 -0
- package/blocks/objects/recipes/define-object-and-add-records.ts +24 -0
- package/blocks/objects/recipes/update-audit-and-archive-records.ts +39 -0
- package/blocks/objects/recipes/upsert-records-from-your-system.ts +30 -0
- package/blocks/pages/README.md +104 -0
- package/blocks/pages/block.json +223 -0
- package/blocks/pages/components/brand-kit-editor.tsx +152 -0
- package/blocks/pages/components/content-library.tsx +163 -0
- package/blocks/pages/components/page-editor.tsx +253 -0
- package/blocks/pages/components/page-list.tsx +159 -0
- package/blocks/pages/components/seo-report.tsx +159 -0
- package/blocks/pages/lib/studio.ts +77 -0
- package/blocks/pages/recipes/audit-site-seo.ts +28 -0
- package/blocks/pages/recipes/create-and-publish-page.ts +26 -0
- package/blocks/pages/recipes/edit-page-section.ts +25 -0
- package/blocks/pages/recipes/refresh-brand-kit.ts +22 -0
- package/blocks/quotes/README.md +79 -0
- package/blocks/quotes/block.json +183 -0
- package/blocks/quotes/components/product-picker.tsx +80 -0
- package/blocks/quotes/components/quote-builder.tsx +195 -0
- package/blocks/quotes/components/quote-list.tsx +79 -0
- package/blocks/quotes/components/quote-viewer.tsx +135 -0
- package/blocks/quotes/components/signature-status.tsx +77 -0
- package/blocks/quotes/hooks/use-debounced.ts +13 -0
- package/blocks/quotes/lib/quotes.ts +142 -0
- package/blocks/quotes/recipes/create-and-send-quote.ts +44 -0
- package/blocks/quotes/recipes/revise-sent-quote.ts +18 -0
- package/blocks/quotes/recipes/track-quote-signature.ts +22 -0
- package/blocks/radar/README.md +106 -0
- package/blocks/radar/block.json +189 -0
- package/blocks/radar/components/competitor-battle-card.tsx +53 -0
- package/blocks/radar/components/competitor-tracker.tsx +158 -0
- package/blocks/radar/components/radar-overview.tsx +67 -0
- package/blocks/radar/components/radar-report.tsx +86 -0
- package/blocks/radar/hooks/use-competitors.ts +23 -0
- package/blocks/radar/lib/radar-types.ts +124 -0
- package/blocks/radar/recipes/battle-card.ts +28 -0
- package/blocks/radar/recipes/deep-dive-report.ts +32 -0
- package/blocks/radar/recipes/marketing-snapshot.ts +18 -0
- package/blocks/radar/recipes/track-and-scan.ts +39 -0
- package/blocks/search/README.md +129 -0
- package/blocks/search/block.json +185 -0
- package/blocks/search/components/filter-builder.tsx +149 -0
- package/blocks/search/components/prospect-results.tsx +175 -0
- package/blocks/search/components/save-to-list-dialog.tsx +135 -0
- package/blocks/search/components/saved-searches.tsx +95 -0
- package/blocks/search/hooks/use-filter-options.ts +41 -0
- package/blocks/search/lib/search-types.ts +149 -0
- package/blocks/search/recipes/explore-filter-values.ts +27 -0
- package/blocks/search/recipes/saved-searches.ts +34 -0
- package/blocks/search/recipes/search-and-save-to-list.ts +37 -0
- package/blocks/sequencer/README.md +87 -0
- package/blocks/sequencer/block.json +214 -0
- package/blocks/sequencer/components/enroll-dialog.tsx +93 -0
- package/blocks/sequencer/components/sequence-builder.tsx +306 -0
- package/blocks/sequencer/components/sequence-list.tsx +200 -0
- package/blocks/sequencer/components/sequence-stats.tsx +256 -0
- package/blocks/sequencer/components/step-editor.tsx +213 -0
- package/blocks/sequencer/lib/sequencer-utils.ts +168 -0
- package/blocks/sequencer/recipes/create-multichannel-sequence.ts +51 -0
- package/blocks/sequencer/recipes/launch-and-enroll.ts +44 -0
- package/blocks/sequencer/recipes/pause-when-unsafe.ts +30 -0
- package/blocks/sequencer/recipes/sequence-report.ts +22 -0
- package/blocks/social-ads/README.md +128 -0
- package/blocks/social-ads/block.json +256 -0
- package/blocks/social-ads/components/ad-campaign-list.tsx +136 -0
- package/blocks/social-ads/components/audience-sync.tsx +150 -0
- package/blocks/social-ads/components/creative-gallery.tsx +121 -0
- package/blocks/social-ads/components/post-composer.tsx +122 -0
- package/blocks/social-ads/components/social-post-list.tsx +116 -0
- package/blocks/social-ads/hooks/use-social-accounts.ts +16 -0
- package/blocks/social-ads/lib/social-ads-types.ts +167 -0
- package/blocks/social-ads/recipes/creative-to-gallery.ts +41 -0
- package/blocks/social-ads/recipes/schedule-post.ts +51 -0
- package/blocks/social-ads/recipes/sync-audience-and-launch.ts +41 -0
- package/blocks/visitors/README.md +56 -0
- package/blocks/visitors/block.json +139 -0
- package/blocks/visitors/components/snippet-install.tsx +169 -0
- package/blocks/visitors/components/traffic-chart.tsx +156 -0
- package/blocks/visitors/components/visitor-company-card.tsx +92 -0
- package/blocks/visitors/components/visitor-feed.tsx +157 -0
- package/blocks/visitors/lib/visitors-utils.ts +78 -0
- package/blocks/visitors/recipes/check-snippet-installed.ts +24 -0
- package/blocks/visitors/recipes/recent-company-visits.ts +27 -0
- package/blocks/visitors/recipes/traffic-summary.ts +24 -0
- package/blocks/webchat/README.md +87 -0
- package/blocks/webchat/block.json +134 -0
- package/blocks/webchat/components/chat-widget-config.tsx +160 -0
- package/blocks/webchat/components/conversation-list.tsx +74 -0
- package/blocks/webchat/lib/webchat-types.ts +83 -0
- package/blocks/webchat/recipes/create-bot-and-style-widget.ts +24 -0
- package/blocks/webchat/recipes/list-chat-visitors.ts +24 -0
- package/blocks/workbench/README.md +135 -0
- package/blocks/workbench/block.json +259 -0
- package/blocks/workbench/components/column-recipe-editor.tsx +183 -0
- package/blocks/workbench/components/run-progress.tsx +132 -0
- package/blocks/workbench/components/workbench-add-rows.tsx +100 -0
- package/blocks/workbench/components/workbench-grid.tsx +159 -0
- package/blocks/workbench/components/workbench-row-actions.tsx +102 -0
- package/blocks/workbench/components/workbench-table-list.tsx +105 -0
- package/blocks/workbench/hooks/use-workbench-table.ts +30 -0
- package/blocks/workbench/lib/waterfall-presets.ts +119 -0
- package/blocks/workbench/lib/workbench-types.ts +191 -0
- package/blocks/workbench/recipes/build-enriched-table.ts +65 -0
- package/blocks/workbench/recipes/import-from-search.ts +42 -0
- package/blocks/workbench/recipes/scrape-into-table.ts +36 -0
- package/blocks/workbench/recipes/waterfall-column.ts +55 -0
- package/blocks/workflows/README.md +100 -0
- package/blocks/workflows/block.json +188 -0
- package/blocks/workflows/components/run-history.tsx +136 -0
- package/blocks/workflows/components/trigger-config.tsx +134 -0
- package/blocks/workflows/components/workflow-editor.tsx +142 -0
- package/blocks/workflows/components/workflow-list.tsx +153 -0
- package/blocks/workflows/hooks/use-workflow.ts +51 -0
- package/blocks/workflows/lib/graph.ts +187 -0
- package/blocks/workflows/recipes/create-workflow.ts +35 -0
- package/blocks/workflows/recipes/find-failed-runs.ts +15 -0
- package/blocks/workflows/recipes/run-workflow-and-wait.ts +32 -0
- package/blocks/workflows/recipes/set-trigger.ts +22 -0
- package/dist/cli.js +5330 -29
- package/dist/index.browser.js +7740 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.browser.mjs +7717 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.d.mts +1462 -23
- package/dist/index.d.ts +1462 -23
- package/dist/index.js +42 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +42 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react.browser.js +7598 -0
- package/dist/react.browser.js.map +1 -0
- package/dist/react.browser.mjs +7568 -0
- package/dist/react.browser.mjs.map +1 -0
- package/dist/react.d.mts +1362 -20
- package/dist/react.d.ts +1362 -20
- package/dist/react.js +41 -2
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +41 -2
- package/dist/react.mjs.map +1 -1
- package/dist/types/agentSetup.d.ts +6 -6
- package/dist/types/blocks/add.d.ts +53 -0
- package/dist/types/blocks/create.d.ts +46 -0
- package/dist/types/blocks/doctor.d.ts +26 -0
- package/dist/types/blocks/registry.d.ts +134 -0
- package/dist/types/cli.d.ts +16 -0
- package/dist/types/core.d.ts +1 -1
- package/dist/types/crypto-browser.d.ts +2 -0
- package/dist/types/crypto-node.d.ts +6 -0
- package/dist/types/react.d.ts +1 -1
- package/dist/types/version.d.ts +2 -2
- package/dist/types/webhooks.d.ts +2 -2
- package/dist/ui/index.d.mts +54 -0
- package/dist/ui/index.d.ts +54 -0
- package/dist/ui/index.js +105 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +44 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/ui/lib/compose-refs.d.mts +19 -0
- package/dist/ui/lib/compose-refs.d.ts +19 -0
- package/dist/ui/lib/compose-refs.js +76 -0
- package/dist/ui/lib/compose-refs.js.map +1 -0
- package/dist/ui/lib/compose-refs.mjs +41 -0
- package/dist/ui/lib/compose-refs.mjs.map +1 -0
- package/dist/ui/lib/use-mobile.d.mts +4 -0
- package/dist/ui/lib/use-mobile.d.ts +4 -0
- package/dist/ui/lib/use-mobile.js +57 -0
- package/dist/ui/lib/use-mobile.js.map +1 -0
- package/dist/ui/lib/use-mobile.mjs +22 -0
- package/dist/ui/lib/use-mobile.mjs.map +1 -0
- package/dist/ui/lib/utils.d.mts +10 -0
- package/dist/ui/lib/utils.d.ts +10 -0
- package/dist/ui/lib/utils.js +33 -0
- package/dist/ui/lib/utils.js.map +1 -0
- package/dist/ui/lib/utils.mjs +9 -0
- package/dist/ui/lib/utils.mjs.map +1 -0
- package/dist/ui/primitives/alert-dialog.d.mts +22 -0
- package/dist/ui/primitives/alert-dialog.d.ts +22 -0
- package/dist/ui/primitives/alert-dialog.js +163 -0
- package/dist/ui/primitives/alert-dialog.js.map +1 -0
- package/dist/ui/primitives/alert-dialog.mjs +119 -0
- package/dist/ui/primitives/alert-dialog.mjs.map +1 -0
- package/dist/ui/primitives/avatar.d.mts +8 -0
- package/dist/ui/primitives/avatar.d.ts +8 -0
- package/dist/ui/primitives/avatar.js +91 -0
- package/dist/ui/primitives/avatar.js.map +1 -0
- package/dist/ui/primitives/avatar.mjs +55 -0
- package/dist/ui/primitives/avatar.mjs.map +1 -0
- package/dist/ui/primitives/breadcrumb.d.mts +13 -0
- package/dist/ui/primitives/breadcrumb.d.ts +13 -0
- package/dist/ui/primitives/breadcrumb.js +127 -0
- package/dist/ui/primitives/breadcrumb.js.map +1 -0
- package/dist/ui/primitives/breadcrumb.mjs +97 -0
- package/dist/ui/primitives/breadcrumb.mjs.map +1 -0
- package/dist/ui/primitives/button.d.mts +15 -0
- package/dist/ui/primitives/button.d.ts +15 -0
- package/dist/ui/primitives/button.js +91 -0
- package/dist/ui/primitives/button.js.map +1 -0
- package/dist/ui/primitives/button.mjs +56 -0
- package/dist/ui/primitives/button.mjs.map +1 -0
- package/dist/ui/primitives/card.d.mts +10 -0
- package/dist/ui/primitives/card.d.ts +10 -0
- package/dist/ui/primitives/card.js +101 -0
- package/dist/ui/primitives/card.js.map +1 -0
- package/dist/ui/primitives/card.mjs +62 -0
- package/dist/ui/primitives/card.mjs.map +1 -0
- package/dist/ui/primitives/carousel.d.mts +45 -0
- package/dist/ui/primitives/carousel.d.ts +45 -0
- package/dist/ui/primitives/carousel.js +300 -0
- package/dist/ui/primitives/carousel.js.map +1 -0
- package/dist/ui/primitives/carousel.mjs +261 -0
- package/dist/ui/primitives/carousel.mjs.map +1 -0
- package/dist/ui/primitives/chart.d.mts +68 -0
- package/dist/ui/primitives/chart.d.ts +68 -0
- package/dist/ui/primitives/chart.js +280 -0
- package/dist/ui/primitives/chart.js.map +1 -0
- package/dist/ui/primitives/chart.mjs +241 -0
- package/dist/ui/primitives/chart.mjs.map +1 -0
- package/dist/ui/primitives/collapsible.d.mts +8 -0
- package/dist/ui/primitives/collapsible.d.ts +8 -0
- package/dist/ui/primitives/collapsible.js +72 -0
- package/dist/ui/primitives/collapsible.js.map +1 -0
- package/dist/ui/primitives/collapsible.mjs +36 -0
- package/dist/ui/primitives/collapsible.mjs.map +1 -0
- package/dist/ui/primitives/context-menu.d.mts +29 -0
- package/dist/ui/primitives/context-menu.d.ts +29 -0
- package/dist/ui/primitives/context-menu.js +203 -0
- package/dist/ui/primitives/context-menu.js.map +1 -0
- package/dist/ui/primitives/context-menu.mjs +155 -0
- package/dist/ui/primitives/context-menu.mjs.map +1 -0
- package/dist/ui/primitives/dialog.d.mts +26 -0
- package/dist/ui/primitives/dialog.d.ts +26 -0
- package/dist/ui/primitives/dialog.js +192 -0
- package/dist/ui/primitives/dialog.js.map +1 -0
- package/dist/ui/primitives/dialog.mjs +148 -0
- package/dist/ui/primitives/dialog.mjs.map +1 -0
- package/dist/ui/primitives/drawer.d.mts +26 -0
- package/dist/ui/primitives/drawer.d.ts +26 -0
- package/dist/ui/primitives/drawer.js +146 -0
- package/dist/ui/primitives/drawer.js.map +1 -0
- package/dist/ui/primitives/drawer.mjs +103 -0
- package/dist/ui/primitives/drawer.mjs.map +1 -0
- package/dist/ui/primitives/input.d.mts +5 -0
- package/dist/ui/primitives/input.d.ts +5 -0
- package/dist/ui/primitives/input.js +46 -0
- package/dist/ui/primitives/input.js.map +1 -0
- package/dist/ui/primitives/input.mjs +22 -0
- package/dist/ui/primitives/input.mjs.map +1 -0
- package/dist/ui/primitives/item.d.mts +27 -0
- package/dist/ui/primitives/item.d.ts +27 -0
- package/dist/ui/primitives/item.js +221 -0
- package/dist/ui/primitives/item.js.map +1 -0
- package/dist/ui/primitives/item.mjs +188 -0
- package/dist/ui/primitives/item.mjs.map +1 -0
- package/dist/ui/primitives/kbd.d.mts +15 -0
- package/dist/ui/primitives/kbd.d.ts +15 -0
- package/dist/ui/primitives/kbd.js +45 -0
- package/dist/ui/primitives/kbd.js.map +1 -0
- package/dist/ui/primitives/kbd.mjs +21 -0
- package/dist/ui/primitives/kbd.mjs.map +1 -0
- package/dist/ui/primitives/label.d.mts +6 -0
- package/dist/ui/primitives/label.d.ts +6 -0
- package/dist/ui/primitives/label.js +55 -0
- package/dist/ui/primitives/label.js.map +1 -0
- package/dist/ui/primitives/label.mjs +21 -0
- package/dist/ui/primitives/label.mjs.map +1 -0
- package/dist/ui/primitives/resizable.d.mts +10 -0
- package/dist/ui/primitives/resizable.d.ts +10 -0
- package/dist/ui/primitives/resizable.js +68 -0
- package/dist/ui/primitives/resizable.js.map +1 -0
- package/dist/ui/primitives/resizable.mjs +42 -0
- package/dist/ui/primitives/resizable.mjs.map +1 -0
- package/dist/ui/primitives/save-status.d.mts +31 -0
- package/dist/ui/primitives/save-status.d.ts +31 -0
- package/dist/ui/primitives/save-status.js +150 -0
- package/dist/ui/primitives/save-status.js.map +1 -0
- package/dist/ui/primitives/save-status.mjs +126 -0
- package/dist/ui/primitives/save-status.mjs.map +1 -0
- package/dist/ui/primitives/separator.d.mts +6 -0
- package/dist/ui/primitives/separator.d.ts +6 -0
- package/dist/ui/primitives/separator.js +62 -0
- package/dist/ui/primitives/separator.js.map +1 -0
- package/dist/ui/primitives/separator.mjs +28 -0
- package/dist/ui/primitives/separator.mjs.map +1 -0
- package/dist/ui/primitives/sheet.d.mts +16 -0
- package/dist/ui/primitives/sheet.d.ts +16 -0
- package/dist/ui/primitives/sheet.js +170 -0
- package/dist/ui/primitives/sheet.js.map +1 -0
- package/dist/ui/primitives/sheet.mjs +129 -0
- package/dist/ui/primitives/sheet.mjs.map +1 -0
- package/dist/ui/primitives/sidebar.d.mts +74 -0
- package/dist/ui/primitives/sidebar.d.ts +74 -0
- package/dist/ui/primitives/sidebar.js +697 -0
- package/dist/ui/primitives/sidebar.js.map +1 -0
- package/dist/ui/primitives/sidebar.mjs +651 -0
- package/dist/ui/primitives/sidebar.mjs.map +1 -0
- package/dist/ui/primitives/skeleton.d.mts +5 -0
- package/dist/ui/primitives/skeleton.d.ts +5 -0
- package/dist/ui/primitives/skeleton.js +40 -0
- package/dist/ui/primitives/skeleton.js.map +1 -0
- package/dist/ui/primitives/skeleton.mjs +16 -0
- package/dist/ui/primitives/skeleton.mjs.map +1 -0
- package/dist/ui/primitives/slider.d.mts +20 -0
- package/dist/ui/primitives/slider.d.ts +20 -0
- package/dist/ui/primitives/slider.js +112 -0
- package/dist/ui/primitives/slider.js.map +1 -0
- package/dist/ui/primitives/slider.mjs +78 -0
- package/dist/ui/primitives/slider.mjs.map +1 -0
- package/dist/ui/primitives/sortable.d.mts +50 -0
- package/dist/ui/primitives/sortable.d.ts +50 -0
- package/dist/ui/primitives/sortable.js +456 -0
- package/dist/ui/primitives/sortable.js.map +1 -0
- package/dist/ui/primitives/sortable.mjs +435 -0
- package/dist/ui/primitives/sortable.mjs.map +1 -0
- package/dist/ui/primitives/switch.d.mts +6 -0
- package/dist/ui/primitives/switch.d.ts +6 -0
- package/dist/ui/primitives/switch.js +67 -0
- package/dist/ui/primitives/switch.js.map +1 -0
- package/dist/ui/primitives/switch.mjs +33 -0
- package/dist/ui/primitives/switch.mjs.map +1 -0
- package/dist/ui/primitives/table.d.mts +12 -0
- package/dist/ui/primitives/table.d.ts +12 -0
- package/dist/ui/primitives/table.js +130 -0
- package/dist/ui/primitives/table.js.map +1 -0
- package/dist/ui/primitives/table.mjs +89 -0
- package/dist/ui/primitives/table.mjs.map +1 -0
- package/dist/ui/primitives/tabs.d.mts +9 -0
- package/dist/ui/primitives/tabs.d.ts +9 -0
- package/dist/ui/primitives/tabs.js +86 -0
- package/dist/ui/primitives/tabs.js.map +1 -0
- package/dist/ui/primitives/tabs.mjs +49 -0
- package/dist/ui/primitives/tabs.mjs.map +1 -0
- package/dist/ui/primitives/textarea.d.mts +5 -0
- package/dist/ui/primitives/textarea.d.ts +5 -0
- package/dist/ui/primitives/textarea.js +43 -0
- package/dist/ui/primitives/textarea.js.map +1 -0
- package/dist/ui/primitives/textarea.mjs +19 -0
- package/dist/ui/primitives/textarea.mjs.map +1 -0
- package/dist/ui/primitives/tooltip.d.mts +9 -0
- package/dist/ui/primitives/tooltip.d.ts +9 -0
- package/dist/ui/primitives/tooltip.js +94 -0
- package/dist/ui/primitives/tooltip.js.map +1 -0
- package/dist/ui/primitives/tooltip.mjs +57 -0
- package/dist/ui/primitives/tooltip.mjs.map +1 -0
- package/docs/agents.md +72 -29
- package/docs/api/README.md +6 -3
- package/docs/api/appObjects.d.ts +1 -1
- package/docs/api/appObjects.md +1 -1
- package/docs/api/by-path.md +29 -0
- package/docs/api/enrichment.d.ts +18 -0
- package/docs/api/enrichment.md +25 -4
- package/docs/api/objects.d.ts +72 -5
- package/docs/api/objects.md +84 -7
- package/docs/api/processLists.d.ts +247 -0
- package/docs/api/processLists.md +409 -0
- package/docs/api/reports.d.ts +476 -0
- package/docs/api/reports.md +539 -0
- package/docs/api/revenueLifecycle.d.ts +3 -1
- package/docs/api/revenueLifecycle.md +12 -2
- package/docs/api/scheduleBuy.d.ts +12 -8
- package/docs/api/scheduleBuy.md +13 -10
- package/docs/api/seo.d.ts +407 -4
- package/docs/api/seo.md +506 -2
- package/docs/api/workflows.md +46 -2
- package/docs/api/workspaceBackup.d.ts +324 -0
- package/docs/api/workspaceBackup.md +427 -0
- package/package.json +174 -5
- package/stacks/6sense.json +46 -0
- package/stacks/README.md +20 -0
- package/stacks/apollo.json +128 -0
- package/stacks/clay.json +59 -0
- package/stacks/gong.json +72 -0
- package/stacks/hubspot.json +162 -0
- package/stacks/intercom.json +53 -0
- package/stacks/mailchimp.json +71 -0
- package/stacks/outreach.json +86 -0
- package/stacks/salesforce.json +94 -0
- package/stacks/stack.schema.json +32 -0
- package/stacks/starter.json +22 -0
- package/styles/styles.css +2 -0
- package/styles/theme.css +181 -0
- package/styles/tokens.css +284 -0
- package/templates/next-app/README.md.tmpl +35 -0
- package/templates/next-app/_pages/redirect-page.tsx.tmpl +5 -0
- package/templates/next-app/_pages/route-page.tsx.tmpl +9 -0
- package/templates/next-app/app/globals.css.tmpl +8 -0
- package/templates/next-app/app/layout.tsx.tmpl +19 -0
- package/templates/next-app/components/app-shell.tsx.tmpl +34 -0
- package/templates/next-app/dot-env.local.example.tmpl +6 -0
- package/templates/next-app/dot-gitignore.tmpl +7 -0
- package/templates/next-app/lib/nav.ts.tmpl +2 -0
- package/templates/next-app/next.config.mjs.tmpl +4 -0
- package/templates/next-app/package.json.tmpl +25 -0
- package/templates/next-app/postcss.config.mjs.tmpl +4 -0
- 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
|
-
|
|
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`
|
package/docs/api/workflows.md
CHANGED
|
@@ -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).
|