spine-framework 0.3.145 → 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 +15 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,48 +1,83 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Shared id resolution helpers for types, link types, accounts, agents and prompt configs."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide reusable functions that map slugs and (kind, slug) pairs to primary keys for Spine entities."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Module header for resolve-ids.ts; contains the import and no runtime logic." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers"]
|
|
1
10
|
|
|
11
|
+
import { adminDb } from './db'
|
|
2
12
|
|
|
13
|
+
// Design-time resolution caches. `types`/`accounts` rows change only on app
|
|
14
|
+
// install or schema edits — a 60s TTL bounds staleness the same way the
|
|
15
|
+
// principal and app-config caches do. Entries are keyed before any DB call so
|
|
16
|
+
// concurrent resolvers share one query (promise memoization).
|
|
17
|
+
const RESOLVE_CACHE_TTL_MS = 60_000
|
|
18
|
+
const RESOLVE_CACHE_MAX = 500
|
|
3
19
|
|
|
20
|
+
type CacheSlot<T> = { value: Promise<T>; expiresAt: number }
|
|
4
21
|
|
|
22
|
+
function makeResolveCache<T>() {
|
|
23
|
+
const map = new Map<string, CacheSlot<T>>()
|
|
24
|
+
return {
|
|
25
|
+
get(key: string): Promise<T> | undefined {
|
|
26
|
+
const slot = map.get(key)
|
|
27
|
+
if (!slot) return undefined
|
|
28
|
+
if (slot.expiresAt < Date.now()) { map.delete(key); return undefined }
|
|
29
|
+
return slot.value
|
|
30
|
+
},
|
|
31
|
+
set(key: string, value: Promise<T>) {
|
|
32
|
+
if (map.size >= RESOLVE_CACHE_MAX) {
|
|
33
|
+
const oldest = map.keys().next().value
|
|
34
|
+
if (oldest !== undefined) map.delete(oldest)
|
|
35
|
+
}
|
|
36
|
+
map.set(key, { value, expiresAt: Date.now() + RESOLVE_CACHE_TTL_MS })
|
|
37
|
+
// Failed lookups must not be cached — a type installed mid-TTL would
|
|
38
|
+
// otherwise stay invisible. Evict rejections immediately.
|
|
39
|
+
value.catch(() => map.delete(key))
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
}
|
|
5
43
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// CIL[
|
|
11
|
-
// CIL[DOC-
|
|
12
|
-
// CIL[DOC-
|
|
13
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
14
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="adminDb" errors="none" side_effects="none"]
|
|
15
|
-
// CIL[DOC-MICRO logic_summary="Import database connection for ID resolution utilities" notable_decisions="[]"]
|
|
16
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
17
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
18
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
19
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
20
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
21
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
22
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
44
|
+
const typeIdCache = makeResolveCache<Record<string, string>>()
|
|
45
|
+
const typeRecordCache = makeResolveCache<TypeRecord>()
|
|
46
|
+
const accountIdCache = makeResolveCache<string>()
|
|
47
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shared id resolution helpers for types, link types, accounts, agents and prompt configs.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
48
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
49
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
50
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
23
51
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
24
52
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// CIL[BEGIN
|
|
28
|
-
// CIL[DOC-MACRO purpose="Resolve
|
|
29
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
30
|
-
// CIL[DOC-CONTEXT module="
|
|
31
|
-
// CIL[DOC-CONTRACT inputs="
|
|
32
|
-
// CIL[DOC-MICRO logic_summary="
|
|
33
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
53
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:module_header:module_header"]
|
|
54
|
+
|
|
55
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeIds:function" type="function" identity="resolveTypeIds" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
56
|
+
// CIL[DOC-MACRO purpose="Resolve many (kind, slug) pairs to their type primary keys."]
|
|
57
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query the types table in batches and validate that every requested pair has a matching row."]
|
|
58
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
59
|
+
// CIL[DOC-CONTRACT inputs="pairs: Array<{ kind: string; slug: string }>" outputs="Record<string, string> mapping kind/slug to id" errors="Throws if any type is not found" side_effects="None"]
|
|
60
|
+
// CIL[DOC-MICRO logic_summary="Builds slug and kind lists, queries types via adminDb, returns a record keyed by kind/slug, then verifies all requested pairs exist." notable_decisions="[]"]
|
|
61
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
34
62
|
// CIL[DOC-STABILITY stability="stable"]
|
|
35
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
36
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
37
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
38
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
39
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
40
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
41
63
|
export async function resolveTypeIds(
|
|
42
64
|
pairs: Array<{ kind: string; slug: string }>
|
|
43
65
|
): Promise<Record<string, string>> {
|
|
44
66
|
if (pairs.length === 0) return {}
|
|
45
67
|
|
|
68
|
+
// Batch-level memoization: an episode resolving the same pair set (e.g.
|
|
69
|
+
// every save_message → createRecord → type lookup) shares one query.
|
|
70
|
+
const cacheKey = pairs.map(p => `${p.kind}/${p.slug}`).sort().join('|')
|
|
71
|
+
const hit = typeIdCache.get(cacheKey)
|
|
72
|
+
if (hit) return hit
|
|
73
|
+
const pending = resolveTypeIdsUncached(pairs)
|
|
74
|
+
typeIdCache.set(cacheKey, pending)
|
|
75
|
+
return pending
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function resolveTypeIdsUncached(
|
|
79
|
+
pairs: Array<{ kind: string; slug: string }>
|
|
80
|
+
): Promise<Record<string, string>> {
|
|
46
81
|
const { data, error } = await adminDb
|
|
47
82
|
.from('types')
|
|
48
83
|
.select('id, kind, slug')
|
|
@@ -64,40 +99,42 @@ export async function resolveTypeIds(
|
|
|
64
99
|
|
|
65
100
|
return result
|
|
66
101
|
}
|
|
67
|
-
// CIL[
|
|
68
|
-
// CIL[
|
|
69
|
-
// CIL[DOC-
|
|
70
|
-
// CIL[DOC-
|
|
71
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
72
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="type ID" errors="type not found" side_effects="database query"]
|
|
73
|
-
// CIL[DOC-MICRO logic_summary="Convenience wrapper around resolveTypeIds for single type" notable_decisions="[]"]
|
|
74
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
75
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
76
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 15. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
77
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 15. Total affected: 15."]
|
|
78
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
79
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
102
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve many (kind, slug) pairs to their type primary keys.'; No verified external callers; imports: .framework/functions/_shared/db.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"]
|
|
80
106
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
81
107
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
108
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeIds:function"]
|
|
109
|
+
|
|
110
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeId:function" type="function" identity="resolveTypeId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
111
|
+
// CIL[DOC-MACRO purpose="Resolve a single (kind, slug) pair to its type primary key."]
|
|
112
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Call resolveTypeIds for one pair and return the matching id."]
|
|
113
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
114
|
+
// CIL[DOC-CONTRACT inputs="kind: string, slug: string" outputs="string id" errors="Throws if type not found" side_effects="None"]
|
|
115
|
+
// CIL[DOC-MICRO logic_summary="Delegates to resolveTypeIds([{ kind, slug }]) and returns the single key." notable_decisions="[]"]
|
|
116
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
117
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
82
118
|
export async function resolveTypeId(kind: string, slug: string): Promise<string> {
|
|
83
119
|
const ids = await resolveTypeIds([{ kind, slug }])
|
|
84
120
|
return ids[`${kind}/${slug}`]
|
|
85
121
|
}
|
|
86
|
-
// CIL[
|
|
87
|
-
// CIL[
|
|
88
|
-
// CIL[DOC-
|
|
89
|
-
// CIL[DOC-
|
|
90
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
91
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TypeRecord interface" errors="none" side_effects="none"]
|
|
92
|
-
// CIL[DOC-MICRO logic_summary="Interface containing type metadata and schemas" notable_decisions="[]"]
|
|
93
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
94
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
95
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
96
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
97
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
98
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
122
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve a single (kind, slug) pair to its type primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
123
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
124
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
125
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
99
126
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
100
127
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
128
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeId:function"]
|
|
129
|
+
|
|
130
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:TypeRecord:interface" type="interface" identity="TypeRecord" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
131
|
+
// CIL[DOC-MACRO purpose="Describe the shape of a type record from the types table."]
|
|
132
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type for type rows including schemas and active status."]
|
|
133
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
134
|
+
// CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
|
|
135
|
+
// CIL[DOC-MICRO logic_summary="Defines id, slug, kind, design_schema, validation_schema and is_active fields." notable_decisions="[]"]
|
|
136
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
137
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
101
138
|
export interface TypeRecord {
|
|
102
139
|
id: string
|
|
103
140
|
slug: string
|
|
@@ -106,24 +143,32 @@ export interface TypeRecord {
|
|
|
106
143
|
validation_schema: Record<string, any>
|
|
107
144
|
is_active: boolean
|
|
108
145
|
}
|
|
109
|
-
// CIL[
|
|
110
|
-
// CIL[
|
|
111
|
-
// CIL[DOC-
|
|
112
|
-
// CIL[DOC-
|
|
113
|
-
// CIL[DOC-MACRO purpose="Resolve complete type record with schemas"]
|
|
114
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Get type metadata and validation schemas"]
|
|
115
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
116
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="TypeRecord" errors="type not found/inactive" side_effects="database query"]
|
|
117
|
-
// CIL[DOC-MICRO logic_summary="Queries types table, validates active status, returns full record" notable_decisions="[]"]
|
|
118
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
119
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
120
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
121
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
122
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
123
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
146
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of a type record from the types table.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
147
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
148
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
149
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
124
150
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
125
151
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
152
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:TypeRecord:interface"]
|
|
153
|
+
|
|
154
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeRecord:function" type="function" identity="resolveTypeRecord" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
155
|
+
// CIL[DOC-MACRO purpose="Fetch a full type record by kind and slug."]
|
|
156
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a single TypeRecord after verifying it is active."]
|
|
157
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
158
|
+
// CIL[DOC-CONTRACT inputs="kind: string, slug: string" outputs="TypeRecord" errors="Throws if type not found or inactive" side_effects="None"]
|
|
159
|
+
// CIL[DOC-MICRO logic_summary="Queries types with .single() and returns an object with schema fallbacks." notable_decisions="[]"]
|
|
160
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
161
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
126
162
|
export async function resolveTypeRecord(kind: string, slug: string): Promise<TypeRecord> {
|
|
163
|
+
const cacheKey = `${kind}/${slug}`
|
|
164
|
+
const hit = typeRecordCache.get(cacheKey)
|
|
165
|
+
if (hit) return hit
|
|
166
|
+
const pending = resolveTypeRecordUncached(kind, slug)
|
|
167
|
+
typeRecordCache.set(cacheKey, pending)
|
|
168
|
+
return pending
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async function resolveTypeRecordUncached(kind: string, slug: string): Promise<TypeRecord> {
|
|
127
172
|
const { data, error } = await adminDb
|
|
128
173
|
.from('types')
|
|
129
174
|
.select('id, slug, kind, design_schema, validation_schema, is_active')
|
|
@@ -143,21 +188,22 @@ export async function resolveTypeRecord(kind: string, slug: string): Promise<Typ
|
|
|
143
188
|
is_active: data.is_active,
|
|
144
189
|
}
|
|
145
190
|
}
|
|
146
|
-
// CIL[
|
|
147
|
-
// CIL[
|
|
148
|
-
// CIL[DOC-
|
|
149
|
-
// CIL[DOC-
|
|
150
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
151
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Record<string, string>" errors="link type not found" side_effects="database query"]
|
|
152
|
-
// CIL[DOC-MICRO logic_summary="Batch queries link_types table, validates all requested types exist" notable_decisions="[]"]
|
|
153
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
154
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
155
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
156
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
157
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
158
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
191
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch a full type record by kind and slug.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
192
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
193
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
194
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
159
195
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
160
196
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
197
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeRecord:function"]
|
|
198
|
+
|
|
199
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeIds:function" type="function" identity="resolveLinkTypeIds" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
200
|
+
// CIL[DOC-MACRO purpose="Resolve many link type slugs to their primary keys."]
|
|
201
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query the link_types table in a batch and confirm all slugs are resolved."]
|
|
202
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
203
|
+
// CIL[DOC-CONTRACT inputs="slugs: string[]" outputs="Record<string, string> mapping slug to id" errors="Throws if any link type is not found" side_effects="None"]
|
|
204
|
+
// CIL[DOC-MICRO logic_summary="Queries link_types by slug list, builds a record, and validates every input slug is present." notable_decisions="[]"]
|
|
205
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
206
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
161
207
|
export async function resolveLinkTypeIds(slugs: string[]): Promise<Record<string, string>> {
|
|
162
208
|
if (slugs.length === 0) return {}
|
|
163
209
|
|
|
@@ -179,41 +225,51 @@ export async function resolveLinkTypeIds(slugs: string[]): Promise<Record<string
|
|
|
179
225
|
|
|
180
226
|
return result
|
|
181
227
|
}
|
|
182
|
-
// CIL[
|
|
183
|
-
// CIL[
|
|
184
|
-
// CIL[DOC-
|
|
185
|
-
// CIL[DOC-
|
|
186
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
187
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="link type ID" errors="link type not found" side_effects="database query"]
|
|
188
|
-
// CIL[DOC-MICRO logic_summary="Convenience wrapper around resolveLinkTypeIds for single type" notable_decisions="[]"]
|
|
189
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
190
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
191
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
192
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
193
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
194
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
228
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve many link type slugs to their primary keys.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
229
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
230
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
231
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
195
232
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
196
233
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
234
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeIds:function"]
|
|
235
|
+
|
|
236
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeId:function" type="function" identity="resolveLinkTypeId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
237
|
+
// CIL[DOC-MACRO purpose="Resolve a single link type slug to its primary key."]
|
|
238
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Call resolveLinkTypeIds for one slug and return the id."]
|
|
239
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
240
|
+
// CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if link type not found" side_effects="None"]
|
|
241
|
+
// CIL[DOC-MICRO logic_summary="Delegates to resolveLinkTypeIds([slug]) and returns ids[slug]." notable_decisions="[]"]
|
|
242
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
243
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
197
244
|
export async function resolveLinkTypeId(slug: string): Promise<string> {
|
|
198
245
|
const ids = await resolveLinkTypeIds([slug])
|
|
199
246
|
return ids[slug]
|
|
200
247
|
}
|
|
201
|
-
// CIL[
|
|
202
|
-
// CIL[
|
|
203
|
-
// CIL[DOC-
|
|
204
|
-
// CIL[DOC-
|
|
205
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
206
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="account ID" errors="account not found" side_effects="database query"]
|
|
207
|
-
// CIL[DOC-MICRO logic_summary="Queries accounts table by slug to get ID" notable_decisions="[]"]
|
|
208
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
209
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
210
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
211
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
212
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
213
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
248
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve a single link type slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
249
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
250
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
251
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
214
252
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
215
253
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
254
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeId:function"]
|
|
255
|
+
|
|
256
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAccountId:function" type="function" identity="resolveAccountId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
257
|
+
// CIL[DOC-MACRO purpose="Resolve an account slug to its primary key."]
|
|
258
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query accounts table by slug and return the id."]
|
|
259
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
260
|
+
// CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if account not found" side_effects="None"]
|
|
261
|
+
// CIL[DOC-MICRO logic_summary="Queries accounts selecting id, applies .single(), and throws on missing data." notable_decisions="[]"]
|
|
262
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
263
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
216
264
|
export async function resolveAccountId(slug: string): Promise<string> {
|
|
265
|
+
const hit = accountIdCache.get(slug)
|
|
266
|
+
if (hit) return hit
|
|
267
|
+
const pending = resolveAccountIdUncached(slug)
|
|
268
|
+
accountIdCache.set(slug, pending)
|
|
269
|
+
return pending
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
async function resolveAccountIdUncached(slug: string): Promise<string> {
|
|
217
273
|
const { data, error } = await adminDb
|
|
218
274
|
.from('accounts')
|
|
219
275
|
.select('id')
|
|
@@ -223,21 +279,22 @@ export async function resolveAccountId(slug: string): Promise<string> {
|
|
|
223
279
|
if (error || !data) throw new Error(`Account not found: ${slug}`)
|
|
224
280
|
return data.id
|
|
225
281
|
}
|
|
226
|
-
// CIL[
|
|
227
|
-
// CIL[
|
|
228
|
-
// CIL[DOC-
|
|
229
|
-
// CIL[DOC-
|
|
230
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
231
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="agent ID" errors="agent not found" side_effects="database query"]
|
|
232
|
-
// CIL[DOC-MICRO logic_summary="Queries ai_agents table by name and active status" notable_decisions="[]"]
|
|
233
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
234
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
235
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
236
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
237
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
238
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
282
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve an account slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
283
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
284
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
285
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
239
286
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
240
287
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
288
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAccountId:function"]
|
|
289
|
+
|
|
290
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAgentId:function" type="function" identity="resolveAgentId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
291
|
+
// CIL[DOC-MACRO purpose="Resolve an active AI agent name to its primary key."]
|
|
292
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query ai_agents table by name and active status and return the id."]
|
|
293
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
294
|
+
// CIL[DOC-CONTRACT inputs="name: string" outputs="string id" errors="Throws if active AI agent not found" side_effects="None"]
|
|
295
|
+
// CIL[DOC-MICRO logic_summary="Queries ai_agents selecting id, filters is_active true, and throws on missing data." notable_decisions="[]"]
|
|
296
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
297
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
241
298
|
export async function resolveAgentId(name: string): Promise<string> {
|
|
242
299
|
const { data, error } = await adminDb
|
|
243
300
|
.from('ai_agents')
|
|
@@ -249,21 +306,22 @@ export async function resolveAgentId(name: string): Promise<string> {
|
|
|
249
306
|
if (error || !data) throw new Error(`AI agent not found: ${name}`)
|
|
250
307
|
return data.id
|
|
251
308
|
}
|
|
252
|
-
// CIL[
|
|
253
|
-
// CIL[
|
|
254
|
-
// CIL[DOC-
|
|
255
|
-
// CIL[DOC-
|
|
256
|
-
// CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
257
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="prompt config ID" errors="prompt config not found" side_effects="database query"]
|
|
258
|
-
// CIL[DOC-MICRO logic_summary="Queries prompt_configs table by slug and active status" notable_decisions="[]"]
|
|
259
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
260
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
261
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 4. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
262
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 4. Total affected: 4."]
|
|
263
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
264
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
309
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve an active AI agent name to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
310
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
311
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
312
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
265
313
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
266
314
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
315
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAgentId:function"]
|
|
316
|
+
|
|
317
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolvePromptConfigId:function" type="function" identity="resolvePromptConfigId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
|
|
318
|
+
// CIL[DOC-MACRO purpose="Resolve an active prompt config slug to its primary key."]
|
|
319
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query prompt_configs table by slug and active status and return the id."]
|
|
320
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
321
|
+
// CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if active prompt config not found" side_effects="None"]
|
|
322
|
+
// CIL[DOC-MICRO logic_summary="Queries prompt_configs selecting id with active filter and single, throws on missing." notable_decisions="[]"]
|
|
323
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
324
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
267
325
|
export async function resolvePromptConfigId(slug: string): Promise<string> {
|
|
268
326
|
const { data, error } = await adminDb
|
|
269
327
|
.from('prompt_configs')
|
|
@@ -275,4 +333,10 @@ export async function resolvePromptConfigId(slug: string): Promise<string> {
|
|
|
275
333
|
if (error || !data) throw new Error(`Prompt config not found: ${slug}`)
|
|
276
334
|
return data.id
|
|
277
335
|
}
|
|
278
|
-
// CIL[
|
|
336
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve an active prompt config slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
337
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
338
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
339
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
340
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
341
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
342
|
+
// CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolvePromptConfigId:function"]
|
|
@@ -1,22 +1,34 @@
|
|
|
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="
|
|
8
|
-
// CIL[DOC-STABILITY stability="
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="
|
|
10
|
-
|
|
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="Only processes outbound deliveries in this pass."]
|
|
14
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="Called by system-cron on each tick."]
|
|
15
|
-
// CIL[DOC-VECTOR type="user_journey" content="System automatically retries failed or pending outbound webhook calls."]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Provides shared retry logic for pending webhook deliveries"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Coordinate delivery retry scheduling and summarize results"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports dependencies for webhook delivery retry handling" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers"]
|
|
10
|
+
|
|
16
11
|
|
|
17
12
|
import { adminDb } from './db'
|
|
18
13
|
import { SYSTEM_PRINCIPAL } from './principal'
|
|
19
14
|
import { execute as executeOutbound } from '../integration-outbound'
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provides shared retry logic for pending webhook deliveries'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:module_header:module_header"]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:RetrySummary:interface" type="interface" identity="RetrySummary" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
|
|
25
|
+
// CIL[DOC-MACRO purpose="Defines the shape of retry operation summary statistics"]
|
|
26
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare counts and errors returned after retrying deliveries"]
|
|
27
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
28
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
29
|
+
// CIL[DOC-MICRO logic_summary="Aggregates counts of retried, succeeded, and failed deliveries with a list of errors" notable_decisions="[]"]
|
|
30
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
31
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
20
32
|
|
|
21
33
|
interface RetrySummary {
|
|
22
34
|
outbound_retried: number
|
|
@@ -27,6 +39,23 @@ interface RetrySummary {
|
|
|
27
39
|
inbound_failed: number
|
|
28
40
|
errors: string[]
|
|
29
41
|
}
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of retry operation summary statistics'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
46
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
47
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
48
|
+
// CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:RetrySummary:interface"]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:retryPendingDeliveries:function" type="function" identity="retryPendingDeliveries" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
|
|
52
|
+
// CIL[DOC-MACRO purpose="Retries pending webhook deliveries due for a new attempt and returns a summary"]
|
|
53
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch due deliveries, call outbound retry handler, tally results, log failures"]
|
|
54
|
+
// CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
55
|
+
// CIL[DOC-CONTRACT inputs="ctx: any" outputs="Promise<RetrySummary>" errors="db query errors, delivery execution errors" side_effects="Calls executeOutbound, updates console logs"]
|
|
56
|
+
// CIL[DOC-MICRO logic_summary="Queries webhook_deliveries table for pending due rows, invokes executeOutbound for outbound deliveries, counts successes/failures, and returns a RetrySummary" notable_decisions="[]"]
|
|
57
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
58
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
30
59
|
|
|
31
60
|
export async function retryPendingDeliveries(ctx: any): Promise<RetrySummary> {
|
|
32
61
|
const summary: RetrySummary = {
|
|
@@ -100,5 +129,11 @@ export async function retryPendingDeliveries(ctx: any): Promise<RetrySummary> {
|
|
|
100
129
|
|
|
101
130
|
return summary
|
|
102
131
|
}
|
|
132
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Retries pending webhook deliveries due for a new attempt and returns a summary'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.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"]
|
|
136
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
137
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
138
|
+
// CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:retryPendingDeliveries:function"]
|
|
103
139
|
|
|
104
|
-
// CIL[END chunk_id="retry_deliveries_module_header_1784200007"]
|