spine-framework 0.3.144 → 0.4.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/.env.example +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5051 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +20 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,29 +1,39 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/prompt-configs.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Import shared dependencies for prompt configuration handlers."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare module-level imports used by prompt-config handlers."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported utilities" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports middleware, audit, permissions, database, and principal utilities." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="framework"]
|
|
1
10
|
import { createHandler } from './_shared/middleware'
|
|
2
11
|
import { emitLog } from './_shared/audit'
|
|
3
12
|
import { sanitizeRecordData } from './_shared/permissions'
|
|
4
13
|
import { adminDb } from './_shared/db'
|
|
5
14
|
import { isSystemAdmin } from './_shared/principal'
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Import shared dependencies for prompt configuration handlers.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:module_header:module_header"]
|
|
6
22
|
|
|
7
23
|
|
|
8
24
|
|
|
9
25
|
|
|
10
26
|
|
|
11
27
|
|
|
12
|
-
|
|
13
|
-
// CIL[
|
|
14
|
-
// CIL[DOC-
|
|
15
|
-
// CIL[DOC-
|
|
16
|
-
// CIL[DOC-
|
|
17
|
-
// CIL[DOC-
|
|
18
|
-
// CIL[DOC-
|
|
28
|
+
|
|
29
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/prompt-configs.ts"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="List prompt configuration records with optional filtering."]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a paginated, filtered list of prompt configs for the current account."]
|
|
32
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="ctx.query optional model, is_active, limit, offset" outputs="sanitized prompt_config records array" errors="throws if account missing or db error" side_effects="queries prompt_configs table"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Determines db context, builds query with filters and pagination, sanitizes each record." notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
19
36
|
// CIL[DOC-STABILITY stability="stable"]
|
|
20
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
21
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, \."]
|
|
22
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
23
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
24
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
25
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
26
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
27
37
|
export const list = createHandler(async (ctx, _body) => {
|
|
28
38
|
const { model, is_active, limit = 100, offset = 0 } = ctx.query || {}
|
|
29
39
|
|
|
@@ -59,21 +69,21 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
59
69
|
|
|
60
70
|
return sanitized
|
|
61
71
|
})
|
|
62
|
-
// CIL[
|
|
63
|
-
// CIL[
|
|
64
|
-
// CIL[DOC-
|
|
65
|
-
// CIL[DOC-
|
|
66
|
-
// CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
67
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Sanitized prompt config record" errors="Throws if ID missing or DB error" side_effects="Database query, permission sanitization"]
|
|
68
|
-
// CIL[DOC-MICRO logic_summary="Fetches config by ID, applies permission sanitization" notable_decisions="[]"]
|
|
69
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
70
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
71
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, \."]
|
|
72
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
73
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
74
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
72
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List prompt configuration records with optional filtering.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
73
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
74
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
75
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
75
76
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
76
77
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
78
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:list:constant"]
|
|
79
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/prompt-configs.ts"]
|
|
80
|
+
// CIL[DOC-MACRO purpose="Retrieve a single prompt configuration by ID."]
|
|
81
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the sanitized prompt config for the given id."]
|
|
82
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
83
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="sanitized prompt_config record" errors="throws if id missing or db error" side_effects="queries prompt_configs table"]
|
|
84
|
+
// CIL[DOC-MICRO logic_summary="Validates id, fetches the single matching record, sanitizes and returns it." notable_decisions="[]"]
|
|
85
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
86
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
77
87
|
export const get = createHandler(async (ctx, _body) => {
|
|
78
88
|
const { id } = ctx.query || {}
|
|
79
89
|
|
|
@@ -92,21 +102,21 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
92
102
|
|
|
93
103
|
return await sanitizeRecordData(ctx, data, 'prompt_config')
|
|
94
104
|
})
|
|
95
|
-
// CIL[
|
|
96
|
-
// CIL[
|
|
97
|
-
// CIL[DOC-
|
|
98
|
-
// CIL[DOC-
|
|
99
|
-
// CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
100
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Created prompt config record" errors="Throws on validation or DB errors" side_effects="Database insert, audit logging"]
|
|
101
|
-
// CIL[DOC-MICRO logic_summary="Validates required fields, sets defaults, creates config" notable_decisions="[]"]
|
|
102
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
103
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
104
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 3. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
105
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 4."]
|
|
106
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
107
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
105
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Retrieve a single prompt configuration by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
106
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
107
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
108
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
108
109
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
109
110
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
111
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:get:constant"]
|
|
112
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/prompt-configs.ts"]
|
|
113
|
+
// CIL[DOC-MACRO purpose="Create a new prompt configuration record."]
|
|
114
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Insert a new prompt_config with defaults and return the created record."]
|
|
115
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
116
|
+
// CIL[DOC-CONTRACT inputs="body with name, slug and optional fields" outputs="created prompt_config record" errors="throws if name/slug missing, account missing, or db error" side_effects="inserts into prompt_configs table and emits audit log"]
|
|
117
|
+
// CIL[DOC-MICRO logic_summary="Validates required fields, applies defaults, inserts the row, and emits an audit log." notable_decisions="[]"]
|
|
118
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
119
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
110
120
|
export const create = createHandler(async (ctx, body) => {
|
|
111
121
|
const { app_id, name, slug, description, system_prompt, context_template, model, temperature, max_tokens,
|
|
112
122
|
is_multi_turn, max_history_messages, confidence_threshold, escalation_action, escalation_target,
|
|
@@ -159,21 +169,21 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
159
169
|
|
|
160
170
|
return data
|
|
161
171
|
})
|
|
162
|
-
// CIL[
|
|
163
|
-
// CIL[
|
|
164
|
-
// CIL[DOC-
|
|
165
|
-
// CIL[DOC-
|
|
166
|
-
// CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
167
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Updated prompt config record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
|
|
168
|
-
// CIL[DOC-MICRO logic_summary="Updates allowed fields, maintains audit trail" notable_decisions="[]"]
|
|
169
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
170
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
171
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 9. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/db.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
172
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 9. Total affected: 11."]
|
|
173
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
174
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
172
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a new prompt configuration record.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
173
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
174
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
175
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
175
176
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
176
177
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
178
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:create:constant"]
|
|
179
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/prompt-configs.ts"]
|
|
180
|
+
// CIL[DOC-MACRO purpose="Update an existing prompt configuration."]
|
|
181
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Apply allowed field updates to a prompt config and return the updated record."]
|
|
182
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
183
|
+
// CIL[DOC-CONTRACT inputs="body or query with id plus allowed updates" outputs="updated prompt_config record" errors="throws if id missing or db error" side_effects="updates prompt_configs table and emits audit log"]
|
|
184
|
+
// CIL[DOC-MICRO logic_summary="Merges allowed updates with updated_at timestamp, performs the update, and emits an audit log." notable_decisions="[]"]
|
|
185
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
186
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
177
187
|
export const update = createHandler(async (ctx, body) => {
|
|
178
188
|
const id = body?.id || ctx.query?.id
|
|
179
189
|
const { id: _bodyId, ...updates } = body || {}
|
|
@@ -207,21 +217,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
207
217
|
|
|
208
218
|
return data
|
|
209
219
|
})
|
|
210
|
-
// CIL[
|
|
211
|
-
// CIL[
|
|
212
|
-
// CIL[DOC-
|
|
213
|
-
// CIL[DOC-
|
|
214
|
-
// CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
215
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws if ID missing or DB error" side_effects="Database delete, audit logging"]
|
|
216
|
-
// CIL[DOC-MICRO logic_summary="Hard deletes config, maintains audit trail" notable_decisions="[]"]
|
|
217
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
218
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
219
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
220
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
221
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
222
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
220
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Update an existing prompt configuration.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
221
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
222
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
223
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
223
224
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
224
225
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
226
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:update:constant"]
|
|
227
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/prompt-configs.ts"]
|
|
228
|
+
// CIL[DOC-MACRO purpose="Delete a prompt configuration by ID."]
|
|
229
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Remove a prompt_config record and confirm success."]
|
|
230
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
231
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="{ success: true }" errors="throws if id missing, not found, or db error" side_effects="deletes from prompt_configs table and emits audit log"]
|
|
232
|
+
// CIL[DOC-MICRO logic_summary="Fetches the current record for audit, deletes the row, and emits an audit log." notable_decisions="[]"]
|
|
233
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
234
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
225
235
|
export const remove = createHandler(async (ctx, _body) => {
|
|
226
236
|
const id = ctx.query?.id
|
|
227
237
|
|
|
@@ -251,21 +261,21 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
251
261
|
|
|
252
262
|
return { success: true }
|
|
253
263
|
})
|
|
254
|
-
// CIL[
|
|
255
|
-
// CIL[
|
|
256
|
-
// CIL[DOC-
|
|
257
|
-
// CIL[DOC-
|
|
258
|
-
// CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
259
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
|
|
260
|
-
// CIL[DOC-MICRO logic_summary="Routes based on method, delegates to CRUD handlers" notable_decisions="[]"]
|
|
261
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
262
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
263
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
264
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
265
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
266
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
264
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Delete a prompt configuration by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
265
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
266
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
267
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
267
268
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
268
269
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
270
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:remove:constant"]
|
|
271
|
+
// CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/prompt-configs.ts"]
|
|
272
|
+
// CIL[DOC-MACRO purpose="Dispatch prompt configuration requests by HTTP method and query."]
|
|
273
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Route incoming requests to list, get, create, update, or remove handlers."]
|
|
274
|
+
// CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
|
|
275
|
+
// CIL[DOC-CONTRACT inputs="ctx.query action and method, optional body" outputs="result from delegated handler" errors="throws if invalid action or method" side_effects="delegates to other handlers"]
|
|
276
|
+
// CIL[DOC-MICRO logic_summary="Switches on HTTP method and query id/action to call the appropriate handler." notable_decisions="[]"]
|
|
277
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
278
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
269
279
|
export const handler = createHandler(async (ctx, body) => {
|
|
270
280
|
const { action } = ctx.query || {}
|
|
271
281
|
const method = ctx.query?.method || 'GET'
|
|
@@ -289,4 +299,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
289
299
|
|
|
290
300
|
throw new Error('Invalid action or method')
|
|
291
301
|
})
|
|
292
|
-
// CIL[
|
|
302
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Dispatch prompt configuration requests by HTTP method and query.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
|
|
303
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
304
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
305
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
306
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
307
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
308
|
+
// CIL[END stable_id="~/.framework/functions/prompt-configs.ts:handler:constant"]
|
|
@@ -1,9 +1,40 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/roles.ts"]
|
|
2
|
+
// CIL[DOC-AUDIENCE audience="framework-internal"]
|
|
3
|
+
// CIL[DOC-MACRO purpose="Set up imports and exports for the roles Edge Function module"]
|
|
4
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide shared middleware and permission utilities for role handlers"]
|
|
5
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts"]
|
|
6
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="module exports and imports" errors="none at module load" side_effects="none"]
|
|
7
|
+
// CIL[DOC-MICRO logic_summary="Imports createHandler, adminDb, emitLog, PermissionEngine and sanitizeRecordData for role CRUD operations" notable_decisions="Centralizes role logic behind shared permission and database helpers"]
|
|
8
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
9
|
+
// CIL[DOC-STABILITY stable]
|
|
1
10
|
import { createHandler } from './_shared/middleware'
|
|
2
11
|
import { adminDb } from './_shared/db'
|
|
3
12
|
import { emitLog } from './_shared/audit'
|
|
4
13
|
import { PermissionEngine, sanitizeRecordData } from './_shared/permissions'
|
|
5
|
-
|
|
14
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Set up imports and exports for the roles Edge Function module'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
15
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
16
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
17
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
18
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:module_header:module_header"]
|
|
21
|
+
|
|
22
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:permissions:constant" type="constant" identity="permissions" parent="~/.framework/functions/roles.ts"]
|
|
23
|
+
// CIL[DOC-MACRO purpose="Provide a local alias for the shared PermissionEngine"]
|
|
24
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Expose permission checks under a typed local constant for role handlers"]
|
|
25
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
26
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="permissions: any" errors="none" side_effects="none"]
|
|
27
|
+
// CIL[DOC-MICRO logic_summary="Casts PermissionEngine to any as a module-local permissions reference" notable_decisions="Avoids changing shared permissions typings by using a local any cast"]
|
|
28
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
29
|
+
// CIL[DOC-STABILITY stable]
|
|
6
30
|
const permissions = PermissionEngine as any
|
|
31
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provide a local alias for the shared PermissionEngine'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
32
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
33
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
34
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
35
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
36
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
37
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:permissions:constant"]
|
|
7
38
|
|
|
8
39
|
|
|
9
40
|
|
|
@@ -11,21 +42,14 @@ const permissions = PermissionEngine as any
|
|
|
11
42
|
|
|
12
43
|
|
|
13
44
|
|
|
14
|
-
// CIL[BEGIN
|
|
15
|
-
// CIL[DOC-MACRO purpose="
|
|
16
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
17
|
-
// CIL[DOC-CONTEXT module="roles" layer="
|
|
18
|
-
// CIL[DOC-CONTRACT inputs="ctx,
|
|
19
|
-
// CIL[DOC-MICRO logic_summary="
|
|
20
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
21
|
-
// CIL[DOC-STABILITY
|
|
22
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
23
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
24
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
25
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
26
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
27
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
28
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
45
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/roles.ts"]
|
|
46
|
+
// CIL[DOC-MACRO purpose="List active roles with optional app and system filters"]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a paginated list of roles respecting query filters and user permission scoping"]
|
|
48
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="ctx.query with optional app_id, is_system, limit and offset" outputs="array of role records" errors="database errors and unhandled query failures" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Build a query on the roles table, filter by app_id and is_system, paginate and then either return full results for system admins or sanitize each record" notable_decisions="Defaults limit to 50 and offset to 0; sorts by is_system then name"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stable]
|
|
29
53
|
export const list = createHandler(async (ctx, _body) => {
|
|
30
54
|
const { app_id, is_system, limit = '50', offset = '0' } = ctx.query || {}
|
|
31
55
|
|
|
@@ -67,21 +91,21 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
67
91
|
|
|
68
92
|
return filteredData
|
|
69
93
|
})
|
|
70
|
-
// CIL[
|
|
71
|
-
// CIL[
|
|
72
|
-
// CIL[DOC-
|
|
73
|
-
// CIL[DOC-
|
|
74
|
-
// CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
75
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Single role record" errors="Throws if ID missing or DB error" side_effects="Database query, permission sanitization"]
|
|
76
|
-
// CIL[DOC-MICRO logic_summary="Fetches role by ID, applies permission sanitization" notable_decisions="[]"]
|
|
77
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
78
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
79
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
80
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
81
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
82
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
94
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List active roles with optional app and system filters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
95
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
96
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
97
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
83
98
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
84
99
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
100
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:list:constant"]
|
|
101
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/roles.ts"]
|
|
102
|
+
// CIL[DOC-MACRO purpose="Fetch a single active role by its id"]
|
|
103
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return one sanitized role record when the caller provides a valid id"]
|
|
104
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
105
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="single role record" errors="missing id and database fetch errors" side_effects="none"]
|
|
106
|
+
// CIL[DOC-MICRO logic_summary="Fetch the role by id with an app join and apply sanitizeRecordData before returning" notable_decisions="Requires id in query and treats missing records as database errors"]
|
|
107
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
108
|
+
// CIL[DOC-STABILITY stable]
|
|
85
109
|
export const get = createHandler(async (ctx, _body) => {
|
|
86
110
|
const { id } = ctx.query || {}
|
|
87
111
|
|
|
@@ -104,21 +128,21 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
104
128
|
const roleWithType = { ...data, type: 'role' }
|
|
105
129
|
return await sanitizeRecordData(ctx, roleWithType, 'role')
|
|
106
130
|
})
|
|
107
|
-
// CIL[
|
|
108
|
-
// CIL[
|
|
109
|
-
// CIL[DOC-
|
|
110
|
-
// CIL[DOC-
|
|
111
|
-
// CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
112
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Created role record" errors="Throws on validation, permission, or DB errors" side_effects="Database insert, audit logging"]
|
|
113
|
-
// CIL[DOC-MICRO logic_summary="Validates permissions, checks uniqueness, creates role" notable_decisions="[]"]
|
|
114
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
115
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
116
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
117
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
118
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
119
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
131
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch a single active role by its id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
132
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
133
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
134
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
120
135
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
121
136
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
137
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:get:constant"]
|
|
138
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/roles.ts"]
|
|
139
|
+
// CIL[DOC-MACRO purpose="Create a new role for an app or the platform"]
|
|
140
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate caller permissions, enforce slug uniqueness and insert a new role record"]
|
|
141
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
142
|
+
// CIL[DOC-CONTRACT inputs="body with app_id, slug, name, description, permissions object and is_system flag" outputs="newly created role record" errors="missing fields, permission denied, duplicate slug or database errors" side_effects="inserts a roles row and emits an audit log"]
|
|
143
|
+
// CIL[DOC-MICRO logic_summary="Require slug and name, enforce system_admin protection, check create permissions, guard against duplicate slugs and insert the role with a logged audit event" notable_decisions="Non-system-admins need surface create permission; system_admin slug is protected"]
|
|
144
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
145
|
+
// CIL[DOC-STABILITY stable]
|
|
122
146
|
export const create = createHandler(async (ctx, body) => {
|
|
123
147
|
const { app_id, slug, name, description, permissions: rolePermissions, is_system } = body
|
|
124
148
|
|
|
@@ -184,21 +208,21 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
184
208
|
|
|
185
209
|
return data
|
|
186
210
|
})
|
|
187
|
-
// CIL[
|
|
188
|
-
// CIL[
|
|
189
|
-
// CIL[DOC-
|
|
190
|
-
// CIL[DOC-
|
|
191
|
-
// CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
192
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Updated role record" errors="Throws on validation, permission, or DB errors" side_effects="Database update, audit logging"]
|
|
193
|
-
// CIL[DOC-MICRO logic_summary="Validates update permissions, applies changes with audit trail" notable_decisions="[]"]
|
|
194
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
195
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
196
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
197
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
198
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
199
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
211
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a new role for an app or the platform'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
212
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
213
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
214
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
200
215
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
201
216
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
217
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:create:constant"]
|
|
218
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/roles.ts"]
|
|
219
|
+
// CIL[DOC-MACRO purpose="Update an existing role by id"]
|
|
220
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate the request, apply field-level update permissions and persist the changes"]
|
|
221
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
222
|
+
// CIL[DOC-CONTRACT inputs="body with id and updates" outputs="updated role record" errors="missing id, missing role, validation failure or database errors" side_effects="updates the roles row and emits an audit log"]
|
|
223
|
+
// CIL[DOC-MICRO logic_summary="Require id and a valid principal, fetch the current record, validate update fields, apply updates with a fresh timestamp and log the change" notable_decisions="Uses permissions.validateUpdatePermissions before applying any field changes"]
|
|
224
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
225
|
+
// CIL[DOC-STABILITY stable]
|
|
202
226
|
export const update = createHandler(async (ctx, body) => {
|
|
203
227
|
const { id, ...updates } = body
|
|
204
228
|
|
|
@@ -247,21 +271,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
247
271
|
|
|
248
272
|
return data
|
|
249
273
|
})
|
|
250
|
-
// CIL[
|
|
251
|
-
// CIL[
|
|
252
|
-
// CIL[DOC-
|
|
253
|
-
// CIL[DOC-
|
|
254
|
-
// CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[]"]
|
|
255
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Deactivated role record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
|
|
256
|
-
// CIL[DOC-MICRO logic_summary="Soft deletes role, maintains audit trail" notable_decisions="[]"]
|
|
257
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
258
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
259
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
260
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
261
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
262
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
274
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Update an existing role by id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
275
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
276
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
277
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
263
278
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
264
279
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
280
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:update:constant"]
|
|
281
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/roles.ts"]
|
|
282
|
+
// CIL[DOC-MACRO purpose="Soft-delete a role by setting is_active to false"]
|
|
283
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Mark the requested role as inactive and record the deletion in the audit log"]
|
|
284
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
285
|
+
// CIL[DOC-CONTRACT inputs="body with id" outputs="deactivated role record" errors="missing id, missing role or database errors" side_effects="sets roles.is_active to false and emits an audit log"]
|
|
286
|
+
// CIL[DOC-MICRO logic_summary="Require id and a valid principal, fetch the current record, update is_active to false and log the deletion" notable_decisions="Performs a soft delete instead of removing the row"]
|
|
287
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
288
|
+
// CIL[DOC-STABILITY stable]
|
|
265
289
|
export const remove = createHandler(async (ctx, body) => {
|
|
266
290
|
const { id } = body
|
|
267
291
|
|
|
@@ -299,21 +323,21 @@ export const remove = createHandler(async (ctx, body) => {
|
|
|
299
323
|
|
|
300
324
|
return data
|
|
301
325
|
})
|
|
302
|
-
// CIL[
|
|
303
|
-
// CIL[
|
|
304
|
-
// CIL[DOC-
|
|
305
|
-
// CIL[DOC-
|
|
306
|
-
// CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[]"]
|
|
307
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
|
|
308
|
-
// CIL[DOC-MICRO logic_summary="Routes based on HTTP method, delegates to CRUD handlers" notable_decisions="[]"]
|
|
309
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
310
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
311
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
312
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
313
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
314
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
326
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Soft-delete a role by setting is_active to false'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
327
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
328
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
329
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
315
330
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
316
331
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
332
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:remove:constant"]
|
|
333
|
+
// CIL[BEGIN stable_id="~/.framework/functions/roles.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/roles.ts"]
|
|
334
|
+
// CIL[DOC-MACRO purpose="Route incoming role function requests to the correct handler by HTTP method"]
|
|
335
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch list, get, create, update and remove operations based on ctx.query.method"]
|
|
336
|
+
// CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
|
|
337
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.method and optional id" outputs="result from the dispatched handler" errors="unsupported method" side_effects="none directly; delegated handlers may mutate data"]
|
|
338
|
+
// CIL[DOC-MICRO logic_summary="Select the method from query or default to GET, then route to list, get, create, update or remove accordingly" notable_decisions="GET with id calls get; GET without id calls list; unsupported methods throw"]
|
|
339
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
340
|
+
// CIL[DOC-STABILITY stable]
|
|
317
341
|
export const handler = createHandler(async (ctx, body) => {
|
|
318
342
|
const method = ctx.query?.method || 'GET'
|
|
319
343
|
|
|
@@ -334,4 +358,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
334
358
|
throw new Error(`Unsupported method: ${method}`)
|
|
335
359
|
}
|
|
336
360
|
})
|
|
337
|
-
// CIL[
|
|
361
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Route incoming role function requests to the correct handler by HTTP method'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
362
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
363
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
364
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
365
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
366
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
367
|
+
// CIL[END stable_id="~/.framework/functions/roles.ts:handler:constant"]
|