spine-framework 0.3.124 → 0.3.126
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/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +188 -16
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +685 -537
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +187 -144
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +195 -116
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +5 -2
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,45 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
// CIL[BEGIN chunk_id="eval-harness_moduleheader_1783969696" type="module_header" identity="imports" parent="none"]
|
|
23
|
+
// CIL[DOC-MACRO purpose="Import dependencies for eval harness module"]
|
|
24
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import middleware, database, utilities, and audit functions"]
|
|
25
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
26
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported_modules" errors="none" side_effects="none"]
|
|
27
|
+
// CIL[DOC-MICRO logic_summary="Import required dependencies for evaluation test harness" notable_decisions="[]"]
|
|
28
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
29
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
30
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
31
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
32
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
33
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
34
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
35
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
36
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
34
37
|
|
|
35
38
|
import { createHandler } from './_shared/middleware'
|
|
36
39
|
import { adminDb } from './_shared/db'
|
|
37
40
|
import { resolveTypeId } from './_shared/resolve-ids'
|
|
38
41
|
import { create } from './admin-data'
|
|
39
42
|
import { emitLog } from './_shared/audit'
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
+
import { callOpenAIEmbeddings } from './_shared/llm'
|
|
44
|
+
// CIL[END chunk_id="eval-harness_moduleheader_1783969696"]
|
|
45
|
+
// CIL[BEGIN chunk_id="eval-harness_constants_1783969696" type="function" identity="constants" parent="none"]
|
|
46
|
+
// CIL[DOC-MACRO purpose="Define evaluation constants and types"]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Configure test types and confidence tier thresholds"]
|
|
48
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="constants" errors="none" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Define test categories and confidence score ranges for evaluation" notable_decisions="[]"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
53
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
54
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
55
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
56
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
57
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
58
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
43
59
|
const TEST_TYPES = ['easy', 'medium', 'hard', 'security', 'hallucination', 'stale', 'account_gating'] as const
|
|
44
60
|
type TestType = typeof TEST_TYPES[number]
|
|
45
61
|
|
|
@@ -48,15 +64,21 @@ const CONFIDENCE_TIERS = {
|
|
|
48
64
|
medium: { min: 0.60, max: 0.849 },
|
|
49
65
|
low: { min: 0.00, max: 0.599 },
|
|
50
66
|
}
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
// CIL[END chunk_id="eval-harness_constants_1783969696"]
|
|
68
|
+
// CIL[BEGIN chunk_id="eval-harness_createtestcase_1783969696" type="function" identity="createTestCase" parent="none"]
|
|
69
|
+
// CIL[DOC-MACRO purpose="Create evaluation test case"]
|
|
70
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Create test case with question and expected outcomes"]
|
|
71
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
72
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="created_test_case" errors="validation_errors,db_errors" side_effects="db_write"]
|
|
73
|
+
// CIL[DOC-MICRO logic_summary="Validate input, resolve type ID, create test case item" 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: backend_functions. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
77
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 2."]
|
|
78
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
79
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
80
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
81
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
60
82
|
export const createTestCase = createHandler(async (ctx, body) => {
|
|
61
83
|
const {
|
|
62
84
|
question, expected_tier = 'medium', expected_escalate = false,
|
|
@@ -85,12 +107,21 @@ export const createTestCase = createHandler(async (ctx, body) => {
|
|
|
85
107
|
},
|
|
86
108
|
})
|
|
87
109
|
})
|
|
88
|
-
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
110
|
+
// CIL[END chunk_id="eval-harness_createtestcase_1783969696"]
|
|
111
|
+
// CIL[BEGIN chunk_id="eval-harness_listtestcases_1783969696" type="function" identity="listTestCases" parent="none"]
|
|
112
|
+
// CIL[DOC-MACRO purpose="List evaluation test cases"]
|
|
113
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve test cases with optional filtering"]
|
|
114
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[\"\\\"]"]
|
|
115
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="test_cases" errors="db_errors" side_effects="none"]
|
|
116
|
+
// CIL[DOC-MICRO logic_summary="Query test cases by type and test type, return paginated results" notable_decisions="[]"]
|
|
117
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
118
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
119
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
120
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
121
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
122
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
123
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
124
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
94
125
|
export const listTestCases = createHandler(async (ctx, _body) => {
|
|
95
126
|
const { test_type, limit = '200', offset = '0' } = ctx.query || {}
|
|
96
127
|
|
|
@@ -111,35 +142,25 @@ export const listTestCases = createHandler(async (ctx, _body) => {
|
|
|
111
142
|
if (error) throw error
|
|
112
143
|
return data || []
|
|
113
144
|
})
|
|
114
|
-
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
*
|
|
130
|
-
* NOTE: Does not call the LLM — retrieval only. Full inference eval is a
|
|
131
|
-
* future extension.
|
|
132
|
-
*/
|
|
145
|
+
// CIL[END chunk_id="eval-harness_listtestcases_1783969696"]
|
|
146
|
+
// CIL[BEGIN chunk_id="eval-harness_runeval_1783969696" type="function" identity="runEval" parent="none"]
|
|
147
|
+
// CIL[DOC-MACRO purpose="Run evaluation test suite"]
|
|
148
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Execute test cases and measure retrieval performance"]
|
|
149
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[\"\\\"]"]
|
|
150
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="eval_results" errors="api_errors,db_errors" side_effects="api_calls,db_write,audit_log"]
|
|
151
|
+
// CIL[DOC-MICRO logic_summary="Run embeddings search, evaluate recall and boundary violations, store results" notable_decisions="[]"]
|
|
152
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_logic,external_api"]
|
|
153
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
154
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
155
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
156
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
157
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
158
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
159
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
133
160
|
export const runEval = createHandler(async (ctx, body) => {
|
|
134
161
|
const { test_type, similarity_threshold = 0.15, match_count = 8 } = body || {}
|
|
135
162
|
if (!ctx.accountId) throw new Error('Account context required')
|
|
136
163
|
|
|
137
|
-
const apiKey = process.env.OPENAI_API_KEY || process.env.LLM_API_KEY
|
|
138
|
-
if (!apiKey) throw new Error('No OPENAI_API_KEY — cannot run eval (needs embedding API)')
|
|
139
|
-
|
|
140
|
-
const baseUrl = process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1'
|
|
141
|
-
|
|
142
|
-
// Load test cases
|
|
143
164
|
const { data: typeRow } = await adminDb
|
|
144
165
|
.from('types').select('id').eq('slug', 'eval_test_case').eq('kind', 'item').maybeSingle()
|
|
145
166
|
|
|
@@ -150,13 +171,13 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
150
171
|
if (tcErr) throw tcErr
|
|
151
172
|
if (!testCases?.length) return { run_id: null, message: 'No test cases found', total: 0 }
|
|
152
173
|
|
|
153
|
-
|
|
174
|
+
|
|
154
175
|
const { data: platformAccount } = await adminDb
|
|
155
176
|
.from('accounts').select('id').eq('slug', 'spine-system').maybeSingle()
|
|
156
177
|
const accountIds = [ctx.accountId]
|
|
157
178
|
if (platformAccount?.id && platformAccount.id !== ctx.accountId) accountIds.push(platformAccount.id)
|
|
158
179
|
|
|
159
|
-
|
|
180
|
+
|
|
160
181
|
const results: any[] = []
|
|
161
182
|
let passed = 0; let failed = 0; let skipped = 0
|
|
162
183
|
|
|
@@ -167,23 +188,23 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
167
188
|
const expectedTier = tc.data?.expected_tier || 'medium'
|
|
168
189
|
|
|
169
190
|
try {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const embedJson: any = await embedRes.json()
|
|
191
|
+
|
|
192
|
+
let embedJson: any
|
|
193
|
+
try {
|
|
194
|
+
embedJson = await callOpenAIEmbeddings(ctx, [question], 'text-embedding-3-small')
|
|
195
|
+
} catch {
|
|
196
|
+
skipped++; results.push({ id: tc.id, status: 'skipped', reason: 'embed_api_error' }); continue
|
|
197
|
+
}
|
|
178
198
|
const queryEmbedding: number[] = embedJson.data?.[0]?.embedding || []
|
|
179
199
|
|
|
180
|
-
|
|
200
|
+
|
|
181
201
|
const { data: matches } = await adminDb.rpc('match_embeddings', {
|
|
182
202
|
query_embedding: `[${queryEmbedding.join(',')}]`,
|
|
183
203
|
match_count: match_count * 2,
|
|
184
204
|
filter_account_ids: accountIds,
|
|
185
205
|
filter_vector_type: 'semantic',
|
|
186
206
|
similarity_threshold,
|
|
207
|
+
filter_item_types: null,
|
|
187
208
|
})
|
|
188
209
|
|
|
189
210
|
const retrievedIds = new Set((matches || []).map((m: any) => m.document_id))
|
|
@@ -191,14 +212,14 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
191
212
|
? (matches as any[]).reduce((s: number, m: any) => s + m.similarity, 0) / matches.length
|
|
192
213
|
: 0
|
|
193
214
|
|
|
194
|
-
|
|
215
|
+
|
|
195
216
|
const recallHits = expectedSrcs.filter((id: string) => retrievedIds.has(id)).length
|
|
196
217
|
const retrievalRecall = expectedSrcs.length > 0 ? recallHits / expectedSrcs.length : null
|
|
197
218
|
|
|
198
219
|
const boundaryViolations = excludedSrcs.filter((id: string) => retrievedIds.has(id))
|
|
199
220
|
const boundarySafe = boundaryViolations.length === 0
|
|
200
221
|
|
|
201
|
-
|
|
222
|
+
|
|
202
223
|
let inferredTier: string
|
|
203
224
|
if (meanSim >= CONFIDENCE_TIERS.high.min) inferredTier = 'high'
|
|
204
225
|
else if (meanSim >= CONFIDENCE_TIERS.medium.min) inferredTier = 'medium'
|
|
@@ -241,7 +262,7 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
241
262
|
account_id: ctx.accountId,
|
|
242
263
|
}
|
|
243
264
|
|
|
244
|
-
|
|
265
|
+
|
|
245
266
|
const { data: execRow } = await adminDb
|
|
246
267
|
.from('pipeline_executions')
|
|
247
268
|
.insert({
|
|
@@ -250,7 +271,7 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
250
271
|
status: failed === 0 ? 'completed' : 'failed',
|
|
251
272
|
trigger_data: { eval_run: true, test_type: test_type || 'all' },
|
|
252
273
|
result: { summary, results },
|
|
253
|
-
started_at:
|
|
274
|
+
started_at: summary.run_at,
|
|
254
275
|
completed_at: new Date().toISOString(),
|
|
255
276
|
duration_ms: 0,
|
|
256
277
|
})
|
|
@@ -264,12 +285,21 @@ export const runEval = createHandler(async (ctx, body) => {
|
|
|
264
285
|
|
|
265
286
|
return { run_id: execRow?.id || null, summary, results }
|
|
266
287
|
})
|
|
267
|
-
|
|
268
|
-
//
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
288
|
+
// CIL[END chunk_id="eval-harness_runeval_1783969696"]
|
|
289
|
+
// CIL[BEGIN chunk_id="eval-harness_getresults_1783969696" type="function" identity="getResults" parent="none"]
|
|
290
|
+
// CIL[DOC-MACRO purpose="Get evaluation run results"]
|
|
291
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve recent evaluation execution results"]
|
|
292
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[]"]
|
|
293
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="eval_results" errors="auth_errors,db_errors" side_effects="none"]
|
|
294
|
+
// CIL[DOC-MICRO logic_summary="Query pipeline executions for eval runs, return summary and results" notable_decisions="[]"]
|
|
295
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
296
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
297
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
298
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
299
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
300
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
301
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
302
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
273
303
|
export const getResults = createHandler(async (ctx, _body) => {
|
|
274
304
|
if (!ctx.accountId) throw new Error('Account context required')
|
|
275
305
|
|
|
@@ -286,12 +316,21 @@ export const getResults = createHandler(async (ctx, _body) => {
|
|
|
286
316
|
if (error) throw error
|
|
287
317
|
return data || []
|
|
288
318
|
})
|
|
289
|
-
|
|
290
|
-
//
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
319
|
+
// CIL[END chunk_id="eval-harness_getresults_1783969696"]
|
|
320
|
+
// CIL[BEGIN chunk_id="eval-harness_getcoverage_1783969696" type="function" identity="getCoverage" parent="none"]
|
|
321
|
+
// CIL[DOC-MACRO purpose="Get test case coverage analysis"]
|
|
322
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Analyze test case distribution across types"]
|
|
323
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[]"]
|
|
324
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="coverage_report" errors="db_errors" side_effects="none"]
|
|
325
|
+
// CIL[DOC-MICRO logic_summary="Count test cases by type, identify coverage gaps" notable_decisions="[]"]
|
|
326
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
327
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
328
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
329
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
330
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
331
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
332
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
333
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
295
334
|
export const getCoverage = createHandler(async (ctx, _body) => {
|
|
296
335
|
const { data: typeRow } = await adminDb
|
|
297
336
|
.from('types').select('id').eq('slug', 'eval_test_case').eq('kind', 'item').maybeSingle()
|
|
@@ -322,9 +361,21 @@ export const getCoverage = createHandler(async (ctx, _body) => {
|
|
|
322
361
|
recommendation: coverage.filter(c => !c.has_cases).map(c => c.test_type),
|
|
323
362
|
}
|
|
324
363
|
})
|
|
325
|
-
|
|
326
|
-
//
|
|
327
|
-
|
|
364
|
+
// CIL[END chunk_id="eval-harness_getcoverage_1783969696"]
|
|
365
|
+
// CIL[BEGIN chunk_id="eval-harness_handler_1783969696" type="function" identity="handler" parent="none"]
|
|
366
|
+
// CIL[DOC-MACRO purpose="Route eval harness HTTP methods"]
|
|
367
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch requests to evaluation operations"]
|
|
368
|
+
// CIL[DOC-CONTEXT module="eval-harness" layer="backend_functions" related_files="[]"]
|
|
369
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="function_responses" errors="method_errors" side_effects="none"]
|
|
370
|
+
// CIL[DOC-MICRO logic_summary="Route based on action and method to specific eval functions" notable_decisions="[]"]
|
|
371
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
372
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
373
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
374
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
375
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
376
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
377
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
378
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
328
379
|
export const handler = createHandler(async (ctx, body) => {
|
|
329
380
|
const { action } = ctx.query || {}
|
|
330
381
|
const method = ctx.query?.method || 'GET'
|
|
@@ -351,3 +402,4 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
351
402
|
|
|
352
403
|
throw new Error('Invalid action or method')
|
|
353
404
|
})
|
|
405
|
+
// CIL[END chunk_id="eval-harness_handler_1783969696"]
|