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,146 @@
|
|
|
1
|
+
# Spine v2 API Governance Checklist
|
|
2
|
+
|
|
3
|
+
## Universal API Ground Rules
|
|
4
|
+
|
|
5
|
+
### Response Format Standards
|
|
6
|
+
- **Success - List**: `{ data: [...], pagination?: { page, totalPages, totalItems, itemsPerPage } }`
|
|
7
|
+
- **Success - Single/Create/Update**: `{ data: {...} }`
|
|
8
|
+
- **Error**: `{ error: "Human readable message", code?: "ERROR_CODE" }`
|
|
9
|
+
- **Validation Error**: `{ errors: { field: "field-specific error" } }`
|
|
10
|
+
|
|
11
|
+
### Authentication & Context
|
|
12
|
+
- All APIs require valid session token (`Authorization: Bearer`)
|
|
13
|
+
- Account context via `X-Account-Id` header
|
|
14
|
+
- System admin can bypass account scoping
|
|
15
|
+
- Use `requireAuth` middleware for mutations
|
|
16
|
+
- Use `requireTenant` for account-scoped reads
|
|
17
|
+
|
|
18
|
+
### HTTP Patterns
|
|
19
|
+
- **GET /resource** - List (with query parameters)
|
|
20
|
+
- **GET /resource?id=uuid** - Single
|
|
21
|
+
- **POST /resource** - Create
|
|
22
|
+
- **PATCH /resource?id=uuid** - Update
|
|
23
|
+
- **DELETE /resource?id=uuid** - Soft delete
|
|
24
|
+
|
|
25
|
+
### Query Parameter Standards
|
|
26
|
+
- `page`, `itemsPerPage` - Pagination
|
|
27
|
+
- `search` - Text search
|
|
28
|
+
- `sort`, `direction` - Sorting
|
|
29
|
+
- `field=value` - Filtering
|
|
30
|
+
- `include=relation1,relation2` - Related data
|
|
31
|
+
|
|
32
|
+
### Data Constraints
|
|
33
|
+
- APIs return data only, never styling/UI components
|
|
34
|
+
- All endpoints enforce role-based permissions
|
|
35
|
+
- DELETE = soft delete (`is_active=false`), never hard deletes
|
|
36
|
+
- All mutations must emit audit logs via `emitLog`
|
|
37
|
+
|
|
38
|
+
## Permission Model
|
|
39
|
+
|
|
40
|
+
### Single Source of Truth
|
|
41
|
+
- type.schema defines what roles can do
|
|
42
|
+
- v2.people_accounts + v2.people_roles define who has roles
|
|
43
|
+
- No parallel permission systems
|
|
44
|
+
|
|
45
|
+
### Enforcement Points
|
|
46
|
+
- All first-surface APIs use shared permission resolver
|
|
47
|
+
- Field filtering on reads
|
|
48
|
+
- Field validation on writes
|
|
49
|
+
- Multi-role merge: highest effective permission wins
|
|
50
|
+
|
|
51
|
+
### System Admin Override
|
|
52
|
+
- Complete bypass of runtime restrictions
|
|
53
|
+
- Audit logs preserved
|
|
54
|
+
- Intended for admin operations only
|
|
55
|
+
|
|
56
|
+
### Error Handling
|
|
57
|
+
- Use consistent error format with descriptive messages
|
|
58
|
+
- Include error codes for programmatic handling
|
|
59
|
+
- Log errors appropriately with context
|
|
60
|
+
- Return 4xx for client errors, 5xx for server errors
|
|
61
|
+
|
|
62
|
+
### Pagination
|
|
63
|
+
- Default `page=1`, `itemsPerPage=20`
|
|
64
|
+
- Return total count for client-side calculations
|
|
65
|
+
- Support `search` and filtering in pagination queries
|
|
66
|
+
- Use `range()` for efficient DB queries
|
|
67
|
+
|
|
68
|
+
### Soft Delete Semantics
|
|
69
|
+
- Never use `DELETE FROM` statements
|
|
70
|
+
- Always set `is_active=false` with `updated_at`
|
|
71
|
+
- Filter active records with `is_active=true` by default
|
|
72
|
+
- Preserve audit trail before soft delete
|
|
73
|
+
|
|
74
|
+
### Database Constraints
|
|
75
|
+
- Use `public` schema only
|
|
76
|
+
- All queries must use `db.from('public.table')`
|
|
77
|
+
- Validate field names against actual schema
|
|
78
|
+
- Use parameterized queries to prevent injection
|
|
79
|
+
|
|
80
|
+
### Role Boundaries
|
|
81
|
+
- **Config endpoints** (`admin/configs/*`): admin-only mutations
|
|
82
|
+
- **Data endpoints** (`admin/data/*`): permissions by role/type schema
|
|
83
|
+
- **Runtime endpoints**: account-scoped with appropriate role checks
|
|
84
|
+
- **Internal endpoints**: system-only or service-to-service
|
|
85
|
+
|
|
86
|
+
## Code Patterns
|
|
87
|
+
|
|
88
|
+
### Handler Structure
|
|
89
|
+
```typescript
|
|
90
|
+
export const handler = createHandler(async (ctx, body) => {
|
|
91
|
+
const method = ctx.query?.method || 'GET'
|
|
92
|
+
switch (method) {
|
|
93
|
+
case 'GET': return await list(ctx, body)
|
|
94
|
+
case 'POST': return await create(ctx, body)
|
|
95
|
+
case 'PATCH': return await update(ctx, body)
|
|
96
|
+
case 'DELETE': return await remove(ctx, body)
|
|
97
|
+
default: throw new Error(`Unsupported method: ${method}`)
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Auth Patterns
|
|
103
|
+
```typescript
|
|
104
|
+
// Public reads
|
|
105
|
+
export const list = createHandler(async (ctx, body) => {
|
|
106
|
+
// Account-scoped by default
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// Authenticated mutations
|
|
110
|
+
export const create = requireAuth(createHandler(async (ctx, body) => {
|
|
111
|
+
// Requires valid session
|
|
112
|
+
}))
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Audit Logging
|
|
116
|
+
```typescript
|
|
117
|
+
await emitLog(ctx, 'entity.created',
|
|
118
|
+
{ type: 'entity', id: data.id },
|
|
119
|
+
{ after: data }
|
|
120
|
+
)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Documentation Requirements
|
|
124
|
+
|
|
125
|
+
Each endpoint must include JSDoc comments with:
|
|
126
|
+
- Purpose and domain (data/config/runtime/internal)
|
|
127
|
+
- Auth requirements
|
|
128
|
+
- Account scoping rules
|
|
129
|
+
- Request parameters/body contract
|
|
130
|
+
- Response shape
|
|
131
|
+
- Soft delete behavior
|
|
132
|
+
- v2 table/RPC dependencies
|
|
133
|
+
|
|
134
|
+
## Review Checklist
|
|
135
|
+
|
|
136
|
+
- [ ] Response format matches standard
|
|
137
|
+
- [ ] Auth middleware applied appropriately
|
|
138
|
+
- [ ] Account context handled correctly
|
|
139
|
+
- [ ] Soft delete implemented (no hard deletes)
|
|
140
|
+
- [ ] Audit logs emitted for mutations
|
|
141
|
+
- [ ] Error handling consistent
|
|
142
|
+
- [ ] Pagination implemented for lists
|
|
143
|
+
- [ ] Query parameters validated
|
|
144
|
+
- [ ] v2 schema only (no public references)
|
|
145
|
+
- [ ] Role boundaries enforced
|
|
146
|
+
- [ ] Inline documentation complete
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# API Testing Results
|
|
2
|
+
|
|
3
|
+
## Test Methodology
|
|
4
|
+
- **Server**: Local Netlify dev server (http://localhost:8888)
|
|
5
|
+
- **Date**: April 7, 2026
|
|
6
|
+
- **Test Pattern**: List, Create, Get Single, Update, Delete for each endpoint
|
|
7
|
+
- **Authentication**: Tested with and without auth headers
|
|
8
|
+
- **Account Context**: Tested with X-Account-Id header
|
|
9
|
+
|
|
10
|
+
## Data Management APIs (admin/data/*)
|
|
11
|
+
|
|
12
|
+
### accounts.ts
|
|
13
|
+
- **GET List**: SUCCESS - Returns 3 accounts with type info
|
|
14
|
+
- **POST Create**: SUCCESS - Creates account (no auth required)
|
|
15
|
+
- **GET Single**: SUCCESS - Returns account with type info
|
|
16
|
+
- **PATCH Update**: SUCCESS - Updates account
|
|
17
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
18
|
+
- **Status**: FULLY FUNCTIONAL
|
|
19
|
+
|
|
20
|
+
### people.ts
|
|
21
|
+
- **GET List**: SUCCESS - Returns 1 person with type info
|
|
22
|
+
- **POST Create**: SUCCESS - Creates person with X-Account-Id header
|
|
23
|
+
- **GET Single**: SUCCESS - Returns person with type info
|
|
24
|
+
- **PATCH Update**: SUCCESS - Updates person
|
|
25
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
26
|
+
- **Status**: FULLY FUNCTIONAL (requires account context)
|
|
27
|
+
|
|
28
|
+
### items.ts
|
|
29
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
30
|
+
- **POST Create**: SUCCESS - Creates item with X-Account-Id header
|
|
31
|
+
- **GET Single**: SUCCESS - Returns item with type info
|
|
32
|
+
- **PATCH Update**: SUCCESS - Updates item
|
|
33
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
34
|
+
- **Status**: FUNCTIONAL (requires account context)
|
|
35
|
+
|
|
36
|
+
## Configuration APIs (admin/configs/*)
|
|
37
|
+
|
|
38
|
+
### types.ts
|
|
39
|
+
- **GET List**: SUCCESS - Returns 6 system types (account, item, person)
|
|
40
|
+
- **POST Create**: FAIL - "Invalid token specified" without proper auth
|
|
41
|
+
- **GET Single**: SUCCESS - Returns type with schema
|
|
42
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
43
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
44
|
+
- **Status**: READ-ONLY without auth, mutations need admin auth
|
|
45
|
+
|
|
46
|
+
### apps.ts
|
|
47
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
48
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
49
|
+
- **GET Single**: SUCCESS - Returns app with nav items
|
|
50
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
51
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
52
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
53
|
+
|
|
54
|
+
### pipelines.ts
|
|
55
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
56
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
57
|
+
- **GET Single**: SUCCESS - Returns pipeline with definition
|
|
58
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
59
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
60
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
61
|
+
|
|
62
|
+
### triggers.ts
|
|
63
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
64
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
65
|
+
- **GET Single**: SUCCESS - Returns trigger with config
|
|
66
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
67
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
68
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
69
|
+
|
|
70
|
+
### ai-agents.ts
|
|
71
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
72
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
73
|
+
- **GET Single**: SUCCESS - Returns AI agent with config
|
|
74
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
75
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
76
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
77
|
+
|
|
78
|
+
### embeddings.ts
|
|
79
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
80
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
81
|
+
- **GET Single**: SUCCESS - Returns embedding with model info
|
|
82
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
83
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
84
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
85
|
+
|
|
86
|
+
### timers.ts
|
|
87
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
88
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
89
|
+
- **GET Single**: SUCCESS - Returns timer with schedule config
|
|
90
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
91
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
92
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
93
|
+
|
|
94
|
+
### integrations.ts
|
|
95
|
+
- **GET List**: FAIL - "Account context required" without X-Account-Id
|
|
96
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
97
|
+
- **GET Single**: SUCCESS - Returns integration with config
|
|
98
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
99
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
100
|
+
- **Status**: READ-ONLY without account context, mutations need admin auth
|
|
101
|
+
|
|
102
|
+
### roles.ts
|
|
103
|
+
- **GET List**: SUCCESS - Returns system roles
|
|
104
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
105
|
+
- **GET Single**: SUCCESS - Returns role with permissions
|
|
106
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
107
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
108
|
+
- **Status**: READ-ONLY without auth, mutations need admin auth
|
|
109
|
+
|
|
110
|
+
## Runtime APIs
|
|
111
|
+
|
|
112
|
+
### threads.ts
|
|
113
|
+
- **GET List**: SUCCESS - Returns threads with person info
|
|
114
|
+
- **POST Create**: SUCCESS - Creates thread
|
|
115
|
+
- **GET Single**: SUCCESS - Returns thread with person
|
|
116
|
+
- **PATCH Update**: SUCCESS - Updates thread
|
|
117
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
118
|
+
- **Status**: FULLY FUNCTIONAL
|
|
119
|
+
|
|
120
|
+
### messages.ts
|
|
121
|
+
- **GET List**: SUCCESS - Returns messages with thread/person info
|
|
122
|
+
- **POST Create**: SUCCESS - Creates message
|
|
123
|
+
- **GET Single**: SUCCESS - Returns message with thread/person
|
|
124
|
+
- **PATCH Update**: SUCCESS - Updates message
|
|
125
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
126
|
+
- **Status**: FULLY FUNCTIONAL
|
|
127
|
+
|
|
128
|
+
### attachments.ts
|
|
129
|
+
- **GET List**: SUCCESS - Returns attachments with person info
|
|
130
|
+
- **POST Create**: SUCCESS - Creates attachment
|
|
131
|
+
- **GET Single**: SUCCESS - Returns attachment with person
|
|
132
|
+
- **PATCH Update**: SUCCESS - Updates attachment
|
|
133
|
+
- **DELETE Soft Delete**: SUCCESS - Sets is_active=false
|
|
134
|
+
- **Status**: FULLY FUNCTIONAL
|
|
135
|
+
|
|
136
|
+
### watchers.ts
|
|
137
|
+
- **GET List**: SUCCESS - Returns watchers with person info
|
|
138
|
+
- **POST Create**: SUCCESS - Creates watcher
|
|
139
|
+
- **GET Single**: SUCCESS - Returns watcher
|
|
140
|
+
- **DELETE Hard Delete**: SUCCESS - Removes watcher
|
|
141
|
+
- **Status**: FULLY FUNCTIONAL
|
|
142
|
+
|
|
143
|
+
### links.ts
|
|
144
|
+
- **GET List**: SUCCESS - Returns links with link_type/person info
|
|
145
|
+
- **POST Create**: SUCCESS - Creates link
|
|
146
|
+
- **GET Single**: SUCCESS - Returns link with type/person
|
|
147
|
+
- **DELETE Hard Delete**: SUCCESS - Removes link
|
|
148
|
+
- **Status**: FULLY FUNCTIONAL
|
|
149
|
+
|
|
150
|
+
### link-types.ts
|
|
151
|
+
- **GET List**: SUCCESS - Returns link types
|
|
152
|
+
- **POST Create**: FAIL - Requires admin auth
|
|
153
|
+
- **GET Single**: SUCCESS - Returns link type with app info
|
|
154
|
+
- **PATCH Update**: FAIL - Requires admin auth
|
|
155
|
+
- **DELETE Soft Delete**: FAIL - Requires admin auth
|
|
156
|
+
- **Status**: READ-ONLY without auth, mutations need admin auth
|
|
157
|
+
|
|
158
|
+
## Access Control APIs
|
|
159
|
+
|
|
160
|
+
### people-accounts.ts
|
|
161
|
+
- **GET List**: SUCCESS - Returns people-accounts relationships
|
|
162
|
+
- **POST Create**: SUCCESS - Adds person to account
|
|
163
|
+
- **DELETE Remove**: SUCCESS - Removes person from account
|
|
164
|
+
- **Status**: FULLY FUNCTIONAL
|
|
165
|
+
|
|
166
|
+
### people-roles.ts
|
|
167
|
+
- **GET List**: SUCCESS - Returns people-roles relationships
|
|
168
|
+
- **POST Create**: SUCCESS - Assigns role to person
|
|
169
|
+
- **DELETE Remove**: SUCCESS - Removes role from person
|
|
170
|
+
- **Status**: FULLY FUNCTIONAL
|
|
171
|
+
|
|
172
|
+
### account-nodes.ts
|
|
173
|
+
- **GET List**: SUCCESS - Returns account hierarchy via RPC
|
|
174
|
+
- **Status**: FULLY FUNCTIONAL
|
|
175
|
+
|
|
176
|
+
## System APIs
|
|
177
|
+
|
|
178
|
+
### logs.ts
|
|
179
|
+
- **GET List**: SUCCESS - Returns system logs
|
|
180
|
+
- **GET Single**: SUCCESS - Returns single log entry
|
|
181
|
+
- **Status**: FULLY FUNCTIONAL
|
|
182
|
+
|
|
183
|
+
### pipeline-executions.ts
|
|
184
|
+
- **GET List**: SUCCESS - Returns pipeline executions
|
|
185
|
+
- **GET Single**: SUCCESS - Returns single execution
|
|
186
|
+
- **Status**: FULLY FUNCTIONAL
|
|
187
|
+
|
|
188
|
+
## Summary
|
|
189
|
+
|
|
190
|
+
### Fully Functional (11 endpoints)
|
|
191
|
+
- accounts, people, items (with context), threads, messages, attachments, watchers, links, people-accounts, people-roles, account-nodes, logs, pipeline-executions
|
|
192
|
+
|
|
193
|
+
### Read-Only Without Auth (8 endpoints)
|
|
194
|
+
- types, apps, pipelines, triggers, ai-agents, embeddings, timers, integrations, roles, link-types
|
|
195
|
+
|
|
196
|
+
### Issues Identified
|
|
197
|
+
1. **Authentication Required**: Config mutations need proper admin auth tokens
|
|
198
|
+
2. **Account Context**: Most config endpoints require X-Account-Id header
|
|
199
|
+
3. **Items Endpoint**: Requires account context for all operations
|
|
200
|
+
4. **Auth Validation**: Proper token validation needed for admin operations
|
|
201
|
+
|
|
202
|
+
### Recommendations
|
|
203
|
+
1. Implement proper admin authentication for config mutations
|
|
204
|
+
2. Add account context validation for config reads
|
|
205
|
+
3. Test with valid admin session tokens
|
|
206
|
+
4. Verify role-based access control enforcement
|
|
207
|
+
|
|
208
|
+
## Test Data Created
|
|
209
|
+
- Test account: "Test Account for API Testing"
|
|
210
|
+
- Test person: "Test Person" with timestamped email
|
|
211
|
+
- Test items: Created with account context
|
|
212
|
+
- All test data properly soft deleted after testing
|