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,27 @@
|
|
|
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.
|
|
8
|
-
// CIL[DOC-STABILITY stability="
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
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"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/cil-context.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Netlify function handler for CIL context lookup, edit-safety briefing, and post-edit next steps"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Expose /api/cil-context endpoint that dispatches get_context, find_context, and post_edit actions"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="api" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="ctx.query/body: action, stable_id, version_id, project_id, chunk_id, chunk_name, max_depth" outputs="JSON { ok, brief } or { ok, error, hint }" errors="Invalid stable_id; missing version_id or chunk_id; chunk not found; unknown action" side_effects="Reads items and links tables; resolves link type IDs"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Routes requests to buildBrief or post-edit helpers and returns a structured response" notable_decisions=""]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="experimental"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developer, ai, runtime"]
|
|
16
10
|
|
|
17
11
|
|
|
18
12
|
|
|
19
13
|
|
|
20
14
|
import { createHandler } from './_shared/middleware'
|
|
21
15
|
import { adminDb } from './_shared/db'
|
|
16
|
+
import { parseStableId } from './_shared/cil'
|
|
22
17
|
import { resolveLinkTypeId } from './_shared/resolve-ids'
|
|
18
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function handler for CIL context lookup, edit-safety briefing, and post-edit next steps'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
19
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
20
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
21
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
22
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
23
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:module_header:module_header"]
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
|
|
@@ -27,46 +29,39 @@ import { resolveLinkTypeId } from './_shared/resolve-ids'
|
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
|
|
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"]
|
|
32
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:getChunkById:function" type="function" identity="getChunkById" parent="~/.framework/functions/cil-context.ts"]
|
|
33
|
+
// CIL[DOC-MACRO purpose="Fetch a single CIL chunk row by item id"]
|
|
34
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the items row for a given chunk database id"]
|
|
35
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="data" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
36
|
+
// CIL[DOC-CONTRACT inputs="id: string" outputs="item object or null" errors="none" side_effects="Selects id, title, data from items table"]
|
|
37
|
+
// CIL[DOC-MICRO logic_summary="Query adminDb items by id using maybeSingle and return data" notable_decisions=""]
|
|
38
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
38
39
|
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, \."]
|
|
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
40
|
async function getChunkById(id: string): Promise<any | null> {
|
|
46
41
|
const { data } = await adminDb.from('items').select('id, title, data')
|
|
47
42
|
.eq('id', id).maybeSingle()
|
|
48
43
|
return data
|
|
49
44
|
}
|
|
45
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch a single CIL chunk row by item id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
46
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
47
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
48
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
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
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:getChunkById:function"]
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
|
|
54
56
|
|
|
55
|
-
// CIL[
|
|
56
|
-
// CIL[
|
|
57
|
-
// CIL[DOC-
|
|
58
|
-
// CIL[DOC-
|
|
59
|
-
// CIL[DOC-
|
|
60
|
-
// CIL[DOC-
|
|
61
|
-
// CIL[DOC-MICRO logic_summary="
|
|
62
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
57
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:findChunkByName:function" type="function" identity="findChunkByName" parent="~/.framework/functions/cil-context.ts"]
|
|
58
|
+
// CIL[DOC-MACRO purpose="Find an active CIL chunk by its chunk name and optional project"]
|
|
59
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Locate a chunk item using its chunk_name and optional project_id"]
|
|
60
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="data" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
61
|
+
// CIL[DOC-CONTRACT inputs="name: string, projectId?: string" outputs="item object or null" errors="none" side_effects="Filters items table by kb_type, chunk_name, is_active, and optional project_id"]
|
|
62
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
63
|
+
// CIL[DOC-MICRO logic_summary="Build a query for cil_chunk items matching name and project, limit 1, and return data" notable_decisions=""]
|
|
63
64
|
// CIL[DOC-STABILITY stability="stable"]
|
|
64
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, \."]
|
|
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"]
|
|
70
65
|
async function findChunkByName(name: string, projectId?: string): Promise<any | null> {
|
|
71
66
|
let q = adminDb.from('items').select('id, title, data')
|
|
72
67
|
.filter('data->>kb_type', 'eq', 'cil_chunk')
|
|
@@ -76,27 +71,80 @@ async function findChunkByName(name: string, projectId?: string): Promise<any |
|
|
|
76
71
|
const { data } = await q.limit(1).maybeSingle()
|
|
77
72
|
return data
|
|
78
73
|
}
|
|
74
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:findChunkByName:function"]
|
|
75
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Find an active CIL chunk by its chunk name and optional project'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
76
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
77
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
78
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
79
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
80
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
81
|
+
|
|
82
|
+
// CIL[DOC-CONTEXT module="unknown" layer="unknown" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
79
83
|
|
|
80
84
|
|
|
81
85
|
|
|
82
86
|
|
|
83
87
|
|
|
84
88
|
|
|
85
|
-
// CIL[
|
|
86
|
-
// CIL[
|
|
87
|
-
// CIL[DOC-
|
|
88
|
-
// CIL[DOC-
|
|
89
|
-
// CIL[DOC-
|
|
90
|
-
// CIL[DOC-
|
|
91
|
-
// CIL[DOC-
|
|
92
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
89
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:getProjectActiveVersionId:function" type="function" identity="getProjectActiveVersionId" parent="~/.framework/functions/cil-context.ts"]
|
|
90
|
+
// CIL[DOC-MACRO purpose="Resolve a project's currently active version id"]
|
|
91
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the active_version_id stored on a project item"]
|
|
92
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="data" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
93
|
+
// CIL[DOC-CONTRACT inputs="projectId: string" outputs="version id string or null" errors="none" side_effects="Selects from items table"]
|
|
94
|
+
// CIL[DOC-MICRO logic_summary="Fetch the project item and return data.active_version_id or null" notable_decisions=""]
|
|
95
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
93
96
|
// CIL[DOC-STABILITY stability="stable"]
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
97
|
+
async function getProjectActiveVersionId(projectId: string): Promise<string | null> {
|
|
98
|
+
const { data } = await adminDb.from('items').select('id, data')
|
|
99
|
+
.eq('id', projectId).maybeSingle()
|
|
100
|
+
return data?.data?.active_version_id || null
|
|
101
|
+
}
|
|
102
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve a project's currently active version id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
103
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
104
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
105
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
106
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
107
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
108
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:getProjectActiveVersionId:function"]
|
|
109
|
+
|
|
110
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:findChunkByStableId:function" type="function" identity="findChunkByStableId" parent="~/.framework/functions/cil-context.ts"]
|
|
111
|
+
// CIL[DOC-MACRO purpose="Find a CIL chunk by its stable id within a version and optional project"]
|
|
112
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the active chunk matching stable_id and version_id"]
|
|
113
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="data" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
114
|
+
// CIL[DOC-CONTRACT inputs="stableId: string, versionId: string, projectId?: string" outputs="item object or null" errors="none" side_effects="Filters items table by kb_type, stable_id, version_id, is_active, and optional project_id"]
|
|
115
|
+
// CIL[DOC-MICRO logic_summary="Query cil_chunk items by stable_id, version, and project, limit 1, and return data" notable_decisions=""]
|
|
116
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
117
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
118
|
+
async function findChunkByStableId(
|
|
119
|
+
stableId: string,
|
|
120
|
+
versionId: string,
|
|
121
|
+
projectId?: string
|
|
122
|
+
): Promise<any | null> {
|
|
123
|
+
let q = adminDb.from('items').select('id, title, data')
|
|
124
|
+
.filter('data->>kb_type', 'eq', 'cil_chunk')
|
|
125
|
+
.filter('data->>stable_id', 'eq', stableId)
|
|
126
|
+
.filter('data->>version_id', 'eq', versionId)
|
|
127
|
+
.eq('is_active', true)
|
|
128
|
+
if (projectId) q = q.filter('data->>project_id', 'eq', projectId)
|
|
129
|
+
const { data } = await q.limit(1).maybeSingle()
|
|
130
|
+
return data
|
|
131
|
+
}
|
|
132
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Find a CIL chunk by its stable id within a version and optional project'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
133
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
134
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
135
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
98
136
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
99
137
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
138
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:findChunkByStableId:function"]
|
|
139
|
+
|
|
140
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:blastRadiusBFS:function" type="function" identity="blastRadiusBFS" parent="~/.framework/functions/cil-context.ts"]
|
|
141
|
+
// CIL[DOC-MACRO purpose="Breadth-first search of transitive callers for a chunk"]
|
|
142
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Collect upstream callers up to maxDepth using cil_calls links"]
|
|
143
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="analysis" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
144
|
+
// CIL[DOC-CONTRACT inputs="chunkId: string, maxDepth: number, callsLinkTypeId: string" outputs="Array of { chunk_id, chunk_name, file_path, depth }" errors="none" side_effects="Repeatedly queries links and items tables"]
|
|
145
|
+
// CIL[DOC-MICRO logic_summary="Traverse caller links from target to source, tracking depth and visited set, aggregating chunk metadata" notable_decisions="Uses queue-based BFS; only follows depth hops; populates result with chunk_id, name, path, and depth"]
|
|
146
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
147
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
100
148
|
async function blastRadiusBFS(
|
|
101
149
|
chunkId: string,
|
|
102
150
|
maxDepth: number,
|
|
@@ -135,27 +183,30 @@ async function blastRadiusBFS(
|
|
|
135
183
|
|
|
136
184
|
return result
|
|
137
185
|
}
|
|
186
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Breadth-first search of transitive callers for a chunk'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
187
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
188
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
189
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
190
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
191
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
192
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:blastRadiusBFS:function"]
|
|
138
193
|
|
|
139
194
|
|
|
140
195
|
|
|
141
196
|
|
|
197
|
+
// CIL[DOC-STABILITY stability="internal"]
|
|
198
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
199
|
+
// CIL[DOC-CONTEXT module="unknown" layer="unknown" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
142
200
|
|
|
143
201
|
|
|
144
|
-
// CIL[
|
|
145
|
-
// CIL[
|
|
146
|
-
// CIL[DOC-
|
|
147
|
-
// CIL[DOC-
|
|
148
|
-
// CIL[DOC-
|
|
149
|
-
// CIL[DOC-
|
|
150
|
-
// CIL[DOC-
|
|
151
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
202
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:getConfigDeps:function" type="function" identity="getConfigDeps" parent="~/.framework/functions/cil-context.ts"]
|
|
203
|
+
// CIL[DOC-MACRO purpose="Find configuration fields that target a chunk"]
|
|
204
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return config dependencies linked to the chunk via cil_configures"]
|
|
205
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="analysis" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
206
|
+
// CIL[DOC-CONTRACT inputs="chunkId: string, configuresLinkTypeId: string | null" outputs="Array of { field_name, source_file, config_id }" errors="none" side_effects="Selects from links and items tables"]
|
|
207
|
+
// CIL[DOC-MICRO logic_summary="Fetch cil_configures links pointing to the chunk, then resolve source item metadata into config dependency records" notable_decisions=""]
|
|
208
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
152
209
|
// CIL[DOC-STABILITY stability="stable"]
|
|
153
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, \."]
|
|
154
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
155
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
156
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
157
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
158
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
159
210
|
async function getConfigDeps(
|
|
160
211
|
chunkId: string,
|
|
161
212
|
configuresLinkTypeId: string | null
|
|
@@ -180,27 +231,27 @@ async function getConfigDeps(
|
|
|
180
231
|
}
|
|
181
232
|
return results
|
|
182
233
|
}
|
|
234
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Find configuration fields that target a chunk'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
235
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
236
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
237
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
238
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
239
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
240
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:getConfigDeps:function"]
|
|
183
241
|
|
|
184
242
|
|
|
185
243
|
|
|
186
244
|
|
|
187
245
|
|
|
188
246
|
|
|
189
|
-
// CIL[
|
|
190
|
-
// CIL[
|
|
191
|
-
// CIL[DOC-
|
|
192
|
-
// CIL[DOC-
|
|
193
|
-
// CIL[DOC-
|
|
194
|
-
// CIL[DOC-
|
|
195
|
-
// CIL[DOC-
|
|
196
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
247
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:safetyVerdict:function" type="function" identity="safetyVerdict" parent="~/.framework/functions/cil-context.ts"]
|
|
248
|
+
// CIL[DOC-MACRO purpose="Classify edit risk for a chunk based on stability, blast radius, drift, and docs"]
|
|
249
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Compute safe/caution/risky level and a human-readable flag list"]
|
|
250
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="analysis" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
251
|
+
// CIL[DOC-CONTRACT inputs="chunk: any, blastRadius: any[], driftStatus: 'current' | 'stale' | 'unknown', configDeps: any[]" outputs="{ level, summary, flags }" errors="none" side_effects="none"]
|
|
252
|
+
// CIL[DOC-MICRO logic_summary="Collect warning flags from chunk data and derived metrics, then choose a level based on flag severity" notable_decisions="Risky if stable, high blast radius, or stale; caution otherwise; safe when no flags"]
|
|
253
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
197
254
|
// CIL[DOC-STABILITY stability="stable"]
|
|
198
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
199
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
200
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
201
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
202
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
203
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
204
255
|
function safetyVerdict(
|
|
205
256
|
chunk: any,
|
|
206
257
|
blastRadius: any[],
|
|
@@ -231,26 +282,26 @@ function safetyVerdict(
|
|
|
231
282
|
|
|
232
283
|
return { level, summary, flags }
|
|
233
284
|
}
|
|
285
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Classify edit risk for a chunk based on stability, blast radius, drift, and docs'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
286
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
287
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
288
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
289
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
290
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
291
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:safetyVerdict:function"]
|
|
234
292
|
|
|
235
293
|
|
|
236
294
|
|
|
237
295
|
|
|
238
296
|
|
|
239
|
-
// CIL[
|
|
240
|
-
// CIL[
|
|
241
|
-
// CIL[DOC-
|
|
242
|
-
// CIL[DOC-
|
|
243
|
-
// CIL[DOC-
|
|
244
|
-
// CIL[DOC-
|
|
245
|
-
// CIL[DOC-
|
|
246
|
-
// CIL[DOC-
|
|
247
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
248
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
249
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
250
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
251
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
252
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
253
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
297
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:buildBrief:function" type="function" identity="buildBrief" parent="~/.framework/functions/cil-context.ts"]
|
|
298
|
+
// CIL[DOC-MACRO purpose="Assemble a complete context brief for a CIL chunk"]
|
|
299
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return contract, hash status, blast radius, calls, tests, config deps, and edit safety verdict"]
|
|
300
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="analysis" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
301
|
+
// CIL[DOC-CONTRACT inputs="chunk: any, maxBlastDepth = 4" outputs="Record<string, any> brief" errors="Resolves link type ids with catch-to-null; drift status defaults to unknown" side_effects="Queries links and items tables multiple times"]
|
|
302
|
+
// CIL[DOC-MICRO logic_summary="Resolve call/test/configure link type IDs, run blast radius BFS, gather callees and test paths, load config dependencies, derive drift status, and compute safety verdict" notable_decisions="Falls back to stored test_unit_path and test_e2e_path when no test links exist; drift status is not currently computed from a hash comparison"]
|
|
303
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
304
|
+
// CIL[DOC-STABILITY stability="experimental"]
|
|
254
305
|
async function buildBrief(chunk: any, maxBlastDepth = 4): Promise<Record<string, any>> {
|
|
255
306
|
const d = chunk.data || {}
|
|
256
307
|
|
|
@@ -306,6 +357,7 @@ async function buildBrief(chunk: any, maxBlastDepth = 4): Promise<Record<string,
|
|
|
306
357
|
return {
|
|
307
358
|
chunk_id: chunk.id,
|
|
308
359
|
chunk_name: d.chunk_name || '',
|
|
360
|
+
stable_id: d.stable_id || null,
|
|
309
361
|
file_path: d.file_path || '',
|
|
310
362
|
line_start: d.line_start || null,
|
|
311
363
|
line_end: d.line_end || null,
|
|
@@ -348,36 +400,48 @@ async function buildBrief(chunk: any, maxBlastDepth = 4): Promise<Record<string,
|
|
|
348
400
|
edit_safety: verdict,
|
|
349
401
|
}
|
|
350
402
|
}
|
|
403
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Assemble a complete context brief for a CIL chunk'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
404
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
405
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
406
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
407
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
408
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
409
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:buildBrief:function"]
|
|
351
410
|
|
|
352
411
|
|
|
353
412
|
|
|
354
413
|
|
|
355
414
|
|
|
356
|
-
// CIL[
|
|
357
|
-
// CIL[
|
|
358
|
-
// CIL[DOC-
|
|
359
|
-
// CIL[DOC-
|
|
360
|
-
// CIL[DOC-
|
|
361
|
-
// CIL[DOC-
|
|
362
|
-
// CIL[DOC-
|
|
363
|
-
// CIL[DOC-
|
|
364
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
365
|
-
// CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
366
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
367
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
368
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
369
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
370
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
415
|
+
// CIL[BEGIN stable_id="~/.framework/functions/cil-context.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/cil-context.ts"]
|
|
416
|
+
// CIL[DOC-MACRO purpose="createHandler wrapper dispatching cil-context API actions"]
|
|
417
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate input and call find or build helpers for get_context, find_context, and post_edit"]
|
|
418
|
+
// CIL[DOC-CONTEXT module="functions/cil" layer="api" related_files=".framework/functions/_shared/cil.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/cil-context.ts"]
|
|
419
|
+
// CIL[DOC-CONTRACT inputs="ctx and body from createHandler" outputs="JSON response for the selected action" errors="Throws on missing/invalid params or unknown action" side_effects="Calls buildBrief and database helpers"]
|
|
420
|
+
// CIL[DOC-MICRO logic_summary="Select action from query/body, resolve chunk by stable_id, name, or chunk_id, then build and return the brief or post-edit instructions" notable_decisions="get_context requires stable_id or chunk_id; find_context requires stable_id or chunk_name; post_edit requires chunk_id"]
|
|
421
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
422
|
+
// CIL[DOC-STABILITY stability="experimental"]
|
|
371
423
|
export const handler = createHandler(async (ctx, body) => {
|
|
372
424
|
const action = ctx.query?.action || 'get_context'
|
|
373
425
|
|
|
374
426
|
|
|
375
427
|
if (action === 'get_context') {
|
|
428
|
+
const stableId = ctx.query?.stable_id || body?.stable_id
|
|
429
|
+
const versionId = ctx.query?.version_id || body?.version_id
|
|
430
|
+
const projectId = ctx.query?.project_id || body?.project_id
|
|
376
431
|
const chunkId = ctx.query?.chunk_id || body?.chunk_id
|
|
377
|
-
if (!chunkId) throw new Error('chunk_id is required')
|
|
378
432
|
|
|
379
|
-
|
|
380
|
-
if (
|
|
433
|
+
let chunk: any | null = null
|
|
434
|
+
if (stableId) {
|
|
435
|
+
if (!parseStableId(stableId)) throw new Error('Invalid stable_id format')
|
|
436
|
+
const effectiveVersionId = versionId || (projectId ? await getProjectActiveVersionId(projectId) : undefined)
|
|
437
|
+
if (!effectiveVersionId) throw new Error('version_id or project_id required when using stable_id')
|
|
438
|
+
chunk = await findChunkByStableId(stableId, effectiveVersionId, projectId)
|
|
439
|
+
if (!chunk) throw new Error(`Chunk not found: stable_id=${stableId}, version_id=${effectiveVersionId}`)
|
|
440
|
+
} else {
|
|
441
|
+
if (!chunkId) throw new Error('chunk_id is required')
|
|
442
|
+
chunk = await getChunkById(chunkId)
|
|
443
|
+
if (!chunk) throw new Error(`Chunk not found: ${chunkId}`)
|
|
444
|
+
}
|
|
381
445
|
|
|
382
446
|
const maxDepth = parseInt(ctx.query?.max_depth || body?.max_depth || '4', 10)
|
|
383
447
|
const brief = await buildBrief(chunk, maxDepth)
|
|
@@ -387,16 +451,33 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
387
451
|
|
|
388
452
|
|
|
389
453
|
if (action === 'find_context') {
|
|
390
|
-
const
|
|
454
|
+
const stableId = ctx.query?.stable_id || body?.stable_id
|
|
455
|
+
const versionId = ctx.query?.version_id || body?.version_id
|
|
391
456
|
const projectId = ctx.query?.project_id || body?.project_id
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
if (
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
457
|
+
const chunkName = ctx.query?.chunk_name || body?.chunk_name
|
|
458
|
+
|
|
459
|
+
let chunk: any | null = null
|
|
460
|
+
if (stableId) {
|
|
461
|
+
if (!parseStableId(stableId)) throw new Error('Invalid stable_id format')
|
|
462
|
+
const effectiveVersionId = versionId || (projectId ? await getProjectActiveVersionId(projectId) : undefined)
|
|
463
|
+
if (!effectiveVersionId) throw new Error('version_id or project_id required when using stable_id')
|
|
464
|
+
chunk = await findChunkByStableId(stableId, effectiveVersionId, projectId)
|
|
465
|
+
if (!chunk) {
|
|
466
|
+
return {
|
|
467
|
+
ok: false,
|
|
468
|
+
error: `No chunk with stable_id "${stableId}" found for version ${effectiveVersionId}`,
|
|
469
|
+
hint: 'Use custom_cil-graph?action=search to find chunks by description',
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
} else {
|
|
473
|
+
if (!chunkName) throw new Error('chunk_name is required')
|
|
474
|
+
chunk = await findChunkByName(chunkName, projectId)
|
|
475
|
+
if (!chunk) {
|
|
476
|
+
return {
|
|
477
|
+
ok: false,
|
|
478
|
+
error: `No chunk named "${chunkName}" found${projectId ? ` in project ${projectId}` : ''}`,
|
|
479
|
+
hint: 'Use custom_cil-graph?action=search to find chunks by description',
|
|
480
|
+
}
|
|
400
481
|
}
|
|
401
482
|
}
|
|
402
483
|
|
|
@@ -423,6 +504,7 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
423
504
|
ok: true,
|
|
424
505
|
chunk_id: chunkId,
|
|
425
506
|
chunk_name: d.chunk_name || '',
|
|
507
|
+
stable_id: d.stable_id || null,
|
|
426
508
|
file_path: d.file_path || '',
|
|
427
509
|
stored_hash: d.stored_hash || null,
|
|
428
510
|
hash_updated_at: d.hash_updated_at || null,
|
|
@@ -439,7 +521,12 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
439
521
|
|
|
440
522
|
throw new Error(`Unknown action: ${action}. Valid: get_context, find_context, post_edit`)
|
|
441
523
|
})
|
|
524
|
+
// CIL[DOC-VECTOR type="context" content="purpose='createHandler wrapper dispatching cil-context API actions'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/cil.ts"]
|
|
525
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
526
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
527
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
528
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
529
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
530
|
+
// CIL[END stable_id="~/.framework/functions/cil-context.ts:handler:constant"]
|
|
442
531
|
|
|
443
532
|
|
|
444
|
-
|
|
445
|
-
// CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_context_handler_1784235266"]
|