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,65 +1,115 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/item-progress.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Defines the item-progress module and its CRUD handler exports"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provides Netlify function entry points and helpers for item progress records"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="exports" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports shared utilities and wires list, get, upsert, and update handlers behind a single method router" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="human; ai"]
|
|
1
10
|
|
|
2
11
|
|
|
3
12
|
|
|
4
13
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// CIL[BEGIN chunk_id="itemprogress_moduleheader_1783968140" type="module_header" identity="imports" parent="none"]
|
|
8
|
-
// CIL[DOC-MACRO purpose="Import dependencies for item progress tracking API"]
|
|
9
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import handler utilities and database access"]
|
|
10
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
11
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="Import failures" side_effects="none"]
|
|
12
|
-
// CIL[DOC-MICRO logic_summary="Imports createHandler, adminDb, resolveTypeId, emitLog" notable_decisions="[]"]
|
|
13
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
14
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
15
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
16
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
17
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
18
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
19
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
20
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
21
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
22
14
|
import { createHandler } from './_shared/middleware'
|
|
23
15
|
import { adminDb } from './_shared/db'
|
|
24
16
|
import { resolveTypeId } from './_shared/resolve-ids'
|
|
25
17
|
import { emitLog } from './_shared/audit'
|
|
26
|
-
// CIL[
|
|
27
|
-
// CIL[
|
|
28
|
-
// CIL[DOC-
|
|
29
|
-
// CIL[DOC-
|
|
30
|
-
// CIL[DOC-MACRO purpose="Define progress pipeline constants and helper functions"]
|
|
31
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide pipeline validation and composition utilities"]
|
|
32
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/db.ts\",\"\\\"]"]
|
|
33
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Constants and helper functions" errors="none" side_effects="none"]
|
|
34
|
-
// CIL[DOC-MICRO logic_summary="Defines default pipeline, transition validation, and composition helpers" notable_decisions="[]"]
|
|
35
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/db.ts, \."]
|
|
38
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
39
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
18
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the item-progress module and its CRUD handler exports'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
19
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
20
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
21
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
41
22
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
23
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:module_header:module_header"]
|
|
25
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:PIPELINE_DEFAULT:constant" type="constant" identity="PIPELINE_DEFAULT" parent="~/.framework/functions/item-progress.ts"]
|
|
26
|
+
// CIL[DOC-MACRO purpose="Default status pipeline used when a type has no custom design schema pipeline"]
|
|
27
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide fallback ordered status values"]
|
|
28
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
29
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="string[]" errors="none" side_effects="none"]
|
|
30
|
+
// CIL[DOC-MICRO logic_summary="Static array of default progress statuses" notable_decisions="[]"]
|
|
31
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
32
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
43
33
|
const PIPELINE_DEFAULT = ['not_started', 'in_progress', 'completed']
|
|
44
|
-
|
|
34
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Default status pipeline used when a type has no custom design schema pipeline'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
35
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
36
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
37
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
38
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
39
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
40
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:PIPELINE_DEFAULT:constant"]
|
|
41
|
+
|
|
42
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:getPipeline:function" type="function" identity="getPipeline" parent="~/.framework/functions/item-progress.ts"]
|
|
43
|
+
// CIL[DOC-MACRO purpose="Resolve the status pipeline for a type record, falling back to the default"]
|
|
44
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return ordered pipeline from type design schema or default"]
|
|
45
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
46
|
+
// CIL[DOC-CONTRACT inputs="typeRecord any" outputs="string[]" errors="none" side_effects="none"]
|
|
47
|
+
// CIL[DOC-MICRO logic_summary="Read typeRecord design schema pipeline or return PIPELINE_DEFAULT" notable_decisions="[]"]
|
|
48
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
49
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
45
50
|
function getPipeline(typeRecord: any): string[] {
|
|
46
51
|
return typeRecord?.design_schema?.pipeline ?? PIPELINE_DEFAULT
|
|
47
52
|
}
|
|
48
|
-
|
|
53
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve the status pipeline for a type record, falling back to the default'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
54
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
55
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
56
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
57
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
58
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
59
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:getPipeline:function"]
|
|
60
|
+
|
|
61
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:isValidTransition:function" type="function" identity="isValidTransition" parent="~/.framework/functions/item-progress.ts"]
|
|
62
|
+
// CIL[DOC-MACRO purpose="Validate that a status transition is forward or unchanged in the pipeline"]
|
|
63
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Check if target status index is at least source status index"]
|
|
64
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
65
|
+
// CIL[DOC-CONTRACT inputs="pipeline string[], from string, to string" outputs="boolean" errors="none" side_effects="none"]
|
|
66
|
+
// CIL[DOC-MICRO logic_summary="Return true if either status is missing or target index is greater than or equal to source index" notable_decisions="[]"]
|
|
67
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
68
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
49
69
|
function isValidTransition(pipeline: string[], from: string, to: string): boolean {
|
|
50
70
|
const fromIdx = pipeline.indexOf(from)
|
|
51
71
|
const toIdx = pipeline.indexOf(to)
|
|
52
72
|
if (fromIdx === -1 || toIdx === -1) return true
|
|
53
73
|
return toIdx >= fromIdx
|
|
54
74
|
}
|
|
55
|
-
|
|
75
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Validate that a status transition is forward or unchanged in the pipeline'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
76
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
77
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
78
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
79
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
80
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
81
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:isValidTransition:function"]
|
|
82
|
+
|
|
83
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:composeTitle:function" type="function" identity="composeTitle" parent="~/.framework/functions/item-progress.ts"]
|
|
84
|
+
// CIL[DOC-MACRO purpose="Build a title from item and person names"]
|
|
85
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Combine item title and person name with an em dash"]
|
|
86
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
87
|
+
// CIL[DOC-CONTRACT inputs="itemTitle string|null, personName string|null" outputs="string|null" errors="none" side_effects="none"]
|
|
88
|
+
// CIL[DOC-MICRO logic_summary="Return null if both empty, otherwise combine with em dash" notable_decisions="[]"]
|
|
89
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
90
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
56
91
|
function composeTitle(itemTitle: string | null, personName: string | null): string | null {
|
|
57
92
|
if (!itemTitle && !personName) return null
|
|
58
93
|
if (!personName) return itemTitle
|
|
59
94
|
if (!itemTitle) return personName
|
|
60
95
|
return `${itemTitle} — ${personName}`
|
|
61
96
|
}
|
|
62
|
-
|
|
97
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Build a title from item and person names'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
98
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
99
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
100
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
101
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
102
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
103
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:composeTitle:function"]
|
|
104
|
+
|
|
105
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:composeDescription:function" type="function" identity="composeDescription" parent="~/.framework/functions/item-progress.ts"]
|
|
106
|
+
// CIL[DOC-MACRO purpose="Compose a human readable status description with optional score and attempts"]
|
|
107
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Format label, score, and attempt count into a dot separated string"]
|
|
108
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
109
|
+
// CIL[DOC-CONTRACT inputs="status string, score number|null, attempts number|null" outputs="string" errors="none" side_effects="none"]
|
|
110
|
+
// CIL[DOC-MICRO logic_summary="Label status, append score and attempt count if present, join with middle dot" notable_decisions="[]"]
|
|
111
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
112
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
63
113
|
function composeDescription(status: string, score: number | null, attempts: number | null): string {
|
|
64
114
|
const parts: string[] = []
|
|
65
115
|
const label = status === 'completed' ? 'Completed' : status === 'in_progress' ? 'In Progress' : 'Not Started'
|
|
@@ -68,21 +118,21 @@ function composeDescription(status: string, score: number | null, attempts: numb
|
|
|
68
118
|
if (attempts !== null && attempts !== undefined && attempts > 0) parts.push(`${attempts} attempt${attempts === 1 ? '' : 's'}`)
|
|
69
119
|
return parts.join(' · ')
|
|
70
120
|
}
|
|
71
|
-
// CIL[
|
|
72
|
-
// CIL[
|
|
73
|
-
// CIL[DOC-
|
|
74
|
-
// CIL[DOC-
|
|
75
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
76
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Array of progress records" errors="DB errors" side_effects="DB read operations"]
|
|
77
|
-
// CIL[DOC-MICRO logic_summary="Builds filtered query with person/item/status filters, applies pagination" notable_decisions="[]"]
|
|
78
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
79
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
80
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
81
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
82
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
83
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
121
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Compose a human readable status description with optional score and attempts'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
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"]
|
|
84
125
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
85
126
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
127
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:composeDescription:function"]
|
|
128
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/item-progress.ts"]
|
|
129
|
+
// CIL[DOC-MACRO purpose="List active item progress records with optional filters"]
|
|
130
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query item_progress table and return matching records"]
|
|
131
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
132
|
+
// CIL[DOC-CONTRACT inputs="ctx RequestContext" outputs="array of item progress records" errors="throws on database error" side_effects="none"]
|
|
133
|
+
// CIL[DOC-MICRO logic_summary="Build a query, apply optional filters, and return data ordered by updated_at desc" notable_decisions="[]"]
|
|
134
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
135
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
86
136
|
export const list = createHandler(async (ctx) => {
|
|
87
137
|
const { person_id, item_id, item_ids, status, limit = '100', offset = '0' } = ctx.query || {}
|
|
88
138
|
|
|
@@ -102,21 +152,21 @@ export const list = createHandler(async (ctx) => {
|
|
|
102
152
|
if (error) throw error
|
|
103
153
|
return data
|
|
104
154
|
})
|
|
105
|
-
// CIL[
|
|
106
|
-
// CIL[
|
|
107
|
-
// CIL[DOC-
|
|
108
|
-
// CIL[DOC-
|
|
109
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
110
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Progress record" errors="ID required, not found, DB errors" side_effects="DB read operation"]
|
|
111
|
-
// CIL[DOC-MICRO logic_summary="Queries by ID, returns full progress record" notable_decisions="[]"]
|
|
112
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
113
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
114
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 26. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
115
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 26. Total affected: 29."]
|
|
116
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
117
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
155
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List active item progress records with optional filters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
156
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
157
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
158
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
118
159
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
119
160
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
161
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:list:constant"]
|
|
162
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/item-progress.ts"]
|
|
163
|
+
// CIL[DOC-MACRO purpose="Fetch a single item progress record by ID"]
|
|
164
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the requested record or throw not found"]
|
|
165
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
166
|
+
// CIL[DOC-CONTRACT inputs="ctx RequestContext" outputs="item progress record" errors="throws if id missing or record not found" side_effects="none"]
|
|
167
|
+
// CIL[DOC-MICRO logic_summary="Read id from query, select single row, and return data" notable_decisions="[]"]
|
|
168
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
169
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
120
170
|
export const get = createHandler(async (ctx) => {
|
|
121
171
|
const id = ctx.query?.id
|
|
122
172
|
if (!id) throw new Error('Progress record ID is required')
|
|
@@ -130,21 +180,21 @@ export const get = createHandler(async (ctx) => {
|
|
|
130
180
|
if (error || !data) throw new Error('Progress record not found')
|
|
131
181
|
return data
|
|
132
182
|
})
|
|
133
|
-
// CIL[
|
|
134
|
-
// CIL[
|
|
135
|
-
// CIL[DOC-
|
|
136
|
-
// CIL[DOC-
|
|
137
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
138
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Progress record" errors="Required fields missing, invalid transition, DB errors" side_effects="DB upsert, audit logging"]
|
|
139
|
-
// CIL[DOC-MICRO logic_summary="Validates pipeline transitions, auto-composes metadata, handles timestamps" notable_decisions="[]"]
|
|
140
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
141
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
142
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 6. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
143
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 6. Total affected: 6."]
|
|
144
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
145
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
183
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch a single item progress record by ID'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
184
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
185
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
186
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
146
187
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
147
188
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
189
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:get:constant"]
|
|
190
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:upsert:constant" type="constant" identity="upsert" parent="~/.framework/functions/item-progress.ts"]
|
|
191
|
+
// CIL[DOC-MACRO purpose="Create or update an item progress record"]
|
|
192
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Resolve type, validate status transitions, enrich title/description, and upsert record"]
|
|
193
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
194
|
+
// CIL[DOC-CONTRACT inputs="ctx RequestContext, body object" outputs="upserted record" errors="throws on missing required fields, invalid transition, or database error" side_effects="emits audit log"]
|
|
195
|
+
// CIL[DOC-MICRO logic_summary="Resolve type id, load existing record, validate status transition, compute attempts and timestamps, fetch title and description if missing, build payload, upsert, and emit log" notable_decisions="[]"]
|
|
196
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
197
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
148
198
|
export const upsert = createHandler(async (ctx, body) => {
|
|
149
199
|
const { person_id, item_id, type_id, type_slug, account_id, app_id, force } = body || {}
|
|
150
200
|
let { status, score, data: dataPayload, title, description } = body || {}
|
|
@@ -239,21 +289,21 @@ export const upsert = createHandler(async (ctx, body) => {
|
|
|
239
289
|
|
|
240
290
|
return result
|
|
241
291
|
})
|
|
242
|
-
// CIL[
|
|
243
|
-
// CIL[
|
|
244
|
-
// CIL[DOC-
|
|
245
|
-
// CIL[DOC-
|
|
246
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
247
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Updated progress record" errors="ID required, not found, invalid transition, DB errors" side_effects="DB update, audit logging"]
|
|
248
|
-
// CIL[DOC-MICRO logic_summary="Validates pipeline transitions, updates timestamps, logs changes" notable_decisions="[]"]
|
|
249
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
250
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
251
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
252
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
253
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
254
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
292
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create or update an item progress record'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
293
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
294
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
295
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
255
296
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
256
297
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
298
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:upsert:constant"]
|
|
299
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/item-progress.ts"]
|
|
300
|
+
// CIL[DOC-MACRO purpose="Patch an existing item progress record by ID"]
|
|
301
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Apply status transition and merge data, then update row"]
|
|
302
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
303
|
+
// CIL[DOC-CONTRACT inputs="ctx RequestContext, body object" outputs="updated record" errors="throws if id missing, record not found, or invalid transition" side_effects="emits audit log"]
|
|
304
|
+
// CIL[DOC-MICRO logic_summary="Read id, load record, validate transition, merge data with timestamps, update, and emit log" notable_decisions="[]"]
|
|
305
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
306
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
257
307
|
export const update = createHandler(async (ctx, body) => {
|
|
258
308
|
const id = body?.id || ctx.query?.id
|
|
259
309
|
if (!id) throw new Error('Progress record ID is required')
|
|
@@ -311,21 +361,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
311
361
|
|
|
312
362
|
return result
|
|
313
363
|
})
|
|
314
|
-
// CIL[
|
|
315
|
-
// CIL[
|
|
316
|
-
// CIL[DOC-
|
|
317
|
-
// CIL[DOC-
|
|
318
|
-
// CIL[DOC-CONTEXT module="item-progress" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
319
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Varies by method" errors="Unsupported method" side_effects="Delegates to handlers"]
|
|
320
|
-
// CIL[DOC-MICRO logic_summary="Switch statement routes GET/POST/PATCH to appropriate handlers" notable_decisions="[]"]
|
|
321
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
322
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
323
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
324
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
325
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
326
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
364
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Patch an existing item progress record by ID'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
365
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
366
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
367
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
327
368
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
328
369
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
370
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:update:constant"]
|
|
371
|
+
// CIL[BEGIN stable_id="~/.framework/functions/item-progress.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/item-progress.ts"]
|
|
372
|
+
// CIL[DOC-MACRO purpose="Route method-based requests to list, get, upsert, or update"]
|
|
373
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch GET/POST/PATCH calls to the appropriate handler"]
|
|
374
|
+
// CIL[DOC-CONTEXT module="item-progress" layer="framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/item-progress.ts"]
|
|
375
|
+
// CIL[DOC-CONTRACT inputs="ctx RequestContext, body object" outputs="handler result" errors="throws for unsupported method" side_effects="calls downstream handlers"]
|
|
376
|
+
// CIL[DOC-MICRO logic_summary="Read method and id from query, dispatch to list/get/upsert/update accordingly" notable_decisions="[]"]
|
|
377
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
378
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
329
379
|
export const handler = createHandler(async (ctx, body) => {
|
|
330
380
|
const method = ctx.query?.method || 'GET'
|
|
331
381
|
const id = ctx.query?.id
|
|
@@ -336,4 +386,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
336
386
|
|
|
337
387
|
throw new Error(`Method ${method} not supported`)
|
|
338
388
|
})
|
|
339
|
-
// CIL[
|
|
389
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Route method-based requests to list, get, upsert, or update'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
390
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
391
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
392
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
393
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
394
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
395
|
+
// CIL[END stable_id="~/.framework/functions/item-progress.ts:handler:constant"]
|
|
@@ -1,7 +1,30 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/kb.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/kb.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Netlify function entry point for knowledge base operations"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import shared kb handlers and the admin-data update helper for the unified kb function"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="framework.functions.kb" layer="function" related_files=".framework/functions/_shared/kb.ts,.framework/functions/_shared/middleware.ts,.framework/functions/admin-data.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports createHandler, kbIngest/kbRevoke/kbReindex/kbSearch, and adminUpdate for the kb Netlify function" notable_decisions=[]]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
1
10
|
import { createHandler } from './_shared/middleware'
|
|
2
|
-
import { kbIngest, kbRevoke, kbReindex, kbSearch } from './_shared/kb'
|
|
3
|
-
|
|
11
|
+
import { kbIngest, kbPublish, kbRevoke, kbReindex, kbSearch } from './_shared/kb'
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function entry point for knowledge base operations'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/kb.ts,.framework/functions/admin-data.ts"]
|
|
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/kb.ts:module_header:module_header"]
|
|
4
19
|
|
|
20
|
+
// CIL[BEGIN stable_id="~/.framework/functions/kb.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/kb.ts"]
|
|
21
|
+
// CIL[DOC-MACRO purpose="Dispatch knowledge base actions from a Netlify function handler"]
|
|
22
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Route the incoming action to the correct kb handler or publish workflow"]
|
|
23
|
+
// CIL[DOC-CONTEXT module="framework.functions.kb" layer="function" related_files=".framework/functions/_shared/kb.ts,.framework/functions/_shared/middleware.ts,.framework/functions/admin-data.ts,.framework/functions/kb.ts"]
|
|
24
|
+
// CIL[DOC-CONTRACT inputs="ctx (RequestContext), body (object), action from query or body" outputs="kb handler result or { record, ingest } for publish" errors="unknown kb action, missing id for publish" side_effects="calls kbIngest/kbRevoke/kbReindex/kbSearch, delegates publish to admin-data then re-ingests"]
|
|
25
|
+
// CIL[DOC-MICRO logic_summary="Determines the action from ctx.query.action defaulting to search, switches on ingest/revoke/reindex/search/publish, and for publish builds a synthetic PATCH context for admin-data before re-ingesting" notable_decisions=["Publishes by delegating to admin-data with a synthetic PATCH context", "Re-ingests the record after publishing to refresh the knowledge base"]']
|
|
26
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
27
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
5
28
|
export const handler = createHandler(async (ctx, body) => {
|
|
6
29
|
const action = ctx.query?.action || 'search'
|
|
7
30
|
|
|
@@ -14,15 +37,16 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
14
37
|
return await kbReindex(ctx, body)
|
|
15
38
|
case 'search':
|
|
16
39
|
return await kbSearch(ctx, body)
|
|
17
|
-
case 'publish':
|
|
18
|
-
|
|
19
|
-
if (!id) throw new Error('id is required')
|
|
20
|
-
const updateCtx = { ...ctx, query: { ...ctx.query, entity: 'items', id, method: 'PATCH' } }
|
|
21
|
-
const record = await adminUpdate(updateCtx, { status: 'published' })
|
|
22
|
-
const ingest = await kbIngest(ctx, { id })
|
|
23
|
-
return { record, ingest }
|
|
24
|
-
}
|
|
40
|
+
case 'publish':
|
|
41
|
+
return await kbPublish(ctx, body)
|
|
25
42
|
default:
|
|
26
43
|
throw new Error(`unknown kb action: ${action}`)
|
|
27
44
|
}
|
|
28
45
|
})
|
|
46
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Dispatch knowledge base actions from a Netlify function handler'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/kb.ts,.framework/functions/admin-data.ts"]
|
|
47
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
48
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
49
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
50
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
51
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
52
|
+
// CIL[END stable_id="~/.framework/functions/kb.ts:handler:constant"]
|