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.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +20 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. 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[END chunk_id="itemprogress_moduleheader_1783968140"]
27
- // CIL[BEGIN chunk_id="itemprogress_constants_1783968140" type="constants" identity="constants" parent="none"]
28
- // CIL[DOC-LEARNING topic="runtime-type:generic/pipeline" content="item-progress reads typeRecord.design_schema.pipeline for the ordered list of statuses. Transitions are valid when the target index is greater than or equal to the current index. If pipeline is missing, the default is [not_started, in_progress, completed]."]
29
- // CIL[DOC-NOTE type="design_schema_caveat" content="Any status not in the pipeline array is treated as always allowed. Force=true bypasses pipeline validation, so the client can override if the type changes."]
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[END chunk_id="itemprogress_constants_1783968140"]
72
- // CIL[BEGIN chunk_id="itemprogress_list_1783968140" type="function" identity="list" parent="none"]
73
- // CIL[DOC-MACRO purpose="List progress records with filtering and pagination"]
74
- // CIL[DOC-RESPONSIBILITY responsibility="Query and return paginated progress records"]
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[END chunk_id="itemprogress_list_1783968140"]
106
- // CIL[BEGIN chunk_id="itemprogress_get_1783968140" type="function" identity="get" parent="none"]
107
- // CIL[DOC-MACRO purpose="Get single progress record by ID"]
108
- // CIL[DOC-RESPONSIBILITY responsibility="Retrieve individual progress record"]
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[END chunk_id="itemprogress_get_1783968140"]
134
- // CIL[BEGIN chunk_id="itemprogress_upsert_1783968140" type="function" identity="upsert" parent="none"]
135
- // CIL[DOC-MACRO purpose="Upsert progress record with pipeline validation and auto-composition"]
136
- // CIL[DOC-RESPONSIBILITY responsibility="Create or update progress with smart defaults"]
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[END chunk_id="itemprogress_upsert_1783968140"]
243
- // CIL[BEGIN chunk_id="itemprogress_update_1783968140" type="function" identity="update" parent="none"]
244
- // CIL[DOC-MACRO purpose="Update progress record with pipeline validation and audit logging"]
245
- // CIL[DOC-RESPONSIBILITY responsibility="Modify progress with transition safety checks"]
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[END chunk_id="itemprogress_update_1783968140"]
315
- // CIL[BEGIN chunk_id="itemprogress_handler_1783968140" type="function" identity="handler" parent="none"]
316
- // CIL[DOC-MACRO purpose="Route HTTP methods to appropriate progress handlers"]
317
- // CIL[DOC-RESPONSIBILITY responsibility="Dispatch CRUD requests to correct handler functions"]
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[END chunk_id="itemprogress_handler_1783968140"]
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
- import { update as adminUpdate } from './admin-data'
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
- const { id } = body
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"]