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,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module prompt-configs
|
|
3
|
+
* @audience core-contributor
|
|
4
|
+
* @layer api-handler
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* CRUD API for the `prompt_configs` table. Prompt configs define LLM inference
|
|
8
|
+
* parameters: system prompts, context templates, model selection, temperature,
|
|
9
|
+
* confidence thresholds, escalation rules, tool access, and knowledge sources.
|
|
10
|
+
* They are referenced by AI agents at inference time via `agent-runner.ts`.
|
|
11
|
+
*
|
|
12
|
+
* **Routed by:** `GET/POST/PATCH/DELETE /.netlify/functions/prompt-configs`
|
|
13
|
+
*
|
|
14
|
+
* **Standard CRUD routing:**
|
|
15
|
+
* | method | condition | handler |
|
|
16
|
+
* |--------|-----------|---------|
|
|
17
|
+
* | GET | ?id | get |
|
|
18
|
+
* | GET | (default) | list |
|
|
19
|
+
* | POST | — | create |
|
|
20
|
+
* | PATCH | — | update |
|
|
21
|
+
* | DELETE | — | remove |
|
|
22
|
+
*
|
|
23
|
+
* **Authorization:** All operations use `ctx.db` (RLS-scoped). Account context
|
|
24
|
+
* required for writes.
|
|
25
|
+
*
|
|
26
|
+
* INVARIANT: `remove` is a hard delete.
|
|
27
|
+
* INVARIANT: `update` only patches the explicit allowlist of fields.
|
|
28
|
+
* INVARIANT: `model` defaults to 'gpt-4o', `temperature` to 0.7,
|
|
29
|
+
* `max_tokens` to 4000 if not specified on create.
|
|
30
|
+
*
|
|
31
|
+
* @seeAlso agent-runner.ts (resolveAgentConfig reads prompt_configs)
|
|
32
|
+
* @seeAlso ai-agents.ts (ai_agents reference prompt_config_id)
|
|
33
|
+
* @seeAlso audit.ts (emitLog for prompt_config.* events)
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { createHandler } from './_shared/middleware'
|
|
37
|
+
import { emitLog } from './_shared/audit'
|
|
38
|
+
import { sanitizeRecordData } from './_shared/permissions'
|
|
39
|
+
|
|
40
|
+
// ─── HANDLERS ─────────────────────────────────────────────────────────────────
|
|
41
|
+
|
|
42
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_LIST ──────────────────────────────────────────────
|
|
43
|
+
/**
|
|
44
|
+
* @chunk-id PROMPT_CONFIGS_LIST_1_0_0
|
|
45
|
+
* @version 1.0.0
|
|
46
|
+
* @hash 177c1ca02d205ad820b03fef84d2667ddde4eaa8a2aa82fbf3ee58d4f68890aa
|
|
47
|
+
* @macro Prompt Configs List Handler
|
|
48
|
+
* @micro Lists prompt configs with filtering and sanitization
|
|
49
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
50
|
+
* @inputs _body: any — Request body (unused for GET)
|
|
51
|
+
* @outputs Array of sanitized prompt_config records with app/createdBy joins
|
|
52
|
+
* @depends-on [createHandler, sanitizeRecordData]
|
|
53
|
+
* @depended-by [Netlify function routing]
|
|
54
|
+
* @side-effects [DB queries, permission sanitization]
|
|
55
|
+
* @tags prompt-configs, list, crud, pagination
|
|
56
|
+
*/
|
|
57
|
+
export const list = createHandler(async (ctx, _body) => {
|
|
58
|
+
const { model, is_active, limit = 100, offset = 0 } = ctx.query || {}
|
|
59
|
+
|
|
60
|
+
if (!ctx.accountId) {
|
|
61
|
+
throw new Error('Account context required')
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let query = ctx.db
|
|
65
|
+
.from('prompt_configs')
|
|
66
|
+
.select(`
|
|
67
|
+
*,
|
|
68
|
+
app:apps(id, slug, name),
|
|
69
|
+
created_by_person:people!prompt_configs_created_by_fkey(id, full_name, email)
|
|
70
|
+
`)
|
|
71
|
+
.order('name')
|
|
72
|
+
|
|
73
|
+
if (model) {
|
|
74
|
+
query = query.eq('model', model)
|
|
75
|
+
}
|
|
76
|
+
if (is_active !== undefined) {
|
|
77
|
+
query = query.eq('is_active', is_active === 'true')
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const { data, error: err } = await query.range(
|
|
81
|
+
parseInt(offset.toString()),
|
|
82
|
+
parseInt(offset.toString()) + parseInt(limit.toString()) - 1
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
if (err) throw err
|
|
86
|
+
|
|
87
|
+
const sanitized = []
|
|
88
|
+
for (const config of data || []) {
|
|
89
|
+
sanitized.push(await sanitizeRecordData(ctx, config, 'prompt_config'))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return sanitized
|
|
93
|
+
})
|
|
94
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_LIST ────────────────────────────────────────────────
|
|
95
|
+
|
|
96
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_GET ──────────────────────────────────────────────
|
|
97
|
+
/**
|
|
98
|
+
* @chunk-id PROMPT_CONFIGS_GET_1_0_0
|
|
99
|
+
* @version 1.0.0
|
|
100
|
+
* @hash 234cc28b4e9fba9333a221ac01d175bafaf93681221f182d6925df84caf90348
|
|
101
|
+
* @macro Prompt Config Get Handler
|
|
102
|
+
* @micro Returns single prompt config record with joins and sanitization
|
|
103
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
104
|
+
* @inputs _body: any — Request body (unused for GET)
|
|
105
|
+
* @outputs Sanitized prompt_config record with app/createdBy joins
|
|
106
|
+
* @depends-on [createHandler, sanitizeRecordData]
|
|
107
|
+
* @depended-by [Netlify function routing]
|
|
108
|
+
* @side-effects [DB single row query, permission sanitization]
|
|
109
|
+
* @tags prompt-configs, get, crud, single-record
|
|
110
|
+
*/
|
|
111
|
+
export const get = createHandler(async (ctx, _body) => {
|
|
112
|
+
const { id } = ctx.query || {}
|
|
113
|
+
|
|
114
|
+
if (!id) {
|
|
115
|
+
throw new Error('Config ID is required')
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const { data, error: err } = await ctx.db
|
|
119
|
+
.from('prompt_configs')
|
|
120
|
+
.select(`
|
|
121
|
+
*,
|
|
122
|
+
app:apps(id, slug, name),
|
|
123
|
+
created_by_person:people!prompt_configs_created_by_fkey(id, full_name, email)
|
|
124
|
+
`)
|
|
125
|
+
.eq('id', id)
|
|
126
|
+
.single()
|
|
127
|
+
|
|
128
|
+
if (err) throw err
|
|
129
|
+
|
|
130
|
+
return await sanitizeRecordData(ctx, data, 'prompt_config')
|
|
131
|
+
})
|
|
132
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_GET ────────────────────────────────────────────────
|
|
133
|
+
|
|
134
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_CREATE ──────────────────────────────────────────────
|
|
135
|
+
/**
|
|
136
|
+
* @chunk-id PROMPT_CONFIGS_CREATE_1_0_0
|
|
137
|
+
* @version 1.0.0
|
|
138
|
+
* @hash e4aeda63ad485550140a44aa281020c9a6fc966da444d135281d869e053c5e6c
|
|
139
|
+
* @macro Prompt Config Create Handler
|
|
140
|
+
* @micro Creates prompt config with validation and audit logging
|
|
141
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
142
|
+
* @inputs body: object — Prompt config data including name, slug, and optional fields
|
|
143
|
+
* @outputs Inserted prompt_config record
|
|
144
|
+
* @depends-on [createHandler, emitLog]
|
|
145
|
+
* @depended-by [Netlify function routing]
|
|
146
|
+
* @side-effects [DB insert, audit logging]
|
|
147
|
+
* @tags prompt-configs, create, crud, audit
|
|
148
|
+
*/
|
|
149
|
+
export const create = createHandler(async (ctx, body) => {
|
|
150
|
+
const { app_id, name, slug, system_prompt, context_template, model, temperature, max_tokens,
|
|
151
|
+
is_multi_turn, max_history_messages, confidence_threshold, escalation_action, escalation_target,
|
|
152
|
+
output_mode, output_field, requires_review, knowledge_sources, available_tools, tool_constraints,
|
|
153
|
+
metadata } = body
|
|
154
|
+
|
|
155
|
+
if (!name || !slug) {
|
|
156
|
+
throw new Error('name and slug are required')
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (!ctx.accountId) {
|
|
160
|
+
throw new Error('Account context required')
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const { data, error: err } = await ctx.db
|
|
164
|
+
.from('prompt_configs')
|
|
165
|
+
.insert({
|
|
166
|
+
app_id: app_id || null,
|
|
167
|
+
account_id: ctx.accountId,
|
|
168
|
+
name,
|
|
169
|
+
slug,
|
|
170
|
+
system_prompt: system_prompt || null,
|
|
171
|
+
context_template: context_template || null,
|
|
172
|
+
model: model || 'gpt-4o',
|
|
173
|
+
temperature: temperature ?? 0.7,
|
|
174
|
+
max_tokens: max_tokens ?? 4000,
|
|
175
|
+
is_multi_turn: is_multi_turn ?? true,
|
|
176
|
+
max_history_messages: max_history_messages ?? 20,
|
|
177
|
+
confidence_threshold: confidence_threshold || null,
|
|
178
|
+
escalation_action: escalation_action || null,
|
|
179
|
+
escalation_target: escalation_target || null,
|
|
180
|
+
output_mode: output_mode || null,
|
|
181
|
+
output_field: output_field || null,
|
|
182
|
+
requires_review: requires_review ?? false,
|
|
183
|
+
knowledge_sources: knowledge_sources || [],
|
|
184
|
+
available_tools: available_tools || [],
|
|
185
|
+
tool_constraints: tool_constraints || {},
|
|
186
|
+
metadata: metadata || {},
|
|
187
|
+
created_by: ctx.principal?.id
|
|
188
|
+
})
|
|
189
|
+
.select()
|
|
190
|
+
.single()
|
|
191
|
+
|
|
192
|
+
if (err) throw err
|
|
193
|
+
|
|
194
|
+
await emitLog(ctx, 'prompt_config.created',
|
|
195
|
+
{ type: 'prompt_config', id: data.id },
|
|
196
|
+
{ after: { name, slug, model: data.model } }
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
return data
|
|
200
|
+
})
|
|
201
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_CREATE ────────────────────────────────────────────────
|
|
202
|
+
|
|
203
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_UPDATE ──────────────────────────────────────────────
|
|
204
|
+
/**
|
|
205
|
+
* @chunk-id PROMPT_CONFIGS_UPDATE_1_0_0
|
|
206
|
+
* @version 1.0.0
|
|
207
|
+
* @hash 32985018c871c4d8b6faf93f817c33e8b9f65e6dbae5cdb0df37fa16bf7b2db1
|
|
208
|
+
* @macro Prompt Config Update Handler
|
|
209
|
+
* @micro Updates prompt config with field allowlist and audit logging
|
|
210
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
211
|
+
* @inputs body: object — Prompt config updates including id and updatable fields
|
|
212
|
+
* @outputs Updated prompt_config record
|
|
213
|
+
* @depends-on [createHandler, emitLog]
|
|
214
|
+
* @depended-by [Netlify function routing]
|
|
215
|
+
* @side-effects [DB update, audit logging]
|
|
216
|
+
* @tags prompt-configs, update, crud, audit
|
|
217
|
+
*/
|
|
218
|
+
export const update = createHandler(async (ctx, body) => {
|
|
219
|
+
const id = body?.id || ctx.query?.id
|
|
220
|
+
const { id: _bodyId, ...updates } = body || {}
|
|
221
|
+
|
|
222
|
+
if (!id) {
|
|
223
|
+
throw new Error('Config ID is required')
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const allowed = ['name', 'slug', 'system_prompt', 'context_template', 'model', 'temperature',
|
|
227
|
+
'max_tokens', 'is_multi_turn', 'max_history_messages', 'confidence_threshold',
|
|
228
|
+
'escalation_action', 'escalation_target', 'output_mode', 'output_field', 'requires_review',
|
|
229
|
+
'knowledge_sources', 'available_tools', 'tool_constraints', 'metadata', 'is_active']
|
|
230
|
+
const updateData: Record<string, any> = { updated_at: new Date().toISOString() }
|
|
231
|
+
for (const key of allowed) {
|
|
232
|
+
if (updates[key] !== undefined) updateData[key] = updates[key]
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const { data, error: err } = await ctx.db
|
|
236
|
+
.from('prompt_configs')
|
|
237
|
+
.update(updateData)
|
|
238
|
+
.eq('id', id)
|
|
239
|
+
.select()
|
|
240
|
+
.single()
|
|
241
|
+
|
|
242
|
+
if (err) throw err
|
|
243
|
+
|
|
244
|
+
await emitLog(ctx, 'prompt_config.updated',
|
|
245
|
+
{ type: 'prompt_config', id },
|
|
246
|
+
{ after: updateData }
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
return data
|
|
250
|
+
})
|
|
251
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_UPDATE ────────────────────────────────────────────────
|
|
252
|
+
|
|
253
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_REMOVE ──────────────────────────────────────────────
|
|
254
|
+
/**
|
|
255
|
+
* @chunk-id PROMPT_CONFIGS_REMOVE_1_0_0
|
|
256
|
+
* @version 1.0.0
|
|
257
|
+
* @hash 2d6cdf4f067fe7259c1fb3d07c5928df36a2395424772a85a7d474072d883b84
|
|
258
|
+
* @macro Prompt Config Remove Handler
|
|
259
|
+
* @micro Hard-deletes prompt config with audit logging
|
|
260
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
261
|
+
* @inputs _body: any — Request body (unused for DELETE)
|
|
262
|
+
* @outputs {success: true} — Confirmation of successful deletion
|
|
263
|
+
* @depends-on [createHandler, emitLog]
|
|
264
|
+
* @depended-by [Netlify function routing]
|
|
265
|
+
* @side-effects [DB delete, audit logging]
|
|
266
|
+
* @tags prompt-configs, remove, delete, audit
|
|
267
|
+
*/
|
|
268
|
+
export const remove = createHandler(async (ctx, _body) => {
|
|
269
|
+
const id = ctx.query?.id
|
|
270
|
+
|
|
271
|
+
if (!id) {
|
|
272
|
+
throw new Error('Config ID is required')
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const { data: current } = await ctx.db
|
|
276
|
+
.from('prompt_configs')
|
|
277
|
+
.select('id, name, slug')
|
|
278
|
+
.eq('id', id)
|
|
279
|
+
.single()
|
|
280
|
+
|
|
281
|
+
if (!current) throw new Error('Prompt config not found')
|
|
282
|
+
|
|
283
|
+
const { error: err } = await ctx.db
|
|
284
|
+
.from('prompt_configs')
|
|
285
|
+
.delete()
|
|
286
|
+
.eq('id', id)
|
|
287
|
+
|
|
288
|
+
if (err) throw err
|
|
289
|
+
|
|
290
|
+
await emitLog(ctx, 'prompt_config.deleted',
|
|
291
|
+
{ type: 'prompt_config', id },
|
|
292
|
+
{ before: current }
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
return { success: true }
|
|
296
|
+
})
|
|
297
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_REMOVE ────────────────────────────────────────────────
|
|
298
|
+
|
|
299
|
+
// ─── MAIN HANDLER ────────────────────────────────────────────────────────────
|
|
300
|
+
|
|
301
|
+
// ─── CHUNK_START: PROMPT_CONFIGS_HANDLER ──────────────────────────────────────────────
|
|
302
|
+
/**
|
|
303
|
+
* @chunk-id PROMPT_CONFIGS_HANDLER_1_0_0
|
|
304
|
+
* @version 1.0.0
|
|
305
|
+
* @hash a49f4917dd07295e0ba9815bf929cccc5cffcbe4dcf6852aa4bd84d6cba1b690
|
|
306
|
+
* @macro Prompt Configs Router
|
|
307
|
+
* @micro Routes HTTP methods to appropriate prompt config handlers
|
|
308
|
+
* @inputs ctx: CoreContext — Request context with principal and database
|
|
309
|
+
* @inputs body: any — Request body for POST/PATCH operations
|
|
310
|
+
* @outputs Varies — Depends on routed handler (list/get/create/update/remove)
|
|
311
|
+
* @depends-on [createHandler, list, get, create, update, remove]
|
|
312
|
+
* @depended-by [Netlify function routing]
|
|
313
|
+
* @side-effects [Delegates to appropriate handler]
|
|
314
|
+
* @tags prompt-configs, router, crud, netlify-function
|
|
315
|
+
*/
|
|
316
|
+
export const handler = createHandler(async (ctx, body) => {
|
|
317
|
+
const { action } = ctx.query || {}
|
|
318
|
+
const method = ctx.query?.method || 'GET'
|
|
319
|
+
|
|
320
|
+
switch (action) {
|
|
321
|
+
default:
|
|
322
|
+
if (method === 'GET') {
|
|
323
|
+
if (ctx.query?.id) {
|
|
324
|
+
return await get(ctx, body)
|
|
325
|
+
} else {
|
|
326
|
+
return await list(ctx, body)
|
|
327
|
+
}
|
|
328
|
+
} else if (method === 'POST') {
|
|
329
|
+
return await create(ctx, body)
|
|
330
|
+
} else if (method === 'PATCH') {
|
|
331
|
+
return await update(ctx, body)
|
|
332
|
+
} else if (method === 'DELETE') {
|
|
333
|
+
return await remove(ctx, body)
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
throw new Error('Invalid action or method')
|
|
338
|
+
})
|
|
339
|
+
// ─── CHUNK_END: PROMPT_CONFIGS_HANDLER ────────────────────────────────────────────────
|