spine-framework 0.3.145 → 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 +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,48 +1,83 @@
1
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/resolve-ids.ts"]
2
+ // CIL[DOC-MACRO purpose="Shared id resolution helpers for types, link types, accounts, agents and prompt configs."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide reusable functions that map slugs and (kind, slug) pairs to primary keys for Spine entities."]
4
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts"]
5
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
6
+ // CIL[DOC-MICRO logic_summary="Module header for resolve-ids.ts; contains the import and no runtime logic." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developers"]
1
10
 
11
+ import { adminDb } from './db'
2
12
 
13
+ // Design-time resolution caches. `types`/`accounts` rows change only on app
14
+ // install or schema edits — a 60s TTL bounds staleness the same way the
15
+ // principal and app-config caches do. Entries are keyed before any DB call so
16
+ // concurrent resolvers share one query (promise memoization).
17
+ const RESOLVE_CACHE_TTL_MS = 60_000
18
+ const RESOLVE_CACHE_MAX = 500
3
19
 
20
+ type CacheSlot<T> = { value: Promise<T>; expiresAt: number }
4
21
 
22
+ function makeResolveCache<T>() {
23
+ const map = new Map<string, CacheSlot<T>>()
24
+ return {
25
+ get(key: string): Promise<T> | undefined {
26
+ const slot = map.get(key)
27
+ if (!slot) return undefined
28
+ if (slot.expiresAt < Date.now()) { map.delete(key); return undefined }
29
+ return slot.value
30
+ },
31
+ set(key: string, value: Promise<T>) {
32
+ if (map.size >= RESOLVE_CACHE_MAX) {
33
+ const oldest = map.keys().next().value
34
+ if (oldest !== undefined) map.delete(oldest)
35
+ }
36
+ map.set(key, { value, expiresAt: Date.now() + RESOLVE_CACHE_TTL_MS })
37
+ // Failed lookups must not be cached — a type installed mid-TTL would
38
+ // otherwise stay invisible. Evict rejections immediately.
39
+ value.catch(() => map.delete(key))
40
+ },
41
+ }
42
+ }
5
43
 
6
-
7
-
8
-
9
-
10
- // CIL[BEGIN chunk_id="resolveids_imports_1784020784" type="module_header" identity="imports" parent="none"]
11
- // CIL[DOC-MACRO purpose="Import database dependency for ID resolution"]
12
- // CIL[DOC-RESPONSIBILITY responsibility="Import adminDb for database queries"]
13
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
14
- // CIL[DOC-CONTRACT inputs="none" outputs="adminDb" errors="none" side_effects="none"]
15
- // CIL[DOC-MICRO logic_summary="Import database connection for ID resolution utilities" notable_decisions="[]"]
16
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
17
- // CIL[DOC-STABILITY stability="stable"]
18
- // CIL[DOC-AUDIENCE audience="developer"]
19
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
20
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
21
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
22
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
44
+ const typeIdCache = makeResolveCache<Record<string, string>>()
45
+ const typeRecordCache = makeResolveCache<TypeRecord>()
46
+ const accountIdCache = makeResolveCache<string>()
47
+ // CIL[DOC-VECTOR type="context" content="purpose='Shared id resolution helpers for types, link types, accounts, agents and prompt configs.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
48
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
49
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
50
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
23
51
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
24
52
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
25
- import { adminDb } from './db'
26
- // CIL[END chunk_id="resolveids_imports_1784020784"]
27
- // CIL[BEGIN chunk_id="resolveids_resolvetypeids_1784020784" type="function" identity="resolveTypeIds" parent="none"]
28
- // CIL[DOC-MACRO purpose="Resolve multiple type IDs by kind and slug"]
29
- // CIL[DOC-RESPONSIBILITY responsibility="Batch resolve type identifiers from database"]
30
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
31
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, string>" errors="type not found" side_effects="database query"]
32
- // CIL[DOC-MICRO logic_summary="Batch queries types table, validates all requested types exist" notable_decisions="[]"]
33
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
53
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:module_header:module_header"]
54
+
55
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeIds:function" type="function" identity="resolveTypeIds" parent="~/.framework/functions/_shared/resolve-ids.ts"]
56
+ // CIL[DOC-MACRO purpose="Resolve many (kind, slug) pairs to their type primary keys."]
57
+ // CIL[DOC-RESPONSIBILITY responsibility="Query the types table in batches and validate that every requested pair has a matching row."]
58
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
59
+ // CIL[DOC-CONTRACT inputs="pairs: Array<{ kind: string; slug: string }>" outputs="Record<string, string> mapping kind/slug to id" errors="Throws if any type is not found" side_effects="None"]
60
+ // CIL[DOC-MICRO logic_summary="Builds slug and kind lists, queries types via adminDb, returns a record keyed by kind/slug, then verifies all requested pairs exist." notable_decisions="[]"]
61
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
34
62
  // CIL[DOC-STABILITY stability="stable"]
35
- // CIL[DOC-VECTOR type="context" content="Layer: shared. 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/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/RolesPage.tsx, \."]
36
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
37
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
38
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
40
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
41
63
  export async function resolveTypeIds(
42
64
  pairs: Array<{ kind: string; slug: string }>
43
65
  ): Promise<Record<string, string>> {
44
66
  if (pairs.length === 0) return {}
45
67
 
68
+ // Batch-level memoization: an episode resolving the same pair set (e.g.
69
+ // every save_message → createRecord → type lookup) shares one query.
70
+ const cacheKey = pairs.map(p => `${p.kind}/${p.slug}`).sort().join('|')
71
+ const hit = typeIdCache.get(cacheKey)
72
+ if (hit) return hit
73
+ const pending = resolveTypeIdsUncached(pairs)
74
+ typeIdCache.set(cacheKey, pending)
75
+ return pending
76
+ }
77
+
78
+ async function resolveTypeIdsUncached(
79
+ pairs: Array<{ kind: string; slug: string }>
80
+ ): Promise<Record<string, string>> {
46
81
  const { data, error } = await adminDb
47
82
  .from('types')
48
83
  .select('id, kind, slug')
@@ -64,40 +99,42 @@ export async function resolveTypeIds(
64
99
 
65
100
  return result
66
101
  }
67
- // CIL[END chunk_id="resolveids_resolvetypeids_1784020784"]
68
- // CIL[BEGIN chunk_id="resolveids_resolvetypeid_1784020784" type="function" identity="resolveTypeId" parent="none"]
69
- // CIL[DOC-MACRO purpose="Resolve single type ID by kind and slug"]
70
- // CIL[DOC-RESPONSIBILITY responsibility="Get type identifier from kind and slug"]
71
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
72
- // CIL[DOC-CONTRACT inputs="none" outputs="type ID" errors="type not found" side_effects="database query"]
73
- // CIL[DOC-MICRO logic_summary="Convenience wrapper around resolveTypeIds for single type" notable_decisions="[]"]
74
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
75
- // CIL[DOC-STABILITY stability="stable"]
76
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 15. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
77
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 15. Total affected: 15."]
78
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
79
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
102
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve many (kind, slug) pairs to their type primary keys.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
103
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
104
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
105
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
80
106
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
81
107
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
108
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeIds:function"]
109
+
110
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeId:function" type="function" identity="resolveTypeId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
111
+ // CIL[DOC-MACRO purpose="Resolve a single (kind, slug) pair to its type primary key."]
112
+ // CIL[DOC-RESPONSIBILITY responsibility="Call resolveTypeIds for one pair and return the matching id."]
113
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
114
+ // CIL[DOC-CONTRACT inputs="kind: string, slug: string" outputs="string id" errors="Throws if type not found" side_effects="None"]
115
+ // CIL[DOC-MICRO logic_summary="Delegates to resolveTypeIds([{ kind, slug }]) and returns the single key." notable_decisions="[]"]
116
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
117
+ // CIL[DOC-STABILITY stability="stable"]
82
118
  export async function resolveTypeId(kind: string, slug: string): Promise<string> {
83
119
  const ids = await resolveTypeIds([{ kind, slug }])
84
120
  return ids[`${kind}/${slug}`]
85
121
  }
86
- // CIL[END chunk_id="resolveids_resolvetypeid_1784020784"]
87
- // CIL[BEGIN chunk_id="resolveids_typerecord_1784020784" type="interface" identity="TypeRecord" parent="none"]
88
- // CIL[DOC-MACRO purpose="Define type record interface with schemas"]
89
- // CIL[DOC-RESPONSIBILITY responsibility="Provide structure for type with design and validation schemas"]
90
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
91
- // CIL[DOC-CONTRACT inputs="none" outputs="TypeRecord interface" errors="none" side_effects="none"]
92
- // CIL[DOC-MICRO logic_summary="Interface containing type metadata and schemas" notable_decisions="[]"]
93
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
94
- // CIL[DOC-STABILITY stability="stable"]
95
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
96
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
97
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
98
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
122
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve a single (kind, slug) pair to its type primary key.'; No verified external callers; imports: .framework/functions/_shared/db.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"]
99
126
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
100
127
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
128
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeId:function"]
129
+
130
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:TypeRecord:interface" type="interface" identity="TypeRecord" parent="~/.framework/functions/_shared/resolve-ids.ts"]
131
+ // CIL[DOC-MACRO purpose="Describe the shape of a type record from the types table."]
132
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type for type rows including schemas and active status."]
133
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
134
+ // CIL[DOC-CONTRACT inputs="N/A" outputs="N/A" errors="N/A" side_effects="N/A"]
135
+ // CIL[DOC-MICRO logic_summary="Defines id, slug, kind, design_schema, validation_schema and is_active fields." notable_decisions="[]"]
136
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
137
+ // CIL[DOC-STABILITY stability="stable"]
101
138
  export interface TypeRecord {
102
139
  id: string
103
140
  slug: string
@@ -106,24 +143,32 @@ export interface TypeRecord {
106
143
  validation_schema: Record<string, any>
107
144
  is_active: boolean
108
145
  }
109
- // CIL[END chunk_id="resolveids_typerecord_1784020784"]
110
- // CIL[BEGIN chunk_id="resolveids_resolvetyperecord_1784020784" type="function" identity="resolveTypeRecord" parent="none"]
111
- // CIL[DOC-LEARNING topic="runtime-type:generic/type_resolution" content="resolveTypeRecord fetches a type row by kind and slug or by id, returning the full design_schema and validation_schema. It is used by admin-data create and pipeline.ts to stamp new records."]
112
- // CIL[DOC-NOTE type="design_schema_caveat" content="If the type slug is not found or is inactive, record creation fails with a 400 error. Always seed types before creating records."]
113
- // CIL[DOC-MACRO purpose="Resolve complete type record with schemas"]
114
- // CIL[DOC-RESPONSIBILITY responsibility="Get type metadata and validation schemas"]
115
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
116
- // CIL[DOC-CONTRACT inputs="none" outputs="TypeRecord" errors="type not found/inactive" side_effects="database query"]
117
- // CIL[DOC-MICRO logic_summary="Queries types table, validates active status, returns full record" notable_decisions="[]"]
118
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
119
- // CIL[DOC-STABILITY stability="stable"]
120
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
121
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
122
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
123
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
146
+ // CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of a type record from the types table.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
147
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
148
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
149
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
124
150
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
125
151
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
152
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:TypeRecord:interface"]
153
+
154
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeRecord:function" type="function" identity="resolveTypeRecord" parent="~/.framework/functions/_shared/resolve-ids.ts"]
155
+ // CIL[DOC-MACRO purpose="Fetch a full type record by kind and slug."]
156
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a single TypeRecord after verifying it is active."]
157
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
158
+ // CIL[DOC-CONTRACT inputs="kind: string, slug: string" outputs="TypeRecord" errors="Throws if type not found or inactive" side_effects="None"]
159
+ // CIL[DOC-MICRO logic_summary="Queries types with .single() and returns an object with schema fallbacks." notable_decisions="[]"]
160
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
161
+ // CIL[DOC-STABILITY stability="stable"]
126
162
  export async function resolveTypeRecord(kind: string, slug: string): Promise<TypeRecord> {
163
+ const cacheKey = `${kind}/${slug}`
164
+ const hit = typeRecordCache.get(cacheKey)
165
+ if (hit) return hit
166
+ const pending = resolveTypeRecordUncached(kind, slug)
167
+ typeRecordCache.set(cacheKey, pending)
168
+ return pending
169
+ }
170
+
171
+ async function resolveTypeRecordUncached(kind: string, slug: string): Promise<TypeRecord> {
127
172
  const { data, error } = await adminDb
128
173
  .from('types')
129
174
  .select('id, slug, kind, design_schema, validation_schema, is_active')
@@ -143,21 +188,22 @@ export async function resolveTypeRecord(kind: string, slug: string): Promise<Typ
143
188
  is_active: data.is_active,
144
189
  }
145
190
  }
146
- // CIL[END chunk_id="resolveids_resolvetyperecord_1784020784"]
147
- // CIL[BEGIN chunk_id="resolveids_resolvelinktypeids_1784020784" type="function" identity="resolveLinkTypeIds" parent="none"]
148
- // CIL[DOC-MACRO purpose="Resolve multiple link type IDs by slug"]
149
- // CIL[DOC-RESPONSIBILITY responsibility="Batch resolve link type identifiers from database"]
150
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
151
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, string>" errors="link type not found" side_effects="database query"]
152
- // CIL[DOC-MICRO logic_summary="Batch queries link_types table, validates all requested types exist" notable_decisions="[]"]
153
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
154
- // CIL[DOC-STABILITY stability="stable"]
155
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
156
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
157
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
158
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
191
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch a full type record by kind and slug.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
192
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
193
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
194
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
159
195
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
160
196
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
197
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveTypeRecord:function"]
198
+
199
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeIds:function" type="function" identity="resolveLinkTypeIds" parent="~/.framework/functions/_shared/resolve-ids.ts"]
200
+ // CIL[DOC-MACRO purpose="Resolve many link type slugs to their primary keys."]
201
+ // CIL[DOC-RESPONSIBILITY responsibility="Query the link_types table in a batch and confirm all slugs are resolved."]
202
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
203
+ // CIL[DOC-CONTRACT inputs="slugs: string[]" outputs="Record<string, string> mapping slug to id" errors="Throws if any link type is not found" side_effects="None"]
204
+ // CIL[DOC-MICRO logic_summary="Queries link_types by slug list, builds a record, and validates every input slug is present." notable_decisions="[]"]
205
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
206
+ // CIL[DOC-STABILITY stability="stable"]
161
207
  export async function resolveLinkTypeIds(slugs: string[]): Promise<Record<string, string>> {
162
208
  if (slugs.length === 0) return {}
163
209
 
@@ -179,41 +225,51 @@ export async function resolveLinkTypeIds(slugs: string[]): Promise<Record<string
179
225
 
180
226
  return result
181
227
  }
182
- // CIL[END chunk_id="resolveids_resolvelinktypeids_1784020784"]
183
- // CIL[BEGIN chunk_id="resolveids_resolvelinktypeid_1784020784" type="function" identity="resolveLinkTypeId" parent="none"]
184
- // CIL[DOC-MACRO purpose="Resolve single link type ID by slug"]
185
- // CIL[DOC-RESPONSIBILITY responsibility="Get link type identifier from slug"]
186
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
187
- // CIL[DOC-CONTRACT inputs="none" outputs="link type ID" errors="link type not found" side_effects="database query"]
188
- // CIL[DOC-MICRO logic_summary="Convenience wrapper around resolveLinkTypeIds for single type" notable_decisions="[]"]
189
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
190
- // CIL[DOC-STABILITY stability="stable"]
191
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
192
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
193
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
194
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
228
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve many link type slugs to their primary keys.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
229
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
230
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
231
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
195
232
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
196
233
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
234
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeIds:function"]
235
+
236
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeId:function" type="function" identity="resolveLinkTypeId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
237
+ // CIL[DOC-MACRO purpose="Resolve a single link type slug to its primary key."]
238
+ // CIL[DOC-RESPONSIBILITY responsibility="Call resolveLinkTypeIds for one slug and return the id."]
239
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
240
+ // CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if link type not found" side_effects="None"]
241
+ // CIL[DOC-MICRO logic_summary="Delegates to resolveLinkTypeIds([slug]) and returns ids[slug]." notable_decisions="[]"]
242
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
243
+ // CIL[DOC-STABILITY stability="stable"]
197
244
  export async function resolveLinkTypeId(slug: string): Promise<string> {
198
245
  const ids = await resolveLinkTypeIds([slug])
199
246
  return ids[slug]
200
247
  }
201
- // CIL[END chunk_id="resolveids_resolvelinktypeid_1784020784"]
202
- // CIL[BEGIN chunk_id="resolveids_resolveaccountid_1784020784" type="function" identity="resolveAccountId" parent="none"]
203
- // CIL[DOC-MACRO purpose="Resolve account ID by slug"]
204
- // CIL[DOC-RESPONSIBILITY responsibility="Get account identifier from slug"]
205
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
206
- // CIL[DOC-CONTRACT inputs="none" outputs="account ID" errors="account not found" side_effects="database query"]
207
- // CIL[DOC-MICRO logic_summary="Queries accounts table by slug to get ID" notable_decisions="[]"]
208
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
209
- // CIL[DOC-STABILITY stability="stable"]
210
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
211
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
212
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
213
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
248
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve a single link type slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
249
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
250
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
251
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
214
252
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
215
253
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
254
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveLinkTypeId:function"]
255
+
256
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAccountId:function" type="function" identity="resolveAccountId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
257
+ // CIL[DOC-MACRO purpose="Resolve an account slug to its primary key."]
258
+ // CIL[DOC-RESPONSIBILITY responsibility="Query accounts table by slug and return the id."]
259
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
260
+ // CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if account not found" side_effects="None"]
261
+ // CIL[DOC-MICRO logic_summary="Queries accounts selecting id, applies .single(), and throws on missing data." notable_decisions="[]"]
262
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
263
+ // CIL[DOC-STABILITY stability="stable"]
216
264
  export async function resolveAccountId(slug: string): Promise<string> {
265
+ const hit = accountIdCache.get(slug)
266
+ if (hit) return hit
267
+ const pending = resolveAccountIdUncached(slug)
268
+ accountIdCache.set(slug, pending)
269
+ return pending
270
+ }
271
+
272
+ async function resolveAccountIdUncached(slug: string): Promise<string> {
217
273
  const { data, error } = await adminDb
218
274
  .from('accounts')
219
275
  .select('id')
@@ -223,21 +279,22 @@ export async function resolveAccountId(slug: string): Promise<string> {
223
279
  if (error || !data) throw new Error(`Account not found: ${slug}`)
224
280
  return data.id
225
281
  }
226
- // CIL[END chunk_id="resolveids_resolveaccountid_1784020784"]
227
- // CIL[BEGIN chunk_id="resolveids_resolveagentid_1784020784" type="function" identity="resolveAgentId" parent="none"]
228
- // CIL[DOC-MACRO purpose="Resolve AI agent ID by name"]
229
- // CIL[DOC-RESPONSIBILITY responsibility="Get active AI agent identifier from name"]
230
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
231
- // CIL[DOC-CONTRACT inputs="none" outputs="agent ID" errors="agent not found" side_effects="database query"]
232
- // CIL[DOC-MICRO logic_summary="Queries ai_agents table by name and active status" notable_decisions="[]"]
233
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
234
- // CIL[DOC-STABILITY stability="stable"]
235
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
236
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
237
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
238
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
282
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve an account slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
283
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
284
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
285
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
239
286
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
240
287
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
288
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAccountId:function"]
289
+
290
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAgentId:function" type="function" identity="resolveAgentId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
291
+ // CIL[DOC-MACRO purpose="Resolve an active AI agent name to its primary key."]
292
+ // CIL[DOC-RESPONSIBILITY responsibility="Query ai_agents table by name and active status and return the id."]
293
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
294
+ // CIL[DOC-CONTRACT inputs="name: string" outputs="string id" errors="Throws if active AI agent not found" side_effects="None"]
295
+ // CIL[DOC-MICRO logic_summary="Queries ai_agents selecting id, filters is_active true, and throws on missing data." notable_decisions="[]"]
296
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
297
+ // CIL[DOC-STABILITY stability="stable"]
241
298
  export async function resolveAgentId(name: string): Promise<string> {
242
299
  const { data, error } = await adminDb
243
300
  .from('ai_agents')
@@ -249,21 +306,22 @@ export async function resolveAgentId(name: string): Promise<string> {
249
306
  if (error || !data) throw new Error(`AI agent not found: ${name}`)
250
307
  return data.id
251
308
  }
252
- // CIL[END chunk_id="resolveids_resolveagentid_1784020784"]
253
- // CIL[BEGIN chunk_id="resolveids_resolvepromptconfigid_1784020784" type="function" identity="resolvePromptConfigId" parent="none"]
254
- // CIL[DOC-MACRO purpose="Resolve prompt config ID by slug"]
255
- // CIL[DOC-RESPONSIBILITY responsibility="Get active prompt config identifier from slug"]
256
- // CIL[DOC-CONTEXT module="resolve-ids" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
257
- // CIL[DOC-CONTRACT inputs="none" outputs="prompt config ID" errors="prompt config not found" side_effects="database query"]
258
- // CIL[DOC-MICRO logic_summary="Queries prompt_configs table by slug and active status" notable_decisions="[]"]
259
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
260
- // CIL[DOC-STABILITY stability="stable"]
261
- // CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 4. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
262
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 4. Total affected: 4."]
263
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
264
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
309
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve an active AI agent name to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
310
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
311
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
312
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
265
313
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
266
314
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
315
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolveAgentId:function"]
316
+
317
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolvePromptConfigId:function" type="function" identity="resolvePromptConfigId" parent="~/.framework/functions/_shared/resolve-ids.ts"]
318
+ // CIL[DOC-MACRO purpose="Resolve an active prompt config slug to its primary key."]
319
+ // CIL[DOC-RESPONSIBILITY responsibility="Query prompt_configs table by slug and active status and return the id."]
320
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="shared" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/resolve-ids.ts"]
321
+ // CIL[DOC-CONTRACT inputs="slug: string" outputs="string id" errors="Throws if active prompt config not found" side_effects="None"]
322
+ // CIL[DOC-MICRO logic_summary="Queries prompt_configs selecting id with active filter and single, throws on missing." notable_decisions="[]"]
323
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
324
+ // CIL[DOC-STABILITY stability="stable"]
267
325
  export async function resolvePromptConfigId(slug: string): Promise<string> {
268
326
  const { data, error } = await adminDb
269
327
  .from('prompt_configs')
@@ -275,4 +333,10 @@ export async function resolvePromptConfigId(slug: string): Promise<string> {
275
333
  if (error || !data) throw new Error(`Prompt config not found: ${slug}`)
276
334
  return data.id
277
335
  }
278
- // CIL[END chunk_id="resolveids_resolvepromptconfigid_1784020784"]
336
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve an active prompt config slug to its primary key.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
337
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
338
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
339
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
340
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
341
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
342
+ // CIL[END stable_id="~/.framework/functions/_shared/resolve-ids.ts:resolvePromptConfigId:function"]
@@ -1,22 +1,34 @@
1
- // CIL[BEGIN chunk_id="retry_deliveries_module_header_1784200007" type="module_header" identity="imports" parent="none"]
2
- // CIL[DOC-MACRO purpose="Retry pending webhook deliveries from the shared ledger"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Poll webhook_deliveries and re-execute due outbound (and eventually inbound) records"]
4
- // CIL[DOC-CONTEXT module="retry-deliveries" layer="shared" related_files="[".framework/functions/integration-outbound.ts",".framework/functions/_shared/principal.ts",".framework/migrations/051_integration_broker.sql"]"]
5
- // CIL[DOC-CONTRACT inputs="ctx" outputs="{ outbound_retried, outbound_succeeded, outbound_failed, errors }" errors="none" side_effects="HTTP calls, webhook_deliveries updates"]
6
- // CIL[DOC-MICRO logic_summary="Queries pending, due deliveries and calls the corresponding broker action for each." notable_decisions="["Inbound retry is left as a TODO until integration-routes supports delivery_id reuse.","Outbout retries reuse the existing delivery row by passing delivery_id to integration-outbound.execute."]"]
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: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/integration-outbound.ts, .framework/functions/_shared/principal.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="No configuration dependencies."]
13
- // CIL[DOC-VECTOR type="constraint" content="Only processes outbound deliveries in this pass."]
14
- // CIL[DOC-VECTOR type="implementation_pattern" content="Called by system-cron on each tick."]
15
- // CIL[DOC-VECTOR type="user_journey" content="System automatically retries failed or pending outbound webhook calls."]
1
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
2
+ // CIL[DOC-MACRO purpose="Provides shared retry logic for pending webhook deliveries"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Coordinate delivery retry scheduling and summarize results"]
4
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports dependencies for webhook delivery retry handling" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developers"]
10
+
16
11
 
17
12
  import { adminDb } from './db'
18
13
  import { SYSTEM_PRINCIPAL } from './principal'
19
14
  import { execute as executeOutbound } from '../integration-outbound'
15
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides shared retry logic for pending webhook deliveries'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
16
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
17
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
18
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
19
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
+ // CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:module_header:module_header"]
22
+
23
+
24
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:RetrySummary:interface" type="interface" identity="RetrySummary" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
25
+ // CIL[DOC-MACRO purpose="Defines the shape of retry operation summary statistics"]
26
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare counts and errors returned after retrying deliveries"]
27
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/integration-outbound.ts"]
28
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
29
+ // CIL[DOC-MICRO logic_summary="Aggregates counts of retried, succeeded, and failed deliveries with a list of errors" notable_decisions="[]"]
30
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
31
+ // CIL[DOC-STABILITY stability="stable"]
20
32
 
21
33
  interface RetrySummary {
22
34
  outbound_retried: number
@@ -27,6 +39,23 @@ interface RetrySummary {
27
39
  inbound_failed: number
28
40
  errors: string[]
29
41
  }
42
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of retry operation summary statistics'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
43
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
44
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
45
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
46
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
48
+ // CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:RetrySummary:interface"]
49
+
50
+
51
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/retry-deliveries.ts:retryPendingDeliveries:function" type="function" identity="retryPendingDeliveries" parent="~/.framework/functions/_shared/retry-deliveries.ts"]
52
+ // CIL[DOC-MACRO purpose="Retries pending webhook deliveries due for a new attempt and returns a summary"]
53
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetch due deliveries, call outbound retry handler, tally results, log failures"]
54
+ // CIL[DOC-CONTEXT module="functions/_shared" layer="function" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/retry-deliveries.ts,.framework/functions/integration-outbound.ts"]
55
+ // CIL[DOC-CONTRACT inputs="ctx: any" outputs="Promise<RetrySummary>" errors="db query errors, delivery execution errors" side_effects="Calls executeOutbound, updates console logs"]
56
+ // CIL[DOC-MICRO logic_summary="Queries webhook_deliveries table for pending due rows, invokes executeOutbound for outbound deliveries, counts successes/failures, and returns a RetrySummary" notable_decisions="[]"]
57
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
58
+ // CIL[DOC-STABILITY stability="stable"]
30
59
 
31
60
  export async function retryPendingDeliveries(ctx: any): Promise<RetrySummary> {
32
61
  const summary: RetrySummary = {
@@ -100,5 +129,11 @@ export async function retryPendingDeliveries(ctx: any): Promise<RetrySummary> {
100
129
 
101
130
  return summary
102
131
  }
132
+ // CIL[DOC-VECTOR type="context" content="purpose='Retries pending webhook deliveries due for a new attempt and returns a summary'; No verified external callers; imports: .framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts,.framework/functions/integration-outbound.ts"]
133
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
134
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
135
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
136
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
137
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
138
+ // CIL[END stable_id="~/.framework/functions/_shared/retry-deliveries.ts:retryPendingDeliveries:function"]
103
139
 
104
- // CIL[END chunk_id="retry_deliveries_module_header_1784200007"]