spine-framework 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.framework/README.md +129 -0
- package/.framework/cli/bin.cjs +14 -0
- package/.framework/cli/commands/agents.ts +153 -0
- package/.framework/cli/commands/auth.ts +94 -0
- package/.framework/cli/commands/create-app.ts +185 -0
- package/.framework/cli/commands/dev.ts +295 -0
- package/.framework/cli/commands/doctor.ts +442 -0
- package/.framework/cli/commands/generate.ts +332 -0
- package/.framework/cli/commands/init.ts +272 -0
- package/.framework/cli/commands/install-app.ts +391 -0
- package/.framework/cli/commands/items.ts +253 -0
- package/.framework/cli/commands/migrations.ts +141 -0
- package/.framework/cli/commands/pipelines.ts +166 -0
- package/.framework/cli/commands/status.ts +197 -0
- package/.framework/cli/commands/system.ts +184 -0
- package/.framework/cli/commands/test.ts +227 -0
- package/.framework/cli/commands/uninstall-app.ts +166 -0
- package/.framework/cli/context.ts +268 -0
- package/.framework/cli/env-loader.ts +36 -0
- package/.framework/cli/index.ts +106 -0
- package/.framework/cli/welcome.cjs +45 -0
- package/.framework/docs/API.md +384 -0
- package/.framework/docs/STABILITY.md +52 -0
- package/.framework/docs/admin-routes.md +76 -0
- package/.framework/docs/api-docs-progress.md +38 -0
- package/.framework/docs/api-governance.md +146 -0
- package/.framework/docs/api-testing-results.md +212 -0
- package/.framework/docs/apis/admin-configs.md +567 -0
- package/.framework/docs/apis/admin-data.md +272 -0
- package/.framework/docs/apis/index.md +231 -0
- package/.framework/docs/apis/internal.md +295 -0
- package/.framework/docs/apis/runtime.md +537 -0
- package/.framework/docs/assembly-launch-guide.md +138 -0
- package/.framework/docs/audit-results.md +590 -0
- package/.framework/docs/authorization-model.md +170 -0
- package/.framework/docs/db-api-inventory.md +95 -0
- package/.framework/docs/examples/custom-app/README.md +77 -0
- package/.framework/docs/examples/custom-function/README.md +27 -0
- package/.framework/docs/examples/custom-function/handler.ts +48 -0
- package/.framework/docs/examples/custom-webhook/README.md +68 -0
- package/.framework/docs/gap-remediation-backlog.md +103 -0
- package/.framework/docs/guides/cli-guide.md +224 -0
- package/.framework/docs/guides/getting-started.md +103 -0
- package/.framework/docs/guides/import-guide.md +193 -0
- package/.framework/docs/guides/testing-guide.md +229 -0
- package/.framework/docs/permission-examples.md +326 -0
- package/.framework/docs/ui-adoption-verification.md +111 -0
- package/.framework/docs/ui-api-coverage.md +84 -0
- package/.framework/docs/v2-compatibility-audit.md +228 -0
- package/.framework/functions/.gitkeep +1 -0
- package/.framework/functions/_shared/agent-runner.ts +1097 -0
- package/.framework/functions/_shared/app-manifest.ts +184 -0
- package/.framework/functions/_shared/audit.ts +150 -0
- package/.framework/functions/_shared/db.ts +174 -0
- package/.framework/functions/_shared/index.ts +382 -0
- package/.framework/functions/_shared/middleware.ts +490 -0
- package/.framework/functions/_shared/permissions.ts +1325 -0
- package/.framework/functions/_shared/pipeline-runner.ts +731 -0
- package/.framework/functions/_shared/principal.ts +760 -0
- package/.framework/functions/_shared/schema-utils.ts +967 -0
- package/.framework/functions/_shared/testing.ts +258 -0
- package/.framework/functions/_shared/trigger-engine.ts +425 -0
- package/.framework/functions/_shared/webhook-registration.ts +168 -0
- package/.framework/functions/_shared/webhook-registry.ts +129 -0
- package/.framework/functions/account-nodes.ts +111 -0
- package/.framework/functions/admin-data.ts +606 -0
- package/.framework/functions/ai-agents.ts +323 -0
- package/.framework/functions/api-keys.ts +376 -0
- package/.framework/functions/apps.ts +483 -0
- package/.framework/functions/auth.ts +196 -0
- package/.framework/functions/debug-auth.ts +107 -0
- package/.framework/functions/embeddings.ts +556 -0
- package/.framework/functions/integration-routes.ts +523 -0
- package/.framework/functions/integrations.ts +319 -0
- package/.framework/functions/item-progress.ts +272 -0
- package/.framework/functions/logs.ts +438 -0
- package/.framework/functions/observability.ts +275 -0
- package/.framework/functions/pipeline-executions.ts +494 -0
- package/.framework/functions/pipelines.ts +485 -0
- package/.framework/functions/prompt-configs.ts +339 -0
- package/.framework/functions/roles.ts +387 -0
- package/.framework/functions/system-cron.ts +742 -0
- package/.framework/functions/system.ts +323 -0
- package/.framework/functions/tests.ts +119 -0
- package/.framework/functions/timers.ts +357 -0
- package/.framework/functions/triggers.ts +563 -0
- package/.framework/functions/types.ts +604 -0
- package/.framework/migrations/000_foundation.sql +1256 -0
- package/.framework/migrations/001_seed.sql +92 -0
- package/.framework/migrations/002_seed_constraints.sql +13 -0
- package/.framework/migrations/003_auth_user_trigger.sql +59 -0
- package/.framework/src/App.tsx +126 -0
- package/.framework/src/apps/admin/index.tsx +173 -0
- package/.framework/src/components/AppWrapper.tsx +56 -0
- package/.framework/src/components/CustomAppLoader.tsx +116 -0
- package/.framework/src/components/admin/AdminListPage.tsx +151 -0
- package/.framework/src/components/admin/AdminSidebar.tsx +166 -0
- package/.framework/src/components/admin/AdminStatsCard.tsx +62 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +42 -0
- package/.framework/src/components/app-shell/GenericAppShell.tsx +181 -0
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +200 -0
- package/.framework/src/components/app-shell/GenericListPage.tsx +116 -0
- package/.framework/src/components/app-sidebar.tsx +228 -0
- package/.framework/src/components/auth/ProtectedRoute.tsx +88 -0
- package/.framework/src/components/layout/AppShell.tsx +91 -0
- package/.framework/src/components/layout/Header.tsx +88 -0
- package/.framework/src/components/layout/Layout.tsx +95 -0
- package/.framework/src/components/layout/Sidebar.tsx +329 -0
- package/.framework/src/components/runtime/DataDetailHeader.tsx +77 -0
- package/.framework/src/components/runtime/DataDetailPage.tsx +171 -0
- package/.framework/src/components/runtime/DataFilters.tsx +91 -0
- package/.framework/src/components/runtime/DataHeader.tsx +68 -0
- package/.framework/src/components/runtime/DataListPage.tsx +124 -0
- package/.framework/src/components/runtime/DataStats.tsx +70 -0
- package/.framework/src/components/runtime/DataTable.tsx +174 -0
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +134 -0
- package/.framework/src/components/runtime/index.ts +18 -0
- package/.framework/src/components/search-form.tsx +29 -0
- package/.framework/src/components/shared/AgentView.tsx +213 -0
- package/.framework/src/components/shared/FieldRenderer.tsx +478 -0
- package/.framework/src/components/shared/SchemaFields.tsx +226 -0
- package/.framework/src/components/ui/DataTable.tsx +343 -0
- package/.framework/src/components/ui/Form.tsx +281 -0
- package/.framework/src/components/ui/ItemCard.tsx +296 -0
- package/.framework/src/components/ui/ItemListView.tsx +308 -0
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -0
- package/.framework/src/components/ui/Modal.tsx +61 -0
- package/.framework/src/components/ui/RichTextEditor.tsx +210 -0
- package/.framework/src/components/ui/accordion.tsx +82 -0
- package/.framework/src/components/ui/alert-dialog.tsx +197 -0
- package/.framework/src/components/ui/alert.tsx +76 -0
- package/.framework/src/components/ui/aspect-ratio.tsx +11 -0
- package/.framework/src/components/ui/avatar.tsx +110 -0
- package/.framework/src/components/ui/badge.tsx +49 -0
- package/.framework/src/components/ui/breadcrumb.tsx +122 -0
- package/.framework/src/components/ui/button-group.tsx +83 -0
- package/.framework/src/components/ui/button.tsx +65 -0
- package/.framework/src/components/ui/calendar.tsx +222 -0
- package/.framework/src/components/ui/card.tsx +100 -0
- package/.framework/src/components/ui/carousel.tsx +240 -0
- package/.framework/src/components/ui/chart.tsx +373 -0
- package/.framework/src/components/ui/checkbox.tsx +31 -0
- package/.framework/src/components/ui/collapsible.tsx +33 -0
- package/.framework/src/components/ui/combobox.tsx +299 -0
- package/.framework/src/components/ui/command.tsx +193 -0
- package/.framework/src/components/ui/context-menu.tsx +261 -0
- package/.framework/src/components/ui/dialog.tsx +165 -0
- package/.framework/src/components/ui/direction.tsx +22 -0
- package/.framework/src/components/ui/drawer.tsx +132 -0
- package/.framework/src/components/ui/dropdown-menu.tsx +269 -0
- package/.framework/src/components/ui/empty.tsx +104 -0
- package/.framework/src/components/ui/field.tsx +238 -0
- package/.framework/src/components/ui/hover-card.tsx +42 -0
- package/.framework/src/components/ui/input-group.tsx +153 -0
- package/.framework/src/components/ui/input-otp.tsx +87 -0
- package/.framework/src/components/ui/input.tsx +19 -0
- package/.framework/src/components/ui/item.tsx +196 -0
- package/.framework/src/components/ui/kbd.tsx +26 -0
- package/.framework/src/components/ui/label.tsx +22 -0
- package/.framework/src/components/ui/menubar.tsx +277 -0
- package/.framework/src/components/ui/native-select.tsx +61 -0
- package/.framework/src/components/ui/navigation-menu.tsx +164 -0
- package/.framework/src/components/ui/pagination.tsx +129 -0
- package/.framework/src/components/ui/popover.tsx +87 -0
- package/.framework/src/components/ui/progress.tsx +31 -0
- package/.framework/src/components/ui/radio-group.tsx +42 -0
- package/.framework/src/components/ui/resizable.tsx +50 -0
- package/.framework/src/components/ui/scroll-area.tsx +53 -0
- package/.framework/src/components/ui/select.tsx +195 -0
- package/.framework/src/components/ui/separator.tsx +26 -0
- package/.framework/src/components/ui/sheet.tsx +145 -0
- package/.framework/src/components/ui/sidebar.tsx +706 -0
- package/.framework/src/components/ui/skeleton.tsx +13 -0
- package/.framework/src/components/ui/slider.tsx +59 -0
- package/.framework/src/components/ui/sonner.tsx +47 -0
- package/.framework/src/components/ui/spinner.tsx +10 -0
- package/.framework/src/components/ui/switch.tsx +33 -0
- package/.framework/src/components/ui/table-primitives.tsx +141 -0
- package/.framework/src/components/ui/table.tsx +114 -0
- package/.framework/src/components/ui/tabs.tsx +90 -0
- package/.framework/src/components/ui/textarea.tsx +18 -0
- package/.framework/src/components/ui/toggle-group.tsx +89 -0
- package/.framework/src/components/ui/toggle.tsx +45 -0
- package/.framework/src/components/ui/tooltip.tsx +57 -0
- package/.framework/src/contexts/AppContext.tsx +133 -0
- package/.framework/src/contexts/AuthContext.tsx +371 -0
- package/.framework/src/hooks/use-mobile.ts +19 -0
- package/.framework/src/hooks/useApi.ts +526 -0
- package/.framework/src/hooks/useApps.ts +114 -0
- package/.framework/src/hooks/useEntityList.ts +190 -0
- package/.framework/src/hooks/useEntityRecord.ts +308 -0
- package/.framework/src/hooks/useForm.ts +307 -0
- package/.framework/src/hooks/useListSchema.ts +264 -0
- package/.framework/src/hooks/useSchemaRecord.ts +223 -0
- package/.framework/src/index.css +128 -0
- package/.framework/src/lib/api.ts +156 -0
- package/.framework/src/lib/supabase.ts +94 -0
- package/.framework/src/lib/utils.ts +317 -0
- package/.framework/src/main.tsx +27 -0
- package/.framework/src/pages/DashboardPage.tsx +181 -0
- package/.framework/src/pages/NotFoundPage.tsx +39 -0
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +161 -0
- package/.framework/src/pages/admin/AIAgentsPage.tsx +318 -0
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +199 -0
- package/.framework/src/pages/admin/APIKeysPage.tsx +303 -0
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +523 -0
- package/.framework/src/pages/admin/AppDetailPage.tsx +493 -0
- package/.framework/src/pages/admin/AppsPage.tsx +355 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +491 -0
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +534 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +424 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +176 -0
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +109 -0
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +402 -0
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +187 -0
- package/.framework/src/pages/admin/IntegrationsPage.tsx +301 -0
- package/.framework/src/pages/admin/LogsPage.tsx +283 -0
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +85 -0
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +470 -0
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +183 -0
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +279 -0
- package/.framework/src/pages/admin/PipelinesPage.tsx +390 -0
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +299 -0
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +292 -0
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +434 -0
- package/.framework/src/pages/admin/RoleDetailPage.tsx +273 -0
- package/.framework/src/pages/admin/RolesPage.tsx +292 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +61 -0
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +588 -0
- package/.framework/src/pages/admin/SimpleDashboard.tsx +387 -0
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +172 -0
- package/.framework/src/pages/admin/TestingDashboard.tsx +257 -0
- package/.framework/src/pages/admin/TimerDetailPage.tsx +151 -0
- package/.framework/src/pages/admin/TimersPage.tsx +376 -0
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +149 -0
- package/.framework/src/pages/admin/TriggersPage.tsx +381 -0
- package/.framework/src/pages/admin/TypeDetailPage.tsx +694 -0
- package/.framework/src/pages/admin/TypesPage.tsx +295 -0
- package/.framework/src/pages/auth/LoginPage.tsx +188 -0
- package/.framework/src/pages/auth/RegisterPage.tsx +163 -0
- package/.framework/src/pages/spine-framework/APIPage.tsx +17 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +25 -0
- package/.framework/src/types/auth.ts +125 -0
- package/.framework/src/types/types.ts +407 -0
- package/STRUCTURE.md +150 -0
- package/config/components.json +25 -0
- package/config/deno.lock +108 -0
- package/config/package-lock.json +17183 -0
- package/config/postcss.config.cjs +10 -0
- package/config/tailwind.config.cjs +78 -0
- package/config/tsconfig.build.json +32 -0
- package/config/tsconfig.cli.json +18 -0
- package/config/tsconfig.json +41 -0
- package/config/tsconfig.node.json +17 -0
- package/config/tsconfig.node.tsbuildinfo +1 -0
- package/config/tsconfig.tsbuildinfo +1 -0
- package/config/typedoc.json +16 -0
- package/config/vite.config.d.ts +2 -0
- package/config/vite.config.ts +72 -0
- package/dist/cli/commands/agents.d.ts +39 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/auth.d.ts +36 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/create-app.d.ts +23 -0
- package/dist/cli/commands/create-app.d.ts.map +1 -0
- package/dist/cli/commands/dev.d.ts +39 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/doctor.d.ts +42 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +36 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +30 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/install-app.d.ts +30 -0
- package/dist/cli/commands/install-app.d.ts.map +1 -0
- package/dist/cli/commands/items.d.ts +45 -0
- package/dist/cli/commands/items.d.ts.map +1 -0
- package/dist/cli/commands/migrations.d.ts +41 -0
- package/dist/cli/commands/migrations.d.ts.map +1 -0
- package/dist/cli/commands/pipelines.d.ts +40 -0
- package/dist/cli/commands/pipelines.d.ts.map +1 -0
- package/dist/cli/commands/status.d.ts +23 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/system.d.ts +29 -0
- package/dist/cli/commands/system.d.ts.map +1 -0
- package/dist/cli/commands/test.d.ts +46 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/uninstall-app.d.ts +23 -0
- package/dist/cli/commands/uninstall-app.d.ts.map +1 -0
- package/dist/cli/context.d.ts +88 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/env-loader.d.ts +14 -0
- package/dist/cli/env-loader.d.ts.map +1 -0
- package/dist/cli/index.d.ts +41 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/functions/_shared/agent-runner.d.ts +156 -0
- package/dist/functions/_shared/agent-runner.d.ts.map +1 -0
- package/dist/functions/_shared/app-manifest.d.ts +68 -0
- package/dist/functions/_shared/app-manifest.d.ts.map +1 -0
- package/dist/functions/_shared/audit.d.ts +91 -0
- package/dist/functions/_shared/audit.d.ts.map +1 -0
- package/dist/functions/_shared/db.d.ts +125 -0
- package/dist/functions/_shared/db.d.ts.map +1 -0
- package/dist/functions/_shared/index.d.ts +298 -0
- package/dist/functions/_shared/index.d.ts.map +1 -0
- package/dist/functions/_shared/middleware.d.ts +315 -0
- package/dist/functions/_shared/middleware.d.ts.map +1 -0
- package/dist/functions/_shared/permissions.d.ts +626 -0
- package/dist/functions/_shared/permissions.d.ts.map +1 -0
- package/dist/functions/_shared/pipeline-runner.d.ts +124 -0
- package/dist/functions/_shared/pipeline-runner.d.ts.map +1 -0
- package/dist/functions/_shared/principal.d.ts +284 -0
- package/dist/functions/_shared/principal.d.ts.map +1 -0
- package/dist/functions/_shared/schema-utils.d.ts +181 -0
- package/dist/functions/_shared/schema-utils.d.ts.map +1 -0
- package/dist/functions/_shared/testing.d.ts +172 -0
- package/dist/functions/_shared/testing.d.ts.map +1 -0
- package/dist/functions/_shared/trigger-engine.d.ts +140 -0
- package/dist/functions/_shared/trigger-engine.d.ts.map +1 -0
- package/dist/functions/_shared/webhook-registration.d.ts +81 -0
- package/dist/functions/_shared/webhook-registration.d.ts.map +1 -0
- package/dist/functions/_shared/webhook-registry.d.ts +57 -0
- package/dist/functions/_shared/webhook-registry.d.ts.map +1 -0
- package/dist/functions/account-nodes.d.ts +48 -0
- package/dist/functions/account-nodes.d.ts.map +1 -0
- package/dist/functions/admin-data.d.ts +178 -0
- package/dist/functions/admin-data.d.ts.map +1 -0
- package/dist/functions/ai-agents.d.ts +125 -0
- package/dist/functions/ai-agents.d.ts.map +1 -0
- package/dist/functions/api-keys.d.ts +140 -0
- package/dist/functions/api-keys.d.ts.map +1 -0
- package/dist/functions/apps.d.ts +163 -0
- package/dist/functions/apps.d.ts.map +1 -0
- package/dist/functions/auth.d.ts +74 -0
- package/dist/functions/auth.d.ts.map +1 -0
- package/dist/functions/debug-auth.d.ts +33 -0
- package/dist/functions/debug-auth.d.ts.map +1 -0
- package/dist/functions/embeddings.d.ts +205 -0
- package/dist/functions/embeddings.d.ts.map +1 -0
- package/dist/functions/integration-routes.d.ts +45 -0
- package/dist/functions/integration-routes.d.ts.map +1 -0
- package/dist/functions/integrations.d.ts +124 -0
- package/dist/functions/integrations.d.ts.map +1 -0
- package/dist/functions/item-progress.d.ts +41 -0
- package/dist/functions/item-progress.d.ts.map +1 -0
- package/dist/functions/logs.d.ts +162 -0
- package/dist/functions/logs.d.ts.map +1 -0
- package/dist/functions/observability.d.ts +123 -0
- package/dist/functions/observability.d.ts.map +1 -0
- package/dist/functions/pipeline-executions.d.ts +190 -0
- package/dist/functions/pipeline-executions.d.ts.map +1 -0
- package/dist/functions/pipelines.d.ts +171 -0
- package/dist/functions/pipelines.d.ts.map +1 -0
- package/dist/functions/prompt-configs.d.ts +125 -0
- package/dist/functions/prompt-configs.d.ts.map +1 -0
- package/dist/functions/roles.d.ts +118 -0
- package/dist/functions/roles.d.ts.map +1 -0
- package/dist/functions/system-cron.d.ts +65 -0
- package/dist/functions/system-cron.d.ts.map +1 -0
- package/dist/functions/system.d.ts +29 -0
- package/dist/functions/system.d.ts.map +1 -0
- package/dist/functions/tests.d.ts +28 -0
- package/dist/functions/tests.d.ts.map +1 -0
- package/dist/functions/timers.d.ts +139 -0
- package/dist/functions/timers.d.ts.map +1 -0
- package/dist/functions/triggers.d.ts +203 -0
- package/dist/functions/triggers.d.ts.map +1 -0
- package/dist/functions/types.d.ts +151 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/src/types/types.d.ts +364 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/package.json +192 -0
- package/scripts/app-install-cli.ts +286 -0
- package/scripts/assemble-frontend.sh +79 -0
- package/scripts/assemble-functions.sh +62 -0
- package/scripts/assemble.sh +35 -0
- package/scripts/boundary-check.sh +106 -0
- package/scripts/build-manifest.sh +80 -0
- package/scripts/check-core-integrity.sh +82 -0
- package/scripts/ingest-chunks.cjs +202 -0
- package/scripts/kb-chunk-parser.cjs +312 -0
- package/scripts/kb-chunk-parser.ts +330 -0
- package/scripts/load-test-app-install.ts +484 -0
- package/scripts/netlify-dev-wrapper.sh +22 -0
- package/scripts/verify-integrity.sh +69 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Spine CLI Reference
|
|
2
|
+
|
|
3
|
+
The `spine` CLI is a thin adapter over Spine core functions. Every command constructs a `CoreContext` and calls the same logic used by API handlers and imports — no HTTP involved.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# From project root
|
|
11
|
+
npm run spine -- --help
|
|
12
|
+
|
|
13
|
+
# Or link globally
|
|
14
|
+
npm link
|
|
15
|
+
spine --help
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Configuration
|
|
21
|
+
|
|
22
|
+
The CLI reads credentials from `v2-core/.xenv` or environment variables:
|
|
23
|
+
|
|
24
|
+
| Variable | Required | Description |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `SUPABASE_URL` | ✓ | Your Supabase project URL |
|
|
27
|
+
| `SUPABASE_SERVICE_ROLE_KEY` | ✓ | Service role key (admin ops) |
|
|
28
|
+
| `SUPABASE_ANON_KEY` | For user auth | Anon key for JWT-scoped ops |
|
|
29
|
+
| `SPINE_CLI_ACCOUNT_ID` | Recommended | Default account scope |
|
|
30
|
+
| `SPINE_CLI_JWT` | For human auth | User JWT token |
|
|
31
|
+
| `SPINE_CLI_API_KEY` | For machine auth | Machine API key |
|
|
32
|
+
| `SPINE_CLI_DEBUG` | Optional | Set to `1` for stack traces |
|
|
33
|
+
|
|
34
|
+
**Authentication priority:**
|
|
35
|
+
1. `SPINE_CLI_API_KEY` → machine principal
|
|
36
|
+
2. `SPINE_CLI_JWT` → human principal
|
|
37
|
+
3. Neither → `SYSTEM_PRINCIPAL` (admin ops only)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Global Options
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
--account <id> Override the account ID for this command
|
|
45
|
+
--json Output as JSON (available on most commands)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Commands
|
|
51
|
+
|
|
52
|
+
### `spine auth`
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Show the resolved identity for current env
|
|
56
|
+
spine auth whoami
|
|
57
|
+
|
|
58
|
+
# Validate credentials — exits 0 if valid, 1 if not
|
|
59
|
+
spine auth check
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Example: `whoami` output**
|
|
63
|
+
```
|
|
64
|
+
Spine CLI — Current Identity
|
|
65
|
+
────────────────────────────────────────
|
|
66
|
+
Principal ID: cab578c2-c295-476a-a8c5-dca3445aa4ac
|
|
67
|
+
Type: human
|
|
68
|
+
Account: cd74879c-3bfa-4dce-9bbd-67b31eaa23e2
|
|
69
|
+
Name: K Pettit
|
|
70
|
+
Email: kpettit851@gmail.com
|
|
71
|
+
Roles: system_admin, admin
|
|
72
|
+
Request ID: f3e2a1b0-...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### `spine pipelines`
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# List all active pipelines
|
|
81
|
+
spine pipelines list
|
|
82
|
+
spine pipelines list --account <id> --all --json
|
|
83
|
+
|
|
84
|
+
# Get pipeline details
|
|
85
|
+
spine pipelines get <id>
|
|
86
|
+
|
|
87
|
+
# Execute a pipeline
|
|
88
|
+
spine pipelines run <id>
|
|
89
|
+
spine pipelines run <id> --data '{"item_id":"abc123"}'
|
|
90
|
+
spine pipelines run <id> --account <account-id> --json
|
|
91
|
+
|
|
92
|
+
# List recent executions
|
|
93
|
+
spine pipelines executions <id>
|
|
94
|
+
spine pipelines executions <id> --limit 20 --json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Example: `run` output**
|
|
98
|
+
```
|
|
99
|
+
Running pipeline e3f1a2b0-...
|
|
100
|
+
|
|
101
|
+
✓ Pipeline completed
|
|
102
|
+
Execution ID: 9d8c7b6a-...
|
|
103
|
+
Duration: 342ms
|
|
104
|
+
Stages: 3
|
|
105
|
+
✓ [0] update_item (45ms)
|
|
106
|
+
✓ [1] send_notification (89ms)
|
|
107
|
+
✓ [2] http_request (208ms)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### `spine items`
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# List items (all types or filtered)
|
|
116
|
+
spine items list
|
|
117
|
+
spine items list --type support_ticket --limit 50
|
|
118
|
+
spine items list --account <id> --json
|
|
119
|
+
|
|
120
|
+
# Get a single item
|
|
121
|
+
spine items get <id>
|
|
122
|
+
spine items get <id> --json
|
|
123
|
+
|
|
124
|
+
# Create an item
|
|
125
|
+
spine items create --type support_ticket --title "Login broken" --account <id>
|
|
126
|
+
spine items create --type support_ticket --data '{"priority":"high","status":"open"}' --account <id>
|
|
127
|
+
|
|
128
|
+
# Update item fields
|
|
129
|
+
spine items update <id> --data '{"status":"resolved"}'
|
|
130
|
+
spine items update <id> --title "New title"
|
|
131
|
+
|
|
132
|
+
# Soft-delete (sets is_active = false)
|
|
133
|
+
spine items delete <id>
|
|
134
|
+
|
|
135
|
+
# Hard delete (permanent)
|
|
136
|
+
spine items delete <id> --hard
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### `spine agents`
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Send a message to an agent thread
|
|
145
|
+
spine agents run <thread-id> --message "How do I reset my password?"
|
|
146
|
+
spine agents run <thread-id> --message "Summarize open tickets" --json
|
|
147
|
+
|
|
148
|
+
# List agent threads
|
|
149
|
+
spine agents threads list
|
|
150
|
+
spine agents threads list --account <id> --limit 10
|
|
151
|
+
|
|
152
|
+
# Get thread details + messages
|
|
153
|
+
spine agents threads get <thread-id>
|
|
154
|
+
spine agents threads get <thread-id> --limit 50 --json
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Example: `run` output**
|
|
158
|
+
```
|
|
159
|
+
Sending message to thread 7a6b5c4d-...
|
|
160
|
+
|
|
161
|
+
─── Agent Response ───
|
|
162
|
+
Based on your account settings, to reset your password: click "Forgot Password"
|
|
163
|
+
on the login page and enter your email address...
|
|
164
|
+
─────────────────────
|
|
165
|
+
Confidence: 87%
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### `spine migrations`
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# List all applied migrations
|
|
174
|
+
spine migrations list
|
|
175
|
+
spine migrations list --json
|
|
176
|
+
|
|
177
|
+
# Compare local files vs applied
|
|
178
|
+
spine migrations status
|
|
179
|
+
spine migrations status --json
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Example: `status` output**
|
|
183
|
+
```
|
|
184
|
+
Migration Status
|
|
185
|
+
────────────────────────────────────────────────────────────
|
|
186
|
+
✓ 001_schema.sql applied
|
|
187
|
+
✓ 002_accounts.sql applied
|
|
188
|
+
✓ 003_people.sql applied
|
|
189
|
+
...
|
|
190
|
+
○ 065_new_feature.sql pending
|
|
191
|
+
|
|
192
|
+
64 applied, 1 pending
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Agentic IDE Usage
|
|
198
|
+
|
|
199
|
+
The CLI is designed for use in Windsurf, Cursor, and other agentic IDEs. Recommended workflow file pattern:
|
|
200
|
+
|
|
201
|
+
```markdown
|
|
202
|
+
---
|
|
203
|
+
description: Run a Spine pipeline from the IDE
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
1. Set up credentials in v2-core/.xenv
|
|
207
|
+
// turbo
|
|
208
|
+
2. Run: npm run spine -- auth check
|
|
209
|
+
// turbo
|
|
210
|
+
3. Run: npm run spine -- pipelines run <id> --data '{"key":"value"}' --json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
For machine-to-machine operations in IDE workflows, use `SPINE_CLI_API_KEY` with appropriate scopes rather than a human JWT.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Exit Codes
|
|
218
|
+
|
|
219
|
+
| Code | Meaning |
|
|
220
|
+
|---|---|
|
|
221
|
+
| `0` | Success |
|
|
222
|
+
| `1` | Error (message printed to stderr) |
|
|
223
|
+
|
|
224
|
+
Set `SPINE_CLI_DEBUG=1` to see full stack traces on errors.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Getting Started with Spine v2
|
|
2
|
+
|
|
3
|
+
Spine is a backend framework that runs on Supabase + Netlify Functions. It provides multi-tenancy, authentication, authorization, pipeline automation, and AI agent infrastructure — all accessible via three interfaces:
|
|
4
|
+
|
|
5
|
+
| Interface | Use case |
|
|
6
|
+
|---|---|
|
|
7
|
+
| **API** | External services, frontends, webhooks |
|
|
8
|
+
| **Import** | Custom functions running in the same process |
|
|
9
|
+
| **CLI** | Terminal operations, agentic IDE workflows, testing |
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
- Node.js 20+
|
|
16
|
+
- A Supabase project
|
|
17
|
+
- Netlify CLI (`npm install -g netlify-cli`)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Clone and configure
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/your-org/spine-ia
|
|
25
|
+
cd spine-ia
|
|
26
|
+
npm install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Copy the example environment file:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cp v2-core/.xenv.example v2-core/.xenv
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Edit `v2-core/.xenv` and fill in your Supabase credentials:
|
|
36
|
+
|
|
37
|
+
```env
|
|
38
|
+
SUPABASE_URL=https://your-project.supabase.co
|
|
39
|
+
SUPABASE_SERVICE_ROLE_KEY=eyJhbGci...
|
|
40
|
+
SUPABASE_ANON_KEY=eyJhbGci...
|
|
41
|
+
DB_SCHEMA=public
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. Apply migrations
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Apply all migrations to your Supabase project
|
|
50
|
+
supabase db push
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or via Supabase CLI against a specific project:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
supabase migration up --project-id your-project-id
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 3. Start the dev server
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
netlify dev
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This assembles `v2-core/` + `v2-custom/` and starts the Netlify dev proxy on port 8888.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 4. Verify the API
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl http://localhost:8888/.netlify/functions/health
|
|
75
|
+
# {"data":{"status":"ok","version":"2.0.0"}, "error":null}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 5. Test the CLI
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm run spine -- auth whoami
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Expected output:
|
|
87
|
+
```
|
|
88
|
+
Spine CLI — Current Identity
|
|
89
|
+
────────────────────────────────────────
|
|
90
|
+
Principal ID: system
|
|
91
|
+
Type: machine
|
|
92
|
+
Account: (none)
|
|
93
|
+
Request ID: <uuid>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Next Steps
|
|
99
|
+
|
|
100
|
+
- [Import Guide](./import-guide.md) — use Spine functions directly in custom code
|
|
101
|
+
- [CLI Reference](./cli-guide.md) — full CLI command reference
|
|
102
|
+
- [API Governance](../api-governance.md) — API versioning and contract rules
|
|
103
|
+
- [Authorization Model](../authorization-model.md) — roles, scopes, and permissions
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Spine Import Guide
|
|
2
|
+
|
|
3
|
+
Custom code in `v2-custom/functions/` can import Spine core functions directly, bypassing HTTP entirely. This is the **primary interface for agentic IDEs** — no HTTP calls, no auth tokens, full access to the execution engine.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The Import Surface
|
|
8
|
+
|
|
9
|
+
All stable exports are available from a single entry point:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { ... } from '../_shared/index.ts'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
> **Do not** import from individual `_shared/*.ts` files directly. Only `index.ts` is a committed contract.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## CoreContext
|
|
20
|
+
|
|
21
|
+
Every core function accepts a `CoreContext` — the minimal execution context:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {
|
|
25
|
+
CoreContext,
|
|
26
|
+
adminDb,
|
|
27
|
+
SYSTEM_PRINCIPAL,
|
|
28
|
+
runPipeline
|
|
29
|
+
} from '../_shared/index.ts'
|
|
30
|
+
|
|
31
|
+
const ctx: CoreContext = {
|
|
32
|
+
principal: SYSTEM_PRINCIPAL, // who is performing the action
|
|
33
|
+
accountId: 'uuid-of-account', // account scope (null for system-level)
|
|
34
|
+
db: adminDb, // database client
|
|
35
|
+
requestId: crypto.randomUUID() // for audit logs
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Constructing a human principal context
|
|
40
|
+
|
|
41
|
+
When a custom function is invoked by a user:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import {
|
|
45
|
+
CoreContext,
|
|
46
|
+
getPrincipalDb,
|
|
47
|
+
resolvePrincipal
|
|
48
|
+
} from '../_shared/index.ts'
|
|
49
|
+
|
|
50
|
+
export const handler = async (event: any) => {
|
|
51
|
+
const principal = await resolvePrincipal(event)
|
|
52
|
+
const db = getPrincipalDb(principal)
|
|
53
|
+
|
|
54
|
+
const ctx: CoreContext = {
|
|
55
|
+
principal,
|
|
56
|
+
accountId: principal.accountId,
|
|
57
|
+
db,
|
|
58
|
+
requestId: crypto.randomUUID()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Now call any core function
|
|
62
|
+
const result = await runPipeline(pipelineId, data, ctx)
|
|
63
|
+
return { data: result, error: null }
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## runPipeline
|
|
70
|
+
|
|
71
|
+
Execute a pipeline by ID:
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { runPipeline, CoreContext } from '../_shared/index.ts'
|
|
75
|
+
|
|
76
|
+
const result = await runPipeline(
|
|
77
|
+
'pipeline-uuid', // pipeline ID
|
|
78
|
+
{ item_id: 'abc123' }, // trigger data — passed to all stages
|
|
79
|
+
ctx // CoreContext
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
// result: ExecutionResult
|
|
83
|
+
console.log(result.status) // 'completed' | 'failed' | 'cancelled'
|
|
84
|
+
console.log(result.stages) // StageResult[] with per-stage output
|
|
85
|
+
console.log(result.durationMs) // total execution time
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## checkAndFireTriggers
|
|
91
|
+
|
|
92
|
+
Fire triggers after an entity event:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
import { fireCreateTriggers } from '../_shared/index.ts'
|
|
96
|
+
|
|
97
|
+
// After creating an item, fire all matching triggers
|
|
98
|
+
await fireCreateTriggers('items', item.id, item, ctx)
|
|
99
|
+
|
|
100
|
+
// Or use the full form for custom event types:
|
|
101
|
+
import { checkAndFireTriggers } from '../_shared/index.ts'
|
|
102
|
+
await checkAndFireTriggers('item_created', 'items', item.id, item, ctx)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## runAgent
|
|
108
|
+
|
|
109
|
+
Send a message to an AI agent thread:
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { runAgent } from '../_shared/index.ts'
|
|
113
|
+
|
|
114
|
+
const response = await runAgent(
|
|
115
|
+
'thread-uuid', // thread ID (must have an agent assigned)
|
|
116
|
+
'How do I reset my password?',
|
|
117
|
+
ctx
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
console.log(response.content) // agent's reply text
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## PermissionEngine
|
|
126
|
+
|
|
127
|
+
Check and enforce permissions in custom code:
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
import { PermissionEngine } from '../_shared/index.ts'
|
|
131
|
+
|
|
132
|
+
// Check if the principal can read a record
|
|
133
|
+
const canRead = await PermissionEngine.canAccessRecord(ctx, record, 'read')
|
|
134
|
+
if (!canRead) {
|
|
135
|
+
return { data: null, error: 'Forbidden', statusCode: 403 }
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Sanitize a record — strips fields the principal cannot read
|
|
139
|
+
const safe = await PermissionEngine.sanitizeRecordData(ctx, record, 'support_ticket')
|
|
140
|
+
|
|
141
|
+
// Validate update data — rejects writes to restricted fields
|
|
142
|
+
const { valid, error } = await PermissionEngine.validateUpdatePermissions(ctx, updateData, existingRecord)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## emitAudit
|
|
148
|
+
|
|
149
|
+
Emit structured audit log entries from custom code:
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
import { emitAudit } from '../_shared/index.ts'
|
|
153
|
+
|
|
154
|
+
await emitAudit(ctx, 'deal.stage_changed', {
|
|
155
|
+
type: 'items',
|
|
156
|
+
id: deal.id,
|
|
157
|
+
account_id: ctx.accountId ?? undefined
|
|
158
|
+
}, {
|
|
159
|
+
changes: {
|
|
160
|
+
before: { stage: 'prospect' },
|
|
161
|
+
after: { stage: 'qualified' }
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Available Exports Reference
|
|
169
|
+
|
|
170
|
+
| Export | Type | Description |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| `CoreContext` | interface | Minimal context for all core functions |
|
|
173
|
+
| `RequestContext` | interface | CoreContext + HTTP fields (for API handlers) |
|
|
174
|
+
| `createHandler` | function | Wraps a handler with auth + audit |
|
|
175
|
+
| `Principal` | interface | Unified identity for all actors |
|
|
176
|
+
| `SYSTEM_PRINCIPAL` | const | Static system-level principal |
|
|
177
|
+
| `ANONYMOUS_PRINCIPAL` | const | Unauthenticated principal |
|
|
178
|
+
| `resolvePrincipal` | function | Resolve Principal from HTTP event |
|
|
179
|
+
| `getPrincipalDb` | function | Get RLS-scoped DB client for principal |
|
|
180
|
+
| `adminDb` | const | Service-role Supabase client |
|
|
181
|
+
| `getUserDb` | function | JWT-scoped Supabase client |
|
|
182
|
+
| `runPipeline` | function | Execute a pipeline |
|
|
183
|
+
| `checkAndFireTriggers` | function | Fire matching triggers for an event |
|
|
184
|
+
| `fireCreateTriggers` | function | Fire `*_created` triggers |
|
|
185
|
+
| `fireUpdateTriggers` | function | Fire `*_updated` triggers |
|
|
186
|
+
| `fireDeleteTriggers` | function | Fire `*_deleted` triggers |
|
|
187
|
+
| `runAgent` | function | Run AI agent inference |
|
|
188
|
+
| `resolveAgentConfig` | function | Resolve agent config from thread |
|
|
189
|
+
| `PermissionEngine` | instance | Permission evaluation singleton |
|
|
190
|
+
| `generateValidationSchema` | function | Derive validation schema from design schema |
|
|
191
|
+
| `emitAudit` | function | Emit structured audit log |
|
|
192
|
+
|
|
193
|
+
See [`_shared/index.ts`](../../functions/_shared/index.ts) for full TSDoc on each export.
|