spine-framework 0.3.145 → 0.4.1
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 +5067 -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 +15 -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,3 +1,12 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/apps.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Application management handlers and CRUD operations for public.apps"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define and export Netlify-style handler functions for the app lifecycle: list, get, schema, create, update, remove, availability, version, and dispatch"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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="imported shared modules" outputs="exported handler constants" errors="import-time type errors" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports shared middleware and permission helpers; exports handler functions for the apps API" notable_decisions="Uses createHandler for consistent request/response wrapping; delegates to PermissionEngine for access control"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="backend maintainers"]
|
|
1
10
|
|
|
2
11
|
|
|
3
12
|
|
|
@@ -25,53 +34,56 @@
|
|
|
25
34
|
|
|
26
35
|
|
|
27
36
|
|
|
28
|
-
|
|
29
37
|
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
30
43
|
|
|
31
44
|
|
|
32
45
|
|
|
33
46
|
|
|
34
47
|
|
|
35
48
|
|
|
36
|
-
// CIL[BEGIN chunk_id="apps_moduleheader_1783969696" type="module_header" identity="imports" parent="none"]
|
|
37
|
-
// CIL[DOC-MACRO purpose="Import dependencies for apps module"]
|
|
38
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import middleware, database, permissions, and logging utilities"]
|
|
39
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
40
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="imported_modules" errors="none" side_effects="none"]
|
|
41
|
-
// CIL[DOC-MICRO logic_summary="Imports required dependencies for app management functions" notable_decisions="[]"]
|
|
42
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
|
|
43
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
44
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
45
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
46
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
47
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
48
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
49
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
51
49
|
|
|
52
50
|
import { createHandler } from './_shared/middleware'
|
|
53
51
|
import { adminDb } from './_shared/db'
|
|
54
52
|
import { emitLog } from './_shared/audit'
|
|
55
53
|
import { isSystemAdmin } from './_shared/principal'
|
|
56
54
|
import { PermissionEngine, sanitizeRecordData } from './_shared/permissions'
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// CIL[
|
|
60
|
-
// CIL[
|
|
61
|
-
// CIL[DOC-
|
|
62
|
-
// CIL[DOC-
|
|
63
|
-
// CIL[
|
|
64
|
-
|
|
65
|
-
// CIL[
|
|
66
|
-
// CIL[DOC-
|
|
67
|
-
// CIL[DOC-
|
|
55
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Application management handlers and CRUD operations for public.apps'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
56
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
57
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
58
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
59
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
60
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
61
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:module_header:module_header"]
|
|
62
|
+
|
|
63
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:permissions:constant" type="constant" identity="permissions" parent="~/.framework/functions/apps.ts"]
|
|
64
|
+
// CIL[DOC-MACRO purpose="Type alias shim for PermissionEngine"]
|
|
65
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Reference PermissionEngine with loose typing for app handlers"]
|
|
66
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
67
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="permissions reference" errors="none" side_effects="none"]
|
|
68
|
+
// CIL[DOC-MICRO logic_summary="Casts PermissionEngine to any to avoid strict type errors in this module" notable_decisions="Should be replaced by a properly typed export from the permissions engine"]
|
|
69
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
68
70
|
// CIL[DOC-STABILITY stability="stable"]
|
|
69
|
-
|
|
70
|
-
// CIL[DOC-VECTOR type="
|
|
71
|
-
// CIL[DOC-VECTOR type="
|
|
72
|
-
// CIL[DOC-VECTOR type="
|
|
71
|
+
const permissions = PermissionEngine as any
|
|
72
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Type alias shim for PermissionEngine'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.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"]
|
|
73
76
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
74
77
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
78
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:permissions:constant"]
|
|
79
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/apps.ts"]
|
|
80
|
+
// CIL[DOC-MACRO purpose="List apps for an account with optional filters"]
|
|
81
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a sanitized list of apps accessible to the caller's roles"]
|
|
82
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
83
|
+
// CIL[DOC-CONTRACT inputs="ctx.query with include_system, include_inactive, account_id; ctx.accountId, ctx.principal, ctx.db" outputs="array of sanitized app records" errors="Account context required; database errors" side_effects="none"]
|
|
84
|
+
// CIL[DOC-MICRO logic_summary="Resolves target account, selects adminDb for system admins, calls get_account_apps RPC, and sanitizes each record" notable_decisions="Defaults include_system to true unless explicitly false; uses sanitizeRecordData per row"]
|
|
85
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
86
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
75
87
|
export const list = createHandler(async (ctx, body) => {
|
|
76
88
|
const { include_system, include_inactive, account_id } = ctx.query || {}
|
|
77
89
|
|
|
@@ -105,21 +117,21 @@ export const list = createHandler(async (ctx, body) => {
|
|
|
105
117
|
|
|
106
118
|
return sanitized
|
|
107
119
|
})
|
|
108
|
-
// CIL[
|
|
109
|
-
// CIL[
|
|
110
|
-
// CIL[DOC-
|
|
111
|
-
// CIL[DOC-
|
|
112
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
113
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="sanitized_app" errors="not_found,db_errors" side_effects="none"]
|
|
114
|
-
// CIL[DOC-MICRO logic_summary="Query app by ID or slug and sanitize data for response" notable_decisions="[]"]
|
|
115
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
|
|
116
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
117
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
118
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
119
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
120
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
120
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List apps for an account with optional filters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
121
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
122
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
123
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
121
124
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
122
125
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
126
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:list:constant"]
|
|
127
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/apps.ts"]
|
|
128
|
+
// CIL[DOC-MACRO purpose="Fetch a single active app by id or slug"]
|
|
129
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a sanitized app record matching the requested id or slug"]
|
|
130
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
131
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.id or slug" outputs="sanitized app record" errors="App ID or slug required; not found; database errors" side_effects="none"]
|
|
132
|
+
// CIL[DOC-MICRO logic_summary="Queries the apps table by id or slug, limits to active records, and returns sanitized data" notable_decisions="Prefers id over slug; uses .single() to enforce a single result"]
|
|
133
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
134
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
123
135
|
export const get = createHandler(async (ctx, body) => {
|
|
124
136
|
const { id, slug } = ctx.query || {}
|
|
125
137
|
|
|
@@ -147,21 +159,21 @@ export const get = createHandler(async (ctx, body) => {
|
|
|
147
159
|
|
|
148
160
|
return await sanitizeRecordData(ctx, data, 'app')
|
|
149
161
|
})
|
|
150
|
-
// CIL[
|
|
151
|
-
// CIL[
|
|
152
|
-
// CIL[DOC-
|
|
153
|
-
// CIL[DOC-
|
|
154
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
155
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="app_schema" errors="not_found,db_errors" side_effects="none"]
|
|
156
|
-
// CIL[DOC-MICRO logic_summary="Call stored procedure to get app schema by slug" notable_decisions="[]"]
|
|
157
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
|
|
158
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
159
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 1. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
160
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
161
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
162
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
162
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch a single active app by id or slug'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
163
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
164
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
165
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
163
166
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
164
167
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
168
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:get:constant"]
|
|
169
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:getSchema:constant" type="constant" identity="getSchema" parent="~/.framework/functions/apps.ts"]
|
|
170
|
+
// CIL[DOC-MACRO purpose="Retrieve the design schema for an app by slug"]
|
|
171
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the schema payload from the get_app_schema RPC"]
|
|
172
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
173
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.slug" outputs="app design schema" errors="App slug is required; database errors" side_effects="none"]
|
|
174
|
+
// CIL[DOC-MICRO logic_summary="Validates the slug and invokes the get_app_schema RPC, returning the result" notable_decisions="Relies on a database stored procedure for schema generation"]
|
|
175
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
176
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
165
177
|
export const getSchema = createHandler(async (ctx, body) => {
|
|
166
178
|
const { slug } = ctx.query || {}
|
|
167
179
|
|
|
@@ -176,21 +188,21 @@ export const getSchema = createHandler(async (ctx, body) => {
|
|
|
176
188
|
|
|
177
189
|
return data
|
|
178
190
|
})
|
|
179
|
-
// CIL[
|
|
180
|
-
// CIL[
|
|
181
|
-
// CIL[DOC-
|
|
182
|
-
// CIL[DOC-
|
|
183
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
184
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="created_app" errors="validation_errors,permission_errors" side_effects="db_write,audit_log"]
|
|
185
|
-
// CIL[DOC-MICRO logic_summary="Validate permissions, check slug uniqueness, create app, log event" notable_decisions="[]"]
|
|
186
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
187
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
188
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
189
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
190
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
191
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
191
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Retrieve the design schema for an app by slug'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
192
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
193
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
194
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
192
195
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
193
196
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
197
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:getSchema:constant"]
|
|
198
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/apps.ts"]
|
|
199
|
+
// CIL[DOC-MACRO purpose="Create a new app record"]
|
|
200
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate input and permissions, insert a new app row, and emit an audit log"]
|
|
201
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
202
|
+
// CIL[DOC-CONTRACT inputs="body with slug, name, and optional fields; ctx.principal, ctx.accountId" outputs="created app record" errors="Missing slug/name; anonymous user; insufficient permissions; duplicate slug; database errors" side_effects="inserts an apps row and emits app.created log"]
|
|
203
|
+
// CIL[DOC-MICRO logic_summary="Enforces required fields and auth, checks create permission, ensures slug uniqueness, inserts with defaults, and emits an audit event" notable_decisions="Defaults version, app_type, source, route_prefix, and min_role; only system admins bypass permission checks"]
|
|
204
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
205
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
194
206
|
export const create = createHandler(async (ctx, body) => {
|
|
195
207
|
const { slug, name, description, icon, color, version, app_type, source, owner_account_id, config, nav_items, min_role, integration_deps, metadata, route_prefix, renderer } = body
|
|
196
208
|
|
|
@@ -258,21 +270,21 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
258
270
|
|
|
259
271
|
return data
|
|
260
272
|
})
|
|
261
|
-
// CIL[
|
|
262
|
-
// CIL[
|
|
263
|
-
// CIL[DOC-
|
|
264
|
-
// CIL[DOC-
|
|
265
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
266
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="updated_app" errors="not_found,permission_errors" side_effects="db_write,audit_log"]
|
|
267
|
-
// CIL[DOC-MICRO logic_summary="Validate update permissions, apply changes, log modification" notable_decisions="[]"]
|
|
268
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
269
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
270
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
271
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
272
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
273
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
273
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a new app record'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
274
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
275
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
276
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
274
277
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
275
278
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
279
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:create:constant"]
|
|
280
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/apps.ts"]
|
|
281
|
+
// CIL[DOC-MACRO purpose="Update an existing app"]
|
|
282
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate the caller, load the current record, check field-level permissions, and apply updates"]
|
|
283
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
284
|
+
// CIL[DOC-CONTRACT inputs="body with id and update fields; ctx.principal, ctx.accountId" outputs="updated app record" errors="App ID is required; not found; field permission denied; database errors" side_effects="updates the apps row and emits app.updated log"]
|
|
285
|
+
// CIL[DOC-MICRO logic_summary="Finds the current record, validates update permissions, sets updated_at, persists changes, and emits an audit event" notable_decisions="Strips body id from updates; uses validateUpdatePermissions to enforce field-level access"]
|
|
286
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
287
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
276
288
|
export const update = createHandler(async (ctx, body) => {
|
|
277
289
|
const id = body?.id || ctx.query?.id
|
|
278
290
|
const { id: _bodyId, ...updates } = body || {}
|
|
@@ -324,21 +336,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
324
336
|
|
|
325
337
|
return data
|
|
326
338
|
})
|
|
327
|
-
// CIL[
|
|
328
|
-
// CIL[
|
|
329
|
-
// CIL[DOC-
|
|
330
|
-
// CIL[DOC-
|
|
331
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
332
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="deactivated_app" errors="not_found,auth_errors" side_effects="db_write,audit_log"]
|
|
333
|
-
// CIL[DOC-MICRO logic_summary="Set is_active=false instead of hard delete, log removal" notable_decisions="[]"]
|
|
334
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
|
|
335
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
336
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
337
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
338
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
339
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
339
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Update an existing app'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
340
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
341
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
342
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
340
343
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
341
344
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
345
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:update:constant"]
|
|
346
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/apps.ts"]
|
|
347
|
+
// CIL[DOC-MACRO purpose="Soft-delete an app"]
|
|
348
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Set is_active to false for an app after authentication and existence checks"]
|
|
349
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
350
|
+
// CIL[DOC-CONTRACT inputs="body or query id; ctx.principal, ctx.accountId" outputs="deactivated app record" errors="App ID is required; not found; database errors" side_effects="deactivates the app and emits app.deleted log"]
|
|
351
|
+
// CIL[DOC-MICRO logic_summary="Loads the record, flips the is_active flag and updated_at, and emits an audit event" notable_decisions="Performs a soft delete rather than a hard delete"]
|
|
352
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
353
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
342
354
|
export const remove = createHandler(async (ctx, body) => {
|
|
343
355
|
const id = body?.id || ctx.query?.id
|
|
344
356
|
|
|
@@ -377,21 +389,21 @@ export const remove = createHandler(async (ctx, body) => {
|
|
|
377
389
|
|
|
378
390
|
return data
|
|
379
391
|
})
|
|
380
|
-
// CIL[
|
|
381
|
-
// CIL[
|
|
382
|
-
// CIL[DOC-
|
|
383
|
-
// CIL[DOC-
|
|
384
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
385
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="availability_boolean" errors="validation_errors,db_errors" side_effects="none"]
|
|
386
|
-
// CIL[DOC-MICRO logic_summary="Call stored procedure to check slug availability in account" notable_decisions="[]"]
|
|
387
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
|
|
388
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
389
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
390
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
391
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
392
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
392
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Soft-delete an app'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
393
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
394
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
395
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
393
396
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
394
397
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
398
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:remove:constant"]
|
|
399
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:checkAvailability:constant" type="constant" identity="checkAvailability" parent="~/.framework/functions/apps.ts"]
|
|
400
|
+
// CIL[DOC-MACRO purpose="Check whether a slug is available for an account"]
|
|
401
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return an availability boolean from the is_app_available RPC"]
|
|
402
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
403
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.slug and ctx.accountId" outputs="{ available: boolean }" errors="App slug is required; account context required; database errors" side_effects="none"]
|
|
404
|
+
// CIL[DOC-MICRO logic_summary="Validates the slug and account, then calls the is_app_available RPC" notable_decisions="Uses an account-scoped stored procedure to determine availability"]
|
|
405
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
406
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
395
407
|
export const checkAvailability = createHandler(async (ctx, body) => {
|
|
396
408
|
const { slug } = ctx.query || {}
|
|
397
409
|
|
|
@@ -413,21 +425,21 @@ export const checkAvailability = createHandler(async (ctx, body) => {
|
|
|
413
425
|
|
|
414
426
|
return { available: data }
|
|
415
427
|
})
|
|
416
|
-
// CIL[
|
|
417
|
-
// CIL[
|
|
418
|
-
// CIL[DOC-
|
|
419
|
-
// CIL[DOC-
|
|
420
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
421
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="success_status" errors="validation_errors,db_errors" side_effects="db_write,audit_log"]
|
|
422
|
-
// CIL[DOC-MICRO logic_summary="Call stored procedure to update version, log change" notable_decisions="[]"]
|
|
423
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
|
|
424
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
425
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
426
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
427
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
428
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
428
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Check whether a slug is available for an account'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
429
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
430
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
431
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
429
432
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
430
433
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
434
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:checkAvailability:constant"]
|
|
435
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:updateVersion:constant" type="constant" identity="updateVersion" parent="~/.framework/functions/apps.ts"]
|
|
436
|
+
// CIL[DOC-MACRO purpose="Update an app version via a stored procedure"]
|
|
437
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Bump the version of an app and emit an audit log"]
|
|
438
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
439
|
+
// CIL[DOC-CONTRACT inputs="body.id and body.version" outputs="{ success: true }" errors="App ID and version are required; database errors" side_effects="updates the app version and emits app.version_updated log"]
|
|
440
|
+
// CIL[DOC-MICRO logic_summary="Validates inputs, calls the update_app_version RPC, and emits an audit event" notable_decisions="RPC encapsulates version logic and any related triggers"]
|
|
441
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
442
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
431
443
|
export const updateVersion = createHandler(async (ctx, body) => {
|
|
432
444
|
const { id, version } = body
|
|
433
445
|
|
|
@@ -447,21 +459,21 @@ export const updateVersion = createHandler(async (ctx, body) => {
|
|
|
447
459
|
|
|
448
460
|
return { success: true }
|
|
449
461
|
})
|
|
450
|
-
// CIL[
|
|
451
|
-
// CIL[
|
|
452
|
-
// CIL[DOC-
|
|
453
|
-
// CIL[DOC-
|
|
454
|
-
// CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
|
|
455
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="function_responses" errors="method_errors" side_effects="none"]
|
|
456
|
-
// CIL[DOC-MICRO logic_summary="Route based on HTTP method and query parameters to specific functions" notable_decisions="[]"]
|
|
457
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.97" flags="none"]
|
|
458
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
459
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
460
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
461
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
462
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
462
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Update an app version via a stored procedure'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
463
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
464
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
465
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
463
466
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
464
467
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
468
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:updateVersion:constant"]
|
|
469
|
+
// CIL[BEGIN stable_id="~/.framework/functions/apps.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/apps.ts"]
|
|
470
|
+
// CIL[DOC-MACRO purpose="Dispatch incoming app requests to the correct handler by HTTP method and action"]
|
|
471
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Route GET/POST/PATCH/DELETE methods to the appropriate list, get, schema, create, update, remove, and version handlers"]
|
|
472
|
+
// CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
|
|
473
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.method, action, id, and slug" outputs="result of the delegated handler" errors="Unsupported HTTP method" side_effects="delegates to other handlers"]
|
|
474
|
+
// CIL[DOC-MICRO logic_summary="Switches on HTTP method and query params to dispatch to the appropriate app operation" notable_decisions="GET with id or slug maps to get; action schema/available handled; POST action version or create; PATCH update; DELETE remove"]
|
|
475
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
476
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
465
477
|
export const handler = createHandler(async (ctx, body) => {
|
|
466
478
|
const method = ctx.query?.method || 'GET'
|
|
467
479
|
|
|
@@ -492,4 +504,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
492
504
|
throw new Error(`Unsupported method: ${method}`)
|
|
493
505
|
}
|
|
494
506
|
})
|
|
495
|
-
// CIL[
|
|
507
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Dispatch incoming app requests to the correct handler by HTTP method and action'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
508
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
509
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
510
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
511
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
512
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
513
|
+
// CIL[END stable_id="~/.framework/functions/apps.ts:handler:constant"]
|