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,47 +1,42 @@
1
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_module_header_1784235266" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Module header and top-level exports for cortex.functions.custom_cil-agent-ingest"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Own module-level imports, exports, and configuration for cortex.functions.custom_cil-agent-ingest"]
4
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="module exports and side effects" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Declares module scope, imports dependencies, and exports public surface of cortex.functions.custom_cil-agent-ingest" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/cil-agent-ingest.ts"]
2
+ // CIL[DOC-MACRO purpose="Netlify function that ingests and synchronises agent-annotated CIL chunks for a project."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Expose actions for selecting files, storing markers, updating documentation, detecting changes, marking dead code, and renaming files."]
4
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts"]
5
+ // CIL[DOC-CONTRACT inputs="project_id and action query" outputs="action-specific JSON payload" errors="Project not found or invalid action" side_effects="Reads and writes CIL chunk records in the admin database"]
6
+ // CIL[DOC-MICRO logic_summary="Imports shared middleware, db, admin-data, resolveTypeId and Node fs, path and crypto; declares a createHandler export." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
8
8
  // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
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="No test paths identified."]
14
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
15
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
9
+ // CIL[DOC-AUDIENCE audience="cil-workers"]
16
10
 
17
11
 
18
12
  import { createHandler } from './_shared/middleware'
19
13
  import { adminDb } from './_shared/db'
20
14
  import { create as adminCreate, update as adminUpdate } from './admin-data'
21
15
  import { resolveTypeId } from './_shared/resolve-ids'
16
+ import { computeContentHash } from './_shared/cil'
22
17
  import * as fs from 'fs'
23
18
  import * as path from 'path'
24
19
  import * as crypto from 'crypto'
20
+ // CIL[DOC-VECTOR type="context" content="purpose='Netlify function that ingests and synchronises agent-annotated CIL chunks for a project.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
21
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
22
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
23
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
24
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
25
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
26
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:module_header:module_header"]
25
27
 
26
28
 
27
29
 
28
30
 
29
31
 
30
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_module_header_1784235266"]
31
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentingestrequest_1784235266" type="interface" identity="agentingestrequest" parent="none"]
32
- // CIL[DOC-MACRO purpose="Defines the agentingestrequest type contract in cortex.functions.custom_cil-agent-ingest"]
33
- // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape and allowed fields for agentingestrequest"]
34
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
35
- // CIL[DOC-CONTRACT inputs="none" outputs="type definition for agentingestrequest" errors="none" side_effects="none"]
36
- // CIL[DOC-MICRO logic_summary="Declares TypeScript type/interface agentingestrequest with member definitions" notable_decisions="[]"]
37
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
32
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentIngestRequest:interface" type="interface" identity="AgentIngestRequest" parent="~/.framework/functions/cil-agent-ingest.ts"]
33
+ // CIL[DOC-MACRO purpose="Defines the request payload accepted by the cil-agent-ingest handler."]
34
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a strongly-typed contract for project_id, file metadata, marker arrays, chunk updates and rename parameters."]
35
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="types" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
36
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
37
+ // CIL[DOC-MICRO logic_summary="Optional string fields plus chunks and file_ids arrays used across handler actions." notable_decisions="[]"]
38
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
38
39
  // CIL[DOC-STABILITY stability="stable"]
39
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
40
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
41
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
42
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
43
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
44
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
40
  interface AgentIngestRequest {
46
41
  project_id: string
47
42
  file_id?: string
@@ -56,26 +51,26 @@ interface AgentIngestRequest {
56
51
  file_ids?: string[]
57
52
  new_file_path?: string
58
53
  }
54
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the request payload accepted by the cil-agent-ingest handler.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
55
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
56
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
57
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
58
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
59
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
60
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentIngestRequest:interface"]
59
61
 
60
62
 
61
63
 
62
64
 
63
65
 
64
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentingestrequest_1784235266"]
65
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentparsedmarker_1784235266" type="interface" identity="agentparsedmarker" parent="none"]
66
- // CIL[DOC-MACRO purpose="Defines the agentparsedmarker type contract in cortex.functions.custom_cil-agent-ingest"]
67
- // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape and allowed fields for agentparsedmarker"]
68
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
69
- // CIL[DOC-CONTRACT inputs="none" outputs="type definition for agentparsedmarker" errors="none" side_effects="none"]
70
- // CIL[DOC-MICRO logic_summary="Declares TypeScript type/interface agentparsedmarker with member definitions" notable_decisions="[]"]
71
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
66
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentParsedMarker:interface" type="interface" identity="AgentParsedMarker" parent="~/.framework/functions/cil-agent-ingest.ts"]
67
+ // CIL[DOC-MACRO purpose="Represents a single CIL chunk boundary as parsed from source."]
68
+ // CIL[DOC-RESPONSIBILITY responsibility="Capture start_line, end_line, type, identity, parent and extra attributes for a marker."]
69
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="types" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
70
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
71
+ // CIL[DOC-MICRO logic_summary="Includes chunk_id as legacy support plus an attributes record for forward compatibility." notable_decisions="[]"]
72
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
72
73
  // CIL[DOC-STABILITY stability="stable"]
73
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
74
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
75
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
76
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
77
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
78
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
79
74
  interface AgentParsedMarker {
80
75
  chunk_id: string
81
76
  start_line: number
@@ -85,26 +80,26 @@ interface AgentParsedMarker {
85
80
  parent: string
86
81
  attributes?: Record<string, string>
87
82
  }
83
+ // CIL[DOC-VECTOR type="context" content="purpose='Represents a single CIL chunk boundary as parsed from source.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
84
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
85
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
86
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
87
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
88
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
89
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentParsedMarker:interface"]
88
90
 
89
91
 
90
92
 
91
93
 
92
94
 
93
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentparsedmarker_1784235266"]
94
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentparseddocs_1784235266" type="interface" identity="agentparseddocs" parent="none"]
95
- // CIL[DOC-MACRO purpose="Defines the agentparseddocs type contract in cortex.functions.custom_cil-agent-ingest"]
96
- // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape and allowed fields for agentparseddocs"]
97
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
98
- // CIL[DOC-CONTRACT inputs="none" outputs="type definition for agentparseddocs" errors="none" side_effects="none"]
99
- // CIL[DOC-MICRO logic_summary="Declares TypeScript type/interface agentparseddocs with member definitions" notable_decisions="[]"]
100
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
95
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentParsedDocs:interface" type="interface" identity="AgentParsedDocs" parent="~/.framework/functions/cil-agent-ingest.ts"]
96
+ // CIL[DOC-MACRO purpose="Holds all parsed CIL documentation tags for a chunk."]
97
+ // CIL[DOC-RESPONSIBILITY responsibility="Collect macro, responsibility, context, contract, micro, examples, confidence, stability and audience fields."]
98
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="types" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
99
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
100
+ // CIL[DOC-MICRO logic_summary="Raw map mirrors the source tag contents; confidence flags are stored as an array." notable_decisions="[]"]
101
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
101
102
  // CIL[DOC-STABILITY stability="stable"]
102
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
103
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
104
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
105
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
106
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
107
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
108
103
  interface AgentParsedDocs {
109
104
  macro?: string
110
105
  responsibility?: string
@@ -117,131 +112,72 @@ interface AgentParsedDocs {
117
112
  audience?: string
118
113
  raw: Record<string, string>
119
114
  }
115
+ // CIL[DOC-VECTOR type="context" content="purpose='Holds all parsed CIL documentation tags for a chunk.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
116
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
117
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
118
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
119
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
120
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
121
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:AgentParsedDocs:interface"]
120
122
 
121
123
 
122
124
 
123
125
 
124
126
 
125
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_agentparseddocs_1784235266"]
126
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_computefilehash_1784235266" type="function" identity="computefilehash" parent="none"]
127
- // CIL[DOC-MACRO purpose="Implements computefilehash logic in cortex.functions.custom_cil-agent-ingest"]
128
- // CIL[DOC-RESPONSIBILITY responsibility="Execute computefilehash and return its computed result"]
129
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\"]"]
130
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
131
- // CIL[DOC-MICRO logic_summary="Provides computefilehash with computeFileHash(content: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
132
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
127
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:computeFileHash:function" type="function" identity="computeFileHash" parent="~/.framework/functions/cil-agent-ingest.ts"]
128
+ // CIL[DOC-MACRO purpose="Compute a SHA-256 digest of a file or string."]
129
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a stable hex hash for content comparison and integrity checks."]
130
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
131
+ // CIL[DOC-CONTRACT inputs="content: string" outputs="hex hash string" errors="none" side_effects="none"]
132
+ // CIL[DOC-MICRO logic_summary="Creates a sha256 hash from utf-8 content and returns the hex digest." notable_decisions="[]"]
133
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
133
134
  // CIL[DOC-STABILITY stability="stable"]
134
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql."]
135
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
136
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
137
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
138
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
139
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
140
135
  function computeFileHash(content: string): string {
141
136
  return crypto.createHash('sha256').update(content, 'utf8').digest('hex')
142
137
  }
143
-
144
-
145
-
146
-
147
-
148
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_computefilehash_1784235266"]
149
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_estimatetokens_1784235266" type="function" identity="estimatetokens" parent="none"]
150
- // CIL[DOC-MACRO purpose="Implements estimatetokens logic in cortex.functions.custom_cil-agent-ingest"]
151
- // CIL[DOC-RESPONSIBILITY responsibility="Execute estimatetokens and return its computed result"]
152
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
153
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
154
- // CIL[DOC-MICRO logic_summary="Provides estimatetokens with estimateTokens(text: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
155
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
156
- // CIL[DOC-STABILITY stability="stable"]
157
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
158
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
159
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
160
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
138
+ // CIL[DOC-VECTOR type="context" content="purpose='Compute a SHA-256 digest of a file or string.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
139
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
140
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
141
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
161
142
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
162
143
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
163
- function estimateTokens(text: string): number {
164
- return Math.ceil(text.length / 4)
165
- }
144
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:computeFileHash:function"]
166
145
 
167
146
 
168
147
 
169
148
 
170
149
 
171
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_estimatetokens_1784235266"]
172
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_normaliseagentchunkcontent_1784235266" type="function" identity="normaliseagentchunkcontent" parent="none"]
173
- // CIL[DOC-MACRO purpose="Implements normaliseagentchunkcontent logic in cortex.functions.custom_cil-agent-ingest"]
174
- // CIL[DOC-RESPONSIBILITY responsibility="Execute normaliseagentchunkcontent and return its computed result"]
175
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
176
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
177
- // CIL[DOC-MICRO logic_summary="Provides normaliseagentchunkcontent with normaliseAgentChunkContent(raw: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
178
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
150
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:estimateTokens:function" type="function" identity="estimateTokens" parent="~/.framework/functions/cil-agent-ingest.ts"]
151
+ // CIL[DOC-MACRO purpose="Approximate token count for a block of text."]
152
+ // CIL[DOC-RESPONSIBILITY responsibility="Convert character length to token count using a simple 1:4 ratio."]
153
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
154
+ // CIL[DOC-CONTRACT inputs="text: string" outputs="number" errors="none" side_effects="none"]
155
+ // CIL[DOC-MICRO logic_summary="Divides string length by four and rounds up to the nearest integer." notable_decisions="[]"]
156
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
179
157
  // CIL[DOC-STABILITY stability="stable"]
180
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
181
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
182
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
183
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
184
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
185
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
186
- function normaliseAgentChunkContent(raw: string): string {
187
- const lines = raw.replace(/\r\n/g, '\n').split('\n')
188
- const filtered = lines.filter(line => {
189
- const trimmed = line.trim()
190
- return !trimmed.match(/^(?:(?:\/\/|--|#)\s*|<!--\s*)CIL\[(BEGIN|END)/) && !trimmed.match(/^(?:(?:\/\/|--|#)\s*|<!--\s*)CIL\[DOC-/)
191
- })
192
- const collapsed: string[] = []
193
- let lastBlank = false
194
- for (const line of filtered) {
195
- const isBlank = line.trim() === ''
196
- if (isBlank && lastBlank) continue
197
- collapsed.push(line)
198
- lastBlank = isBlank
199
- }
200
- return collapsed.join('\n').trim()
158
+ function estimateTokens(text: string): number {
159
+ return Math.ceil(text.length / 4)
201
160
  }
202
-
203
-
204
-
205
-
206
-
207
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_normaliseagentchunkcontent_1784235266"]
208
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_computeagentchunkhash_1784235266" type="function" identity="computeagentchunkhash" parent="none"]
209
- // CIL[DOC-MACRO purpose="Implements computeagentchunkhash logic in cortex.functions.custom_cil-agent-ingest"]
210
- // CIL[DOC-RESPONSIBILITY responsibility="Execute computeagentchunkhash and return its computed result"]
211
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
212
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
213
- // CIL[DOC-MICRO logic_summary="Provides computeagentchunkhash with computeAgentChunkHash(codeContent: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
214
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
215
- // CIL[DOC-STABILITY stability="stable"]
216
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
217
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
218
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
219
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
161
+ // CIL[DOC-VECTOR type="context" content="purpose='Approximate token count for a block of text.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
162
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
163
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
164
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
220
165
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
221
166
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
222
- function computeAgentChunkHash(codeContent: string): string {
223
- return crypto.createHash('sha256').update(normaliseAgentChunkContent(codeContent)).digest('hex').slice(0, 16)
224
- }
167
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:estimateTokens:function"]
225
168
 
226
169
 
227
170
 
228
171
 
229
172
 
230
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_computeagentchunkhash_1784235266"]
231
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentattributes_1784235266" type="function" identity="parseagentattributes" parent="none"]
232
- // CIL[DOC-MACRO purpose="Implements parseagentattributes logic in cortex.functions.custom_cil-agent-ingest"]
233
- // CIL[DOC-RESPONSIBILITY responsibility="Execute parseagentattributes and return its computed result"]
234
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
235
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
236
- // CIL[DOC-MICRO logic_summary="Provides parseagentattributes with parseAgentAttributes(attrString: string inputs, handling internal flow and returning a result" notable_decisions="[]"]
237
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
173
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentAttributes:function" type="function" identity="parseAgentAttributes" parent="~/.framework/functions/cil-agent-ingest.ts"]
174
+ // CIL[DOC-MACRO purpose="Parse key=value attribute pairs inside CIL marker or doc tag content."]
175
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a record of attribute names to their quoted string values."]
176
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
177
+ // CIL[DOC-CONTRACT inputs="attrString: string" outputs="Record<string, string>" errors="none" side_effects="none"]
178
+ // CIL[DOC-MICRO logic_summary="Uses a regex to capture word keys and double-quoted values, returning an object." notable_decisions="[]"]
179
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
238
180
  // CIL[DOC-STABILITY stability="stable"]
239
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
240
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
241
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
242
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
243
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
244
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
245
181
  function parseAgentAttributes(attrString: string): Record<string, string> {
246
182
  const attrs: Record<string, string> = {}
247
183
  const regex = /(\w+)="([^"]*)"/g
@@ -251,26 +187,26 @@ function parseAgentAttributes(attrString: string): Record<string, string> {
251
187
  }
252
188
  return attrs
253
189
  }
190
+ // CIL[DOC-VECTOR type="context" content="purpose='Parse key=value attribute pairs inside CIL marker or doc tag content.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
191
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
192
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
193
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
194
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
195
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
196
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentAttributes:function"]
254
197
 
255
198
 
256
199
 
257
200
 
258
201
 
259
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentattributes_1784235266"]
260
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentcilmarkers_1784235266" type="function" identity="parseagentcilmarkers" parent="none"]
261
- // CIL[DOC-MACRO purpose="Implements parseagentcilmarkers logic in cortex.functions.custom_cil-agent-ingest"]
262
- // CIL[DOC-RESPONSIBILITY responsibility="Execute parseagentcilmarkers and return its computed result"]
263
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
264
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
265
- // CIL[DOC-MICRO logic_summary="Provides parseagentcilmarkers with parseAgentCilMarkers(lines: string[] inputs, handling internal flow and returning a result" notable_decisions="[]"]
266
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
202
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentCilMarkers:function" type="function" identity="parseAgentCilMarkers" parent="~/.framework/functions/cil-agent-ingest.ts"]
203
+ // CIL[DOC-MACRO purpose="Scan source lines and build a list of CIL chunk markers with boundaries."]
204
+ // CIL[DOC-RESPONSIBILITY responsibility="Match BEGIN and END lines, pair them on a stack, and emit marker metadata."]
205
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
206
+ // CIL[DOC-CONTRACT inputs="lines: string[]" outputs="AgentParsedMarker[]" errors="none" side_effects="none"]
207
+ // CIL[DOC-MICRO logic_summary="Supports //, --, # and HTML comment prefixes; legacy END chunk_id is preserved." notable_decisions="[]"]
208
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
267
209
  // CIL[DOC-STABILITY stability="stable"]
268
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
269
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
270
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
271
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
272
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
273
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
274
210
  function parseAgentCilMarkers(lines: string[]): AgentParsedMarker[] {
275
211
  const markers: AgentParsedMarker[] = []
276
212
  const stack: { line: number; attrs: Record<string, string> }[] = []
@@ -299,26 +235,26 @@ function parseAgentCilMarkers(lines: string[]): AgentParsedMarker[] {
299
235
 
300
236
  return markers
301
237
  }
238
+ // CIL[DOC-VECTOR type="context" content="purpose='Scan source lines and build a list of CIL chunk markers with boundaries.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
239
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
240
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
241
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
242
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
243
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
244
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentCilMarkers:function"]
302
245
 
303
246
 
304
247
 
305
248
 
306
249
 
307
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentcilmarkers_1784235266"]
308
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentcildocs_1784235266" type="function" identity="parseagentcildocs" parent="none"]
309
- // CIL[DOC-MACRO purpose="Implements parseagentcildocs logic in cortex.functions.custom_cil-agent-ingest"]
310
- // CIL[DOC-RESPONSIBILITY responsibility="Execute parseagentcildocs and return its computed result"]
311
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
312
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
313
- // CIL[DOC-MICRO logic_summary="Provides parseagentcildocs with parseAgentCilDocs(lines: string[], startLine: number, endLine: number inputs, handling internal flow and returning a result" notable_decisions="[]"]
314
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
250
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentCilDocs:function" type="function" identity="parseAgentCilDocs" parent="~/.framework/functions/cil-agent-ingest.ts"]
251
+ // CIL[DOC-MACRO purpose="Extract CIL documentation tags from a chunk line range."]
252
+ // CIL[DOC-RESPONSIBILITY responsibility="Parse each DOC-* tag and map it into the AgentParsedDocs structure."]
253
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
254
+ // CIL[DOC-CONTRACT inputs="lines: string[], startLine: number, endLine: number" outputs="AgentParsedDocs" errors="none" side_effects="none"]
255
+ // CIL[DOC-MICRO logic_summary="Switches on tag key to populate macro, responsibility, context, contract, micro, examples, confidence, stability and audience fields." notable_decisions="[]"]
256
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
315
257
  // CIL[DOC-STABILITY stability="stable"]
316
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
317
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
318
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
319
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
320
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
321
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
322
258
  function parseAgentCilDocs(lines: string[], startLine: number, endLine: number): AgentParsedDocs {
323
259
  const docs: AgentParsedDocs = { raw: {} }
324
260
  for (let i = startLine - 1; i < endLine - 1; i++) {
@@ -370,67 +306,82 @@ function parseAgentCilDocs(lines: string[], startLine: number, endLine: number):
370
306
  }
371
307
  return docs
372
308
  }
309
+ // CIL[DOC-VECTOR type="context" content="purpose='Extract CIL documentation tags from a chunk line range.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.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"]
313
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
314
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
315
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:parseAgentCilDocs:function"]
373
316
 
374
317
 
375
318
 
376
319
 
377
320
 
378
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_parseagentcildocs_1784235266"]
379
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_mapagentdocstochunkdata_1784235266" type="function" identity="mapagentdocstochunkdata" parent="none"]
380
- // CIL[DOC-MACRO purpose="Implements mapagentdocstochunkdata logic in cortex.functions.custom_cil-agent-ingest"]
381
- // CIL[DOC-RESPONSIBILITY responsibility="Execute mapagentdocstochunkdata and return its computed result"]
382
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
383
- // CIL[DOC-CONTRACT inputs="none" outputs="return value from function execution" errors="throws on invalid input or runtime failure" side_effects="none"]
384
- // CIL[DOC-MICRO logic_summary="Provides mapagentdocstochunkdata with mapAgentDocsToChunkData(docs: AgentParsedDocs inputs, handling internal flow and returning a result" notable_decisions="[]"]
385
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
321
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:mapAgentDocsToChunkData:function" type="function" identity="mapAgentDocsToChunkData" parent="~/.framework/functions/cil-agent-ingest.ts"]
322
+ // CIL[DOC-MACRO purpose="Flatten parsed docs into database column fields for a chunk record."]
323
+ // CIL[DOC-RESPONSIBILITY responsibility="Translate doc tags into macro, micro, input/output specs, side effects, module, layer and related files."]
324
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
325
+ // CIL[DOC-CONTRACT inputs="docs: AgentParsedDocs" outputs="Record<string, any>" errors="none" side_effects="none"]
326
+ // CIL[DOC-MICRO logic_summary="Falls back to raw tag content where typed values are missing; uses contract and micro attributes." notable_decisions="[]"]
327
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
386
328
  // CIL[DOC-STABILITY stability="stable"]
387
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
388
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
389
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
390
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
391
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
392
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
393
329
  function mapAgentDocsToChunkData(docs: AgentParsedDocs): Record<string, any> {
394
- return {
395
- macro: docs.macro || docs.raw.MACRO || '',
396
- micro: docs.micro?.logic_summary || docs.responsibility || '',
397
- description: docs.macro || '',
398
- input_spec: docs.contract?.inputs || '',
399
- output_spec: docs.contract?.outputs || '',
400
- side_effects: docs.contract?.side_effects || '',
401
- throws: docs.contract?.errors || '',
402
- module: docs.context?.module || '',
403
- layer: docs.context?.layer || '',
404
- doc_confidence: docs.confidence?.pass === 'second' ? 'ai_generated' : 'from_source',
405
- confidence_score: docs.confidence?.score || 0,
406
- confidence_flags: docs.confidence?.flags || [],
407
- see_also: docs.context?.related_files || '',
408
- tags: docs.micro?.notable_decisions || '',
409
- depends_on: docs.contract?.dependencies || '',
410
- stability: docs.stability || '',
411
- audience: docs.audience || '',
330
+ // Only emit fields backed by DOC-* tags actually present in the source.
331
+ // Emitting empty strings for absent tags would wipe enriched fields on
332
+ // every store_markers call for chunks that use JSDoc or no doc tags.
333
+ const out: Record<string, any> = {}
334
+ if (docs.raw.MACRO || docs.macro) {
335
+ out.macro = docs.macro || docs.raw.MACRO || ''
336
+ out.description = docs.macro || ''
337
+ }
338
+ if (docs.raw.MICRO) {
339
+ out.micro = docs.micro?.logic_summary || ''
340
+ out.tags = docs.micro?.notable_decisions || ''
341
+ } else if (docs.raw.RESPONSIBILITY) {
342
+ out.micro = docs.responsibility || ''
343
+ }
344
+ if (docs.contract) {
345
+ out.input_spec = docs.contract.inputs || ''
346
+ out.output_spec = docs.contract.outputs || ''
347
+ out.side_effects = docs.contract.side_effects || ''
348
+ out.throws = docs.contract.errors || ''
349
+ out.depends_on = docs.contract.dependencies || ''
350
+ }
351
+ if (docs.context) {
352
+ out.module = docs.context.module || ''
353
+ out.layer = docs.context.layer || ''
354
+ out.see_also = docs.context.related_files || ''
412
355
  }
356
+ if (docs.confidence) {
357
+ out.doc_confidence = docs.confidence.pass === 'second' ? 'ai_generated' : 'from_source'
358
+ out.confidence_score = docs.confidence.score || 0
359
+ out.confidence_flags = docs.confidence.flags || []
360
+ }
361
+ if (docs.raw.STABILITY || docs.stability) out.stability = docs.stability || ''
362
+ if (docs.raw.AUDIENCE || docs.audience) out.audience = docs.audience || ''
363
+ return out
413
364
  }
365
+ // CIL[DOC-VECTOR type="context" content="purpose='Flatten parsed docs into database column fields for a chunk record.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
366
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
367
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
368
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
369
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
370
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
371
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:mapAgentDocsToChunkData:function"]
414
372
 
415
373
 
416
374
 
417
375
 
418
376
 
419
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_mapagentdocstochunkdata_1784235266"]
420
- // CIL[BEGIN chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_handler_1784235266" type="variable" identity="handler" parent="none"]
421
- // CIL[DOC-MACRO purpose="Defines handler configuration or state in cortex.functions.custom_cil-agent-ingest"]
422
- // CIL[DOC-RESPONSIBILITY responsibility="Hold the value and default configuration for handler"]
423
- // CIL[DOC-CONTEXT module="cortex.functions.custom_cil-agent-ingest" layer="function" related_files="[]"]
424
- // CIL[DOC-CONTRACT inputs="none" outputs="value of handler" errors="none" side_effects="none"]
425
- // CIL[DOC-MICRO logic_summary="Declares handler with initial value or constant binding used by cortex.functions.custom_cil-agent-ingest" notable_decisions="[]"]
426
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
377
+ // CIL[BEGIN stable_id="~/.framework/functions/cil-agent-ingest.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/cil-agent-ingest.ts"]
378
+ // CIL[DOC-MACRO purpose="Main Netlify function handler for CIL agent ingestion actions."]
379
+ // CIL[DOC-RESPONSIBILITY responsibility="Route query actions, validate project, read and write chunk records, and return action results."]
380
+ // CIL[DOC-CONTEXT module="cil-agent-ingest" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/admin-data.ts,.framework/functions/cil-agent-ingest.ts"]
381
+ // CIL[DOC-CONTRACT inputs="ctx: RequestContext, body: any" outputs="JSON response per action" errors="Project not found, missing fields, hash mismatch, unknown action" side_effects="Creates, updates, deactivates and renames CIL chunk and file records"]
382
+ // CIL[DOC-MICRO logic_summary="Implements six actions via createHandler: get_selected_files, store_markers, update_documentation, detect_changes, mark_dead and update_file_path." notable_decisions="[]"]
383
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
427
384
  // CIL[DOC-STABILITY stability="stable"]
428
- // CIL[DOC-VECTOR type="context" content="Layer: function. Direct callers: 0. Direct calls: 0. Related files: none."]
429
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
430
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
431
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
432
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
433
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
434
385
  export const handler = createHandler(async (ctx, body) => {
435
386
  const action = ctx.query?.action
436
387
  const req = body as AgentIngestRequest
@@ -538,7 +489,7 @@ export const handler = createHandler(async (ctx, body) => {
538
489
  const codeContent = lines.slice(m.start_line, m.end_line - 1).join('\n')
539
490
  const docs = parseAgentCilDocs(lines, m.start_line, m.end_line)
540
491
  const docFields = mapAgentDocsToChunkData(docs)
541
- const chunkHash = computeAgentChunkHash(codeContent)
492
+ const chunkHash = computeContentHash(codeContent)
542
493
  const tokenCount = estimateTokens(codeContent)
543
494
 
544
495
  const baseData = {
@@ -553,6 +504,7 @@ export const handler = createHandler(async (ctx, body) => {
553
504
  line_start: m.start_line,
554
505
  line_end: m.end_line,
555
506
  stored_hash: chunkHash,
507
+ content_hash: chunkHash,
556
508
  code_content: codeContent,
557
509
  token_count: tokenCount,
558
510
  is_dead_code: false,
@@ -767,7 +719,12 @@ export const handler = createHandler(async (ctx, body) => {
767
719
 
768
720
  throw new Error(`Unknown action: ${action}. Valid actions: get_selected_files, store_markers, update_documentation, detect_changes, mark_dead, update_file_path`)
769
721
  })
722
+ // CIL[DOC-VECTOR type="context" content="purpose='Main Netlify function handler for CIL agent ingestion actions.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/admin-data.ts"]
723
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
724
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
725
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
726
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
727
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
728
+ // CIL[END stable_id="~/.framework/functions/cil-agent-ingest.ts:handler:constant"]
770
729
 
771
730
 
772
-
773
- // CIL[END chunk_id="custom_apps_cortex_functions_custom_cil_agent_ingest_handler_1784235266"]