@graph8/sdk 0.370.0 → 0.373.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 +19 -0
- package/blocks/_foundation/README.md +14 -0
- package/blocks/_foundation/block.json +44 -0
- package/blocks/_foundation/components/confirm-spend-dialog.tsx +15 -8
- package/blocks/_foundation/components/empty-state.tsx +5 -2
- package/blocks/_foundation/components/list-select.tsx +112 -0
- package/blocks/_foundation/components/paging-notices.tsx +55 -0
- package/blocks/_foundation/components/screen/detail-panel.tsx +2 -1
- package/blocks/_foundation/components/screen/filter-controls.tsx +92 -0
- package/blocks/_foundation/components/screen/index.ts +1 -0
- package/blocks/_foundation/components/screen/split-view.tsx +1 -1
- package/blocks/_foundation/hooks/use-all-pages.ts +54 -0
- package/blocks/_foundation/hooks/use-load-more-list.ts +61 -0
- package/blocks/_foundation/hooks/use-url-filters.ts +93 -0
- package/blocks/_foundation/lib/paging.ts +57 -0
- package/blocks/_foundation/lib/use-debounced-value.ts +13 -0
- package/blocks/agents/README.md +81 -4
- package/blocks/agents/block.json +311 -2
- package/blocks/agents/components/agent-activity.tsx +112 -0
- package/blocks/agents/components/agent-approvals.tsx +135 -0
- package/blocks/agents/components/agent-builder.tsx +17 -3
- package/blocks/agents/components/agent-conversations.tsx +143 -0
- package/blocks/agents/components/agent-knowledge-panel.tsx +2 -2
- package/blocks/agents/components/agent-operators.tsx +164 -0
- package/blocks/agents/components/agent-run-detail.tsx +20 -3
- package/blocks/agents/components/agent-runs.tsx +3 -3
- package/blocks/agents/components/agent-skills-panel.tsx +7 -7
- package/blocks/agents/components/agent-test-history.tsx +121 -0
- package/blocks/agents/components/agents-screen.tsx +53 -11
- package/blocks/agents/components/assistant-sessions.tsx +150 -0
- package/blocks/agents/components/duplicate-agent-button.tsx +42 -0
- package/blocks/agents/components/from-template-button.tsx +65 -0
- package/blocks/agents/components/knowledge-browser.tsx +107 -0
- package/blocks/agents/components/knowledge-detail.tsx +156 -0
- package/blocks/agents/components/knowledge-form.tsx +69 -0
- package/blocks/agents/components/name-dialog.tsx +32 -0
- package/blocks/agents/components/receptionist-button.tsx +46 -0
- package/blocks/agents/components/save-as-template-button.tsx +32 -0
- package/blocks/agents/components/skill-editor.tsx +147 -0
- package/blocks/agents/components/skill-library.tsx +111 -0
- package/blocks/agents/lib/agent-types.ts +7 -1
- package/blocks/agents/lib/facts.tsx +13 -0
- package/blocks/agents/lib/knowledge-utils.ts +49 -0
- package/blocks/agents/lib/load-more.tsx +141 -0
- package/blocks/agents/lib/skill-utils.ts +91 -0
- package/blocks/agents/recipes/create-agent-and-attach-skill.ts +1 -1
- package/blocks/analytics/components/analytics-screen.tsx +16 -3
- package/blocks/analytics/components/kpi-tiles.tsx +1 -1
- package/blocks/analytics/components/report-builder.tsx +15 -2
- package/blocks/appointments/README.md +6 -0
- package/blocks/appointments/block.json +27 -0
- package/blocks/appointments/components/booking-page.tsx +2 -2
- package/blocks/appointments/components/meeting-contact-links.tsx +49 -0
- package/blocks/appointments/components/meeting-detail.tsx +2 -2
- package/blocks/appointments/components/meeting-list.tsx +29 -13
- package/blocks/appointments/components/record-meetings-tab.tsx +92 -0
- package/blocks/campaigns/components/campaign-assets.tsx +1 -1
- package/blocks/campaigns/components/campaign-launch-step.tsx +16 -11
- package/blocks/campaigns/components/campaign-metrics.tsx +1 -1
- package/blocks/campaigns/components/campaign-wizard.tsx +10 -5
- package/blocks/campaigns/components/icp-detail.tsx +11 -2
- package/blocks/campaigns/components/icp-editor.tsx +8 -3
- package/blocks/campaigns/components/persona-detail.tsx +11 -2
- package/blocks/campaigns/components/persona-editor.tsx +6 -1
- package/blocks/campaigns/lib/campaigns-utils.ts +4 -4
- package/blocks/coach/components/call-scorecard.tsx +7 -7
- package/blocks/company-intelligence/README.md +132 -0
- package/blocks/company-intelligence/block.json +318 -0
- package/blocks/company-intelligence/components/company-intelligence-screen.tsx +114 -0
- package/blocks/company-intelligence/components/company-intelligence-tab.tsx +88 -0
- package/blocks/company-intelligence/components/company-profile.tsx +68 -0
- package/blocks/company-intelligence/components/intelligence-sources.tsx +63 -0
- package/blocks/company-intelligence/components/report-detail.tsx +189 -0
- package/blocks/company-intelligence/components/research-reports.tsx +136 -0
- package/blocks/company-intelligence/components/research-run.tsx +161 -0
- package/blocks/company-intelligence/components/source-detail.tsx +117 -0
- package/blocks/company-intelligence/components/source-view.tsx +274 -0
- package/blocks/company-intelligence/components/wiki-document-detail.tsx +116 -0
- package/blocks/company-intelligence/components/wiki-documents.tsx +66 -0
- package/blocks/company-intelligence/hooks/use-intelligence.ts +173 -0
- package/blocks/company-intelligence/lib/intelligence-types.ts +230 -0
- package/blocks/company-intelligence/lib/safe-markdown.tsx +150 -0
- package/blocks/company-intelligence/recipes/read-competitors-and-news.ts +33 -0
- package/blocks/company-intelligence/recipes/research-your-website.ts +43 -0
- package/blocks/company-intelligence/recipes/write-the-research-reports.ts +54 -0
- package/blocks/copilot/components/copilot-memory.tsx +6 -2
- package/blocks/copilot/components/copilot-panel.tsx +1 -1
- package/blocks/copilot/components/copilot-team-chat.tsx +6 -1
- package/blocks/crm/README.md +6 -0
- package/blocks/crm/block.json +53 -4
- package/blocks/crm/components/companies-screen.tsx +23 -9
- package/blocks/crm/components/company-detail.tsx +2 -2
- package/blocks/crm/components/contact-detail.tsx +4 -4
- package/blocks/crm/components/contact-lookup-link.tsx +44 -0
- package/blocks/crm/components/contacts-screen.tsx +31 -13
- package/blocks/crm/components/dedupe-review.tsx +6 -1
- package/blocks/crm/components/import-wizard.tsx +3 -7
- package/blocks/crm/components/list-select.tsx +20 -0
- package/blocks/crm/components/record-engagement-tab.tsx +103 -0
- package/blocks/crm/components/record-form.tsx +1 -1
- package/blocks/crm/components/tasks-screen.tsx +35 -15
- package/blocks/crm/hooks/use-all-lists.ts +18 -0
- package/blocks/crm/hooks/use-page-query.ts +3 -1
- package/blocks/crm/lib/crm-types.ts +14 -0
- package/blocks/crm/lib/read-lists.ts +16 -0
- package/blocks/deals/README.md +24 -6
- package/blocks/deals/block.json +151 -2
- package/blocks/deals/components/close-deal-dialog.tsx +169 -0
- package/blocks/deals/components/deal-contacts-editor.tsx +134 -0
- package/blocks/deals/components/deal-detail.tsx +2 -2
- package/blocks/deals/components/deal-filters.tsx +65 -0
- package/blocks/deals/components/deal-line-items.tsx +120 -0
- package/blocks/deals/components/deal-notes-tab.tsx +97 -0
- package/blocks/deals/components/deal-related.tsx +30 -9
- package/blocks/deals/components/deal-tasks-tab.tsx +88 -0
- package/blocks/deals/components/deals-screen.tsx +57 -22
- package/blocks/deals/components/forecast-view.tsx +4 -4
- package/blocks/deals/components/pipeline-board.tsx +8 -6
- package/blocks/deals/components/pipeline-editor.tsx +132 -0
- package/blocks/deals/components/record-deals-tab.tsx +62 -0
- package/blocks/deals/components/stage-editor.tsx +1 -1
- package/blocks/deals/hooks/use-pipeline-deals.ts +17 -4
- package/blocks/deals/lib/deal-extras.ts +156 -0
- package/blocks/dialer/README.md +14 -5
- package/blocks/dialer/block.json +17 -2
- package/blocks/dialer/components/call-contact-button.tsx +26 -9
- package/blocks/dialer/components/call-log-screen.tsx +4 -1
- package/blocks/dialer/components/call-log.tsx +16 -4
- package/blocks/dialer/components/call-queue.tsx +3 -3
- package/blocks/dialer/components/dialer-screen.tsx +69 -27
- package/blocks/dialer/components/disposition-panel.tsx +1 -1
- package/blocks/dialer/components/record-calls-tab.tsx +101 -0
- package/blocks/dialer/components/session-start-form.tsx +58 -11
- package/blocks/dialer/components/softphone.tsx +1 -1
- package/blocks/enrichment/README.md +16 -6
- package/blocks/enrichment/block.json +19 -7
- package/blocks/enrichment/components/bulk-enrich-panel.tsx +76 -27
- package/blocks/enrichment/components/email-verify-badge.tsx +3 -3
- package/blocks/enrichment/components/enrich-button.tsx +1 -1
- package/blocks/enrichment/components/enrichment-screen.tsx +70 -17
- package/blocks/enrichment/components/waterfall-config.tsx +27 -7
- package/blocks/enrichment/lib/enrichment-types.ts +39 -0
- package/blocks/enrichment/recipes/bulk-enrich-and-poll.ts +15 -4
- package/blocks/forms/README.md +8 -0
- package/blocks/forms/block.json +107 -0
- package/blocks/forms/components/form-activity.tsx +71 -0
- package/blocks/forms/components/form-backfill.tsx +108 -0
- package/blocks/forms/components/form-builder.tsx +1 -1
- package/blocks/forms/components/form-embed.tsx +1 -1
- package/blocks/forms/components/form-groups.tsx +151 -0
- package/blocks/forms/components/form-mapping-editor.tsx +6 -9
- package/blocks/forms/components/form-route-history.tsx +72 -0
- package/blocks/forms/components/form-saved-views.tsx +81 -0
- package/blocks/forms/components/forms-screen.tsx +51 -17
- package/blocks/forms/components/more-rows.tsx +30 -0
- package/blocks/forms/components/submissions-export.tsx +67 -0
- package/blocks/forms/components/submissions-table.tsx +15 -6
- package/blocks/forms/lib/forms-extra.ts +67 -0
- package/blocks/inbox/README.md +5 -0
- package/blocks/inbox/block.json +15 -0
- package/blocks/inbox/components/record-conversations-tab.tsx +154 -0
- package/blocks/inbox/components/thread-badge.tsx +2 -2
- package/blocks/inbox/components/thread-view.tsx +1 -1
- package/blocks/integrations/README.md +54 -1
- package/blocks/integrations/block.json +189 -15
- package/blocks/integrations/components/ad-accounts.tsx +82 -0
- package/blocks/integrations/components/connection-health.tsx +59 -0
- package/blocks/integrations/components/crm-detail.tsx +20 -1
- package/blocks/integrations/components/crm-records.tsx +103 -0
- package/blocks/integrations/components/field-mappings.tsx +61 -0
- package/blocks/integrations/components/integration-list.tsx +4 -4
- package/blocks/integrations/components/integrations-screen.tsx +20 -3
- package/blocks/integrations/components/migration-panel.tsx +133 -0
- package/blocks/integrations/components/sugarcrm-connect.tsx +95 -0
- package/blocks/integrations/components/sync-status.tsx +6 -6
- package/blocks/integrations/components/sync-triggers.tsx +134 -0
- package/blocks/integrations/components/webhook-detail.tsx +26 -7
- package/blocks/integrations/components/webhook-manager.tsx +30 -17
- package/blocks/integrations/components/workspace-tools.tsx +127 -0
- package/blocks/integrations/lib/crm-utils.ts +39 -0
- package/blocks/integrations/lib/facts.tsx +13 -0
- package/blocks/integrations/lib/integrations-utils.ts +5 -0
- package/blocks/integrations/lib/load-more.tsx +141 -0
- package/blocks/intent/components/account-intent-score.tsx +5 -5
- package/blocks/intent/components/intent-feed.tsx +8 -8
- package/blocks/intent/components/intent-keyword-manager.tsx +8 -8
- package/blocks/intent/lib/intent-utils.ts +4 -4
- package/blocks/lifecycle/components/account-related.tsx +8 -1
- package/blocks/lifecycle/components/churn-list.tsx +5 -2
- package/blocks/lifecycle/components/customer-table.tsx +1 -1
- package/blocks/lists/README.md +7 -1
- package/blocks/lists/block.json +31 -3
- package/blocks/lists/components/add-company-people-to-list-button.tsx +73 -0
- package/blocks/lists/components/add-to-list-button.tsx +17 -7
- package/blocks/lists/components/list-picker.tsx +13 -3
- package/blocks/lists/components/list-table.tsx +1 -1
- package/blocks/lists/components/lists-screen.tsx +4 -2
- package/blocks/lists/components/record-lists-tab.tsx +99 -0
- package/blocks/lists/components/suppression-manager.tsx +27 -6
- package/blocks/lists/components/suppressions-screen.tsx +21 -12
- package/blocks/mailboxes/block.json +4 -0
- package/blocks/mailboxes/components/connect-mailbox.tsx +9 -8
- package/blocks/mailboxes/components/domain-detail.tsx +10 -4
- package/blocks/mailboxes/components/domain-purchase.tsx +14 -11
- package/blocks/mailboxes/components/mailbox-detail.tsx +3 -2
- package/blocks/mailboxes/components/mailbox-list.tsx +8 -3
- package/blocks/mailboxes/components/mailboxes-screen.tsx +8 -3
- package/blocks/mailboxes/components/warmup-health.tsx +20 -20
- package/blocks/mailboxes/lib/mailboxes-utils.ts +4 -4
- package/blocks/mailboxes/lib/use-provider-domains.ts +23 -0
- package/blocks/newsletter/README.md +12 -0
- package/blocks/newsletter/block.json +117 -0
- package/blocks/newsletter/components/issue-scheduler.tsx +2 -2
- package/blocks/newsletter/components/issue-versions.tsx +93 -0
- package/blocks/newsletter/components/more-rows.tsx +30 -0
- package/blocks/newsletter/components/newsletter-editor.tsx +1 -1
- package/blocks/newsletter/components/newsletter-list-syncs.tsx +121 -0
- package/blocks/newsletter/components/newsletter-screen.tsx +36 -13
- package/blocks/newsletter/components/newsletter-settings.tsx +211 -0
- package/blocks/newsletter/components/newsletter-stats.tsx +2 -2
- package/blocks/newsletter/components/newsletter-templates.tsx +133 -0
- package/blocks/newsletter/components/subscriber-table.tsx +5 -7
- package/blocks/newsletter/components/subscriber-timeline.tsx +65 -0
- package/blocks/newsletter/lib/newsletter-extra.ts +60 -0
- package/blocks/nurture/components/nurture-builder.tsx +10 -2
- package/blocks/nurture/components/nurture-enroll.tsx +6 -7
- package/blocks/nurture/components/nurture-form.tsx +5 -8
- package/blocks/nurture/components/nurture-screen.tsx +16 -5
- package/blocks/nurture/components/nurture-stats.tsx +5 -4
- package/blocks/objects/README.md +1 -1
- package/blocks/objects/block.json +13 -5
- package/blocks/objects/components/attribute-field-input.tsx +14 -1
- package/blocks/objects/components/object-record-detail.tsx +8 -1
- package/blocks/objects/components/object-schema-editor.tsx +1 -1
- package/blocks/objects/components/record-roles-panel.tsx +15 -5
- package/blocks/pages/README.md +14 -0
- package/blocks/pages/block.json +113 -1
- package/blocks/pages/components/more-rows.tsx +30 -0
- package/blocks/pages/components/page-ai-tools.tsx +196 -0
- package/blocks/pages/components/page-analytics.tsx +176 -0
- package/blocks/pages/components/page-clone.tsx +99 -0
- package/blocks/pages/components/page-domains.tsx +167 -0
- package/blocks/pages/components/page-editor.tsx +1 -1
- package/blocks/pages/components/page-generation-status.tsx +48 -0
- package/blocks/pages/components/page-tracking.tsx +137 -0
- package/blocks/pages/components/pages-screen.tsx +57 -16
- package/blocks/pages/components/seo-report.tsx +6 -1
- package/blocks/pages/lib/studio.ts +7 -0
- package/blocks/phone-numbers/README.md +74 -0
- package/blocks/phone-numbers/block.json +262 -0
- package/blocks/phone-numbers/components/a2p-registration.tsx +230 -0
- package/blocks/phone-numbers/components/assign-number.tsx +104 -0
- package/blocks/phone-numbers/components/number-search.tsx +239 -0
- package/blocks/phone-numbers/components/number-settings.tsx +134 -0
- package/blocks/phone-numbers/components/number-usage.tsx +97 -0
- package/blocks/phone-numbers/components/phone-number-detail.tsx +84 -0
- package/blocks/phone-numbers/components/phone-number-list.tsx +110 -0
- package/blocks/phone-numbers/components/phone-numbers-screen.tsx +201 -0
- package/blocks/phone-numbers/components/register-owned-number.tsx +98 -0
- package/blocks/phone-numbers/components/release-number.tsx +126 -0
- package/blocks/phone-numbers/hooks/use-phone-numbers.ts +58 -0
- package/blocks/phone-numbers/lib/phone-numbers-utils.ts +202 -0
- package/blocks/phone-numbers/recipes/01-search-and-buy-number.ts +49 -0
- package/blocks/phone-numbers/recipes/02-assign-number-to-rep.ts +25 -0
- package/blocks/phone-numbers/recipes/03-audit-numbers.ts +36 -0
- package/blocks/phone-numbers/recipes/04-register-text-messaging.ts +39 -0
- package/blocks/pickers/README.md +23 -0
- package/blocks/pickers/block.json +103 -0
- package/blocks/pickers/components/company-picker.tsx +90 -0
- package/blocks/pickers/components/contact-picker.tsx +131 -0
- package/blocks/pickers/components/member-picker.tsx +99 -0
- package/blocks/pickers/components/search-picker.tsx +98 -0
- package/blocks/pickers/hooks/use-current-member.ts +104 -0
- package/blocks/pickers/hooks/use-picker-pages.ts +73 -0
- package/blocks/pickers/lib/use-debounced.ts +13 -0
- package/blocks/quotes/README.md +13 -0
- package/blocks/quotes/block.json +48 -1
- package/blocks/quotes/components/create-quote-from-deal.tsx +48 -0
- package/blocks/quotes/components/quote-builder.tsx +1 -1
- package/blocks/quotes/components/quote-lifecycle-actions.tsx +146 -0
- package/blocks/quotes/components/quote-list.tsx +5 -3
- package/blocks/quotes/components/quote-related.tsx +3 -2
- package/blocks/quotes/components/quote-viewer.tsx +7 -2
- package/blocks/quotes/components/record-quotes-tab.tsx +90 -0
- package/blocks/radar/components/competitor-battle-card.tsx +1 -1
- package/blocks/radar/components/radar-overview.tsx +4 -4
- package/blocks/radar/components/radar-screen.tsx +2 -2
- package/blocks/sequencer/README.md +6 -0
- package/blocks/sequencer/block.json +28 -1
- package/blocks/sequencer/components/add-to-sequence-button.tsx +82 -0
- package/blocks/sequencer/components/enroll-dialog.tsx +2 -2
- package/blocks/sequencer/components/record-sequences-tab.tsx +126 -0
- package/blocks/sequencer/components/sequence-builder.tsx +19 -20
- package/blocks/sequencer/components/sequence-detail.tsx +4 -2
- package/blocks/sequencer/components/sequence-enrollments.tsx +4 -2
- package/blocks/sequencer/components/sequence-list.tsx +1 -1
- package/blocks/sequencer/components/sequence-stats.tsx +8 -8
- package/blocks/sequencer/components/sequences-screen.tsx +3 -0
- package/blocks/sequencer/components/step-editor.tsx +11 -11
- package/blocks/sequencer/lib/sequencer-utils.ts +5 -5
- package/blocks/social-ads/README.md +8 -0
- package/blocks/social-ads/block.json +137 -4
- package/blocks/social-ads/components/audience-sync-detail.tsx +9 -3
- package/blocks/social-ads/components/audience-sync.tsx +6 -2
- package/blocks/social-ads/components/campaign-ads.tsx +166 -0
- package/blocks/social-ads/components/campaign-detail.tsx +6 -1
- package/blocks/social-ads/components/campaign-editor.tsx +134 -0
- package/blocks/social-ads/components/creative-concepts.tsx +74 -0
- package/blocks/social-ads/components/creative-detail.tsx +6 -1
- package/blocks/social-ads/components/creative-gallery.tsx +20 -2
- package/blocks/social-ads/components/creative-revisions.tsx +57 -0
- package/blocks/social-ads/components/creative-tools.tsx +176 -0
- package/blocks/social-ads/components/post-composer.tsx +4 -2
- package/blocks/social-ads/components/post-detail.tsx +3 -0
- package/blocks/social-ads/components/social-ideas.tsx +64 -0
- package/blocks/social-ads/components/social-performance.tsx +80 -0
- package/blocks/social-ads/components/social-screen.tsx +33 -6
- package/blocks/social-ads/lib/ads-extra.ts +67 -0
- package/blocks/surveys/README.md +91 -0
- package/blocks/surveys/block.json +299 -0
- package/blocks/surveys/components/account-nps.tsx +69 -0
- package/blocks/surveys/components/contact-survey-history.tsx +52 -0
- package/blocks/surveys/components/org-summary.tsx +82 -0
- package/blocks/surveys/components/sending-domains.tsx +113 -0
- package/blocks/surveys/components/survey-form.tsx +126 -0
- package/blocks/surveys/components/survey-responses.tsx +145 -0
- package/blocks/surveys/components/survey-results.tsx +72 -0
- package/blocks/surveys/components/survey-send-history.tsx +58 -0
- package/blocks/surveys/components/survey-send.tsx +162 -0
- package/blocks/surveys/components/survey-triggers.tsx +166 -0
- package/blocks/surveys/components/surveys-screen.tsx +234 -0
- package/blocks/surveys/lib/surveys-types.ts +228 -0
- package/blocks/surveys/recipes/create-an-nps-survey.ts +22 -0
- package/blocks/surveys/recipes/send-a-survey-and-follow-it.ts +27 -0
- package/blocks/surveys/recipes/survey-score-report.ts +27 -0
- package/blocks/visitors/components/snippet-install.tsx +18 -9
- package/blocks/visitors/components/traffic-chart.tsx +4 -4
- package/blocks/visitors/components/visitor-company-card.tsx +24 -14
- package/blocks/visitors/components/visitor-feed.tsx +5 -5
- package/blocks/webchat/components/chat-widget-config.tsx +1 -1
- package/blocks/webchat/components/conversation-list.tsx +1 -1
- package/blocks/workbench/components/column-recipe-editor.tsx +1 -1
- package/blocks/workbench/components/run-progress.tsx +1 -1
- package/blocks/workbench/components/workbench-grid.tsx +1 -1
- package/blocks/workbench/components/workbench-screen.tsx +15 -5
- package/blocks/workbench/components/workbench-table-list.tsx +14 -2
- package/blocks/workflows/components/workflow-editor.tsx +1 -1
- package/dist/cli.js +536 -392
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.browser.mjs +1 -1
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react.browser.js +1 -1
- package/dist/react.browser.js.map +1 -1
- package/dist/react.browser.mjs +1 -1
- package/dist/react.browser.mjs.map +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +1 -1
- package/dist/react.mjs.map +1 -1
- package/dist/types/blocks/brand.d.ts +11 -2
- package/dist/types/blocks/create.d.ts +7 -3
- package/dist/types/blocks/doctor.d.ts +1 -0
- package/dist/types/blocks/flows.d.ts +7 -1
- package/dist/types/blocks/orgBrand.d.ts +34 -0
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/version.d.ts +2 -2
- package/docs/api/desk.d.ts +2 -2
- package/docs/api/desk.md +3 -3
- package/package.json +1 -1
- package/stacks/6sense/pages/companies.tsx.tmpl +21 -0
- package/stacks/6sense/pages/contacts.tsx.tmpl +19 -0
- package/stacks/6sense/pages/tasks.tsx.tmpl +19 -0
- package/stacks/6sense.json +17 -4
- package/stacks/apollo/pages/calls.tsx.tmpl +23 -0
- package/stacks/apollo/pages/companies.tsx.tmpl +19 -36
- package/stacks/apollo/pages/contacts.tsx.tmpl +29 -95
- package/stacks/apollo/pages/deals.tsx.tmpl +17 -0
- package/stacks/apollo/pages/inbox-contact.tsx.tmpl +13 -0
- package/stacks/apollo/pages/lists.tsx.tmpl +12 -0
- package/stacks/apollo/pages/meetings.tsx.tmpl +13 -0
- package/stacks/apollo/pages/sequences.tsx.tmpl +12 -0
- package/stacks/apollo/pages/tasks.tsx.tmpl +20 -0
- package/stacks/apollo.json +36 -8
- package/stacks/calendly/pages/companies.tsx.tmpl +19 -0
- package/stacks/calendly/pages/contacts.tsx.tmpl +21 -0
- package/stacks/calendly/pages/meetings.tsx.tmpl +13 -0
- package/stacks/calendly/pages/tasks.tsx.tmpl +19 -0
- package/stacks/calendly.json +8 -4
- package/stacks/clay/pages/companies.tsx.tmpl +17 -1
- package/stacks/clay/pages/contacts.tsx.tmpl +12 -0
- package/stacks/clay/pages/lists.tsx.tmpl +12 -0
- package/stacks/clay/pages/tasks.tsx.tmpl +19 -0
- package/stacks/clay.json +16 -3
- package/stacks/gong/pages/calls.tsx.tmpl +23 -0
- package/stacks/gong/pages/companies.tsx.tmpl +22 -0
- package/stacks/gong/pages/contacts.tsx.tmpl +32 -0
- package/stacks/gong/pages/lists.tsx.tmpl +12 -0
- package/stacks/gong/pages/meetings.tsx.tmpl +13 -0
- package/stacks/gong/pages/tasks.tsx.tmpl +19 -0
- package/stacks/gong.json +23 -6
- package/stacks/hootsuite/pages/companies.tsx.tmpl +22 -0
- package/stacks/hootsuite/pages/contacts.tsx.tmpl +28 -0
- package/stacks/hootsuite/pages/lists.tsx.tmpl +12 -0
- package/stacks/hootsuite/pages/tasks.tsx.tmpl +19 -0
- package/stacks/hootsuite.json +9 -4
- package/stacks/hubspot/pages/companies.tsx.tmpl +14 -35
- package/stacks/hubspot/pages/contacts.tsx.tmpl +29 -95
- package/stacks/hubspot/pages/deals.tsx.tmpl +10 -1
- package/stacks/hubspot/pages/inbox.tsx.tmpl +12 -1
- package/stacks/hubspot/pages/lifecycle.tsx.tmpl +23 -0
- package/stacks/hubspot/pages/lists.tsx.tmpl +12 -0
- package/stacks/hubspot/pages/meetings.tsx.tmpl +13 -0
- package/stacks/hubspot/pages/sequences.tsx.tmpl +12 -0
- package/stacks/hubspot/pages/tasks.tsx.tmpl +20 -0
- package/stacks/hubspot.json +21 -5
- package/stacks/intercom/pages/companies.tsx.tmpl +19 -0
- package/stacks/intercom/pages/contacts.tsx.tmpl +21 -0
- package/stacks/intercom/pages/inbox-contact.tsx.tmpl +13 -0
- package/stacks/intercom/pages/tasks.tsx.tmpl +19 -0
- package/stacks/intercom.json +8 -4
- package/stacks/mailchimp/pages/companies.tsx.tmpl +22 -0
- package/stacks/mailchimp/pages/contacts.tsx.tmpl +28 -0
- package/stacks/mailchimp/pages/lists.tsx.tmpl +12 -0
- package/stacks/mailchimp/pages/tasks.tsx.tmpl +19 -0
- package/stacks/mailchimp.json +20 -5
- package/stacks/outreach/pages/calls.tsx.tmpl +23 -0
- package/stacks/outreach/pages/companies.tsx.tmpl +22 -0
- package/stacks/outreach/pages/contacts.tsx.tmpl +27 -66
- package/stacks/outreach/pages/inbox-contact.tsx.tmpl +13 -0
- package/stacks/outreach/pages/lists.tsx.tmpl +12 -0
- package/stacks/outreach/pages/meetings.tsx.tmpl +13 -0
- package/stacks/outreach/pages/sequences.tsx.tmpl +12 -0
- package/stacks/outreach/pages/tasks.tsx.tmpl +19 -0
- package/stacks/outreach.json +25 -7
- package/stacks/pipedrive/pages/companies.tsx.tmpl +11 -35
- package/stacks/pipedrive/pages/contacts.tsx.tmpl +15 -35
- package/stacks/pipedrive/pages/deals.tsx.tmpl +10 -1
- package/stacks/pipedrive/pages/inbox.tsx.tmpl +12 -1
- package/stacks/pipedrive/pages/meetings.tsx.tmpl +13 -0
- package/stacks/pipedrive/pages/tasks.tsx.tmpl +20 -0
- package/stacks/pipedrive.json +4 -2
- package/stacks/salesforce/pages/companies.tsx.tmpl +14 -35
- package/stacks/salesforce/pages/contacts.tsx.tmpl +20 -35
- package/stacks/salesforce/pages/deals.tsx.tmpl +10 -1
- package/stacks/salesforce/pages/lifecycle.tsx.tmpl +23 -0
- package/stacks/salesforce/pages/lists.tsx.tmpl +12 -0
- package/stacks/salesforce/pages/tasks.tsx.tmpl +20 -0
- package/stacks/salesforce.json +7 -3
- package/stacks/zoominfo/pages/companies.tsx.tmpl +17 -1
- package/stacks/zoominfo/pages/contacts.tsx.tmpl +12 -0
- package/stacks/zoominfo/pages/lists.tsx.tmpl +12 -0
- package/stacks/zoominfo/pages/tasks.tsx.tmpl +19 -0
- package/stacks/zoominfo.json +16 -3
- package/styles/styles.css +1 -1
- package/templates/next-app/app/globals.css.tmpl +349 -64
- package/templates/next-app/components/app-shell.tsx.tmpl +6 -0
- package/templates/next-app/components/shell/quick-jump.tsx.tmpl +4 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useUrlFilters: the filter state of a list screen, kept in the URL so a filtered view survives reload, Back and sharing.
|
|
5
|
+
*
|
|
6
|
+
* const f = useUrlFilters(["email", "city"] as const, { prefix: "c_" });
|
|
7
|
+
* <input value={f.draft.email} onChange={(e) => f.set("email", e.target.value)} />
|
|
8
|
+
* g8Get("/contacts", { page, ...f.query }); // f.query holds only the filters that are set, debounced
|
|
9
|
+
*
|
|
10
|
+
* Typing is local (`draft`, instant); the debounced `filters` are what the list reads, and they are written to the URL as
|
|
11
|
+
* `<prefix><key>=...`. A URL that already carries filters is the starting value, with no flash of an unfiltered list and
|
|
12
|
+
* no wipe at mount. It is read through `useSyncExternalStore` (like useUrlState), so it is hydration-safe: the server and
|
|
13
|
+
* the first hydration render both see empty filters, React then re-renders with the URL's. In that first hydration render
|
|
14
|
+
* `ready` is false: hold the list read until it is true (`enabled: filters.ready`), so no unfiltered read goes out. On a
|
|
15
|
+
* client-only render `ready` is true from the start. `clear()` empties everything. Params of other hooks (id, view, tab)
|
|
16
|
+
* are never touched.
|
|
17
|
+
*
|
|
18
|
+
* SDK operations: none.
|
|
19
|
+
*/
|
|
20
|
+
import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
21
|
+
import { readUrlParam, writeUrlParam } from "./use-url-state";
|
|
22
|
+
|
|
23
|
+
export interface UseUrlFiltersOptions {
|
|
24
|
+
/** URL param prefix, so two screens on one page do not share names. Default "". */
|
|
25
|
+
prefix?: string;
|
|
26
|
+
/** Milliseconds of quiet typing before the list reads the new filters. Default 300. */
|
|
27
|
+
debounceMs?: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface UseUrlFilters<K extends string> {
|
|
31
|
+
/** What the inputs show (instant). */
|
|
32
|
+
draft: Record<K, string>;
|
|
33
|
+
/** What the list reads (debounced after an edit). */
|
|
34
|
+
filters: Record<K, string>;
|
|
35
|
+
/** Only the filters that are set, ready to spread into a query. */
|
|
36
|
+
query: Partial<Record<K, string>>;
|
|
37
|
+
set: (key: K, value: string) => void;
|
|
38
|
+
clear: () => void;
|
|
39
|
+
/** Some filter is set (draft). */
|
|
40
|
+
active: boolean;
|
|
41
|
+
/** How many of `keys` are set (draft). */
|
|
42
|
+
count: number;
|
|
43
|
+
/** The URL's filters have been read (false only in the first hydration render): hold the list read until true. */
|
|
44
|
+
ready: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const noSubscribe = (): (() => void) => () => {};
|
|
48
|
+
|
|
49
|
+
export function useUrlFilters<K extends string>(keys: readonly K[], options: UseUrlFiltersOptions = {}): UseUrlFilters<K> {
|
|
50
|
+
const prefix = options.prefix ?? "";
|
|
51
|
+
const ms = options.debounceMs ?? 300;
|
|
52
|
+
const sig = keys.join(",");
|
|
53
|
+
const empty = useCallback((): Record<K, string> => Object.fromEntries(keys.map((k) => [k, ""])) as Record<K, string>, [sig]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
54
|
+
|
|
55
|
+
// The URL's filters as one string, frozen at the first client read. The server (and the first hydration render) sees "".
|
|
56
|
+
const frozen = useRef<string | null>(null);
|
|
57
|
+
const urlSnap = useSyncExternalStore(
|
|
58
|
+
noSubscribe,
|
|
59
|
+
() => (frozen.current ??= JSON.stringify(keys.map((k) => readUrlParam(prefix + k) ?? ""))),
|
|
60
|
+
() => JSON.stringify(keys.map(() => "")),
|
|
61
|
+
);
|
|
62
|
+
const ready = useSyncExternalStore(noSubscribe, () => true, () => false);
|
|
63
|
+
const fromUrl = useMemo(() => {
|
|
64
|
+
const values = JSON.parse(urlSnap) as string[];
|
|
65
|
+
return Object.fromEntries(keys.map((k, i) => [k, values[i] ?? ""])) as Record<K, string>;
|
|
66
|
+
}, [urlSnap, sig]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
67
|
+
|
|
68
|
+
// `edited` is null until the person types: until then the filters ARE the URL's (no debounce lag, nothing to write back).
|
|
69
|
+
const [edited, setEdited] = useState<Record<K, string> | null>(null);
|
|
70
|
+
const [settled, setSettled] = useState<Record<K, string> | null>(null);
|
|
71
|
+
const draft = edited ?? fromUrl;
|
|
72
|
+
const filters = settled ?? fromUrl;
|
|
73
|
+
const latest = useRef(draft);
|
|
74
|
+
latest.current = draft;
|
|
75
|
+
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (edited === null) return;
|
|
78
|
+
const t = setTimeout(() => setSettled(edited), ms);
|
|
79
|
+
return () => clearTimeout(t);
|
|
80
|
+
}, [edited, ms]);
|
|
81
|
+
|
|
82
|
+
// The settled filters are the URL's value; writeUrlParam skips an unchanged value, so mounting writes nothing.
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (!ready) return;
|
|
85
|
+
for (const k of keys) writeUrlParam(prefix + k, filters[k] || null);
|
|
86
|
+
}, [ready, filters]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
87
|
+
|
|
88
|
+
const set = useCallback((key: K, value: string) => setEdited({ ...latest.current, [key]: value }), []);
|
|
89
|
+
const clear = useCallback(() => setEdited(empty()), [empty]);
|
|
90
|
+
const query = Object.fromEntries(keys.filter((k) => filters[k]).map((k) => [k, filters[k]])) as Partial<Record<K, string>>;
|
|
91
|
+
const count = keys.filter((k) => draft[k]).length;
|
|
92
|
+
return { draft, filters, query, set, clear, active: count > 0, count, ready };
|
|
93
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Paging helpers: adapt the API's several paging dialects (`page`, `offset`, `cursor`) to the one shape
|
|
5
|
+
* `usePaginated` loads ("load more" appends the next page). No operation is called here; the caller's component
|
|
6
|
+
* performs and declares the read.
|
|
7
|
+
*
|
|
8
|
+
* const list = usePaginated(byOffset(PAGE, async (offset, signal) => {
|
|
9
|
+
* const env = await g8Get("/landing-pages", { limit: PAGE, offset }, { signal });
|
|
10
|
+
* return { rows: listOf(env.data), hasNext: hasNextOf(env, PAGE) };
|
|
11
|
+
* }), [status]);
|
|
12
|
+
*/
|
|
13
|
+
import type { PaginatedResponse } from "@graph8/sdk";
|
|
14
|
+
|
|
15
|
+
/** One page of rows and whether another follows (omit `hasNext` and a full page is taken to mean "maybe more"). */
|
|
16
|
+
export interface RowsPage<T> {
|
|
17
|
+
rows: T[];
|
|
18
|
+
hasNext?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Fetcher<T> = (cursor: string | undefined, signal: AbortSignal) => Promise<PaginatedResponse<T>>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* `trustHasNext`: when the page says `hasNext: true` believe it even if it carries no rows (a page-number list whose rows
|
|
25
|
+
* were filtered client-side can be empty while the server still has more). Offset lists cannot: an empty page does not
|
|
26
|
+
* advance the offset, so they stop on an empty page.
|
|
27
|
+
*/
|
|
28
|
+
function toResponse<T>(page: RowsPage<T>, size: number, next: number, trustHasNext = false): PaginatedResponse<T> {
|
|
29
|
+
const more = page.hasNext ?? page.rows.length >= size;
|
|
30
|
+
const go = more && (page.rows.length > 0 || (trustHasNext && page.hasNext === true));
|
|
31
|
+
return { data: page.rows, pagination: { next_cursor: go ? String(next) : null } } as unknown as PaginatedResponse<T>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** `?page=N` lists: the cursor carries the next page number. */
|
|
35
|
+
export function byPage<T>(size: number, read: (page: number, signal: AbortSignal) => Promise<RowsPage<T>>): Fetcher<T> {
|
|
36
|
+
return async (cursor, signal) => {
|
|
37
|
+
const page = cursor ? Number(cursor) || 1 : 1;
|
|
38
|
+
return toResponse(await read(page, signal), size, page + 1, true);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** `?offset=N` (or skip) lists: the cursor carries the next offset. */
|
|
43
|
+
export function byOffset<T>(size: number, read: (offset: number, signal: AbortSignal) => Promise<RowsPage<T>>): Fetcher<T> {
|
|
44
|
+
return async (cursor, signal) => {
|
|
45
|
+
const offset = cursor ? Number(cursor) || 0 : 0;
|
|
46
|
+
const page = await read(offset, signal);
|
|
47
|
+
return toResponse(page, size, offset + page.rows.length);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Whether an API envelope says another page follows: `pagination.has_next`, then `next_cursor`, then a full page. */
|
|
52
|
+
export function hasNextOf(env: unknown, size: number, rows?: number): boolean | undefined {
|
|
53
|
+
const p = (env as { pagination?: { has_next?: boolean; next_cursor?: string | null; total?: number; page?: number } } | null)?.pagination;
|
|
54
|
+
if (typeof p?.has_next === "boolean") return p.has_next;
|
|
55
|
+
if (p && "next_cursor" in p && p.next_cursor !== undefined) return Boolean(p.next_cursor);
|
|
56
|
+
return rows === undefined ? undefined : rows >= size;
|
|
57
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
|
|
5
|
+
/** `value`, but only after it has stopped changing for `ms` (foundation-local: the pickers block has its own copy). */
|
|
6
|
+
export function useDebounced<T>(value: T, ms = 250): T {
|
|
7
|
+
const [v, setV] = useState(value);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
const t = setTimeout(() => setV(value), ms);
|
|
10
|
+
return () => clearTimeout(t);
|
|
11
|
+
}, [value, ms]);
|
|
12
|
+
return v;
|
|
13
|
+
}
|
package/blocks/agents/README.md
CHANGED
|
@@ -13,8 +13,15 @@ to it, and follow the runs agents do for you.
|
|
|
13
13
|
**Configure** (persona, voice, knowledge, skills, delete), **Test** (free dry runs, saved cases, the activation gate,
|
|
14
14
|
run a skill live) and **Runs** (this agent's runs).
|
|
15
15
|
- **Runs tab**: every run as a list; opening one (`?run=`) shows `AgentRunDetail` (status, step, credits, times, its approvals to approve or reject, cancel). Start a run here. `&view=full` opens any record as a full page.
|
|
16
|
-
-
|
|
17
|
-
|
|
16
|
+
- **Approvals tab**: everything agents ask permission for: the oversight summary, pending approvals (approve, reject, **request changes** with feedback) and the decided history with each approval's signed receipts.
|
|
17
|
+
- **Skill library tab**: every skill (yours plus graph8's), search, filter by kind and state, open one to edit it (**SkillEditor**: loaded first, only the changed fields are saved, placeholders, template check, enable/disable, delete), write a new LLM or API skill, or start from a template.
|
|
18
|
+
- **Company knowledge tab**: the entries agents draw on. Status strip, meaning-based search or browse by type and lifecycle, open an entry (content, history, sources, related), **New entry**, edit a draft, propose a new version of a published one, verify, deprecate; **Export** downloads everything.
|
|
19
|
+
- **Operators tab**: the autonomous monitors in your workspace: turn each on or off, set the trust dial per skill (off, detect, propose, auto), read findings, activity, health and scorecard.
|
|
20
|
+
- **Assistant tab**: your sessions with the graph8 assistant (list, open, rename, pin, delete, add a note) and **Ask** for one live turn; if the assistant starts a run, open it from here.
|
|
21
|
+
- An open agent also has **Conversations** (its chat history, rename, hand over to a human, delete, and a message box), **Activity** (calls, skill runs, chats, skill performance over 7, 30 or 90 days) and **Test history** (saved cases: edit, delete; every run). Its header has **Duplicate** and **Save as template**; the screen header has **From a template** and **Receptionist**.
|
|
22
|
+
- Lists never stop silently: agents load 100 at a time with "Load more"; conversations, sessions, runs and knowledge say when the API's own maximum is reached.
|
|
23
|
+
- Uploading documents, running a skill, starting or cancelling a run, approving, sending a chat message or an assistant turn, turning an operator or its trust dial up, switching the receptionist, and deleting anything are confirmed
|
|
24
|
+
with `ConfirmSpendDialog` inside the parts. Needs `voice:read|write|delete|run`, `knowledge:read|write`, `workflows:*`.
|
|
18
25
|
- Slots: `renderRowActions`, `renderDetailActions`, `extraDetailTabs`, `toolbarActions`. `AgentBuilder` gained
|
|
19
26
|
`hideList`; `AgentRuns` gained `selectedId`, `onSelectRun`, `hideDetail`, `refreshKey`; new `AgentRunDetail`.
|
|
20
27
|
|
|
@@ -29,6 +36,16 @@ Install: `npx @graph8/sdk add agents` (installs `foundation` first).
|
|
|
29
36
|
| `AgentSkillsPanel` | Attach / detach skills, write a new LLM skill | `agentId`, `onChanged` |
|
|
30
37
|
| `AgentTestConsole` | Free dry runs, saved cases, regression sweep, the activation gate; run an attached skill live | `agentId` |
|
|
31
38
|
| `AgentRuns` | Start a run, follow it (polled), cancel it, decide its approvals | `agentId`, `pageSize`, `pollMs` |
|
|
39
|
+
| `AgentRunDetail` | One run in full, its approvals, cancel, and **steer** it with an instruction while it is live | `runId`, `pollMs`, `onChanged` |
|
|
40
|
+
| `AgentActivity` | An agent's calls, skill runs, workflow runs, chats and skill performance | `agentId` |
|
|
41
|
+
| `AgentConversations` | An agent's chat history: open, rename, hand over to a human, delete, message it (billable) | `agentId`, `contactId` |
|
|
42
|
+
| `AgentTestHistory` | Saved test cases (edit, delete) and every run | `agentId` |
|
|
43
|
+
| `DuplicateAgentButton`, `SaveAsTemplateButton`, `FromTemplateButton`, `ReceptionistButton` | Copy an agent, keep it as a template, start from a template, set up the receptionist | `agent`, `onDuplicated` / `onCreated` |
|
|
44
|
+
| `SkillLibrary`, `SkillEditor` | Every skill in one list, and create / edit / delete one | `target`, `onClose`, `onChanged` |
|
|
45
|
+
| `KnowledgeBrowser`, `KnowledgeDetail`, `KnowledgeForm` | Company knowledge: browse, search, read, author, amend, verify, deprecate | `conceptId`, `mode`, `onChanged` |
|
|
46
|
+
| `AgentApprovals` | The approvals inbox with history and receipts | `onOpenRun` |
|
|
47
|
+
| `AgentOperators` | Autonomous operators: on/off, trust dials, findings, activity, health, scorecard | none |
|
|
48
|
+
| `AssistantSessions` | Sessions with the graph8 assistant | `onOpenRun` |
|
|
32
49
|
|
|
33
50
|
## The flow, with the ids that pass between steps
|
|
34
51
|
|
|
@@ -39,7 +56,7 @@ Install: `npx @graph8/sdk add agents` (installs `foundation` first).
|
|
|
39
56
|
3. **Knowledge**: `POST /voice/agents/{agent_id}/documents/upload` (multipart field `files`, 5 MiB total per upload through the proxy,
|
|
40
57
|
billable) and `GET .../documents`. `use_company_knowledge` is a plain field on the agent; company
|
|
41
58
|
knowledge itself is read with `GET /knowledge/search?query=`.
|
|
42
|
-
4. **Skills**: `POST /skills { name, runtime_type: "llm", llm_config: {
|
|
59
|
+
4. **Skills**: `POST /skills { name, runtime_type: "llm", llm_config: { model, prompt_template } }` (voice requires `prompt_template`) returns an
|
|
43
60
|
`action_id`; `POST /voice/agents/{agent_id}/skills { action_ids }` attaches it. Models come from
|
|
44
61
|
`GET /skills/models`.
|
|
45
62
|
5. **Test**: `POST /voice/agents/{agent_id}/test { input_message | test_case_id, channel, assertion_type,
|
|
@@ -77,13 +94,15 @@ export function AgentStudio() {
|
|
|
77
94
|
through `ConfirmSpendDialog`.
|
|
78
95
|
- Uploading documents is `billable` (they are embedded with a paid model): the dialog shows the file count
|
|
79
96
|
and an estimate (`creditsPerFile`, default 5; there is no balance or price read, so it is an estimate).
|
|
97
|
+
- Sending a chat message to an agent and asking the assistant are `billable` (they run a model and may run skills or start a job). Turning an operator on and raising a trust dial are `billable` (they start work that proceeds on its own).
|
|
98
|
+
- Duplicating, saving a template, renaming, editing a skill or a test case, writing knowledge and verifying are writes (free). Deprecating a knowledge entry, deleting a skill, a conversation, a session or a test case are `destructive`. Switching the receptionist on or off and approving are confirmed as `external`.
|
|
80
99
|
- Running a skill live is `external` (it may call an API or message someone). Starting a run is a write that
|
|
81
100
|
spends credits as it works, so it is confirmed as `billable`. Approving an action is confirmed as `external`.
|
|
82
101
|
|
|
83
102
|
## Prerequisites
|
|
84
103
|
|
|
85
104
|
- `foundation-installed` (app): the proxy `allowedPrefixes` include `voice`, `skills`, `knowledge`, `agent`.
|
|
86
|
-
- `api-key-scopes` (api): `voice:read|write|delete`, `knowledge:read`, `workflows:read|write|run|delete`.
|
|
105
|
+
- `api-key-scopes` (api): `voice:read|write|delete|run`, `knowledge:read|write`, `workflows:read|write|run|delete`.
|
|
87
106
|
- Agents that place calls need a phone number and a dialer session: see the `dialer` block. Nothing here
|
|
88
107
|
places a call.
|
|
89
108
|
|
|
@@ -101,6 +120,8 @@ Ask the person: who may approve agent actions and run skills live (decide it in
|
|
|
101
120
|
|
|
102
121
|
- Runs and approvals that gate a Work coordination action cannot be decided with an API key
|
|
103
122
|
(`COORDINATION_APPROVAL_NOT_DECIDABLE_BY_KEY`): the screen shows the error; decide those in the graph8 app.
|
|
123
|
+
- Not offered on purpose: live voice sessions (they need a WebSocket), the first-run onboarding discovery wizard, the operating model and operator recipients (organisation policy), agent global settings (an open body with no schema), twins (a multipart upload plus LinkedIn lookups, a product decision), and deciding an operator's proposed fix (it changes your data; do it in graph8).
|
|
124
|
+
- Knowledge entries that graph8 generates from your records are read only; only authored entries can be edited, amended, verified or deprecated.
|
|
104
125
|
- No streaming: `AgentRuns` polls every `pollMs` (backoff up to 4x).
|
|
105
126
|
- A dry run never calls a model, so `llm_judge` assertions are saved but skipped.
|
|
106
127
|
|
|
@@ -145,3 +166,59 @@ Ask the person: who may approve agent actions and run skills live (decide it in
|
|
|
145
166
|
| getAgentTestSuiteStatus | GET /voice/agents/{agent_id}/test-suite-status | read | AgentTestConsole |
|
|
146
167
|
| runAllAgentTests | POST /voice/agents/{agent_id}/test/run-all | write | AgentTestConsole |
|
|
147
168
|
| listPresetVoices | GET /voice/voice-library/presets | read | AgentBuilder |
|
|
169
|
+
| cloneAgent | POST /voice/agents/clone | write | DuplicateAgentButton, FromTemplateButton |
|
|
170
|
+
| createAgentSession | POST /agent/sessions | write | AssistantSessions |
|
|
171
|
+
| createAuthoredKnowledge | POST /knowledge/authored | write | KnowledgeForm |
|
|
172
|
+
| createAuthoredKnowledgeAmendment | POST /knowledge/authored/{concept_id}/amendments | write | KnowledgeForm |
|
|
173
|
+
| createFromTemplate | POST /skills/from-template | write | SkillLibrary |
|
|
174
|
+
| deleteAgentSession | DELETE /agent/sessions/{session_id} | destructive | AssistantSessions |
|
|
175
|
+
| deleteAgentTestCase | DELETE /voice/agents/{agent_id}/test-cases/{test_case_id} | destructive | AgentTestHistory |
|
|
176
|
+
| deleteChatAgentConversation | DELETE /voice/chat-agent/conversations/{chat_id} | destructive | AgentConversations |
|
|
177
|
+
| deleteSkill | DELETE /skills/{action_id} | destructive | SkillEditor |
|
|
178
|
+
| deprecateAuthoredKnowledge | POST /knowledge/authored/{concept_id}/deprecate | write | KnowledgeDetail |
|
|
179
|
+
| ensureReceptionistAgent | POST /voice/agents/receptionist | write | ReceptionistButton |
|
|
180
|
+
| exportKnowledge | GET /knowledge/export | read | KnowledgeBrowser |
|
|
181
|
+
| extractVariables | GET /skills/{action_id}/variables | read | SkillEditor |
|
|
182
|
+
| getAgentActivity | GET /voice/agents/{agent_id}/activity | read | AgentActivity |
|
|
183
|
+
| getAgentApprovalReceipts | GET /agent/approvals/{approval_id}/receipts | read | AgentApprovals |
|
|
184
|
+
| getAgentOperatorsSummary | GET /agent/operators/summary | read | AgentOperators |
|
|
185
|
+
| getAgentOversight | GET /agent/oversight | read | AgentApprovals |
|
|
186
|
+
| getAgentSessionState | GET /agent/sessions/{session_id}/state | read | AssistantSessions |
|
|
187
|
+
| getAgentSkillStats | GET /voice/agents/{agent_id}/skill-stats | read | AgentActivity |
|
|
188
|
+
| getChatAgentHistory | POST /voice/chat-agent/history | read | AgentConversations |
|
|
189
|
+
| getKnowledge | GET /knowledge/{concept_id} | read | KnowledgeDetail |
|
|
190
|
+
| getKnowledgeHistory | GET /knowledge/{concept_id}/history | read | KnowledgeDetail |
|
|
191
|
+
| getKnowledgeStatus | GET /knowledge/status | read | KnowledgeBrowser |
|
|
192
|
+
| getSkill | GET /skills/{action_id} | read | SkillEditor |
|
|
193
|
+
| knowledgeSources | GET /knowledge/{concept_id}/sources | read | KnowledgeDetail |
|
|
194
|
+
| listAgentApprovalHistory | GET /agent/approvals/history | read | AgentApprovals |
|
|
195
|
+
| listAgentOperatorActivity | GET /agent/operators/{operator}/activity | read | AgentOperators |
|
|
196
|
+
| listAgentOperatorFindings | GET /agent/operators/{operator}/findings | read | AgentOperators |
|
|
197
|
+
| listAgentOperatorSkills | GET /agent/operators/{operator}/skills | read | AgentOperators |
|
|
198
|
+
| listAgentOperators | GET /agent/operators | read | AgentOperators |
|
|
199
|
+
| listAgentSessions | GET /agent/sessions | read | AssistantSessions |
|
|
200
|
+
| listAgentTemplates | GET /voice/agent-templates | read | FromTemplateButton |
|
|
201
|
+
| listAgentTestRuns | GET /voice/agents/{agent_id}/test-runs | read | AgentTestHistory |
|
|
202
|
+
| listChatAgentConversations | POST /voice/chat-agent/conversations | read | AgentConversations |
|
|
203
|
+
| listKnowledge | GET /knowledge | read | KnowledgeBrowser |
|
|
204
|
+
| listTemplates | GET /skills/templates | read | SkillLibrary |
|
|
205
|
+
| markAgentSessionRead | PUT /agent/sessions/{session_id}/read | write | AssistantSessions |
|
|
206
|
+
| pinAgentSession | POST /agent/sessions/{session_id}/pin | write | AssistantSessions |
|
|
207
|
+
| postAgentChat | POST /agent/chat | billable | AssistantSessions |
|
|
208
|
+
| postAgentSessionMessage | POST /agent/sessions/{session_id}/messages | write | AssistantSessions |
|
|
209
|
+
| relatedKnowledge | GET /knowledge/{concept_id}/related | read | KnowledgeDetail |
|
|
210
|
+
| renameAgentSession | POST /agent/sessions/{session_id}/rename | write | AssistantSessions |
|
|
211
|
+
| renameChatAgentConversation | PUT /voice/chat-agent/conversations/{chat_id}/name | write | AgentConversations |
|
|
212
|
+
| requestAgentApprovalChanges | POST /agent/approvals/{approval_id}/request-changes | write | AgentApprovals |
|
|
213
|
+
| saveAgentAsTemplate | POST /voice/agents/{agent_id}/save-as-template | write | SaveAsTemplateButton |
|
|
214
|
+
| sendChatAgentMessage | POST /voice/chat-agent/messages | billable | AgentConversations |
|
|
215
|
+
| setAgentOperatorEnabled | PUT /agent/operators/{operator}/enabled | billable | AgentOperators |
|
|
216
|
+
| setAgentOperatorTrustDial | PUT /agent/operators/{operator}/skills/{skill_key} | billable | AgentOperators |
|
|
217
|
+
| steerAgentWorkItem | POST /agent/work-items/{work_item_id}/steer | write | AgentRunDetail |
|
|
218
|
+
| toggleReceptionistAgent | PATCH /voice/agents/receptionist | write | ReceptionistButton |
|
|
219
|
+
| transferChatAgentConversation | POST /voice/chat-agent/conversations/{chat_id}/transfer-to-human | write | AgentConversations |
|
|
220
|
+
| updateAgentTestCase | PUT /voice/agents/{agent_id}/test-cases/{test_case_id} | write | AgentTestHistory |
|
|
221
|
+
| updateAuthoredKnowledgeDraft | PATCH /knowledge/authored/{concept_id} | write | KnowledgeForm |
|
|
222
|
+
| updateSkill | PUT /skills/{action_id} | write | SkillEditor |
|
|
223
|
+
| validateTemplate | POST /skills/validate | write | SkillEditor |
|
|
224
|
+
| verifyAuthoredKnowledge | POST /knowledge/authored/{concept_id}/verify | write | KnowledgeDetail |
|