spine-framework 0.4.3 → 0.5.0-rc.4

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 (320) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/migrate.ts +36 -30
  8. package/.framework/cli/commands/migrations.ts +16 -56
  9. package/.framework/cli/commands/upgrade.ts +35 -0
  10. package/.framework/cli/commands/validate-schema.ts +147 -0
  11. package/.framework/cli/context.ts +223 -110
  12. package/.framework/cli/index.ts +6 -0
  13. package/.framework/cli/lib/project-files.ts +241 -1
  14. package/.framework/functions/_shared/agent-runner.ts +1000 -81
  15. package/.framework/functions/_shared/cil.ts +2 -1
  16. package/.framework/functions/_shared/db.ts +3 -6
  17. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  18. package/.framework/functions/_shared/kb.ts +61 -7
  19. package/.framework/functions/_shared/logging.ts +562 -224
  20. package/.framework/functions/_shared/message-sequence.ts +53 -0
  21. package/.framework/functions/_shared/middleware.ts +47 -44
  22. package/.framework/functions/_shared/pipeline-runner.ts +150 -37
  23. package/.framework/functions/_shared/principal.ts +9 -6
  24. package/.framework/functions/_shared/trigger-engine.ts +149 -40
  25. package/.framework/functions/admin-data.ts +48 -31
  26. package/.framework/functions/ai-agents.ts +103 -33
  27. package/.framework/functions/api-keys.ts +301 -122
  28. package/.framework/functions/apps.ts +43 -26
  29. package/.framework/functions/cil-ingest.ts +48 -15
  30. package/.framework/functions/debug-auth.ts +14 -8
  31. package/.framework/functions/deliveries.ts +39 -12
  32. package/.framework/functions/embeddings.ts +145 -76
  33. package/.framework/functions/integration-outbound.ts +67 -27
  34. package/.framework/functions/integrations.ts +254 -127
  35. package/.framework/functions/logs.ts +273 -133
  36. package/.framework/functions/observability.ts +277 -147
  37. package/.framework/functions/pipeline-executions.ts +1 -1
  38. package/.framework/functions/pipeline-runner-background.ts +120 -0
  39. package/.framework/functions/pipelines.ts +14 -9
  40. package/.framework/functions/prompt-configs.ts +7 -4
  41. package/.framework/functions/roles.ts +8 -5
  42. package/.framework/functions/security.ts +30 -17
  43. package/.framework/functions/system-cron.ts +250 -128
  44. package/.framework/functions/tests.ts +7 -6
  45. package/.framework/functions/timers.ts +310 -107
  46. package/.framework/functions/trigger-scheduler.ts +65 -5
  47. package/.framework/functions/triggers.ts +28 -13
  48. package/.framework/functions/types.ts +13 -10
  49. package/.framework/migrations/064_episode_leases.sql +196 -0
  50. package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
  51. package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
  52. package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
  53. package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
  54. package/.framework/migrations/069_log_stats_window.sql +54 -0
  55. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  56. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  57. package/.framework/migrations/072_slug_autofill.sql +77 -0
  58. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  59. package/.framework/schemas/spine.config.schema.json +62 -0
  60. package/.framework/src/App.tsx +3 -1
  61. package/.framework/src/apps/admin/index.tsx +1141 -775
  62. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  63. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  64. package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
  65. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  66. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  67. package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
  68. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  69. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  70. package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
  71. package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
  72. package/.framework/src/components/layout/Layout.tsx +4 -2
  73. package/.framework/src/components/layout/Sidebar.tsx +304 -179
  74. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  75. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  76. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  77. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  78. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  79. package/.framework/src/components/ui/sheet.tsx +24 -26
  80. package/.framework/src/components/ui/textarea.tsx +74 -48
  81. package/.framework/src/hooks/useBranding.ts +47 -0
  82. package/.framework/src/hooks/useEntityList.ts +12 -9
  83. package/.framework/src/hooks/useListSchema.ts +108 -58
  84. package/.framework/src/instructions/README.md +57 -0
  85. package/.framework/src/instructions/ai-agents.md +69 -0
  86. package/.framework/src/instructions/alerts.md +80 -0
  87. package/.framework/src/instructions/api-keys.md +87 -0
  88. package/.framework/src/instructions/apps.md +77 -0
  89. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  90. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  91. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  92. package/.framework/src/instructions/concepts/automation.md +186 -0
  93. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  94. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  95. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  96. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  97. package/.framework/src/instructions/concepts/observability.md +116 -0
  98. package/.framework/src/instructions/concepts/permissions.md +150 -0
  99. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  100. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  101. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  102. package/.framework/src/instructions/deliveries.md +59 -0
  103. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  104. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  105. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  106. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  107. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  108. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  109. package/.framework/src/instructions/integrations.md +96 -0
  110. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  111. package/.framework/src/instructions/invites.md +60 -0
  112. package/.framework/src/instructions/kb.md +80 -0
  113. package/.framework/src/instructions/logs.md +77 -0
  114. package/.framework/src/instructions/observability.md +61 -0
  115. package/.framework/src/instructions/operations/deployment.md +115 -0
  116. package/.framework/src/instructions/operations/migrations.md +125 -0
  117. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  118. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  119. package/.framework/src/instructions/operations/upgrade.md +116 -0
  120. package/.framework/src/instructions/pipeline-executions.md +62 -0
  121. package/.framework/src/instructions/pipelines.md +78 -0
  122. package/.framework/src/instructions/prompts.md +95 -0
  123. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  124. package/.framework/src/instructions/reference/api/auth.md +113 -0
  125. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  126. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  127. package/.framework/src/instructions/reference/cli.md +124 -0
  128. package/.framework/src/instructions/reference/database.md +132 -0
  129. package/.framework/src/instructions/reference/design-schema.md +280 -0
  130. package/.framework/src/instructions/reference/env-vars.md +133 -0
  131. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  132. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  133. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  134. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  135. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  136. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  137. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  138. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  139. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  140. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  141. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  142. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  143. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  144. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  145. package/.framework/src/instructions/reference/functions/index.md +103 -0
  146. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  147. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  148. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  149. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  150. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  151. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  152. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  153. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  154. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  155. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  156. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  157. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  158. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  159. package/.framework/src/instructions/reference/functions/security.md +140 -0
  160. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  161. package/.framework/src/instructions/reference/functions/system.md +106 -0
  162. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  163. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  164. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  165. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  166. package/.framework/src/instructions/reference/functions/types.md +146 -0
  167. package/.framework/src/instructions/reference/seeds.md +126 -0
  168. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  169. package/.framework/src/instructions/reference/spine-config.md +114 -0
  170. package/.framework/src/instructions/roles.md +80 -0
  171. package/.framework/src/instructions/runtime-detail.md +70 -0
  172. package/.framework/src/instructions/runtime-list.md +77 -0
  173. package/.framework/src/instructions/security.md +67 -0
  174. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  175. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  176. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  177. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  178. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  179. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  180. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  181. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  182. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  183. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  184. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  185. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  186. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  187. package/.framework/src/instructions/testing.md +59 -0
  188. package/.framework/src/instructions/timers.md +82 -0
  189. package/.framework/src/instructions/triggers.md +69 -0
  190. package/.framework/src/instructions/types.md +93 -0
  191. package/.framework/src/lib/branding.ts +128 -0
  192. package/.framework/src/pages/NoAppPage.tsx +3 -1
  193. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  194. package/.framework/src/pages/SetupPage.tsx +5 -2
  195. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  196. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  197. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  198. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  199. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  200. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  201. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  202. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  203. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  204. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  205. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  206. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  207. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  208. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  209. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  210. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  211. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  212. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  213. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  214. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  215. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  216. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  217. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  218. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  219. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  220. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  221. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  222. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  223. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  224. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  225. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  226. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  227. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  228. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  229. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  230. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  231. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  232. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  233. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  234. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  235. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  236. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  237. package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
  238. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
  239. package/.framework/src/pages/auth/LoginPage.tsx +4 -2
  240. package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
  241. package/.framework/templates/agent/AGENTS.md +150 -0
  242. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  243. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  244. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  245. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  246. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  247. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  248. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  249. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  250. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  251. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  252. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  253. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  254. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  255. package/.framework/templates/project.json +5 -1
  256. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  257. package/.framework/tests/unit/agent-files.test.ts +355 -0
  258. package/.framework/tests/unit/agent-runner.test.ts +496 -47
  259. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  260. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  261. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  262. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  263. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  264. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  265. package/.framework/tests/unit/episode-lease.test.ts +695 -0
  266. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  267. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  268. package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
  269. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  270. package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
  271. package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
  272. package/.framework/tests/unit/principal-cache.test.ts +15 -0
  273. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  274. package/.framework/tests/unit/system-cron.test.ts +240 -0
  275. package/.framework/tests/unit/timers.test.ts +159 -0
  276. package/.framework/tests/unit/trigger-engine.test.ts +278 -91
  277. package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
  278. package/README.md +125 -166
  279. package/config/tsconfig.cli.json +2 -2
  280. package/netlify.toml +5 -0
  281. package/package.json +15 -4
  282. package/templates/project/package-lock.json +2 -2
  283. package/.framework/docs/admin-routes.md +0 -76
  284. package/.framework/docs/api-docs-progress.md +0 -38
  285. package/.framework/docs/api-governance.md +0 -146
  286. package/.framework/docs/api-testing-results.md +0 -212
  287. package/.framework/docs/assembly-launch-guide.md +0 -138
  288. package/.framework/docs/audit-results.md +0 -590
  289. package/.framework/docs/db-api-inventory.md +0 -95
  290. package/.framework/docs/gap-remediation-backlog.md +0 -103
  291. package/.framework/docs/ui-adoption-verification.md +0 -111
  292. package/.framework/docs/ui-api-coverage.md +0 -84
  293. package/.framework/docs/v2-compatibility-audit.md +0 -228
  294. package/.framework/mcp/index.ts +0 -133
  295. package/.framework/mcp/load-env.ts +0 -60
  296. package/.framework/mcp/shared/app-manifest.ts +0 -275
  297. package/.framework/mcp/shared/db.ts +0 -477
  298. package/.framework/mcp/shared/kb.ts +0 -118
  299. package/.framework/mcp/tools/architect.ts +0 -431
  300. package/.framework/mcp/tools/cil/context.ts +0 -345
  301. package/.framework/mcp/tools/cil/graph.ts +0 -242
  302. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  303. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  304. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  305. package/.framework/mcp/tools/cil/project.ts +0 -791
  306. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  307. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  308. package/.framework/mcp/tools/cil/search.ts +0 -97
  309. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  310. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  311. package/.framework/mcp/tools/kb/delete.ts +0 -139
  312. package/.framework/mcp/tools/kb/index.ts +0 -52
  313. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  314. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  315. package/.framework/mcp/tools/kb/publish.ts +0 -100
  316. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  317. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  318. package/.framework/mcp/tools/kb/search.ts +0 -101
  319. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  320. package/.framework/mcp/tools/observability.ts +0 -510
@@ -1,12 +1,27 @@
1
1
  // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
2
- // CIL[DOC-MACRO purpose="React admin page for listing and validating CIL files within a project"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Renders the CIL file list UI, fetches project data, and exposes chunk status"]
4
- // CIL[DOC-CONTEXT module="admin-cil" layer="presentation" 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/skeleton.tsx,.framework/src/lib/api.ts"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Aggregates CIL files, displays badges, supports search and chunk expansion" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
- // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
2
+ /**
3
+ * @module CILFileListPage
4
+ * @audience both
5
+ * @layer shared-core
6
+ * @stability stable
7
+ *
8
+ * This module represents the CIL File List Page in the admin section of the application, allowing users to view and manage files related to the CIL. It integrates with the API to fetch file data and provides a user interface for interaction.
9
+ * INVARIANT: The user must have appropriate permissions to access this page.
10
+ *
11
+ * @seeAlso PageInstructions (provides instructional content for the admin interface).
12
+ * @seeAlso apiFetch (handles API requests for fetching file data).
13
+ *
14
+ * @cil-generated
15
+ */
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
10
25
 
11
26
  import { useEffect, useState, useCallback } from 'react'
12
27
  import { useParams, useNavigate } from 'react-router-dom'
@@ -17,6 +32,7 @@ import { Badge } from '@core/components/ui/badge'
17
32
  import { Skeleton } from '@core/components/ui/skeleton'
18
33
  import { Input } from '@core/components/ui/input'
19
34
  import {
35
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header"]
20
36
  FileCode2,
21
37
  CheckCircle2,
22
38
  AlertTriangle,
@@ -36,23 +52,31 @@ import {
36
52
 
37
53
 
38
54
 
39
- import { PageInstructions } from '../../../components/admin/PageInstructions'
40
- // CIL[DOC-VECTOR type="context" content="purpose='React admin page for listing and validating CIL files within a project'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
41
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
42
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
43
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
44
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
45
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
- // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:module_header:module_header"]
47
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface" type="interface" identity="CILFile" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
48
- // CIL[DOC-MACRO purpose="Defines the CILFile record shape used by the file list"]
49
- // CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for an indexed CIL source file"]
50
- // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
51
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
52
- // CIL[DOC-MICRO logic_summary="Lists metadata fields including chunk_count, ingestion_pass, and dead-code flags" notable_decisions="[]"]
53
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
54
- // CIL[DOC-STABILITY stability="stable"]
55
55
 
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface" type="interface" identity="CILFile" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
73
+ /**
74
+ * The CILFile interface defines the structure of a CIL file object, encapsulating its metadata and associated data attributes. It serves to standardize the representation of CIL files within the application.
75
+ *
76
+ * @sideEffects none
77
+ * @stability internal
78
+ * @cil-generated
79
+ */
56
80
  interface CILFile {
57
81
  id: string
58
82
  title: string
@@ -71,24 +95,35 @@ interface CILFile {
71
95
  }
72
96
  updated_at: string
73
97
  }
74
- // CIL[DOC-VECTOR type="context" content="purpose='Defines the CILFile record shape used by the file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
75
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
76
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
77
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
78
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
79
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
80
98
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFile:interface"]
81
99
 
82
100
 
83
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface" type="interface" identity="CILChunk" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
84
- // CIL[DOC-MACRO purpose="Defines the CILChunk record shape"]
85
- // CIL[DOC-RESPONSIBILITY responsibility="Describes the data model for a CIL chunk"]
86
- // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
87
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
88
- // CIL[DOC-MICRO logic_summary="Exposes chunk_name, chunk_type, line range, and stability fields" notable_decisions="[]"]
89
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
90
- // CIL[DOC-STABILITY stability="stable"]
91
101
 
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface" type="interface" identity="CILChunk" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
120
+ /**
121
+ * The CILChunk interface defines the structure of a chunk of code within a CIL (Common Intermediate Language) file, encapsulating metadata about the chunk for processing and analysis. It exists to facilitate the management and representation of code segments in the application.
122
+ *
123
+ * @sideEffects none
124
+ * @stability internal
125
+ * @cil-generated
126
+ */
92
127
  interface CILChunk {
93
128
  id: string
94
129
  chunk_name: string
@@ -104,24 +139,35 @@ interface CILChunk {
104
139
  file_path: string
105
140
  project_id: string
106
141
  }
107
- // CIL[DOC-VECTOR type="context" content="purpose='Defines the CILChunk record shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
108
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
109
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
110
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
111
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
112
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
113
142
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILChunk:interface"]
114
143
 
115
144
 
116
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface" type="interface" identity="ValidationSummary" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
117
- // CIL[DOC-MACRO purpose="Defines the validation summary shape"]
118
- // CIL[DOC-RESPONSIBILITY responsibility="Describes aggregate validation trust metrics"]
119
- // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
120
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
121
- // CIL[DOC-MICRO logic_summary="Contains total, current, drift_detected, not_found, and trust_rating fields" notable_decisions="[]"]
122
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
123
- // CIL[DOC-STABILITY stability="stable"]
124
145
 
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface" type="interface" identity="ValidationSummary" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
164
+ /**
165
+ * The ValidationSummary interface defines the structure for summarizing validation results in the application, providing key metrics related to validation status. It includes totals and counts of detected issues to facilitate monitoring and reporting.
166
+ *
167
+ * @sideEffects none
168
+ * @stability internal
169
+ * @cil-generated
170
+ */
125
171
  interface ValidationSummary {
126
172
  total: number
127
173
  current: number
@@ -129,50 +175,77 @@ interface ValidationSummary {
129
175
  not_found: number
130
176
  trust_rating: number
131
177
  }
132
- // CIL[DOC-VECTOR type="context" content="purpose='Defines the validation summary shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
133
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
134
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
135
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
136
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
137
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
138
178
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:ValidationSummary:interface"]
139
179
 
140
180
 
141
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface" type="interface" identity="FileValidation" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
142
- // CIL[DOC-MACRO purpose="Defines per-file validation state"]
143
- // CIL[DOC-RESPONSIBILITY responsibility="Describes the validation result for a single CIL file"]
144
- // CIL[DOC-CONTEXT module="admin-cil" layer="data-model" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
145
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
146
- // CIL[DOC-MICRO logic_summary="Includes summary, loading flag, and error message" notable_decisions="[]"]
147
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
148
- // CIL[DOC-STABILITY stability="stable"]
149
181
 
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface" type="interface" identity="FileValidation" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
200
+ /**
201
+ * The FileValidation interface defines the structure for validating file uploads within the admin panel. It encapsulates the file's ID, validation summary, loading state, and any potential error messages.
202
+ *
203
+ * @sideEffects none
204
+ * @stability internal
205
+ * @cil-generated
206
+ */
150
207
  interface FileValidation {
151
208
  fileId: string
152
209
  summary: ValidationSummary | null
153
210
  loading: boolean
154
211
  error: string | null
155
212
  }
156
- // CIL[DOC-VECTOR type="context" content="purpose='Defines per-file validation state'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
157
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
158
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
159
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
160
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
161
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
162
213
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:FileValidation:interface"]
163
214
 
164
215
 
165
216
 
166
217
 
167
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component" type="component" identity="PassBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
168
- // CIL[DOC-MACRO purpose="Badge component showing ingestion pass status"]
169
- // CIL[DOC-RESPONSIBILITY responsibility="Renders a label for the current ingestion pass"]
170
- // CIL[DOC-CONTEXT module="admin-cil" layer="presentation" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
171
- // CIL[DOC-CONTRACT inputs="pass: number" outputs="Badge React element" errors="none" side_effects="none"]
172
- // CIL[DOC-MICRO logic_summary="Shows Not ingested, Pass n, or Pass n complete variants" notable_decisions="[]"]
173
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
174
- // CIL[DOC-STABILITY stability="stable"]
175
218
 
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component" type="component" identity="PassBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
237
+ /**
238
+ * PassBadge is a React component that visually represents the status of a pass based on its value. It provides feedback for various pass states, including not ingested, in progress, or complete.
239
+ *
240
+ * @macro React component responsible for rendering pass status badges.
241
+ * @micro Utilizes conditional rendering to determine the appropriate badge style and message based on the pass value.
242
+ * @inputSpec
243
+ * pass: number (required) — the number representing the pass status.
244
+ * @outputSpec JSX.Element — a badge element reflecting the pass status.
245
+ * @sideEffects none
246
+ * @stability internal
247
+ * @cil-generated
248
+ */
176
249
  function PassBadge({ pass }: { pass: number }) {
177
250
  if (!pass || pass < 1) {
178
251
  return <Badge variant="outline" className="text-xs text-muted-foreground">Not ingested</Badge>
@@ -182,26 +255,42 @@ function PassBadge({ pass }: { pass: number }) {
182
255
  }
183
256
  return <Badge variant="secondary" className="text-xs">Pass {pass}</Badge>
184
257
  }
185
- // CIL[DOC-VECTOR type="context" content="purpose='Badge component showing ingestion pass status'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
186
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
187
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
188
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
189
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
190
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
191
258
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:PassBadge:component"]
192
259
 
193
260
 
194
261
 
195
262
 
196
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component" type="component" identity="TrustBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
197
- // CIL[DOC-MACRO purpose="Badge component showing validation trust"]
198
- // CIL[DOC-RESPONSIBILITY responsibility="Renders a trust rating and drift count badge"]
199
- // CIL[DOC-CONTEXT module="admin-cil" layer="presentation" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
200
- // CIL[DOC-CONTRACT inputs="summary: ValidationSummary | null" outputs="Badge or null" errors="none" side_effects="none"]
201
- // CIL[DOC-MICRO logic_summary="Displays destructive badge when drift detected, otherwise trusted percentage" notable_decisions="[]"]
202
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
203
- // CIL[DOC-STABILITY stability="stable"]
204
263
 
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component" type="component" identity="TrustBadge" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
282
+ /**
283
+ * The TrustBadge component displays a visual indicator of trustworthiness based on a validation summary. It provides feedback on trust ratings and drift detection to inform users of the current state of validation.
284
+ *
285
+ * @macro UI component that renders trust status based on validation summary.
286
+ * @micro Utilizes conditional rendering to display different badge styles based on the presence of drift detection.
287
+ * @inputSpec
288
+ * - summary: ValidationSummary | null (required) — the validation summary containing trust rating and drift detection information.
289
+ * @outputSpec JSX.Element | null — returns a Badge component or null if no summary is provided.
290
+ * @sideEffects none
291
+ * @stability internal
292
+ * @cil-generated
293
+ */
205
294
  function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
206
295
  if (!summary) return null
207
296
  const { trust_rating, drift_detected } = summary
@@ -220,26 +309,42 @@ function TrustBadge({ summary }: { summary: ValidationSummary | null }) {
220
309
  </Badge>
221
310
  )
222
311
  }
223
- // CIL[DOC-VECTOR type="context" content="purpose='Badge component showing validation trust'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
224
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
225
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
226
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
227
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
228
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
229
312
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:TrustBadge:component"]
230
313
 
231
314
 
232
315
 
233
316
 
234
- // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component" type="component" identity="CILFileListPage" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
235
- // CIL[DOC-MACRO purpose="Main page component for the CIL file list"]
236
- // CIL[DOC-RESPONSIBILITY responsibility="Fetches and renders CIL files for a project"]
237
- // CIL[DOC-CONTEXT module="admin-cil" layer="presentation" 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/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILFileListPage.tsx"]
238
- // CIL[DOC-CONTRACT inputs="projectId from useParams" outputs="React page JSX" errors="Error messages displayed via validations" side_effects="Fetches project and files, manages React state, navigates"]
239
- // CIL[DOC-MICRO logic_summary="Implements search, summary cards, file chunk expansion, and validation actions" notable_decisions="[]"]
240
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
241
- // CIL[DOC-STABILITY stability="stable"]
242
317
 
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component" type="component" identity="CILFileListPage" parent="~/.framework/src/pages/admin/cil/CILFileListPage.tsx"]
336
+ /**
337
+ * CILFileListPage is a React component that manages the display and validation of CIL files associated with a specific project. It fetches project and file data from an API and provides functionality to validate individual files or all visible files at once.
338
+ *
339
+ * @macro React component for managing CIL file listings and validations.
340
+ * @micro Utilizes asynchronous API calls to fetch project and file data, and manages state with React hooks.
341
+ * @outputSpec JSX.Element
342
+ * @sideEffects Makes external API calls to fetch project and file data, and to validate files.
343
+ * @stability internal
344
+ * @calls apiFetch
345
+ * @errorHandling none
346
+ * @cil-generated
347
+ */
243
348
  export default function CILFileListPage() {
244
349
  const { id: projectId } = useParams<{ id: string }>()
245
350
  const navigate = useNavigate()
@@ -259,14 +364,29 @@ export default function CILFileListPage() {
259
364
  if (!projectId) return
260
365
  setLoading(true)
261
366
 
367
+ const PAGE_SIZE = 500
368
+ const fetchAllFiles = async (): Promise<CILFile[]> => {
369
+ const all: CILFile[] = []
370
+ let offset = 0
371
+ while (true) {
372
+ const res = await apiFetch(
373
+ `/api/admin-data?action=list&entity=items&type_slug=cil_file&limit=${PAGE_SIZE}&offset=${offset}`
374
+ )
375
+ const json = await res.json()
376
+ const batch: CILFile[] = json?.data || json?.items || []
377
+ all.push(...batch)
378
+ if (batch.length < PAGE_SIZE) break
379
+ offset += PAGE_SIZE
380
+ }
381
+ return all
382
+ }
383
+
262
384
  Promise.all([
263
385
  apiFetch(`/api/cil-project?action=get&id=${projectId}`).then(r => r.json()),
264
- apiFetch(`/api/admin-data?action=list&entity=items&type_slug=cil_file&limit=500`)
265
- .then(r => r.json()),
386
+ fetchAllFiles(),
266
387
  ])
267
- .then(([projData, filesData]) => {
388
+ .then(([projData, allFiles]) => {
268
389
  setProject(projData?.project || projData?.data || null)
269
- const allFiles: CILFile[] = filesData?.data || filesData?.items || []
270
390
  setFiles(allFiles.filter(f => f.data?.project_id === projectId))
271
391
  })
272
392
  .catch(() => {})
@@ -381,6 +501,7 @@ export default function CILFileListPage() {
381
501
  variant="ghost"
382
502
  size="sm"
383
503
  onClick={() => navigate(appPath(`/cil/${projectId}`))}
504
+
384
505
  className="flex items-center gap-1 text-muted-foreground"
385
506
  >
386
507
  <ArrowLeft className="h-4 w-4" />
@@ -415,17 +536,6 @@ export default function CILFileListPage() {
415
536
  </Button>
416
537
  </div>
417
538
  </div>
418
-
419
- <PageInstructions
420
- description="Browse indexed files and their chunks for a project."
421
- sections={[
422
- { title: 'What this page is for', content: 'This page lists all files discovered for a CIL project and shows their ingestion, drift, and dead-code status.' },
423
- { title: 'How to read this page', content: 'The summary cards show Total Files, Fully Ingested, Dead Code, and Files with Drift. Each file card displays the path, language, chunk count, and status badges.' },
424
- { title: 'How to use this page', content: 'Use the search box to filter by path or language. Click a file to view its chunks. Click Validate All to re-check hashes and drift for the filtered files.' },
425
- { title: 'Important notes', content: 'Drift means the file changed since the last ingestion and stored hashes no longer match. Dead-code files are not called or imported by any other indexed file.' },
426
- ]}
427
- />
428
-
429
539
  {}
430
540
  <div className="grid grid-cols-2 sm:grid-cols-4 gap-3">
431
541
  {[
@@ -479,31 +589,85 @@ export default function CILFileListPage() {
479
589
  {filteredFiles.map(file => {
480
590
 
481
591
 
592
+
593
+ /**
594
+ * The constant 'd' stores the data from the 'file' object, defaulting to an empty object if no data is present. This ensures that subsequent operations can safely access 'd' without encountering undefined values.
595
+ *
596
+ * @sideEffects none
597
+ * @stability internal
598
+ * @cil-generated
599
+ */
482
600
  const d = file.data || {}
483
601
 
484
602
 
485
603
 
604
+
605
+
606
+ /**
607
+ * The constant 'filePath' holds the file path for a document, defaulting to the title of the file if no specific path is provided. It exists to ensure that a valid file path is always available for further processing.
608
+ *
609
+ * @sideEffects none
610
+ * @stability internal
611
+ * @cil-generated
612
+ */
486
613
  const filePath: string = d.file_path || file.title
487
614
 
488
615
 
489
616
 
617
+
618
+
619
+ /**
620
+ * The constant 'shortName' extracts the last segment of a file path, providing a simplified name for display purposes. It exists to facilitate user-friendly representations of file names in the admin interface.
621
+ *
622
+ * @sideEffects none
623
+ * @stability internal
624
+ * @cil-generated
625
+ */
490
626
  const shortName = filePath.split('/').pop() || filePath
491
627
 
492
628
 
493
629
 
630
+
631
+
632
+ /**
633
+ * The constant 'dirPath' extracts the directory path from a given file path if it contains a '/' character. It exists to facilitate operations that require the directory context of a file path.
634
+ *
635
+ * @sideEffects none
636
+ * @stability internal
637
+ * @cil-generated
638
+ */
494
639
  const dirPath = filePath.includes('/')
495
640
  ? filePath.split('/').slice(0, -1).join('/')
496
641
  : ''
497
642
 
498
643
 
499
644
 
645
+
646
+
647
+ /**
648
+ * The constant 'val' retrieves validation rules associated with a specific file ID from the 'validations' object. It exists to provide the necessary validation logic for the file being processed.
649
+ *
650
+ * @sideEffects none
651
+ * @stability internal
652
+ * @cil-generated
653
+ */
500
654
  const val = validations[file.id]
501
655
 
502
656
 
503
657
 
658
+
659
+
660
+ /**
661
+ * The constant 'isValidating' determines if the loading state of a validation process is active. It is used to conditionally render UI elements based on the validation status.
662
+ *
663
+ * @sideEffects none
664
+ * @stability internal
665
+ * @cil-generated
666
+ */
504
667
  const isValidating = val?.loading === true
505
668
 
506
669
 
670
+
507
671
  return (
508
672
  <Card key={file.id} className="hover:bg-muted/30 transition-colors">
509
673
  <CardContent className="p-4">
@@ -616,8 +780,17 @@ export default function CILFileListPage() {
616
780
  {expandedFiles.has(file.id) && (() => {
617
781
 
618
782
 
783
+
784
+ /**
785
+ * The constant 'fc' retrieves the file chunk associated with a specific file ID, providing a way to manage loading states and display appropriate messages based on the chunk's status. It exists to facilitate the rendering of file chunk information in the UI.
786
+ *
787
+ * @sideEffects none
788
+ * @stability internal
789
+ * @cil-generated
790
+ */
619
791
  const fc = fileChunks[file.id]
620
792
 
793
+
621
794
  if (!fc || fc.loading) return (
622
795
  <div className="mt-3 pt-3 border-t space-y-1.5">
623
796
  {[...Array(3)].map((_, i) => (
@@ -631,6 +804,14 @@ export default function CILFileListPage() {
631
804
 
632
805
 
633
806
 
807
+
808
+ /**
809
+ * CHUNK_TYPE_COLORS is a mapping of chunk types to their corresponding CSS class styles for visual representation in the UI. It provides consistent styling for different types of code chunks displayed in the admin interface.
810
+ *
811
+ * @sideEffects none
812
+ * @stability internal
813
+ * @cil-generated
814
+ */
634
815
  const CHUNK_TYPE_COLORS: Record<string, string> = {
635
816
  function: 'bg-indigo-100 text-indigo-700',
636
817
  class: 'bg-violet-100 text-violet-700',
@@ -644,13 +825,23 @@ export default function CILFileListPage() {
644
825
 
645
826
 
646
827
 
828
+
647
829
  return (
648
830
  <div className="mt-3 pt-3 border-t space-y-1">
649
831
  {fc.chunks.map(chunk => {
650
832
 
651
833
 
834
+
835
+ /**
836
+ * The constant 'typeClass' determines the CSS class to apply based on the chunk type, providing visual differentiation in the UI. It ensures that each chunk is styled appropriately according to its type, enhancing user experience.
837
+ *
838
+ * @sideEffects none
839
+ * @stability internal
840
+ * @cil-generated
841
+ */
652
842
  const typeClass = CHUNK_TYPE_COLORS[chunk.chunk_type] || 'bg-slate-100 text-slate-600'
653
843
 
844
+
654
845
  return (
655
846
  <a
656
847
  key={chunk.id}
@@ -686,11 +877,12 @@ export default function CILFileListPage() {
686
877
  </div>
687
878
  )
688
879
  }
689
- // CIL[DOC-VECTOR type="context" content="purpose='Main page component for the CIL file list'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
690
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
691
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
692
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
693
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
694
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
695
880
  // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILFileListPage.tsx:CILFileListPage:component"]
696
881
 
882
+
883
+
884
+
885
+
886
+
887
+
888
+