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,25 +1,26 @@
|
|
|
1
|
-
// CIL[BEGIN
|
|
2
|
-
// CIL[DOC-MACRO purpose="
|
|
3
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
4
|
-
// CIL[DOC-CONTEXT module="
|
|
5
|
-
// CIL[DOC-CONTRACT inputs="
|
|
6
|
-
// CIL[DOC-MICRO logic_summary="
|
|
7
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/cil-validate.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Netlify function endpoint for validating and updating CIL chunk content hashes"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Expose HTTP actions to verify chunk drift, compute hashes, update stored hashes, and validate source files"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="HTTP request with action query and JSON body" outputs="JSON validation summary, hash value, or updated hash record" errors="Missing required fields, unknown action, chunk not found, file not found, missing repo_path" side_effects="Queries and updates the adminDb items table, reads source files from disk"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Dispatches to validate, update_hash, compute_hash, or validate_file actions and returns structured results" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="
|
|
10
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
11
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
12
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
13
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
14
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
15
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="system-maintainers"]
|
|
16
10
|
|
|
17
11
|
|
|
18
12
|
import { createHandler } from './_shared/middleware'
|
|
19
13
|
import { adminDb } from './_shared/db'
|
|
20
|
-
import
|
|
14
|
+
import { computeContentHash } from './_shared/cil'
|
|
21
15
|
import * as fs from 'fs'
|
|
22
16
|
import * as path from 'path'
|
|
17
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function endpoint for validating and updating CIL chunk content hashes'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
18
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
19
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
20
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
21
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
22
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
23
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:module_header:module_header"]
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
|
|
@@ -27,102 +28,107 @@ import * as path from 'path'
|
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-
|
|
35
|
-
// CIL[DOC-
|
|
36
|
-
// CIL[DOC-
|
|
37
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
31
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:ChunkToValidate:interface" type="interface" identity="ChunkToValidate" parent="~/.framework/functions/cil-validate.ts"]
|
|
32
|
+
// CIL[DOC-MACRO purpose="Shape of a chunk reference used in validation requests"]
|
|
33
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the type contract for chunks submitted to the validate action"]
|
|
34
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
35
|
+
// CIL[DOC-CONTRACT inputs="raw JSON with optional chunk_id, stable_id, version_id, required chunk_name, and content" outputs="typed ChunkToValidate interface" errors="none" side_effects="none"]
|
|
36
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface with optional identifiers and required chunk_name and content fields" notable_decisions="[]"]
|
|
37
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
38
38
|
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
40
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
41
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
42
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
43
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
45
39
|
interface ChunkToValidate {
|
|
46
|
-
chunk_id
|
|
40
|
+
chunk_id?: string
|
|
47
41
|
chunk_name: string
|
|
48
|
-
content: string
|
|
42
|
+
content: string
|
|
43
|
+
stable_id?: string
|
|
44
|
+
version_id?: string
|
|
49
45
|
}
|
|
46
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shape of a chunk reference used in validation requests'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
47
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
48
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
49
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
50
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
51
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
52
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:ChunkToValidate:interface"]
|
|
50
53
|
|
|
51
54
|
|
|
52
55
|
|
|
53
56
|
|
|
54
57
|
|
|
55
|
-
// CIL[
|
|
56
|
-
// CIL[
|
|
57
|
-
// CIL[DOC-
|
|
58
|
-
// CIL[DOC-
|
|
59
|
-
// CIL[DOC-
|
|
60
|
-
// CIL[DOC-
|
|
61
|
-
// CIL[DOC-
|
|
62
|
-
// CIL[DOC-
|
|
63
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
64
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
65
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
66
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
67
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
68
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
69
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
58
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:ValidationResult:interface" type="interface" identity="ValidationResult" parent="~/.framework/functions/cil-validate.ts"]
|
|
59
|
+
// CIL[DOC-MACRO purpose="Shape of the result returned for a validated chunk"]
|
|
60
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Report whether a chunk is current, drifted, or not found"]
|
|
61
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
62
|
+
// CIL[DOC-CONTRACT inputs="chunk metadata, stored and computed hashes, and status message" outputs="typed ValidationResult interface" errors="none" side_effects="none"]
|
|
63
|
+
// CIL[DOC-STABILITY stability="internal"]
|
|
64
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
65
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface describing validation outcome fields" notable_decisions="[]"]
|
|
70
66
|
interface ValidationResult {
|
|
71
67
|
chunk_id: string
|
|
68
|
+
stable_id: string | null
|
|
72
69
|
chunk_name: string
|
|
73
70
|
status: 'current' | 'drift_detected' | 'not_found'
|
|
74
71
|
stored_hash: string | null
|
|
75
72
|
validation_hash: string
|
|
76
73
|
message: string
|
|
77
74
|
}
|
|
75
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:ValidationResult:interface"]
|
|
78
76
|
|
|
79
77
|
|
|
78
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shape of the result returned for a validated chunk'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
79
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
80
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
81
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
82
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
83
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
80
84
|
|
|
81
85
|
|
|
82
86
|
|
|
83
|
-
// CIL[
|
|
84
|
-
// CIL[
|
|
85
|
-
// CIL[DOC-
|
|
86
|
-
// CIL[DOC-
|
|
87
|
-
// CIL[DOC-
|
|
88
|
-
// CIL[DOC-
|
|
89
|
-
// CIL[DOC-
|
|
90
|
-
// CIL[DOC-
|
|
91
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
92
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
93
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
94
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
95
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
96
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
97
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
87
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:ValidateRequest:interface" type="interface" identity="ValidateRequest" parent="~/.framework/functions/cil-validate.ts"]
|
|
88
|
+
// CIL[DOC-MACRO purpose="Shape of a batch chunk validation request"]
|
|
89
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Collect optional file path and an array of chunks to validate"]
|
|
90
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
91
|
+
// CIL[DOC-CONTRACT inputs="optional file_path and chunks array" outputs="typed ValidateRequest interface" errors="none" side_effects="none"]
|
|
92
|
+
// CIL[DOC-STABILITY stability="internal"]
|
|
93
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
94
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface with optional file_path and required chunks array" notable_decisions="[]"]
|
|
98
95
|
interface ValidateRequest {
|
|
99
96
|
file_path?: string
|
|
100
97
|
chunks: ChunkToValidate[]
|
|
101
98
|
}
|
|
99
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:ValidateRequest:interface"]
|
|
102
100
|
|
|
101
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shape of a batch chunk validation request'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
102
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
103
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
104
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
105
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
106
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
103
107
|
|
|
104
108
|
|
|
105
109
|
|
|
106
110
|
|
|
107
|
-
// CIL[
|
|
108
|
-
// CIL[
|
|
109
|
-
// CIL[DOC-
|
|
110
|
-
// CIL[DOC-
|
|
111
|
-
// CIL[DOC-
|
|
112
|
-
// CIL[DOC-
|
|
113
|
-
// CIL[DOC-
|
|
114
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
111
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:UpdateHashRequest:interface" type="interface" identity="UpdateHashRequest" parent="~/.framework/functions/cil-validate.ts"]
|
|
112
|
+
// CIL[DOC-MACRO purpose="Shape of a request to update a stored content hash"]
|
|
113
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Identify a chunk by stable_id or chunk_id and provide new content"]
|
|
114
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
115
|
+
// CIL[DOC-CONTRACT inputs="optional chunk_id, stable_id, version_id and required content" outputs="typed UpdateHashRequest interface" errors="none" side_effects="none"]
|
|
116
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface with optional identifiers and required content field" notable_decisions="[]"]
|
|
117
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
115
118
|
// CIL[DOC-STABILITY stability="stable"]
|
|
116
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
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."]
|
|
120
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
121
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
122
119
|
interface UpdateHashRequest {
|
|
123
|
-
chunk_id
|
|
120
|
+
chunk_id?: string
|
|
121
|
+
stable_id?: string
|
|
122
|
+
version_id?: string
|
|
124
123
|
content: string
|
|
125
124
|
}
|
|
125
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shape of a request to update a stored content hash'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
126
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
127
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
128
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
129
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
130
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
131
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:UpdateHashRequest:interface"]
|
|
126
132
|
|
|
127
133
|
|
|
128
134
|
|
|
@@ -131,85 +137,111 @@ interface UpdateHashRequest {
|
|
|
131
137
|
|
|
132
138
|
|
|
133
139
|
|
|
134
|
-
// CIL[
|
|
135
|
-
// CIL[
|
|
136
|
-
// CIL[DOC-
|
|
137
|
-
// CIL[DOC-
|
|
138
|
-
// CIL[DOC-
|
|
139
|
-
// CIL[DOC-
|
|
140
|
-
// CIL[DOC-
|
|
141
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
140
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:computeHash:function" type="function" identity="computeHash" parent="~/.framework/functions/cil-validate.ts"]
|
|
141
|
+
// CIL[DOC-MACRO purpose="Compute the stored content hash for a given string"]
|
|
142
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Delegate to the shared computeContentHash implementation"]
|
|
143
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
144
|
+
// CIL[DOC-CONTRACT inputs="content string" outputs="hash string" errors="none" side_effects="none"]
|
|
145
|
+
// CIL[DOC-MICRO logic_summary="Thin wrapper around computeContentHash from _shared/cil" notable_decisions="[]"]
|
|
146
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
142
147
|
// CIL[DOC-STABILITY stability="stable"]
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// CIL[DOC-VECTOR type="
|
|
148
|
+
function computeHash(content: string): string {
|
|
149
|
+
return computeContentHash(content)
|
|
150
|
+
}
|
|
151
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Compute the stored content hash for a given string'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
152
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
153
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
154
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
147
155
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
148
156
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
149
|
-
|
|
150
|
-
const lines = raw.replace(/\r\n/g, '\n').split('\n')
|
|
151
|
-
const filtered = lines.filter(line => {
|
|
152
|
-
const trimmed = line.trim()
|
|
153
|
-
|
|
154
|
-
return !trimmed.match(/^\/\/\s*[─\-]+\s*CHUNK_(START|END):/) &&
|
|
155
|
-
!trimmed.match(/^\/\*\*?\s*CHUNK_(START|END):.+\*\//)
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
const collapsed: string[] = []
|
|
159
|
-
let lastBlank = false
|
|
160
|
-
for (const line of filtered) {
|
|
161
|
-
const isBlank = line.trim() === ''
|
|
162
|
-
if (isBlank && lastBlank) continue
|
|
163
|
-
collapsed.push(line)
|
|
164
|
-
lastBlank = isBlank
|
|
165
|
-
}
|
|
166
|
-
return collapsed.join('\n').trim()
|
|
167
|
-
}
|
|
157
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:computeHash:function"]
|
|
168
158
|
|
|
169
159
|
|
|
170
160
|
|
|
171
161
|
|
|
172
162
|
|
|
173
|
-
// CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_validate_normalisecontent_1784235266"]
|
|
174
|
-
// CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_validate_computehash_1784235266" type="function" identity="computehash" parent="none"]
|
|
175
|
-
// CIL[DOC-MACRO purpose="Implements computehash logic in cortex.functions.custom_cil-validate"]
|
|
176
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Execute computehash and return its computed result"]
|
|
177
|
-
// CIL[DOC-CONTEXT module="cortex.functions.custom_cil-validate" layer="function" related_files="[]"]
|
|
178
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
|
|
179
|
-
// CIL[DOC-MICRO logic_summary="Provides computehash with computeHash(content: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
|
|
180
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
181
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
182
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
183
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
184
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
185
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
186
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
187
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
188
|
-
function computeHash(content: string): string {
|
|
189
|
-
return crypto.createHash('sha256').update(normaliseContent(content)).digest('hex').slice(0, 16)
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
163
|
|
|
194
164
|
|
|
195
165
|
|
|
166
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:resolveChunk:function" type="function" identity="resolveChunk" parent="~/.framework/functions/cil-validate.ts"]
|
|
167
|
+
// CIL[DOC-MACRO purpose="Resolve a chunk record from the graph by stable_id, version_id, or chunk_id"]
|
|
168
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Look up the active chunk record and fallback through versioned and legacy identifiers"]
|
|
169
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
170
|
+
// CIL[DOC-CONTRACT inputs="input: object with optional chunk_id, stable_id, and version_id" outputs="item id and data or null" errors="none" side_effects="none"]
|
|
171
|
+
// CIL[DOC-MICRO logic_summary="Query adminDb by stable_id/version, fallback to active version via project, then chunk_id" notable_decisions="[]"]
|
|
172
|
+
// CIL[DOC-NOTE type="parameter" content="input: object containing optional chunk_id, stable_id, and version_id"]
|
|
173
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
174
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
175
|
+
async function resolveChunk(
|
|
176
|
+
input: { chunk_id?: string; stable_id?: string; version_id?: string }
|
|
177
|
+
): Promise<{ id: string; data: any } | null> {
|
|
178
|
+
if (input.stable_id) {
|
|
179
|
+
if (input.version_id) {
|
|
180
|
+
const { data: item } = await adminDb
|
|
181
|
+
.from('items')
|
|
182
|
+
.select('id, data')
|
|
183
|
+
.filter('data->>kb_type', 'eq', 'cil_chunk')
|
|
184
|
+
.filter('data->>stable_id', 'eq', input.stable_id)
|
|
185
|
+
.filter('data->>version_id', 'eq', input.version_id)
|
|
186
|
+
.maybeSingle()
|
|
187
|
+
if (item) return item
|
|
188
|
+
} else {
|
|
189
|
+
const { data: candidates } = await adminDb
|
|
190
|
+
.from('items')
|
|
191
|
+
.select('id, data')
|
|
192
|
+
.filter('data->>kb_type', 'eq', 'cil_chunk')
|
|
193
|
+
.filter('data->>stable_id', 'eq', input.stable_id)
|
|
194
|
+
.limit(1)
|
|
195
|
+
const candidate = candidates?.[0]
|
|
196
|
+
if (candidate?.data?.project_id) {
|
|
197
|
+
const { data: project } = await adminDb
|
|
198
|
+
.from('items')
|
|
199
|
+
.select('id, data')
|
|
200
|
+
.eq('id', candidate.data.project_id)
|
|
201
|
+
.maybeSingle()
|
|
202
|
+
const activeVersionId = project?.data?.active_version_id
|
|
203
|
+
if (activeVersionId) {
|
|
204
|
+
const { data: item } = await adminDb
|
|
205
|
+
.from('items')
|
|
206
|
+
.select('id, data')
|
|
207
|
+
.filter('data->>kb_type', 'eq', 'cil_chunk')
|
|
208
|
+
.filter('data->>stable_id', 'eq', input.stable_id)
|
|
209
|
+
.filter('data->>version_id', 'eq', activeVersionId)
|
|
210
|
+
.maybeSingle()
|
|
211
|
+
if (item) return item
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (candidate) return candidate
|
|
215
|
+
}
|
|
216
|
+
}
|
|
196
217
|
|
|
218
|
+
if (input.chunk_id) {
|
|
219
|
+
const { data: item } = await adminDb
|
|
220
|
+
.from('items')
|
|
221
|
+
.select('id, data')
|
|
222
|
+
.eq('id', input.chunk_id)
|
|
223
|
+
.maybeSingle()
|
|
224
|
+
if (item) return item
|
|
225
|
+
}
|
|
197
226
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
// CIL[DOC-
|
|
201
|
-
// CIL[DOC-
|
|
202
|
-
// CIL[DOC-
|
|
203
|
-
// CIL[DOC-
|
|
204
|
-
// CIL[DOC-MICRO logic_summary="Declares handler with initial value or constant binding used by cortex.functions.custom_cil-validate" notable_decisions="[]"]
|
|
205
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
206
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
207
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
208
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
209
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
210
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
227
|
+
return null
|
|
228
|
+
}
|
|
229
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve a chunk record from the graph by stable_id, version_id, or chunk_id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
230
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
231
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
232
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
211
233
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
212
234
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
235
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:resolveChunk:function"]
|
|
236
|
+
|
|
237
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-validate.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/cil-validate.ts"]
|
|
238
|
+
// CIL[DOC-MACRO purpose="Netlify function handler that dispatches CIL validation actions"]
|
|
239
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle validate, update_hash, compute_hash, and validate_file HTTP actions"]
|
|
240
|
+
// CIL[DOC-CONTEXT module="cil-validate" layer="functions" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/cil-validate.ts"]
|
|
241
|
+
// CIL[DOC-CONTRACT inputs="HTTP context and parsed request body" outputs="JSON response" errors="Validation or action errors" side_effects="Reads files, queries and updates adminDb"]
|
|
242
|
+
// CIL[DOC-MICRO logic_summary="Switch on action, validate inputs, process chunks or files, and return summary" notable_decisions="[]"]
|
|
243
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
244
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
213
245
|
export const handler = createHandler(async (ctx, body) => {
|
|
214
246
|
const action = ctx.query?.action
|
|
215
247
|
|
|
@@ -225,16 +257,12 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
225
257
|
for (const chunk of req.chunks) {
|
|
226
258
|
const validationHash = computeHash(chunk.content)
|
|
227
259
|
|
|
228
|
-
|
|
229
|
-
const { data: item, error } = await adminDb
|
|
230
|
-
.from('items')
|
|
231
|
-
.select('id, data')
|
|
232
|
-
.eq('id', chunk.chunk_id)
|
|
233
|
-
.maybeSingle()
|
|
260
|
+
const item = await resolveChunk(chunk)
|
|
234
261
|
|
|
235
|
-
if (
|
|
262
|
+
if (!item) {
|
|
236
263
|
results.push({
|
|
237
|
-
chunk_id: chunk.chunk_id,
|
|
264
|
+
chunk_id: chunk.chunk_id || chunk.stable_id || '',
|
|
265
|
+
stable_id: chunk.stable_id || null,
|
|
238
266
|
chunk_name: chunk.chunk_name,
|
|
239
267
|
status: 'not_found',
|
|
240
268
|
stored_hash: null,
|
|
@@ -244,11 +272,12 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
244
272
|
continue
|
|
245
273
|
}
|
|
246
274
|
|
|
247
|
-
const storedHash: string | null = item.data?.stored_hash || null
|
|
275
|
+
const storedHash: string | null = item.data?.content_hash || item.data?.stored_hash || null
|
|
248
276
|
|
|
249
277
|
if (!storedHash) {
|
|
250
278
|
results.push({
|
|
251
|
-
chunk_id:
|
|
279
|
+
chunk_id: item.id,
|
|
280
|
+
stable_id: item.data?.stable_id || null,
|
|
252
281
|
chunk_name: chunk.chunk_name,
|
|
253
282
|
status: 'drift_detected',
|
|
254
283
|
stored_hash: null,
|
|
@@ -262,7 +291,8 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
262
291
|
storedHash === validationHash ? 'current' : 'drift_detected'
|
|
263
292
|
|
|
264
293
|
results.push({
|
|
265
|
-
chunk_id:
|
|
294
|
+
chunk_id: item.id,
|
|
295
|
+
stable_id: item.data?.stable_id || null,
|
|
266
296
|
chunk_name: chunk.chunk_name,
|
|
267
297
|
status,
|
|
268
298
|
stored_hash: storedHash,
|
|
@@ -292,31 +322,27 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
292
322
|
|
|
293
323
|
if (action === 'update_hash') {
|
|
294
324
|
const req = body as UpdateHashRequest
|
|
295
|
-
if (!req?.chunk_id) throw new Error('chunk_id is required')
|
|
325
|
+
if (!req?.chunk_id && !req?.stable_id) throw new Error('chunk_id or stable_id is required')
|
|
296
326
|
if (!req?.content) throw new Error('content is required')
|
|
297
327
|
|
|
298
328
|
const newHash = computeHash(req.content)
|
|
299
329
|
|
|
300
|
-
const
|
|
301
|
-
.from('items')
|
|
302
|
-
.select('id, data')
|
|
303
|
-
.eq('id', req.chunk_id)
|
|
304
|
-
.maybeSingle()
|
|
330
|
+
const item = await resolveChunk(req)
|
|
305
331
|
|
|
306
|
-
if (!item) throw new Error(`Chunk not found: ${req.chunk_id}`)
|
|
332
|
+
if (!item) throw new Error(`Chunk not found: ${req.chunk_id || req.stable_id}`)
|
|
307
333
|
|
|
308
334
|
const { error } = await adminDb
|
|
309
335
|
.from('items')
|
|
310
336
|
.update({
|
|
311
|
-
data: { ...item.data, stored_hash: newHash, hash_updated_at: new Date().toISOString() },
|
|
337
|
+
data: { ...item.data, content_hash: newHash, stored_hash: newHash, hash_updated_at: new Date().toISOString() },
|
|
312
338
|
updated_at: new Date().toISOString(),
|
|
313
339
|
})
|
|
314
|
-
.eq('id',
|
|
340
|
+
.eq('id', item.id)
|
|
315
341
|
|
|
316
342
|
if (error) throw new Error(`Failed to update hash: ${error.message}`)
|
|
317
343
|
|
|
318
344
|
return {
|
|
319
|
-
chunk_id:
|
|
345
|
+
chunk_id: item.id,
|
|
320
346
|
new_hash: newHash,
|
|
321
347
|
updated_at: new Date().toISOString(),
|
|
322
348
|
}
|
|
@@ -399,11 +425,12 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
399
425
|
const lineStart: number = d.line_start || 0
|
|
400
426
|
const lineEnd: number = d.line_end || 0
|
|
401
427
|
const chunkName: string = d.chunk_name || ''
|
|
402
|
-
const storedHash: string | null = d.stored_hash || null
|
|
428
|
+
const storedHash: string | null = d.content_hash || d.stored_hash || null
|
|
403
429
|
|
|
404
430
|
if (!lineStart || !lineEnd) {
|
|
405
431
|
results.push({
|
|
406
432
|
chunk_id: chunk.id,
|
|
433
|
+
stable_id: d.stable_id || null,
|
|
407
434
|
chunk_name: chunkName,
|
|
408
435
|
status: 'not_found',
|
|
409
436
|
stored_hash: storedHash,
|
|
@@ -421,6 +448,7 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
421
448
|
if (!storedHash) {
|
|
422
449
|
results.push({
|
|
423
450
|
chunk_id: chunk.id,
|
|
451
|
+
stable_id: d.stable_id || null,
|
|
424
452
|
chunk_name: chunkName,
|
|
425
453
|
status: 'drift_detected',
|
|
426
454
|
stored_hash: null,
|
|
@@ -433,6 +461,7 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
433
461
|
const status: 'current' | 'drift_detected' = storedHash === validationHash ? 'current' : 'drift_detected'
|
|
434
462
|
results.push({
|
|
435
463
|
chunk_id: chunk.id,
|
|
464
|
+
stable_id: d.stable_id || null,
|
|
436
465
|
chunk_name: chunkName,
|
|
437
466
|
status,
|
|
438
467
|
stored_hash: storedHash,
|
|
@@ -463,7 +492,12 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
463
492
|
|
|
464
493
|
throw new Error(`Unknown action: ${action}. Valid: validate, validate_file, update_hash, compute_hash`)
|
|
465
494
|
})
|
|
495
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function handler that dispatches CIL validation actions'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
496
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
497
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
498
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
499
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
500
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
501
|
+
// CIL[END stable_id="~/.framework/functions/cil-validate.ts:handler:constant"]
|
|
466
502
|
|
|
467
503
|
|
|
468
|
-
|
|
469
|
-
// CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_validate_handler_1784235266"]
|