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,23 +1,31 @@
|
|
|
1
|
-
// CIL[BEGIN
|
|
2
|
-
// CIL[DOC-MACRO purpose="
|
|
3
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
4
|
-
// CIL[DOC-CONTEXT module="_shared.
|
|
5
|
-
// CIL[DOC-CONTRACT inputs="
|
|
6
|
-
// CIL[DOC-MICRO logic_summary="
|
|
7
|
-
// CIL[DOC-CONFIDENCE pass="
|
|
8
|
-
// CIL[DOC-STABILITY
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Shared tracing utilities for OpenTelemetry-style context, spans and id generation"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import the crypto module and serve as the module-level CIL header"]
|
|
4
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="" outputs="" errors="" side_effects=""]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports randomUUID from the crypto module and establishes the tracing module namespace" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stable]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="functions, shared utilities"]
|
|
10
|
+
|
|
10
11
|
import { randomUUID } from 'crypto'
|
|
11
|
-
// CIL[
|
|
12
|
-
// CIL[
|
|
13
|
-
// CIL[DOC-
|
|
14
|
-
// CIL[DOC-
|
|
15
|
-
// CIL[DOC-
|
|
16
|
-
// CIL[DOC-
|
|
17
|
-
// CIL[
|
|
18
|
-
|
|
19
|
-
// CIL[DOC-STABILITY stability="experimental"]
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Shared tracing utilities for OpenTelemetry-style context, spans and id generation'; No verified external callers; imports: none"]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
16
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
18
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:module_header:module_header"]
|
|
19
|
+
|
|
20
20
|
|
|
21
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TraceContext:interface" type="interface" identity="TraceContext" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
22
|
+
// CIL[DOC-MACRO purpose="Defines the immutable trace context carried with every operation"]
|
|
23
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Model the fields that identify a distributed trace and its sampling state"]
|
|
24
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
25
|
+
// CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
|
|
26
|
+
// CIL[DOC-MICRO logic_summary="Trace identifiers, span ids, parent link, trace flags, optional state and sampled boolean" notable_decisions="[]"]
|
|
27
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
28
|
+
// CIL[DOC-STABILITY stable]
|
|
21
29
|
export interface TraceContext {
|
|
22
30
|
traceId: string
|
|
23
31
|
spanId: string
|
|
@@ -26,7 +34,23 @@ export interface TraceContext {
|
|
|
26
34
|
traceState?: string
|
|
27
35
|
sampled: boolean
|
|
28
36
|
}
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the immutable trace context carried with every operation'; No verified external callers; imports: none"]
|
|
38
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
39
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
40
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
41
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
43
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:TraceContext:interface"]
|
|
44
|
+
|
|
29
45
|
|
|
46
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:Span:interface" type="interface" identity="Span" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
47
|
+
// CIL[DOC-MACRO purpose="Defines a span as a concrete trace context plus timing and status"]
|
|
48
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Extend TraceContext with a name, start/end times, duration and optional attributes"]
|
|
49
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
50
|
+
// CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
|
|
51
|
+
// CIL[DOC-MICRO logic_summary="Adds spanName, startedAt, endedAt, durationMs, status and attributes to TraceContext" notable_decisions="[]"]
|
|
52
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
53
|
+
// CIL[DOC-STABILITY stable]
|
|
30
54
|
export interface Span extends TraceContext {
|
|
31
55
|
spanName: string
|
|
32
56
|
startedAt: string
|
|
@@ -35,32 +59,150 @@ export interface Span extends TraceContext {
|
|
|
35
59
|
status?: 'ok' | 'error'
|
|
36
60
|
attributes?: Record<string, any>
|
|
37
61
|
}
|
|
62
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines a span as a concrete trace context plus timing and status'; No verified external callers; imports: none"]
|
|
63
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
64
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
65
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
66
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
67
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
68
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:Span:interface"]
|
|
38
69
|
|
|
70
|
+
|
|
71
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:CoreContextWithTrace:interface" type="interface" identity="CoreContextWithTrace" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
72
|
+
// CIL[DOC-MACRO purpose="Extends a generic core context with an optional trace field"]
|
|
73
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a typed container that may carry trace context among other fields"]
|
|
74
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
75
|
+
// CIL[DOC-CONTRACT inputs="none (structural interface)" outputs="none (structural interface)" errors="none" side_effects="none"]
|
|
76
|
+
// CIL[DOC-MICRO logic_summary="Index signature allows additional properties while optionally holding a TraceContext" notable_decisions="[]"]
|
|
77
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
78
|
+
// CIL[DOC-STABILITY stable]
|
|
39
79
|
export interface CoreContextWithTrace {
|
|
40
80
|
trace?: TraceContext
|
|
41
81
|
[key: string]: any
|
|
42
82
|
}
|
|
83
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Extends a generic core context with an optional trace field'; No verified external callers; imports: none"]
|
|
84
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
85
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
86
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
87
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
88
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
89
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:CoreContextWithTrace:interface"]
|
|
90
|
+
|
|
43
91
|
|
|
92
|
+
|
|
93
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TRACEPARENT_RE:constant" type="constant" identity="TRACEPARENT_RE" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
94
|
+
// CIL[DOC-MACRO purpose="Regular expression that parses W3C traceparent version 00 headers"]
|
|
95
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate and capture trace-id, parent-id and trace-flags from a traceparent string"]
|
|
96
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
97
|
+
// CIL[DOC-CONTRACT inputs="string to match" outputs="RegExp match groups for trace id, span id and flags" errors="none" side_effects="none"]
|
|
98
|
+
// CIL[DOC-MICRO logic_summary="Anchored case-insensitive regex for 00-traceid-spanid-flags format" notable_decisions="[]"]
|
|
99
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
100
|
+
// CIL[DOC-STABILITY stable]
|
|
44
101
|
const TRACEPARENT_RE = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i
|
|
102
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Regular expression that parses W3C traceparent version 00 headers'; No verified external callers; imports: none"]
|
|
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/_shared/tracing.ts:TRACEPARENT_RE:constant"]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:TRACE_FLAGS_SAMPLED:constant" type="constant" identity="TRACE_FLAGS_SAMPLED" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
113
|
+
// CIL[DOC-MACRO purpose="Bit flag indicating a trace is sampled"]
|
|
114
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the constant value 0x01 used by isSampled"]
|
|
115
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
116
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="number 0x01" errors="none" side_effects="none"]
|
|
117
|
+
// CIL[DOC-MICRO logic_summary="Single-byte flag value that can be bitwise-ANDed against trace flags" notable_decisions="[]"]
|
|
118
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
119
|
+
// CIL[DOC-STABILITY stable]
|
|
45
120
|
const TRACE_FLAGS_SAMPLED = 0x01
|
|
121
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Bit flag indicating a trace is sampled'; No verified external callers; imports: none"]
|
|
122
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
123
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
124
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
125
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
126
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
127
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:TRACE_FLAGS_SAMPLED:constant"]
|
|
46
128
|
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateHex:function" type="function" identity="generateHex" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
132
|
+
// CIL[DOC-MACRO purpose="Generate a lower-case hex string of a specified length"]
|
|
133
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Create random hex ids by concatenating UUIDs and slicing to size"]
|
|
134
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
135
|
+
// CIL[DOC-CONTRACT inputs="length: number" outputs="lowercase hex string of requested length" errors="none" side_effects="consumes crypto.randomUUID"]
|
|
136
|
+
// CIL[DOC-MICRO logic_summary="Removes dashes from randomUUID, concatenates a second UUID if needed, then slices" notable_decisions="[]"]
|
|
137
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
138
|
+
// CIL[DOC-STABILITY stable]
|
|
47
139
|
function generateHex(length: number): string {
|
|
48
140
|
// crypto.randomUUID gives 32 hex chars without dashes
|
|
49
141
|
const hex = randomUUID().replace(/-/g, '')
|
|
50
142
|
if (length > hex.length) {
|
|
51
143
|
return (hex + randomUUID().replace(/-/g, '')).slice(0, length).toLowerCase()
|
|
52
144
|
}
|
|
145
|
+
|
|
146
|
+
|
|
53
147
|
return hex.slice(0, length).toLowerCase()
|
|
54
148
|
}
|
|
149
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Generate a lower-case hex string of a specified length'; No verified external callers; imports: none"]
|
|
150
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
151
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
152
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
153
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
154
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
155
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateHex:function"]
|
|
55
156
|
|
|
157
|
+
|
|
158
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateTraceId:function" type="function" identity="generateTraceId" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
159
|
+
// CIL[DOC-MACRO purpose="Generate a 32-character hex trace id"]
|
|
160
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a unique 128-bit trace identifier"]
|
|
161
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
162
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="32-char hex string" errors="none" side_effects="none"]
|
|
163
|
+
// CIL[DOC-MICRO logic_summary="Calls generateHex with length 32" notable_decisions="[]"]
|
|
164
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
165
|
+
// CIL[DOC-STABILITY stable]
|
|
56
166
|
export function generateTraceId(): string {
|
|
57
167
|
return generateHex(32)
|
|
58
168
|
}
|
|
169
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Generate a 32-character hex trace id'; No verified external callers; imports: none"]
|
|
170
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
171
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
172
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
173
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
174
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
175
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateTraceId:function"]
|
|
176
|
+
|
|
59
177
|
|
|
178
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:generateSpanId:function" type="function" identity="generateSpanId" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
179
|
+
// CIL[DOC-MACRO purpose="Generate a 16-character hex span id"]
|
|
180
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a unique 64-bit span identifier"]
|
|
181
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
182
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="16-char hex string" errors="none" side_effects="none"]
|
|
183
|
+
// CIL[DOC-MICRO logic_summary="Calls generateHex with length 16" notable_decisions="[]"]
|
|
184
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
185
|
+
// CIL[DOC-STABILITY stable]
|
|
60
186
|
export function generateSpanId(): string {
|
|
61
187
|
return generateHex(16)
|
|
62
188
|
}
|
|
189
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Generate a 16-character hex span id'; No verified external callers; imports: none"]
|
|
190
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
191
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
192
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
193
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
194
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
195
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:generateSpanId:function"]
|
|
63
196
|
|
|
197
|
+
|
|
198
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:newTrace:function" type="function" identity="newTrace" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
199
|
+
// CIL[DOC-MACRO purpose="Create a new TraceContext with a fresh trace id"]
|
|
200
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Initialize a trace root context, optionally sampled"]
|
|
201
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
202
|
+
// CIL[DOC-CONTRACT inputs="sampled?: boolean (default true)" outputs="TraceContext with traceId, spanId and flags" errors="none" side_effects="generates new trace and span ids"]
|
|
203
|
+
// CIL[DOC-MICRO logic_summary="Uses generateTraceId, generateSpanId and TRACE_FLAGS_SAMPLED to build a root context" notable_decisions="[]"]
|
|
204
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
205
|
+
// CIL[DOC-STABILITY stable]
|
|
64
206
|
export function newTrace(sampled = true): TraceContext {
|
|
65
207
|
return {
|
|
66
208
|
traceId: generateTraceId(),
|
|
@@ -69,7 +211,23 @@ export function newTrace(sampled = true): TraceContext {
|
|
|
69
211
|
sampled,
|
|
70
212
|
}
|
|
71
213
|
}
|
|
214
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a new TraceContext with a fresh trace id'; No verified external callers; imports: none"]
|
|
215
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
216
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
217
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
218
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
219
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
220
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:newTrace:function"]
|
|
221
|
+
|
|
72
222
|
|
|
223
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceParent:function" type="function" identity="parseTraceParent" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
224
|
+
// CIL[DOC-MACRO purpose="Parse a W3C traceparent header into trace metadata"]
|
|
225
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Extract traceId, spanId and traceFlags from a traceparent string"]
|
|
226
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
227
|
+
// CIL[DOC-CONTRACT inputs="header?: string" outputs="{ traceId, spanId, traceFlags } | null" errors="returns null for missing or malformed headers" side_effects="none"]
|
|
228
|
+
// CIL[DOC-MICRO logic_summary="Trims the header, matches TRACEPARENT_RE and parses the flags as hex" notable_decisions="[]"]
|
|
229
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
230
|
+
// CIL[DOC-STABILITY stable]
|
|
73
231
|
export function parseTraceParent(header?: string): { traceId: string; spanId: string; traceFlags: number } | null {
|
|
74
232
|
if (!header) return null
|
|
75
233
|
const match = header.trim().match(TRACEPARENT_RE)
|
|
@@ -80,11 +238,43 @@ export function parseTraceParent(header?: string): { traceId: string; spanId: st
|
|
|
80
238
|
traceFlags: parseInt(match[3], 16),
|
|
81
239
|
}
|
|
82
240
|
}
|
|
241
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Parse a W3C traceparent header into trace metadata'; No verified external callers; imports: none"]
|
|
242
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
243
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
244
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
245
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
246
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
247
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceParent:function"]
|
|
83
248
|
|
|
249
|
+
|
|
250
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceParent:function" type="function" identity="formatTraceParent" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
251
|
+
// CIL[DOC-MACRO purpose="Format trace metadata into a W3C traceparent string"]
|
|
252
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Build the 00-traceId-spanId-flags header format"]
|
|
253
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
254
|
+
// CIL[DOC-CONTRACT inputs="traceId: string, spanId: string, traceFlags: number" outputs="traceparent string" errors="none" side_effects="none"]
|
|
255
|
+
// CIL[DOC-MICRO logic_summary="Converts ids and the flag value to lower-case and pads flags to two hex digits" notable_decisions="[]"]
|
|
256
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
257
|
+
// CIL[DOC-STABILITY stable]
|
|
84
258
|
export function formatTraceParent(traceId: string, spanId: string, traceFlags: number): string {
|
|
85
259
|
return `00-${traceId.toLowerCase()}-${spanId.toLowerCase()}-${traceFlags.toString(16).padStart(2, '0')}`
|
|
86
260
|
}
|
|
261
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Format trace metadata into a W3C traceparent string'; No verified external callers; imports: none"]
|
|
262
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
263
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
264
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
265
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
266
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
267
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceParent:function"]
|
|
268
|
+
|
|
87
269
|
|
|
270
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceState:function" type="function" identity="parseTraceState" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
271
|
+
// CIL[DOC-MACRO purpose="Parse a W3C tracestate header into a key-value map"]
|
|
272
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Convert a comma-separated tracestate string into a Record<string, string>"]
|
|
273
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
274
|
+
// CIL[DOC-CONTRACT inputs="header?: string" outputs="Record<string, string>" errors="returns empty object for missing/empty headers" side_effects="none"]
|
|
275
|
+
// CIL[DOC-MICRO logic_summary="Splits on commas, then on the first '=' and trims keys/values" notable_decisions="[]"]
|
|
276
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
277
|
+
// CIL[DOC-STABILITY stable]
|
|
88
278
|
export function parseTraceState(header?: string): Record<string, string> {
|
|
89
279
|
const state: Record<string, string> = {}
|
|
90
280
|
if (!header) return state
|
|
@@ -94,17 +284,65 @@ export function parseTraceState(header?: string): Record<string, string> {
|
|
|
94
284
|
}
|
|
95
285
|
return state
|
|
96
286
|
}
|
|
287
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Parse a W3C tracestate header into a key-value map'; No verified external callers; imports: none"]
|
|
288
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
289
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
290
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
291
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
292
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
293
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:parseTraceState:function"]
|
|
97
294
|
|
|
295
|
+
|
|
296
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceState:function" type="function" identity="formatTraceState" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
297
|
+
// CIL[DOC-MACRO purpose="Format a key-value map as a W3C tracestate header"]
|
|
298
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Join key=value pairs with commas"]
|
|
299
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
300
|
+
// CIL[DOC-CONTRACT inputs="state: Record<string, string>" outputs="tracestate string" errors="none" side_effects="none"]
|
|
301
|
+
// CIL[DOC-MICRO logic_summary="Maps entries to k=v and joins with commas" notable_decisions="[]"]
|
|
302
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
303
|
+
// CIL[DOC-STABILITY stable]
|
|
98
304
|
export function formatTraceState(state: Record<string, string>): string {
|
|
99
305
|
return Object.entries(state)
|
|
100
306
|
.map(([k, v]) => `${k}=${v}`)
|
|
101
307
|
.join(',')
|
|
102
308
|
}
|
|
309
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Format a key-value map as a W3C tracestate header'; No verified external callers; imports: none"]
|
|
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"]
|
|
313
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
314
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
315
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:formatTraceState:function"]
|
|
316
|
+
|
|
103
317
|
|
|
318
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:isSampled:function" type="function" identity="isSampled" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
319
|
+
// CIL[DOC-MACRO purpose="Check whether trace flags include the sampled bit"]
|
|
320
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return true when the TRACE_FLAGS_SAMPLED bit is set"]
|
|
321
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
322
|
+
// CIL[DOC-CONTRACT inputs="traceFlags: number" outputs="boolean" errors="none" side_effects="none"]
|
|
323
|
+
// CIL[DOC-MICRO logic_summary="Bitwise-AND with TRACE_FLAGS_SAMPLED and compares to the constant" notable_decisions="[]"]
|
|
324
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
325
|
+
// CIL[DOC-STABILITY stable]
|
|
104
326
|
export function isSampled(traceFlags: number): boolean {
|
|
105
327
|
return (traceFlags & TRACE_FLAGS_SAMPLED) === TRACE_FLAGS_SAMPLED
|
|
106
328
|
}
|
|
329
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Check whether trace flags include the sampled bit'; No verified external callers; imports: none"]
|
|
330
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
331
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
332
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
333
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
334
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
335
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:isSampled:function"]
|
|
107
336
|
|
|
337
|
+
|
|
338
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:traceQueryBuilder:function" type="function" identity="traceQueryBuilder" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
339
|
+
// CIL[DOC-MACRO purpose="Wrap a Supabase query builder with automatic span creation"]
|
|
340
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Proxy promise-returning query builder methods to trace db calls"]
|
|
341
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
342
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, builder: any, operation: string, resource: string, onSpanEnd?: callback" outputs="Proxied builder that returns instrumented promises" errors="rejects with the original error, marked on the span" side_effects="creates Proxy and starts/ends spans around then/catch chains"]
|
|
343
|
+
// CIL[DOC-MICRO logic_summary="Uses a Proxy to intercept 'then', 'catch' and chained methods, timing async work and reporting row counts or errors" notable_decisions="[]"]
|
|
344
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
345
|
+
// CIL[DOC-STABILITY stable]
|
|
108
346
|
function traceQueryBuilder(
|
|
109
347
|
ctx: CoreContextWithTrace,
|
|
110
348
|
builder: any,
|
|
@@ -156,7 +394,23 @@ function traceQueryBuilder(
|
|
|
156
394
|
}
|
|
157
395
|
})
|
|
158
396
|
}
|
|
397
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Wrap a Supabase query builder with automatic span creation'; No verified external callers; imports: none"]
|
|
398
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
399
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
400
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
401
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
402
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
403
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:traceQueryBuilder:function"]
|
|
404
|
+
|
|
159
405
|
|
|
406
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:traceDb:function" type="function" identity="traceDb" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
407
|
+
// CIL[DOC-MACRO purpose="Wrap a Supabase db client to add per-query tracing"]
|
|
408
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return a Proxy over a db client that instruments from() and rpc() calls"]
|
|
409
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
410
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, db: any, onSpanEnd?: callback" outputs="Proxy of the input db" errors="none" side_effects="creates a Proxy"]
|
|
411
|
+
// CIL[DOC-MICRO logic_summary="Intercepts 'from' and 'rpc' and wraps the resulting builder with traceQueryBuilder, skipping the 'logs' table to avoid recursion" notable_decisions="[]"]
|
|
412
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
413
|
+
// CIL[DOC-STABILITY stable]
|
|
160
414
|
export function traceDb(
|
|
161
415
|
ctx: CoreContextWithTrace,
|
|
162
416
|
db: any,
|
|
@@ -178,7 +432,23 @@ export function traceDb(
|
|
|
178
432
|
}
|
|
179
433
|
})
|
|
180
434
|
}
|
|
435
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Wrap a Supabase db client to add per-query tracing'; No verified external callers; imports: none"]
|
|
436
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
437
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
438
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
439
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
440
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
441
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:traceDb:function"]
|
|
181
442
|
|
|
443
|
+
|
|
444
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:startSpan:function" type="function" identity="startSpan" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
445
|
+
// CIL[DOC-MACRO purpose="Create and start a new span from a core context"]
|
|
446
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Initialize a Span with id generation, sampling inheritance and optional overrides"]
|
|
447
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
448
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, options?: { attributes?, traceId?, traceFlags?, traceState?, sampled? }" outputs="Span object" errors="none" side_effects="generates a new span id"]
|
|
449
|
+
// CIL[DOC-MICRO logic_summary="Inherits parent trace id/flags/state/sampled if present, allows per-span overrides and records the start ISO timestamp" notable_decisions="[]"]
|
|
450
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
451
|
+
// CIL[DOC-STABILITY stable]
|
|
182
452
|
export function startSpan(
|
|
183
453
|
ctx: CoreContextWithTrace,
|
|
184
454
|
spanName: string,
|
|
@@ -210,7 +480,23 @@ export function startSpan(
|
|
|
210
480
|
attributes: options?.attributes || {},
|
|
211
481
|
}
|
|
212
482
|
}
|
|
483
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create and start a new span from a core context'; No verified external callers; imports: none"]
|
|
484
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
485
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
486
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
487
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
488
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
489
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:startSpan:function"]
|
|
490
|
+
|
|
213
491
|
|
|
492
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:endSpan:function" type="function" identity="endSpan" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
493
|
+
// CIL[DOC-MACRO purpose="Finalize a span with end time, duration and optional status/attributes"]
|
|
494
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Mutate the provided Span to record when it ended and how long it ran"]
|
|
495
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
496
|
+
// CIL[DOC-CONTRACT inputs="span: Span, options?: { status?, attributes? }" outputs="the same Span object" errors="none" side_effects="mutates the span object"]
|
|
497
|
+
// CIL[DOC-MICRO logic_summary="Computes durationMs from startedAt and ISO endedAt, merges new attributes and sets the status" notable_decisions="[]"]
|
|
498
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
499
|
+
// CIL[DOC-STABILITY stable]
|
|
214
500
|
export function endSpan(span: Span, options?: { status?: 'ok' | 'error'; attributes?: Record<string, any> }): Span {
|
|
215
501
|
const endedAt = new Date().toISOString()
|
|
216
502
|
const started = new Date(span.startedAt).getTime()
|
|
@@ -223,7 +509,23 @@ export function endSpan(span: Span, options?: { status?: 'ok' | 'error'; attribu
|
|
|
223
509
|
}
|
|
224
510
|
return span
|
|
225
511
|
}
|
|
512
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Finalize a span with end time, duration and optional status/attributes'; No verified external callers; imports: none"]
|
|
513
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
514
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
515
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
516
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
517
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
518
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:endSpan:function"]
|
|
226
519
|
|
|
520
|
+
|
|
521
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:withSpan:function" type="function" identity="withSpan" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
522
|
+
// CIL[DOC-MACRO purpose="Run an async function inside a traced span"]
|
|
523
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Start a span, call the function with a child context, end the span and return the result"]
|
|
524
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
525
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, fn: (ctx) => Promise<T>, options?: { attributes?, onEnd? }" outputs="Promise<T>" errors="rejects with the thrown error after marking the span as error" side_effects="none"]
|
|
526
|
+
// CIL[DOC-MICRO logic_summary="Creates a child context, awaits fn, ends the span with ok or error status and invokes the optional onEnd callback" notable_decisions="[]"]
|
|
527
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
528
|
+
// CIL[DOC-STABILITY stable]
|
|
227
529
|
export async function withSpan<T>(
|
|
228
530
|
ctx: CoreContextWithTrace,
|
|
229
531
|
spanName: string,
|
|
@@ -238,15 +540,37 @@ export async function withSpan<T>(
|
|
|
238
540
|
try {
|
|
239
541
|
const result = await fn(childCtx)
|
|
240
542
|
endSpan(span, { status: 'ok' })
|
|
241
|
-
|
|
543
|
+
// onEnd (emitSpan) persists telemetry — fire-and-forget like withSpanSync
|
|
544
|
+
// so a hosted-DB logs insert never adds its latency to the wrapped work.
|
|
545
|
+
if (options?.onEnd) {
|
|
546
|
+
Promise.resolve(options.onEnd(childCtx, span)).catch(() => {})
|
|
547
|
+
}
|
|
242
548
|
return result
|
|
243
549
|
} catch (error: any) {
|
|
244
550
|
endSpan(span, { status: 'error', attributes: { error: error.message || String(error) } })
|
|
245
|
-
if (options?.onEnd)
|
|
551
|
+
if (options?.onEnd) {
|
|
552
|
+
Promise.resolve(options.onEnd(childCtx, span)).catch(() => {})
|
|
553
|
+
}
|
|
246
554
|
throw error
|
|
247
555
|
}
|
|
248
556
|
}
|
|
557
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Run an async function inside a traced span'; No verified external callers; imports: none"]
|
|
558
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
559
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
560
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
561
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
562
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
563
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:withSpan:function"]
|
|
564
|
+
|
|
249
565
|
|
|
566
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/tracing.ts:withSpanSync:function" type="function" identity="withSpanSync" parent="~/.framework/functions/_shared/tracing.ts"]
|
|
567
|
+
// CIL[DOC-MACRO purpose="Run a synchronous function inside a traced span"]
|
|
568
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Start a span, call the function with a child context, end the span and return the result"]
|
|
569
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/tracing.ts" layer="shared" related_files=".framework/functions/_shared/tracing.ts"]
|
|
570
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContextWithTrace, spanName: string, fn: (ctx) => T, options?: { attributes?, onEnd? }" outputs="T" errors="re-throws after marking the span as error" side_effects="none"]
|
|
571
|
+
// CIL[DOC-MICRO logic_summary="Creates a child context, runs fn, ends the span and calls onEnd asynchronously without awaiting it" notable_decisions="[]"]
|
|
572
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
573
|
+
// CIL[DOC-STABILITY stable]
|
|
250
574
|
export function withSpanSync<T>(
|
|
251
575
|
ctx: CoreContextWithTrace,
|
|
252
576
|
spanName: string,
|
|
@@ -273,4 +597,10 @@ export function withSpanSync<T>(
|
|
|
273
597
|
throw error
|
|
274
598
|
}
|
|
275
599
|
}
|
|
276
|
-
// CIL[
|
|
600
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Run a synchronous function inside a traced span'; No verified external callers; imports: none"]
|
|
601
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
602
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
603
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
604
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
605
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
606
|
+
// CIL[END stable_id="~/.framework/functions/_shared/tracing.ts:withSpanSync:function"]
|