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
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module suggest
|
|
3
|
+
* @audience both
|
|
4
|
+
* @layer shared-core
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* This module provides functionality for suggesting actions or items within the MCP framework, leveraging the McpServer for server interactions. It is designed to integrate with the admin database for data persistence and utilizes Zod for input validation. INVARIANT: All suggestions must be validated before processing to ensure data integrity.
|
|
8
|
+
*
|
|
9
|
+
* @seeAlso adminDb.js (provides database access for storing suggestions).
|
|
10
|
+
* @seeAlso @modelcontextprotocol/sdk/server/mcp.js (contains the McpServer used for server interactions).
|
|
11
|
+
* @seeAlso zod (used for input validation).
|
|
12
|
+
*
|
|
13
|
+
* @cil-generated
|
|
14
|
+
*/
|
|
15
|
+
// CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/mcp/tools/cil/suggest.ts"]
|
|
16
|
+
// CIL[DOC-MACRO purpose="Expose CIL suggestion tools (learning and review) on an McpServer and persist suggestions via adminDb"]
|
|
17
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Initialize module dependencies and provide the register() entry point that attaches two MCP tools"]
|
|
18
|
+
// CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts"]
|
|
19
|
+
// CIL[DOC-CONTRACT inputs="McpServer instance at runtime" outputs="registered tools with database-backed handlers" errors="none at module scope" side_effects="none"]
|
|
20
|
+
// CIL[DOC-MICRO logic_summary="Import McpServer, zod, adminDb, and uuid; delegate to register() for tool registration" notable_decisions="Uses a dedicated type slug cil_suggestion resolved by resolveTypeId"]
|
|
21
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
22
|
+
// CIL[DOC-STABILITY stable]
|
|
23
|
+
// CIL[DOC-AUDIENCE audience="both"]
|
|
24
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
25
|
+
import { z } from 'zod'
|
|
26
|
+
import { adminDb } from '../../shared/db.js'
|
|
27
|
+
import { v4 as uuid } from 'uuid'
|
|
28
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Expose CIL suggestion tools (learning and review) on an McpServer and persist suggestions via adminDb'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
|
|
29
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
30
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
31
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
32
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
33
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
34
|
+
// CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:module_header:module_header"]
|
|
35
|
+
|
|
36
|
+
// CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:resolveTypeId:function" type="function" identity="resolveTypeId" parent="~/.framework/mcp/tools/cil/suggest.ts"]
|
|
37
|
+
// CIL[DOC-MACRO purpose="Resolve a public.types row id from a slug, restricting to active types"]
|
|
38
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Map a type slug to its database id or throw when missing or inactive"]
|
|
39
|
+
// CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts,.framework/mcp/tools/cil/suggest.ts"]
|
|
40
|
+
// CIL[DOC-CONTRACT inputs="slug: string" outputs="string type id" errors="Error('Type not found: {slug}')" side_effects="none"]
|
|
41
|
+
// CIL[DOC-MICRO logic_summary="Query adminDb.from('types') for id where slug equals and is_active is true, return first row id" notable_decisions="Filters on is_active to avoid resolving deleted or inactive type records"]
|
|
42
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
43
|
+
// CIL[DOC-STABILITY stable]
|
|
44
|
+
/**
|
|
45
|
+
* Retrieves the ID of a type based on its slug from the database. This function ensures that only active types are considered.
|
|
46
|
+
*
|
|
47
|
+
* @macro Async function that resolves a type ID from a slug.
|
|
48
|
+
* @micro Queries the database for a type's ID and throws an error if not found or if inactive.
|
|
49
|
+
* @inputSpec
|
|
50
|
+
* slug: string (required) — the slug identifier for the type.
|
|
51
|
+
* @outputSpec Promise<string> — resolves to the ID of the type as a string.
|
|
52
|
+
* @throws Error — Type not found: {slug}
|
|
53
|
+
* @sideEffects none
|
|
54
|
+
* @stability internal
|
|
55
|
+
* @calls adminDb.from('types')
|
|
56
|
+
* @cil-generated
|
|
57
|
+
*/
|
|
58
|
+
async function resolveTypeId(slug: string): Promise<string> {
|
|
59
|
+
const { data: rows, error } = await adminDb
|
|
60
|
+
.from('types')
|
|
61
|
+
.select('id')
|
|
62
|
+
.filter('slug', 'eq', slug)
|
|
63
|
+
.eq('is_active', true)
|
|
64
|
+
const typeId = (rows || [])[0]?.id
|
|
65
|
+
if (error || !typeId) throw new Error(`Type not found: ${slug}`)
|
|
66
|
+
return typeId
|
|
67
|
+
}
|
|
68
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve a public.types row id from a slug, restricting to active types'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
|
|
69
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
70
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
71
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
72
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
73
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
74
|
+
// CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:resolveTypeId:function"]
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Registers tools for creating and reviewing CIL suggestions within the server. This functionality allows users to submit suggestions and manage their review process.
|
|
78
|
+
*
|
|
79
|
+
* @macro Tool registration for CIL suggestion management.
|
|
80
|
+
* @micro Utilizes a database to insert and retrieve suggestion records based on user actions.
|
|
81
|
+
* @inputSpec
|
|
82
|
+
* - server: McpServer (required) — The server instance to register tools with.
|
|
83
|
+
* @outputSpec Promise<{ content: Array<{ type: string, text: string }> }> — Returns a structured response indicating success or failure of the operation.
|
|
84
|
+
* @sideEffects Database writes for inserting suggestions and retrieving existing suggestions.
|
|
85
|
+
* @stability internal
|
|
86
|
+
* @calls adminDb.from, uuid, resolveTypeId
|
|
87
|
+
* @errorHandling Returns a structured error message if the database operation fails.
|
|
88
|
+
* @cil-generated */
|
|
89
|
+
// CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:register:function" type="function" identity="register" parent="~/.framework/mcp/tools/cil/suggest.ts"]
|
|
90
|
+
// CIL[DOC-MACRO purpose="Register two CIL suggestion tools on an McpServer for creating and reviewing suggestions"]
|
|
91
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Attach spine_cil_suggest_learning and spine_cil_review_suggestion to the provided server and handle adminDb persistence"]
|
|
92
|
+
// CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts,.framework/mcp/tools/cil/suggest.ts"]
|
|
93
|
+
// CIL[DOC-CONTRACT inputs="server: McpServer" outputs="void" errors="Returns {ok:false,error} on database failures; validation via Zod" side_effects="Inserts or updates items in adminDb for suggestions and reviews"]
|
|
94
|
+
// CIL[DOC-MICRO logic_summary="Resolve the cil_suggestion type, generate a uuid, insert a pending item for new suggestions, then for reviews read the item, update its status and review metadata, and persist the change" notable_decisions="Uses resolveTypeId('cil_suggestion') for the type id; review action sets status to accepted, rejected, or escalated; defaults proposed_by to system"]
|
|
95
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
96
|
+
// CIL[DOC-STABILITY stable]
|
|
97
|
+
export function register(server: McpServer) {
|
|
98
|
+
server.registerTool(
|
|
99
|
+
'spine_cil_suggest_learning',
|
|
100
|
+
{
|
|
101
|
+
description: 'Create a CIL suggestion (learning, note, or KB link) for a chunk or version.',
|
|
102
|
+
inputSchema: z.object({
|
|
103
|
+
project_id: z.string().uuid().describe('The CIL project UUID'),
|
|
104
|
+
version_id: z.string().uuid().optional().describe('Optional version to scope the suggestion to'),
|
|
105
|
+
target_stable_id: z.string().optional().describe('Optional stable_id of the chunk this suggestion targets'),
|
|
106
|
+
suggestion_type: z.enum(['learning', 'note', 'kb_link']).describe('Type of suggestion'),
|
|
107
|
+
content: z.string().min(1).describe('Suggestion content'),
|
|
108
|
+
source: z.string().optional().describe('Source or context (ticket, commit, AI reasoning)'),
|
|
109
|
+
confidence: z.number().min(0).max(1).optional().describe('Confidence score 0-1'),
|
|
110
|
+
proposed_by: z.enum(['ai', 'human', 'system']).optional().describe('Who proposed the suggestion'),
|
|
111
|
+
}),
|
|
112
|
+
},
|
|
113
|
+
async ({ project_id, version_id, target_stable_id, suggestion_type, content, source, confidence, proposed_by }) => {
|
|
114
|
+
const typeId = await resolveTypeId('cil_suggestion')
|
|
115
|
+
const id = uuid()
|
|
116
|
+
const data = {
|
|
117
|
+
kb_type: 'cil_suggestion',
|
|
118
|
+
project_id,
|
|
119
|
+
version_id: version_id || null,
|
|
120
|
+
target_stable_id: target_stable_id || null,
|
|
121
|
+
suggestion_type,
|
|
122
|
+
content,
|
|
123
|
+
source: source || null,
|
|
124
|
+
confidence: confidence ?? null,
|
|
125
|
+
status: 'pending',
|
|
126
|
+
proposed_by: proposed_by || 'system',
|
|
127
|
+
reviewed_by: null,
|
|
128
|
+
reviewed_at: null,
|
|
129
|
+
}
|
|
130
|
+
const { data: record, error } = await adminDb.from('items').insert({
|
|
131
|
+
id,
|
|
132
|
+
type_id: typeId,
|
|
133
|
+
title: `CIL suggestion: ${suggestion_type}`,
|
|
134
|
+
data,
|
|
135
|
+
is_active: true,
|
|
136
|
+
})
|
|
137
|
+
if (error) {
|
|
138
|
+
return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: error.message }) }] }
|
|
139
|
+
}
|
|
140
|
+
return { content: [{ type: 'text', text: JSON.stringify({ ok: true, suggestion_id: record?.id || id, status: 'pending' }) }] }
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
server.registerTool(
|
|
145
|
+
'spine_cil_review_suggestion',
|
|
146
|
+
{
|
|
147
|
+
description: 'Review a CIL suggestion: accept, reject, or escalate it.',
|
|
148
|
+
inputSchema: z.object({
|
|
149
|
+
suggestion_id: z.string().uuid().describe('The CIL suggestion UUID'),
|
|
150
|
+
action: z.enum(['accept', 'reject', 'escalate']).describe('Review action'),
|
|
151
|
+
reviewed_by: z.string().optional().describe('Reviewer identifier'),
|
|
152
|
+
review_notes: z.string().optional().describe('Notes from the reviewer'),
|
|
153
|
+
}),
|
|
154
|
+
},
|
|
155
|
+
async ({ suggestion_id, action, reviewed_by, review_notes }) => {
|
|
156
|
+
const { data: rows } = await adminDb
|
|
157
|
+
.from('items')
|
|
158
|
+
.select('id, data')
|
|
159
|
+
.filter('data->>kb_type', 'eq', 'cil_suggestion')
|
|
160
|
+
.filter('id', 'eq', suggestion_id)
|
|
161
|
+
const suggestion = (rows || [])[0]
|
|
162
|
+
if (!suggestion) {
|
|
163
|
+
return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: `Suggestion not found: ${suggestion_id}` }) }] }
|
|
164
|
+
}
|
|
165
|
+
const newData = { ...suggestion.data }
|
|
166
|
+
if (action === 'accept') newData.status = 'accepted'
|
|
167
|
+
if (action === 'reject') newData.status = 'rejected'
|
|
168
|
+
if (action === 'escalate') newData.status = 'escalated'
|
|
169
|
+
newData.reviewed_by = reviewed_by || null
|
|
170
|
+
newData.reviewed_at = new Date().toISOString()
|
|
171
|
+
if (review_notes) newData.review_notes = review_notes
|
|
172
|
+
const { error } = await adminDb.from('items').eq('id', suggestion_id).update({ data: newData, updated_at: new Date().toISOString() })
|
|
173
|
+
if (error) {
|
|
174
|
+
return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: error.message }) }] }
|
|
175
|
+
}
|
|
176
|
+
return { content: [{ type: 'text', text: JSON.stringify({ ok: true, suggestion_id, status: newData.status }) }] }
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Register two CIL suggestion tools on an McpServer for creating and reviewing suggestions'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
|
|
181
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
182
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
183
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
184
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
185
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
186
|
+
// CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:register:function"]
|