spine-framework 0.3.145 → 0.4.1

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 +5067 -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 +15 -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,23 +1,38 @@
1
- // CIL[BEGIN chunk_id="llm_module_header_1784700002" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Broker-backed LLM helpers for core functions"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Route OpenAI chat and embedding calls through integration-outbound"]
4
- // CIL[DOC-CONTEXT module="llm" layer="infrastructure" related_files="[".framework/functions/_shared/agent-runner.ts",".framework/functions/_shared/kb.ts",".framework/functions/embeddings.ts",".framework/functions/integration-outbound.ts",".framework/migrations/051_integration_broker.sql"]"]
5
- // CIL[DOC-CONTRACT inputs="optional ctx, endpoint, body" outputs="parsed API response" errors="throws on missing key or HTTP failure" side_effects="Calls integration-outbound, writes webhook_deliveries"]
6
- // CIL[DOC-MICRO logic_summary="Provides callOpenAI, callOpenAIEmbeddings, and callOpenAIChat. Falls back to a system CoreContext when none is provided." notable_decisions="["All OpenAI calls now create an outbound delivery record for audit/retry.","A default system context lets non-handler call sites reuse the helper."]"]
7
- // CIL[DOC-CONFIDENCE pass="first" score="0.85" flags="none"]
8
- // CIL[DOC-STABILITY stability="experimental"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: infrastructure. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/agent-runner.ts, .framework/functions/_shared/kb.ts, .framework/functions/embeddings.ts, .framework/functions/integration-outbound.ts, .framework/migrations/051_integration_broker.sql."]
11
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
12
- // CIL[DOC-VECTOR type="configuration" content="Requires the system 'openai' integration to be seeded."]
13
- // CIL[DOC-VECTOR type="constraint" content="Non-200 responses throw."]
14
- // CIL[DOC-VECTOR type="implementation_pattern" content="Replaces direct process.env OPENAI_API_KEY fetches in core."]
15
- // CIL[DOC-VECTOR type="user_journey" content="AI agents and embedding pipelines use the broker."]
1
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/llm.ts"]
2
+ // CIL[DOC-MACRO purpose="Shared LLM integration entry point for OpenAI chat and embeddings"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Import shared dependencies and export the LlmContext type and helper functions used by LLM callers"]
4
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="LlmContext type, buildCoreContext, callOpenAI, callOpenAIEmbeddings, callOpenAIChat, callEmbeddingApi" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Provides the shared LLM context shape and thin async wrappers around the OpenAI outbound integration" notable_decisions="Context fields are intentionally permissive (any) to stay flexible across callers"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stable]
9
+ // CIL[DOC-AUDIENCE audience="framework developers"]
16
10
 
17
- import { execute as executeOutbound } from '../integration-outbound'
11
+ // integration-outbound is imported lazily — a static edge closes the cycle
12
+ // middleware → security → rate-limit → funnel → trigger-engine →
13
+ // pipeline-runner → kb → llm → integration-outbound → admin-data → middleware,
14
+ // leaving createHandler undefined during module evaluation.
15
+ const executeOutbound = async (ctx: any, args: any) =>
16
+ (await import('../integration-outbound')).execute(ctx, args)
18
17
  import { adminDb } from './db'
19
18
  import { SYSTEM_PRINCIPAL } from './principal'
19
+ // CIL[DOC-VECTOR type="context" content="purpose='Shared LLM integration entry point for OpenAI chat and embeddings'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
20
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
21
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
22
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
23
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
24
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
25
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:module_header:module_header"]
20
26
 
27
+
28
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:LlmContext:interface" type="interface" identity="LlmContext" parent="~/.framework/functions/_shared/llm.ts"]
29
+ // CIL[DOC-MACRO purpose="Define the shared context shape passed to LLM helper functions"]
30
+ // CIL[DOC-RESPONSIBILITY responsibility="Carry optional request, database, principal, account, and integration references for LLM calls"]
31
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
32
+ // CIL[DOC-CONTRACT inputs="none" outputs="LlmContext object shape" errors="none" side_effects="none"]
33
+ // CIL[DOC-MICRO logic_summary="Optional fields: db, principal, accountId, requestId, integration" notable_decisions="All fields are optional to allow default context building"]
34
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
35
+ // CIL[DOC-STABILITY stable]
21
36
  export interface LlmContext {
22
37
  db?: any
23
38
  principal?: any
@@ -25,7 +40,23 @@ export interface LlmContext {
25
40
  requestId?: string
26
41
  integration?: any
27
42
  }
43
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the shared context shape passed to LLM helper functions'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
44
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
45
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
46
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
47
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
48
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
49
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:LlmContext:interface"]
50
+
28
51
 
52
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:buildCoreContext:function" type="function" identity="buildCoreContext" parent="~/.framework/functions/_shared/llm.ts"]
53
+ // CIL[DOC-MACRO purpose="Assemble a fallback LlmContext from shared defaults"]
54
+ // CIL[DOC-RESPONSIBILITY responsibility="Merge the supplied context with admin db and system principal defaults when one is not provided"]
55
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
56
+ // CIL[DOC-CONTRACT inputs="ctx?: LlmContext" outputs="LlmContext" errors="none" side_effects="generates a random UUID for requestId"]
57
+ // CIL[DOC-MICRO logic_summary="Return the provided context or a default object containing adminDb, SYSTEM_PRINCIPAL, a null accountId, and a fresh crypto.randomUUID" notable_decisions="Uses crypto.randomUUID for request tracking"]
58
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
59
+ // CIL[DOC-STABILITY stable]
29
60
  function buildCoreContext(ctx?: LlmContext): any {
30
61
  return ctx || {
31
62
  db: adminDb,
@@ -34,7 +65,23 @@ function buildCoreContext(ctx?: LlmContext): any {
34
65
  requestId: crypto.randomUUID()
35
66
  }
36
67
  }
68
+ // CIL[DOC-VECTOR type="context" content="purpose='Assemble a fallback LlmContext from shared defaults'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
69
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
70
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
71
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
72
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
73
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
74
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:buildCoreContext:function"]
37
75
 
76
+
77
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:callOpenAI:function" type="function" identity="callOpenAI" parent="~/.framework/functions/_shared/llm.ts"]
78
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
79
+ // CIL[DOC-CONTEXT module="llm" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
80
+ // CIL[DOC-MACRO purpose="Execute an arbitrary OpenAI API request through the outbound integration"]
81
+ // CIL[DOC-RESPONSIBILITY responsibility="Build core context, call the openai integration, and return the response body"]
82
+ // CIL[DOC-CONTRACT inputs="ctx: LlmContext | undefined, endpoint: string, body: any" outputs="any (response_body)" errors="throws on outbound integration or HTTP failure" side_effects="calls the external OpenAI HTTP endpoint through the integration"]
83
+ // CIL[DOC-MICRO logic_summary="Wraps executeOutbound with the openai slug and the supplied endpoint/body, then returns result.response_body" notable_decisions="Relies on the integration-outbound executor for credential handling and retries"]
84
+ // CIL[DOC-STABILITY stable]
38
85
  export async function callOpenAI(ctx: LlmContext | undefined, endpoint: string, body: any): Promise<any> {
39
86
  const coreCtx = buildCoreContext(ctx)
40
87
  const result = await executeOutbound(coreCtx, {
@@ -43,7 +90,23 @@ export async function callOpenAI(ctx: LlmContext | undefined, endpoint: string,
43
90
  })
44
91
  return result.response_body
45
92
  }
93
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:callOpenAI:function"]
94
+
95
+ // CIL[DOC-VECTOR type="context" content="purpose='Execute an arbitrary OpenAI API request through the outbound integration'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
96
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
97
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
98
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
99
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
100
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
101
 
102
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:callOpenAIEmbeddings:function" type="function" identity="callOpenAIEmbeddings" parent="~/.framework/functions/_shared/llm.ts"]
103
+ // CIL[DOC-MACRO purpose="Request text embeddings from OpenAI for a list of strings"]
104
+ // CIL[DOC-RESPONSIBILITY responsibility="Resolve the configured embedding model and delegate the request to callOpenAI"]
105
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
106
+ // CIL[DOC-CONTRACT inputs="ctx: LlmContext | undefined, inputs: string[], model?: string" outputs="Promise<any> (OpenAI embeddings response)" errors="propagates callOpenAI errors" side_effects="calls the OpenAI /embeddings endpoint"]
107
+ // CIL[DOC-MICRO logic_summary="Selects the model from ctx.integration.config.models.embedding or the default, then calls callOpenAI with the embeddings endpoint and input array" notable_decisions="Falls back to text-embedding-3-small when no custom model is configured"]
108
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
109
+ // CIL[DOC-STABILITY stable]
47
110
  export async function callOpenAIEmbeddings(
48
111
  ctx: LlmContext | undefined,
49
112
  inputs: string[],
@@ -56,7 +119,23 @@ export async function callOpenAIEmbeddings(
56
119
  input: inputs
57
120
  })
58
121
  }
122
+ // CIL[DOC-VECTOR type="context" content="purpose='Request text embeddings from OpenAI for a list of strings'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
123
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
124
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
125
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
126
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
127
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
128
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:callOpenAIEmbeddings:function"]
59
129
 
130
+
131
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:callOpenAIChat:function" type="function" identity="callOpenAIChat" parent="~/.framework/functions/_shared/llm.ts"]
132
+ // CIL[DOC-MACRO purpose="Send a chat completion request to OpenAI"]
133
+ // CIL[DOC-RESPONSIBILITY responsibility="Build a chat request body with optional tools and response format and return the OpenAI response"]
134
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
135
+ // CIL[DOC-CONTRACT inputs="ctx: LlmContext | undefined, messages: any[], model?: string, options?: { temperature?: number; max_tokens?: number; tools?: any[]; tool_choice?: any; response_format?: any }" outputs="Promise<any> (OpenAI chat completion response)" errors="propagates callOpenAI errors" side_effects="calls the OpenAI /chat/completions endpoint"]
136
+ // CIL[DOC-MICRO logic_summary="Resolves the chat model, builds a body with temperature 0.7 and max_tokens 4000 defaults, appends tools and response_format when provided, then calls callOpenAI" notable_decisions="Uses gpt-4o-mini as the default chat model"]
137
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
138
+ // CIL[DOC-STABILITY stable]
60
139
  export async function callOpenAIChat(
61
140
  ctx: LlmContext | undefined,
62
141
  messages: any[],
@@ -80,7 +159,23 @@ export async function callOpenAIChat(
80
159
  }
81
160
  return callOpenAI(ctx, '/chat/completions', body)
82
161
  }
162
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:callOpenAIChat:function"]
163
+ // CIL[DOC-VECTOR type="context" content="purpose='Send a chat completion request to OpenAI'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
164
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
165
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
166
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
167
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
168
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
169
+
83
170
 
171
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/llm.ts:callEmbeddingApi:function" type="function" identity="callEmbeddingApi" parent="~/.framework/functions/_shared/llm.ts"]
172
+ // CIL[DOC-MACRO purpose="Generate and normalize a numeric embedding matrix from string inputs"]
173
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate input, request embeddings, sort by index, and extract embedding vectors"]
174
+ // CIL[DOC-CONTEXT module="llm" layer="functions/shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/llm.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
175
+ // CIL[DOC-CONTRACT inputs="inputs: string[], model?: string" outputs="Promise<number[][]>" errors="throws 'No inputs provided' when inputs is empty" side_effects="calls callOpenAIEmbeddings"]
176
+ // CIL[DOC-MICRO logic_summary="Throws if inputs is empty, fetches embeddings, sorts each result by its index, and maps to d.embedding arrays" notable_decisions="Returns an empty array when j.data is missing"]
177
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
178
+ // CIL[DOC-STABILITY stable]
84
179
  export async function callEmbeddingApi(inputs: string[], model = 'text-embedding-3-small'): Promise<number[][]> {
85
180
  if (!inputs.length) throw new Error('No inputs provided')
86
181
  const j = await callOpenAIEmbeddings(undefined, inputs, model)
@@ -88,5 +183,10 @@ export async function callEmbeddingApi(inputs: string[], model = 'text-embedding
88
183
  .sort((a: any, b: any) => a.index - b.index)
89
184
  .map((d: any) => d.embedding)
90
185
  }
91
-
92
- // CIL[END chunk_id="llm_module_header_1784700002"]
186
+ // CIL[DOC-VECTOR type="context" content="purpose='Generate and normalize a numeric embedding matrix from string inputs'; No verified external callers; imports: .framework/functions/integration-outbound.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
187
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
188
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
189
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
190
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
191
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
192
+ // CIL[END stable_id="~/.framework/functions/_shared/llm.ts:callEmbeddingApi:function"]