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,18 +1,13 @@
1
- // CIL[BEGIN chunk_id="cilingestionpage_module_header_1784193942" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Import dependencies and icons for the CIL ingestion page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Provides React hooks, router, apiFetch, app path hook, UI components, and lucide icons used by the page"]
4
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="module imports" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Sets up external dependencies and icon imports required by CILIngestionPage and child functions" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
2
+ // CIL[DOC-MACRO purpose="module_header module_header"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements module_header."]
4
+ // CIL[DOC-CONTEXT module="admin/cil" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="default export CILIngestionPage" side_effects="none" errors="none"]
6
+ // CIL[DOC-MICRO logic_summary="module_header module_header definition." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
8
  // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, \."]
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="developers maintaining the CIL admin UI"]
10
+
16
11
  import { useEffect, useState, useCallback } from 'react'
17
12
  import { useParams } from 'react-router-dom'
18
13
  import { apiFetch } from '@core/lib/api'
@@ -52,21 +47,22 @@ import {
52
47
 
53
48
 
54
49
  import { PageInstructions } from '../../../components/admin/PageInstructions'
55
- // CIL[END chunk_id="cilingestionpage_module_header_1784193942"]
56
- // CIL[BEGIN chunk_id="cilingestionpage_cilfilestatus_1784193942" type="type" identity="CilFileStatus" parent="none"]
57
- // CIL[DOC-MACRO purpose="Define the union of possible CIL file pipeline statuses"]
58
- // CIL[DOC-RESPONSIBILITY responsibility="Declares the string-literal type for file ingestion pipeline stages"]
59
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
60
- // CIL[DOC-CONTRACT inputs="none" outputs="CilFileStatus type alias" errors="none" side_effects="none"]
61
- // CIL[DOC-MICRO logic_summary="Lists ordered statuses from 2-discovered through 10-mapped" notable_decisions="[]"]
62
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
- // CIL[DOC-STABILITY stability="stable"]
64
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, \."]
65
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
66
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
50
+ // CIL[DOC-VECTOR type="context" content="purpose='module_header module_header'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
51
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
52
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
53
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
68
54
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
55
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
56
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:module_header:module_header"]
57
+
58
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:CilFileStatus:type" type="type" identity="CilFileStatus" parent="none"]
59
+ // CIL[DOC-MACRO purpose="CilFileStatus type"]
60
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements CilFileStatus."]
61
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
62
+ // CIL[DOC-CONTRACT inputs="none" outputs="type alias" side_effects="none" errors="none"]
63
+ // CIL[DOC-MICRO logic_summary="CilFileStatus type definition." notable_decisions="[]"]
64
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
65
+ // CIL[DOC-STABILITY stability="stable"]
70
66
  type CilFileStatus =
71
67
  | '2-discovered'
72
68
  | '3-selected'
@@ -77,22 +73,23 @@ type CilFileStatus =
77
73
  | '8-enriched'
78
74
  | '9-embedded'
79
75
  | '10-mapped'
80
-
81
- // CIL[END chunk_id="cilingestionpage_cilfilestatus_1784193942"]
82
- // CIL[BEGIN chunk_id="cilingestionpage_filetreenode_1784193942" type="interface" identity="FileTreeNode" parent="none"]
83
- // CIL[DOC-MACRO purpose="Define the recursive file tree node data shape"]
84
- // CIL[DOC-RESPONSIBILITY responsibility="Provides a TypeScript contract for files and directories in the project tree"]
85
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
86
- // CIL[DOC-CONTRACT inputs="none" outputs="FileTreeNode interface definition" errors="none" side_effects="none"]
87
- // CIL[DOC-MICRO logic_summary="Describes id, name, path, type, extension, optional status, and children array" notable_decisions="[]"]
88
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
89
- // CIL[DOC-STABILITY stability="stable"]
90
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
91
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
92
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
93
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
76
+ // CIL[DOC-VECTOR type="context" content="purpose='CilFileStatus type'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
77
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
78
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
79
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
94
80
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
95
81
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
82
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:CilFileStatus:type"]
83
+
84
+
85
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:FileTreeNode:interface" type="interface" identity="FileTreeNode" parent="none"]
86
+ // CIL[DOC-MACRO purpose="FileTreeNode interface"]
87
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements FileTreeNode."]
88
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
89
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definition" side_effects="none" errors="none"]
90
+ // CIL[DOC-MICRO logic_summary="FileTreeNode interface definition." notable_decisions="[]"]
91
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
92
+ // CIL[DOC-STABILITY stability="stable"]
96
93
  interface FileTreeNode {
97
94
  id?: string | null
98
95
  name: string
@@ -102,22 +99,25 @@ interface FileTreeNode {
102
99
  status?: CilFileStatus
103
100
  children?: FileTreeNode[]
104
101
  }
105
-
106
- // CIL[END chunk_id="cilingestionpage_filetreenode_1784193942"]
107
- // CIL[BEGIN chunk_id="cilingestionpage_project_1784193942" type="interface" identity="Project" parent="none"]
108
- // CIL[DOC-MACRO purpose="Define the CIL project record data shape"]
109
- // CIL[DOC-RESPONSIBILITY responsibility="Declares the TypeScript contract for a project including repo path, globs, file tree, and statuses"]
110
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
111
- // CIL[DOC-CONTRACT inputs="none" outputs="Project interface definition" errors="none" side_effects="none"]
112
- // CIL[DOC-MICRO logic_summary="Contains id, title, and data object with repo_path, ingestion_status, counts, globs, file_tree, selected_paths, and file_statuses" notable_decisions="[]"]
113
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
114
- // CIL[DOC-STABILITY stability="stable"]
115
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
116
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
117
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
118
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
102
+ // CIL[DOC-VECTOR type="context" content="purpose='FileTreeNode interface'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
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"]
119
106
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
120
107
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
108
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:FileTreeNode:interface"]
109
+
110
+
111
+
112
+
113
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:Project:interface" type="interface" identity="Project" parent="none"]
114
+ // CIL[DOC-MACRO purpose="Project interface"]
115
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements Project."]
116
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
117
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definition" side_effects="none" errors="none"]
118
+ // CIL[DOC-MICRO logic_summary="Project interface definition." notable_decisions="[]"]
119
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
120
+ // CIL[DOC-STABILITY stability="stable"]
121
121
  interface Project {
122
122
  id: string
123
123
  title: string
@@ -135,69 +135,73 @@ interface Project {
135
135
  file_statuses?: Record<string, string>
136
136
  }
137
137
  }
138
-
139
- // CIL[END chunk_id="cilingestionpage_project_1784193942"]
140
- // CIL[BEGIN chunk_id="cilingestionpage_projectconfig_1784193942" type="interface" identity="ProjectConfig" parent="none"]
141
- // CIL[DOC-MACRO purpose="Define the editable project configuration data shape"]
142
- // CIL[DOC-RESPONSIBILITY responsibility="Provides a TypeScript contract for repo path, include/exclude globs, and force reprocess flag"]
143
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
144
- // CIL[DOC-CONTRACT inputs="none" outputs="ProjectConfig interface definition" errors="none" side_effects="none"]
145
- // CIL[DOC-MICRO logic_summary="Declares repo_path, globs, exclude_globs, and force_reprocess fields" notable_decisions="[]"]
146
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
147
- // CIL[DOC-STABILITY stability="stable"]
148
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
149
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
150
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
151
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
138
+ // CIL[DOC-VECTOR type="context" content="purpose='Project interface'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
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"]
152
142
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
153
143
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
144
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:Project:interface"]
145
+
146
+
147
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:ProjectConfig:interface" type="interface" identity="ProjectConfig" parent="none"]
148
+ // CIL[DOC-MACRO purpose="ProjectConfig interface"]
149
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements ProjectConfig."]
150
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
151
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definition" side_effects="none" errors="none"]
152
+ // CIL[DOC-MICRO logic_summary="ProjectConfig interface definition." notable_decisions="[]"]
153
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
154
+ // CIL[DOC-STABILITY stability="stable"]
154
155
  interface ProjectConfig {
155
156
  repo_path: string
156
157
  globs: string
157
158
  exclude_globs: string
158
159
  force_reprocess: boolean
159
160
  }
160
-
161
- // CIL[END chunk_id="cilingestionpage_projectconfig_1784193942"]
162
- // CIL[BEGIN chunk_id="cilingestionpage_pipelineprogress_1784193942" type="interface" identity="PipelineProgress" parent="none"]
163
- // CIL[DOC-MACRO purpose="Define the pipeline progress summary data shape"]
164
- // CIL[DOC-RESPONSIBILITY responsibility="Provides a TypeScript contract for total selected files, status counts, and total chunks"]
165
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
166
- // CIL[DOC-CONTRACT inputs="none" outputs="PipelineProgress interface definition" errors="none" side_effects="none"]
167
- // CIL[DOC-MICRO logic_summary="Declares total_selected, by_status record, and total_chunks" notable_decisions="[]"]
168
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
169
- // CIL[DOC-STABILITY stability="stable"]
170
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
171
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
172
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
173
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
161
+ // CIL[DOC-VECTOR type="context" content="purpose='ProjectConfig interface'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
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"]
174
165
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
175
166
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
167
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:ProjectConfig:interface"]
168
+
169
+
170
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PipelineProgress:interface" type="interface" identity="PipelineProgress" parent="none"]
171
+ // CIL[DOC-MACRO purpose="PipelineProgress interface"]
172
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements PipelineProgress."]
173
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
174
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definition" side_effects="none" errors="none"]
175
+ // CIL[DOC-MICRO logic_summary="PipelineProgress interface definition." notable_decisions="[]"]
176
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
177
+ // CIL[DOC-STABILITY stability="stable"]
176
178
  interface PipelineProgress {
177
179
  total_selected: number
178
180
  by_status: Record<string, number>
179
181
  total_chunks: number
180
182
  }
183
+ // CIL[DOC-VECTOR type="context" content="purpose='PipelineProgress interface'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
184
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
185
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
186
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
187
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
188
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
189
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PipelineProgress:interface"]
190
+
181
191
 
182
192
 
183
193
 
184
194
 
185
195
 
186
- // CIL[END chunk_id="cilingestionpage_pipelineprogress_1784193942"]
187
- // CIL[BEGIN chunk_id="cilingestionpage_status_color_1784193942" type="constant" identity="STATUS_COLOR" parent="none"]
188
- // CIL[DOC-MACRO purpose="Map each CIL file status to a Tailwind CSS color class string"]
189
- // CIL[DOC-RESPONSIBILITY responsibility="Supplies visual badge color classes for pipeline status labels"]
190
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
191
- // CIL[DOC-CONTRACT inputs="none" outputs="STATUS_COLOR record" errors="none" side_effects="none"]
192
- // CIL[DOC-MICRO logic_summary="Maps each CilFileStatus value to a background/text color combination used by status badges" notable_decisions="[]"]
193
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
196
+
197
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:STATUS_COLOR:constant" type="constant" identity="STATUS_COLOR" parent="none"]
198
+ // CIL[DOC-MACRO purpose="STATUS_COLOR constant"]
199
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements STATUS_COLOR."]
200
+ // CIL[DOC-CONTEXT module="admin/cil" layer="constant" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
201
+ // CIL[DOC-CONTRACT inputs="none" outputs="constant value" side_effects="none" errors="none"]
202
+ // CIL[DOC-MICRO logic_summary="STATUS_COLOR constant definition." notable_decisions="[]"]
203
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
194
204
  // CIL[DOC-STABILITY stability="stable"]
195
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
196
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
197
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
198
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
199
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
200
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
201
205
  const STATUS_COLOR: Record<CilFileStatus, string> = {
202
206
  '2-discovered': 'bg-gray-100 text-gray-600',
203
207
  '3-selected': 'bg-indigo-100 text-indigo-700',
@@ -209,22 +213,25 @@ const STATUS_COLOR: Record<CilFileStatus, string> = {
209
213
  '9-embedded': 'bg-emerald-100 text-emerald-700',
210
214
  '10-mapped': 'bg-amber-100 text-amber-700',
211
215
  }
212
-
213
- // CIL[END chunk_id="cilingestionpage_status_color_1784193942"]
214
- // CIL[BEGIN chunk_id="cilingestionpage_pipelinestep_1784193942" type="interface" identity="PipelineStep" parent="none"]
215
- // CIL[DOC-MACRO purpose="Define the pipeline step descriptor data shape"]
216
- // CIL[DOC-RESPONSIBILITY responsibility="Provides a TypeScript contract for a single CIL pipeline step"]
217
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
218
- // CIL[DOC-CONTRACT inputs="none" outputs="PipelineStep interface definition" errors="none" side_effects="none"]
219
- // CIL[DOC-MICRO logic_summary="Declares number, key, label, description, icon, agentInstruction, optional command, targetStatus, and optional sourceStatus" notable_decisions="[]"]
220
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
221
- // CIL[DOC-STABILITY stability="stable"]
222
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
223
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
224
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
225
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
216
+ // CIL[DOC-VECTOR type="context" content="purpose='STATUS_COLOR constant'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
217
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
218
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
219
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
226
220
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
227
221
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
222
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:STATUS_COLOR:constant"]
223
+
224
+
225
+
226
+
227
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PipelineStep:interface" type="interface" identity="PipelineStep" parent="none"]
228
+ // CIL[DOC-MACRO purpose="PipelineStep interface"]
229
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements PipelineStep."]
230
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
231
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definition" side_effects="none" errors="none"]
232
+ // CIL[DOC-MICRO logic_summary="PipelineStep interface definition." notable_decisions="[]"]
233
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
234
+ // CIL[DOC-STABILITY stability="stable"]
228
235
  interface PipelineStep {
229
236
  number: number
230
237
  key: string
@@ -236,22 +243,24 @@ interface PipelineStep {
236
243
  targetStatus: CilFileStatus
237
244
  sourceStatus?: CilFileStatus
238
245
  }
239
-
240
- // CIL[END chunk_id="cilingestionpage_pipelinestep_1784193942"]
241
- // CIL[BEGIN chunk_id="cilingestionpage_pipeline_steps_1784193942" type="constant" identity="PIPELINE_STEPS" parent="none"]
242
- // CIL[DOC-MACRO purpose="List all pipeline steps in order for the CIL ingestion UI"]
243
- // CIL[DOC-RESPONSIBILITY responsibility="Supplies step definitions, icons, labels, instructions, and target statuses used by the pipeline view"]
244
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
245
- // CIL[DOC-CONTRACT inputs="none" outputs="PIPELINE_STEPS array" errors="none" side_effects="none"]
246
- // CIL[DOC-MICRO logic_summary="Defines 10 steps from project creation through second-pass mapping with associated icons, commands, and target statuses" notable_decisions="[]"]
247
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
248
- // CIL[DOC-STABILITY stability="stable"]
249
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
250
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
251
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
252
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
246
+ // CIL[DOC-VECTOR type="context" content="purpose='PipelineStep interface'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
247
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
248
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
249
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
253
250
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
254
251
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
252
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PipelineStep:interface"]
253
+
254
+
255
+
256
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PIPELINE_STEPS:constant" type="constant" identity="PIPELINE_STEPS" parent="none"]
257
+ // CIL[DOC-MACRO purpose="PIPELINE_STEPS constant"]
258
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements PIPELINE_STEPS."]
259
+ // CIL[DOC-CONTEXT module="admin/cil" layer="constant" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
260
+ // CIL[DOC-CONTRACT inputs="none" outputs="constant value" side_effects="none" errors="none"]
261
+ // CIL[DOC-MICRO logic_summary="PIPELINE_STEPS constant definition." notable_decisions="[]"]
262
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
263
+ // CIL[DOC-STABILITY stability="stable"]
255
264
  const PIPELINE_STEPS: PipelineStep[] = [
256
265
  {
257
266
  number: 1,
@@ -259,7 +268,7 @@ const PIPELINE_STEPS: PipelineStep[] = [
259
268
  label: 'Create Project',
260
269
  description: 'Project and repo path configured',
261
270
  icon: FileCode2,
262
- agentInstruction: 'Create a new CIL project in Cortex with the repository path set.',
271
+ agentInstruction: 'Create a new CIL project in the admin workspace with the repository path set.',
263
272
  targetStatus: '0-discovered',
264
273
  },
265
274
  {
@@ -358,64 +367,69 @@ const PIPELINE_STEPS: PipelineStep[] = [
358
367
 
359
368
 
360
369
 
361
- // CIL[END chunk_id="cilingestionpage_pipeline_steps_1784193942"]
362
- // CIL[BEGIN chunk_id="cilingestionpage_collectalldirpaths_1784193942" type="function" identity="collectAllDirPaths" parent="none"]
363
- // CIL[DOC-MACRO purpose="Recursively collect the paths of all directories in the file tree"]
364
- // CIL[DOC-RESPONSIBILITY responsibility="Returns a flat array of directory paths for initial expansion"]
365
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
366
- // CIL[DOC-CONTRACT inputs="none" outputs="string[]" errors="none" side_effects="none"]
367
- // CIL[DOC-MICRO logic_summary="If node is a directory, include its path, then recurse through children" notable_decisions="[]"]
368
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
369
- // CIL[DOC-STABILITY stability="stable"]
370
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
371
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
372
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
373
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
370
+
371
+
372
+ // CIL[DOC-VECTOR type="context" content="purpose='PIPELINE_STEPS constant'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
373
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
374
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
375
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
374
376
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
375
377
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
378
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:PIPELINE_STEPS:constant"]
379
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:collectAllDirPaths:function" type="function" identity="collectAllDirPaths" parent="none"]
380
+ // CIL[DOC-MACRO purpose="collectAllDirPaths function"]
381
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements collectAllDirPaths."]
382
+ // CIL[DOC-CONTEXT module="admin/cil" layer="logic" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
383
+ // CIL[DOC-CONTRACT inputs="none" outputs="return value" side_effects="none" errors="none"]
384
+ // CIL[DOC-MICRO logic_summary="collectAllDirPaths function definition." notable_decisions="[]"]
385
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
386
+ // CIL[DOC-STABILITY stability="stable"]
376
387
  function collectAllDirPaths(node: FileTreeNode): string[] {
377
388
  const paths: string[] = node.type === 'directory' ? [node.path] : []
378
389
  if (node.children) {
379
390
  for (const child of node.children) paths.push(...collectAllDirPaths(child))
380
391
  }
392
+
381
393
  return paths
382
394
  }
383
-
384
- // CIL[END chunk_id="cilingestionpage_collectalldirpaths_1784193942"]
385
- // CIL[BEGIN chunk_id="cilingestionpage_countfilesintree_1784193942" type="function" identity="countFilesInTree" parent="none"]
386
- // CIL[DOC-MACRO purpose="Count all file leaves in a file tree recursively"]
387
- // CIL[DOC-RESPONSIBILITY responsibility="Returns the total number of file nodes under the given tree node"]
388
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
389
- // CIL[DOC-CONTRACT inputs="none" outputs="number" errors="none" side_effects="none"]
390
- // CIL[DOC-MICRO logic_summary="Returns 1 for files and sums counts of children for directories" notable_decisions="[]"]
391
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
392
- // CIL[DOC-STABILITY stability="stable"]
393
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
394
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
395
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
396
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
395
+ // CIL[DOC-VECTOR type="context" content="purpose='collectAllDirPaths function'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
396
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
397
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
398
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
397
399
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
398
400
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
401
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:collectAllDirPaths:function"]
402
+
403
+
404
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countFilesInTree:function" type="function" identity="countFilesInTree" parent="none"]
405
+ // CIL[DOC-MACRO purpose="countFilesInTree function"]
406
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements countFilesInTree."]
407
+ // CIL[DOC-CONTEXT module="admin/cil" layer="logic" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
408
+ // CIL[DOC-CONTRACT inputs="none" outputs="return value" side_effects="none" errors="none"]
409
+ // CIL[DOC-MICRO logic_summary="countFilesInTree function definition." notable_decisions="[]"]
410
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
411
+ // CIL[DOC-STABILITY stability="stable"]
399
412
  function countFilesInTree(node: FileTreeNode): number {
400
413
  if (node.type === 'file') return 1
401
414
  return (node.children || []).reduce((acc, c) => acc + countFilesInTree(c), 0)
402
415
  }
403
-
404
- // CIL[END chunk_id="cilingestionpage_countfilesintree_1784193942"]
405
- // CIL[BEGIN chunk_id="cilingestionpage_getfilestatus_1784193942" type="function" identity="getFileStatus" parent="none"]
406
- // CIL[DOC-MACRO purpose="Resolve the pipeline status for a single file path"]
407
- // CIL[DOC-RESPONSIBILITY responsibility="Maps a file path to its explicit status, selected status, or discovered status"]
408
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
409
- // CIL[DOC-CONTRACT inputs="none" outputs="CilFileStatus" errors="none" side_effects="none"]
410
- // CIL[DOC-MICRO logic_summary="Returns explicit status if present, '3-selected' if path is selected, otherwise '2-discovered'" notable_decisions="[]"]
411
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
412
- // CIL[DOC-STABILITY stability="stable"]
413
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
414
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
415
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
416
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
416
+ // CIL[DOC-VECTOR type="context" content="purpose='countFilesInTree function'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
417
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
418
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
419
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
417
420
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
418
421
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
422
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countFilesInTree:function"]
423
+
424
+
425
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:getFileStatus:function" type="function" identity="getFileStatus" parent="none"]
426
+ // CIL[DOC-MACRO purpose="getFileStatus function"]
427
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements getFileStatus."]
428
+ // CIL[DOC-CONTEXT module="admin/cil" layer="logic" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
429
+ // CIL[DOC-CONTRACT inputs="none" outputs="return value" side_effects="none" errors="none"]
430
+ // CIL[DOC-MICRO logic_summary="getFileStatus function definition." notable_decisions="[]"]
431
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
432
+ // CIL[DOC-STABILITY stability="stable"]
419
433
  function getFileStatus(path: string, fileStatuses: Record<string, string>, selectedPaths: string[]): CilFileStatus {
420
434
  const explicit = fileStatuses[path] as CilFileStatus | undefined
421
435
  if (explicit) return explicit
@@ -423,66 +437,69 @@ function getFileStatus(path: string, fileStatuses: Record<string, string>, selec
423
437
  if (selectedPaths.includes(path)) return '3-selected'
424
438
  return '2-discovered'
425
439
  }
440
+ // CIL[DOC-VECTOR type="context" content="purpose='getFileStatus function'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
441
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
442
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
443
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
444
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
445
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
446
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:getFileStatus:function"]
426
447
 
427
448
 
428
- // CIL[END chunk_id="cilingestionpage_getfilestatus_1784193942"]
429
- // CIL[BEGIN chunk_id="cilingestionpage_countselectedleaves_1784193942" type="function" identity="countSelectedLeaves" parent="none"]
430
- // CIL[DOC-MACRO purpose="Count selected file leaves under a tree node"]
431
- // CIL[DOC-RESPONSIBILITY responsibility="Returns the number of selected file nodes in the subtree"]
432
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
433
- // CIL[DOC-CONTRACT inputs="none" outputs="number" errors="none" side_effects="none"]
434
- // CIL[DOC-MICRO logic_summary="For files checks inclusion in selectedPaths; for directories sums child counts" notable_decisions="[]"]
435
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
449
+
450
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countSelectedLeaves:function" type="function" identity="countSelectedLeaves" parent="none"]
451
+ // CIL[DOC-MACRO purpose="countSelectedLeaves function"]
452
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements countSelectedLeaves."]
453
+ // CIL[DOC-CONTEXT module="admin/cil" layer="logic" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
454
+ // CIL[DOC-CONTRACT inputs="none" outputs="return value" side_effects="none" errors="none"]
455
+ // CIL[DOC-MICRO logic_summary="countSelectedLeaves function definition." notable_decisions="[]"]
456
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
436
457
  // CIL[DOC-STABILITY stability="stable"]
437
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
438
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
439
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
440
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
441
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
442
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
443
458
  function countSelectedLeaves(node: FileTreeNode, selectedPaths: string[]): number {
444
459
  if (node.type === 'file') return selectedPaths.includes(node.path) ? 1 : 0
445
460
  return (node.children || []).reduce((sum, c) => sum + countSelectedLeaves(c, selectedPaths), 0)
446
461
  }
462
+ // CIL[DOC-VECTOR type="context" content="purpose='countSelectedLeaves function'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
463
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
464
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
465
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
466
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
467
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
468
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countSelectedLeaves:function"]
469
+
447
470
 
448
471
 
449
- // CIL[END chunk_id="cilingestionpage_countselectedleaves_1784193942"]
450
- // CIL[BEGIN chunk_id="cilingestionpage_countleaves_1784193942" type="function" identity="countLeaves" parent="none"]
451
- // CIL[DOC-MACRO purpose="Count all file leaves under a tree node"]
452
- // CIL[DOC-RESPONSIBILITY responsibility="Returns the total number of file nodes in the subtree"]
453
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
454
- // CIL[DOC-CONTRACT inputs="none" outputs="number" errors="none" side_effects="none"]
455
- // CIL[DOC-MICRO logic_summary="Returns 1 for files and recursively sums child leaf counts for directories" notable_decisions="[]"]
456
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
472
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countLeaves:function" type="function" identity="countLeaves" parent="none"]
473
+ // CIL[DOC-MACRO purpose="countLeaves function"]
474
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements countLeaves."]
475
+ // CIL[DOC-CONTEXT module="admin/cil" layer="logic" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
476
+ // CIL[DOC-CONTRACT inputs="none" outputs="return value" side_effects="none" errors="none"]
477
+ // CIL[DOC-MICRO logic_summary="countLeaves function definition." notable_decisions="[]"]
478
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
457
479
  // CIL[DOC-STABILITY stability="stable"]
458
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
459
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
460
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
461
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
462
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
463
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
464
480
  function countLeaves(node: FileTreeNode): number {
465
481
  if (node.type === 'file') return 1
466
482
  return (node.children || []).reduce((sum, c) => sum + countLeaves(c), 0)
467
483
  }
484
+ // CIL[DOC-VECTOR type="context" content="purpose='countLeaves function'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
485
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
486
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
487
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
488
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
489
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
490
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:countLeaves:function"]
491
+
468
492
 
469
493
 
470
494
 
471
- // CIL[END chunk_id="cilingestionpage_countleaves_1784193942"]
472
- // CIL[BEGIN chunk_id="cilingestionpage_treenode_1784193942" type="function" identity="TreeNode" parent="none"]
473
- // CIL[DOC-MACRO purpose="Render a single file tree node with selection, expansion, and status"]
474
- // CIL[DOC-RESPONSIBILITY responsibility="Displays a directory or file row, handles expand/collapse, selection toggling, and status badges"]
475
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
476
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="Updates UI state via parent callbacks"]
477
- // CIL[DOC-MICRO logic_summary="Computes selection and expansion state, renders folder/file icons, checkbox, name, status badge, and recursively renders children" notable_decisions="[]"]
478
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
495
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:TreeNode:component" type="component" identity="TreeNode" parent="none"]
496
+ // CIL[DOC-MACRO purpose="TreeNode component"]
497
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements TreeNode."]
498
+ // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
499
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" side_effects="none" errors="none"]
500
+ // CIL[DOC-MICRO logic_summary="TreeNode component definition." notable_decisions="[]"]
501
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
479
502
  // CIL[DOC-STABILITY stability="stable"]
480
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
481
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
482
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
483
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
484
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
485
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
486
503
  function TreeNode({
487
504
  node,
488
505
  selectedPaths,
@@ -558,6 +575,7 @@ function TreeNode({
558
575
  : <FileText className="h-3.5 w-3.5 text-slate-400 shrink-0" />
559
576
  }
560
577
 
578
+
561
579
  {}
562
580
  <span className={`text-xs truncate ${isSelected || isAllSelected || isIndeterminate ? 'text-indigo-700 dark:text-indigo-300 font-medium' : ''}`}>
563
581
  {node.name}
@@ -587,24 +605,25 @@ function TreeNode({
587
605
  </div>
588
606
  )
589
607
  }
608
+ // CIL[DOC-VECTOR type="context" content="purpose='TreeNode component'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
609
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
610
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
611
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
612
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
613
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
614
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:TreeNode:component"]
590
615
 
591
616
 
592
617
 
593
- // CIL[END chunk_id="cilingestionpage_treenode_1784193942"]
594
- // CIL[BEGIN chunk_id="cilingestionpage_steprow_1784193942" type="function" identity="StepRow" parent="none"]
595
- // CIL[DOC-MACRO purpose="Render a pipeline step row with status, command copy, and run action"]
596
- // CIL[DOC-RESPONSIBILITY responsibility="Displays step metadata, completion/partial state, command copy button, and run button"]
597
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
598
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="Writes command text to clipboard and triggers onRun callback"]
599
- // CIL[DOC-MICRO logic_summary="Determines done and partial states, renders step icon, label, progress badge, description, copyable command, info tooltip, and run button" notable_decisions="[]"]
600
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
618
+
619
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:StepRow:component" type="component" identity="StepRow" parent="none"]
620
+ // CIL[DOC-MACRO purpose="StepRow component"]
621
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements StepRow."]
622
+ // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
623
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" side_effects="none" errors="none"]
624
+ // CIL[DOC-MICRO logic_summary="StepRow component definition." notable_decisions="[]"]
625
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
601
626
  // CIL[DOC-STABILITY stability="stable"]
602
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
603
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
604
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
605
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
606
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
607
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
608
627
  function StepRow({
609
628
  step,
610
629
  fileCount,
@@ -692,6 +711,7 @@ function StepRow({
692
711
  ? <Check className="h-3 w-3 text-green-600 shrink-0" />
693
712
  : <Copy className="h-3 w-3 text-muted-foreground shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" />
694
713
  }
714
+
695
715
  </button>
696
716
  )}
697
717
  </div>
@@ -718,24 +738,25 @@ function StepRow({
718
738
  </div>
719
739
  )
720
740
  }
741
+ // CIL[DOC-VECTOR type="context" content="purpose='StepRow component'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
742
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
743
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
744
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
745
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
746
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
747
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:StepRow:component"]
748
+
721
749
 
722
750
 
723
751
 
724
- // CIL[END chunk_id="cilingestionpage_steprow_1784193942"]
725
- // CIL[BEGIN chunk_id="cilingestionpage_cilingestionpage_1784193942" type="component" identity="CILIngestionPage" parent="none"]
726
- // CIL[DOC-MACRO purpose="Render the CIL ingestion pipeline page for a project"]
727
- // CIL[DOC-RESPONSIBILITY responsibility="Manage project config, file tree selection, pipeline progress, and run ingestion passes"]
728
- // CIL[DOC-CONTEXT module="cortex:cil-ingestion" layer="presentation" related_files="[]"]
729
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="Displays loading, not-found, and API error states" side_effects="Calls /api/cil-project, /api/cil-ingest, /api/cil-embeddings, and /api/cil-callmap endpoints; updates local state"]
730
- // CIL[DOC-MICRO logic_summary="Loads project and progress, renders stats, settings, pipeline steps, and file tree; provides handlers to save config/selection and run pass 1, embed, and map passes" notable_decisions="[]"]
731
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
752
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:CILIngestionPage:component" type="component" identity="CILIngestionPage" parent="none"]
753
+ // CIL[DOC-MACRO purpose="CILIngestionPage component"]
754
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements CILIngestionPage."]
755
+ // CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/tooltip.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILIngestionPage.tsx"]
756
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" side_effects="none" errors="none"]
757
+ // CIL[DOC-MICRO logic_summary="CILIngestionPage component definition." notable_decisions="[]"]
758
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
732
759
  // CIL[DOC-STABILITY stability="stable"]
733
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
734
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
735
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
736
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
737
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
738
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
739
760
  export default function CILIngestionPage() {
740
761
  const { id: projectId } = useParams<{ id: string }>()
741
762
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
@@ -1271,6 +1292,7 @@ export default function CILIngestionPage() {
1271
1292
  ? <><CheckCircle2 className="h-3 w-3 mr-1.5 text-green-600" />Saved</>
1272
1293
  : <><Save className="h-3 w-3 mr-1.5" />Save Settings</>
1273
1294
  }
1295
+
1274
1296
  </Button>
1275
1297
  </div>
1276
1298
  </div>
@@ -1290,17 +1312,33 @@ export default function CILIngestionPage() {
1290
1312
  </div>
1291
1313
 
1292
1314
  {PIPELINE_STEPS.map(step => {
1315
+
1316
+
1293
1317
  const isActive = step.number === activeStep
1318
+
1319
+
1320
+
1294
1321
  let activeCount = 0
1322
+
1323
+
1324
+
1295
1325
  let fileCount = selectedCount
1326
+
1327
+
1328
+
1296
1329
  let done = false
1297
1330
 
1331
+
1298
1332
 
1299
1333
  if (step.number === 1) {
1300
1334
  done = !!(project?.data?.repo_path)
1301
1335
  activeCount = done ? 1 : 0
1302
1336
  fileCount = 1
1303
1337
  }
1338
+
1339
+
1340
+
1341
+
1304
1342
 
1305
1343
  else if (step.number === 2) {
1306
1344
  done = !!fileTree
@@ -1322,7 +1360,10 @@ export default function CILIngestionPage() {
1322
1360
  }
1323
1361
 
1324
1362
 
1363
+
1364
+
1325
1365
  let onRun: (() => void) | undefined
1366
+
1326
1367
  if (step.number === 2) onRun = runPass1
1327
1368
  else if (step.number === 6) onRun = runEmbedFirstPass
1328
1369
  else if (step.number === 7) onRun = runMapFirstPass
@@ -1377,6 +1418,7 @@ export default function CILIngestionPage() {
1377
1418
  ? <><RefreshCw className="h-3 w-3 mr-1.5 animate-spin" />Scanning…</>
1378
1419
  : <><Play className="h-3 w-3 mr-1.5" />Scan Repository</>
1379
1420
  }
1421
+
1380
1422
  </Button>
1381
1423
  </div>
1382
1424
  ) : (
@@ -1398,5 +1440,10 @@ export default function CILIngestionPage() {
1398
1440
  </div>
1399
1441
  )
1400
1442
  }
1401
-
1402
- // CIL[END chunk_id="cilingestionpage_cilingestionpage_1784193942"]
1443
+ // CIL[DOC-VECTOR type="context" content="purpose='CILIngestionPage component'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
1444
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
1445
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
1446
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
1447
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
1448
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1449
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILIngestionPage.tsx:CILIngestionPage:component"]