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,14 @@
1
- // CIL[BEGIN chunk_id="cilgraphpage_module_header_1784193942" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Imports and dependencies for the CIL graph visualization page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Declare external libraries, hooks, UI components, and icons used by CILGraphPage"]
4
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
5
- // CIL[DOC-CONTRACT inputs="none" outputs="imported modules and types" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Aggregates React, react-router, XYFlow, dagre, internal api/hooks, UI primitives, and lucide icons." notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+
2
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
3
+ // CIL[DOC-MACRO purpose="Provide the CIL graph visualization page for exploring file and chunk call graphs."]
4
+ // CIL[DOC-RESPONSIBILITY responsibility="Render an interactive React Flow graph, switch view modes, and display node details."]
5
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts"]
6
+ // CIL[DOC-CONTRACT inputs="none" outputs="rendered admin page" errors="none" side_effects="fetches graph data from API, updates browser UI state"]
7
+ // CIL[DOC-MICRO logic_summary="Imports dependencies and PageInstructions component for the admin CIL graph page." notable_decisions="[]"]
8
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
9
  // 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, .framework/src/pages/admin/RolesPage.tsx, \."]
11
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
12
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
13
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
14
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
15
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
10
+ // CIL[DOC-AUDIENCE audience="admin-ui-developers"]
11
+
16
12
  import { useEffect, useState, useCallback } from 'react'
17
13
  import { useParams } from 'react-router-dom'
18
14
  import {
@@ -47,103 +43,110 @@ import { RefreshCw, ChevronRight, ZoomIn, Layers } from 'lucide-react'
47
43
 
48
44
 
49
45
  import { PageInstructions } from '../../../components/admin/PageInstructions'
50
- // CIL[END chunk_id="cilgraphpage_module_header_1784193942"]
51
- // CIL[BEGIN chunk_id="cilgraphpage_node_width_1784193942" type="constant" identity="NODE_WIDTH" parent="none"]
52
- // CIL[DOC-MACRO purpose="Define default width for chunk graph nodes"]
53
- // CIL[DOC-RESPONSIBILITY responsibility="Provide constant node width used in layout and rendering"]
54
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
55
- // CIL[DOC-CONTRACT inputs="none" outputs="NODE_WIDTH number" errors="none" side_effects="none"]
56
- // CIL[DOC-MICRO logic_summary="Declares a fixed width of 180 pixels for chunk nodes." notable_decisions="[]"]
57
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
58
- // CIL[DOC-STABILITY stability="stable"]
59
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
60
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
61
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
62
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
46
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide the CIL graph visualization page for exploring file and chunk call graphs.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
47
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
48
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
49
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
63
50
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
64
51
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
65
- const NODE_WIDTH = 180
66
- // CIL[END chunk_id="cilgraphpage_node_width_1784193942"]
67
- // CIL[BEGIN chunk_id="cilgraphpage_node_height_1784193942" type="constant" identity="NODE_HEIGHT" parent="none"]
68
- // CIL[DOC-MACRO purpose="Define default height for chunk graph nodes"]
69
- // CIL[DOC-RESPONSIBILITY responsibility="Provide constant node height used in layout and rendering"]
70
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
71
- // CIL[DOC-CONTRACT inputs="none" outputs="NODE_HEIGHT number" errors="none" side_effects="none"]
72
- // CIL[DOC-MICRO logic_summary="Declares a fixed height of 60 pixels for chunk nodes." notable_decisions="[]"]
73
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
52
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:module_header:module_header"]
53
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:node_width:constant" type="constant" identity="NODE_WIDTH" parent="none"]
54
+ // CIL[DOC-MACRO purpose="Define the default width for graph nodes."]
55
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a constant node width used by layout and rendering."]
56
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
57
+ // CIL[DOC-CONTRACT inputs="none" outputs="NODE_WIDTH numeric constant" errors="none" side_effects="none"]
58
+ // CIL[DOC-MICRO logic_summary="Declares the NODE_WIDTH constant value." notable_decisions="[]"]
59
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
74
60
  // CIL[DOC-STABILITY stability="stable"]
75
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
76
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
77
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
78
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
61
+
62
+ const NODE_WIDTH = 180
63
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the default width for graph nodes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
64
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
65
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
66
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
79
67
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
80
68
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
81
- const NODE_HEIGHT = 60
82
- // CIL[END chunk_id="cilgraphpage_node_height_1784193942"]
83
- // CIL[BEGIN chunk_id="cilgraphpage_file_width_1784193942" type="constant" identity="FILE_WIDTH" parent="none"]
84
- // CIL[DOC-MACRO purpose="Define default width for file graph nodes"]
85
- // CIL[DOC-RESPONSIBILITY responsibility="Provide constant file node width used in layout and rendering"]
86
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
87
- // CIL[DOC-CONTRACT inputs="none" outputs="FILE_WIDTH number" errors="none" side_effects="none"]
88
- // CIL[DOC-MICRO logic_summary="Declares a fixed width of 200 pixels for file nodes." notable_decisions="[]"]
89
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
69
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:node_width:constant"]
70
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:node_height:constant" type="constant" identity="NODE_HEIGHT" parent="none"]
71
+ // CIL[DOC-MACRO purpose="Define the default height for graph nodes."]
72
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a constant node height used by layout and rendering."]
73
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
74
+ // CIL[DOC-CONTRACT inputs="none" outputs="NODE_HEIGHT numeric constant" errors="none" side_effects="none"]
75
+ // CIL[DOC-MICRO logic_summary="Declares the NODE_HEIGHT constant value." notable_decisions="[]"]
76
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
90
77
  // CIL[DOC-STABILITY stability="stable"]
91
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
92
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
93
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
94
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
78
+
79
+ const NODE_HEIGHT = 60
80
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the default height for graph nodes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
81
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
82
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
83
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
95
84
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
96
85
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
97
- const FILE_WIDTH = 200
98
- // CIL[END chunk_id="cilgraphpage_file_width_1784193942"]
99
- // CIL[BEGIN chunk_id="cilgraphpage_file_height_1784193942" type="constant" identity="FILE_HEIGHT" parent="none"]
100
- // CIL[DOC-MACRO purpose="Define default height for file graph nodes"]
101
- // CIL[DOC-RESPONSIBILITY responsibility="Provide constant file node height used in layout and rendering"]
102
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
103
- // CIL[DOC-CONTRACT inputs="none" outputs="FILE_HEIGHT number" errors="none" side_effects="none"]
104
- // CIL[DOC-MICRO logic_summary="Declares a fixed height of 40 pixels for file nodes." notable_decisions="[]"]
105
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
86
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:node_height:constant"]
87
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:file_width:constant" type="constant" identity="FILE_WIDTH" parent="none"]
88
+ // CIL[DOC-MACRO purpose="Define the default width for file nodes in the graph."]
89
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a constant file node width used by layout and rendering."]
90
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
91
+ // CIL[DOC-CONTRACT inputs="none" outputs="FILE_WIDTH numeric constant" errors="none" side_effects="none"]
92
+ // CIL[DOC-MICRO logic_summary="Declares the FILE_WIDTH constant value." notable_decisions="[]"]
93
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
106
94
  // CIL[DOC-STABILITY stability="stable"]
107
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
108
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
109
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
110
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
95
+
96
+ const FILE_WIDTH = 200
97
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the default width for file nodes in the graph.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
98
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
99
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
100
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
111
101
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
112
102
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
103
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:file_width:constant"]
104
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:file_height:constant" type="constant" identity="FILE_HEIGHT" parent="none"]
105
+ // CIL[DOC-MACRO purpose="Define the default height for file nodes in the graph."]
106
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a constant file node height used by layout and rendering."]
107
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
108
+ // CIL[DOC-CONTRACT inputs="none" outputs="FILE_HEIGHT numeric constant" errors="none" side_effects="none"]
109
+ // CIL[DOC-MICRO logic_summary="Declares the FILE_HEIGHT constant value." notable_decisions="[]"]
110
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
111
+ // CIL[DOC-STABILITY stability="stable"]
112
+
113
113
  const FILE_HEIGHT = 40
114
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the default height for file nodes in the graph.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
115
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
116
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
117
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
118
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
119
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
120
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:file_height:constant"]
114
121
 
115
- // CIL[END chunk_id="cilgraphpage_file_height_1784193942"]
116
- // CIL[BEGIN chunk_id="cilgraphpage_viewmode_1784193942" type="type" identity="ViewMode" parent="none"]
117
- // CIL[DOC-MACRO purpose="Enumerate valid graph view modes"]
118
- // CIL[DOC-RESPONSIBILITY responsibility="Type alias restricting view mode values"]
119
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
122
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:viewmode:type" type="type" identity="ViewMode" parent="none"]
123
+ // CIL[DOC-MACRO purpose="Define the allowed graph view modes."]
124
+ // CIL[DOC-RESPONSIBILITY responsibility="Constrain the viewMode state to files, chunks, or mixed display."]
125
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
120
126
  // CIL[DOC-CONTRACT inputs="none" outputs="ViewMode union type" errors="none" side_effects="none"]
121
- // CIL[DOC-MICRO logic_summary="Defines allowed view modes for the graph: files, chunks, or mixed." notable_decisions="[]"]
122
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
127
+ // CIL[DOC-MICRO logic_summary="Declares a union type of three possible view modes." notable_decisions="[]"]
128
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
123
129
  // CIL[DOC-STABILITY stability="stable"]
124
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
125
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
126
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
127
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
130
+
131
+ type ViewMode = 'files' | 'chunks' | 'mixed'
132
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the allowed graph view modes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.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"]
128
136
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
129
137
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
130
- type ViewMode = 'files' | 'chunks' | 'mixed'
138
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:viewmode:type"]
131
139
 
132
- // CIL[END chunk_id="cilgraphpage_viewmode_1784193942"]
133
- // CIL[BEGIN chunk_id="cilgraphpage_layoutgraph_1784193942" type="function" identity="layoutGraph" parent="none"]
134
- // CIL[DOC-MACRO purpose="Compute directed graph layout for React Flow nodes and edges"]
135
- // CIL[DOC-RESPONSIBILITY responsibility="Arrange nodes using Dagre left-to-right layout and return positioned elements"]
136
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
137
- // CIL[DOC-CONTRACT inputs="none" outputs="{nodes: Node[]; edges: Edge[]}" errors="none" side_effects="none"]
138
- // CIL[DOC-MICRO logic_summary="Builds a dagre graph, sets LR options, adds nodes/edges with dynamic widths/heights, runs layout, then centers each node by subtracting half its size." notable_decisions="['Uses file dimensions for file nodes and chunk dimensions otherwise','Centers node positions by subtracting half width/height']"]
139
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
140
+
141
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:layoutgraph:function" type="function" identity="layoutGraph" parent="none"]
142
+ // CIL[DOC-MACRO purpose="Apply a directed graph layout to React Flow nodes and edges."]
143
+ // CIL[DOC-RESPONSIBILITY responsibility="Compute x/y positions for nodes using dagre and return positioned nodes with unchanged edges."]
144
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
145
+ // CIL[DOC-CONTRACT inputs="nodes: Node[], edges: Edge[]" outputs="{ nodes: Node[], edges: Edge[] }" errors="none" side_effects="none"]
146
+ // CIL[DOC-MICRO logic_summary="Builds a dagre graph, sets node sizes, runs the layout, and maps each node to a centered position." notable_decisions="[]"]
147
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
140
148
  // CIL[DOC-STABILITY stability="stable"]
141
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
142
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
143
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
144
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
145
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
146
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
149
+
147
150
  function layoutGraph(nodes: Node[], edges: Edge[]): { nodes: Node[]; edges: Edge[] } {
148
151
  const g = new dagre.graphlib.Graph()
149
152
  g.setDefaultEdgeLabel(() => ({}))
@@ -167,24 +170,27 @@ function layoutGraph(nodes: Node[], edges: Edge[]): { nodes: Node[]; edges: Edge
167
170
 
168
171
  return { nodes: positionedNodes, edges }
169
172
  }
173
+ // CIL[DOC-VECTOR type="context" content="purpose='Apply a directed graph layout to React Flow nodes and edges.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
174
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
175
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
176
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
177
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
178
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
179
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:layoutgraph:function"]
180
+
181
+
170
182
 
171
183
 
172
184
 
173
- // CIL[END chunk_id="cilgraphpage_layoutgraph_1784193942"]
174
- // CIL[BEGIN chunk_id="cilgraphpage_chunk_type_colors_1784193942" type="constant" identity="CHUNK_TYPE_COLORS" parent="none"]
175
- // CIL[DOC-MACRO purpose="Map chunk types to display colors"]
176
- // CIL[DOC-RESPONSIBILITY responsibility="Provide color palette for graph legend and node styling"]
177
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
178
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string,string> color map" errors="none" side_effects="none"]
179
- // CIL[DOC-MICRO logic_summary="Color lookup table mapping chunk type strings to hex colors for nodes and legend." notable_decisions="[]"]
180
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
185
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:chunk_type_colors:constant" type="constant" identity="CHUNK_TYPE_COLORS" parent="none"]
186
+ // CIL[DOC-MACRO purpose="Map chunk types to display colors for the graph legend and nodes."]
187
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a color palette used by nodeColor and the graph legend."]
188
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
189
+ // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, string> of chunk type colors" errors="none" side_effects="none"]
190
+ // CIL[DOC-MICRO logic_summary="Declares a lookup table of chunk type to hex color values." notable_decisions="[]"]
191
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
181
192
  // CIL[DOC-STABILITY stability="stable"]
182
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
183
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
184
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
185
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
186
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
187
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
193
+
188
194
  const CHUNK_TYPE_COLORS: Record<string, string> = {
189
195
  function: '#6366F1',
190
196
  class: '#8B5CF6',
@@ -195,45 +201,51 @@ const CHUNK_TYPE_COLORS: Record<string, string> = {
195
201
  route: '#EF4444',
196
202
  config: '#64748B',
197
203
  }
198
-
199
- // CIL[END chunk_id="cilgraphpage_chunk_type_colors_1784193942"]
200
- // CIL[BEGIN chunk_id="cilgraphpage_nodecolor_1784193942" type="function" identity="nodeColor" parent="none"]
201
- // CIL[DOC-MACRO purpose="Resolve a display color for a graph node"]
202
- // CIL[DOC-RESPONSIBILITY responsibility="Return the appropriate color based on file, dead-code, or chunk type"]
203
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
204
- // CIL[DOC-CONTRACT inputs="none" outputs="hex color string" errors="none" side_effects="none"]
205
- // CIL[DOC-MICRO logic_summary="Returns slate for file nodes, gray for dead code, or CHUNK_TYPE_COLORS lookup with an indigo fallback." notable_decisions="['Falls back to indigo when chunk type has no mapped color']"]
206
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
207
- // CIL[DOC-STABILITY stability="stable"]
208
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
209
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
210
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
211
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
204
+ // CIL[DOC-VECTOR type="context" content="purpose='Map chunk types to display colors for the graph legend and nodes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
205
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
206
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
207
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
212
208
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
213
209
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
210
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:chunk_type_colors:constant"]
211
+
212
+
213
+
214
+
215
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:nodecolor:function" type="function" identity="nodeColor" parent="none"]
216
+ // CIL[DOC-MACRO purpose="Resolve the display color for a graph node based on its data."]
217
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a color string for React Flow nodes and the MiniMap."]
218
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
219
+ // CIL[DOC-CONTRACT inputs="node: Node" outputs="hex color string" errors="none" side_effects="none"]
220
+ // CIL[DOC-MICRO logic_summary="Chooses a dark slate color for files, a muted gray for dead code, or the chunk type color lookup." notable_decisions="[]"]
221
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
222
+ // CIL[DOC-STABILITY stability="stable"]
223
+
214
224
  function nodeColor(node: Node): string {
215
225
  if (node.data?.isFile) return '#1E293B'
216
226
  if (node.data?.is_dead_code) return '#94A3B8'
217
227
  return CHUNK_TYPE_COLORS[node.data?.chunk_type as string] || '#6366F1'
218
228
  }
229
+ // CIL[DOC-VECTOR type="context" content="purpose='Resolve the display color for a graph node based on its data.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
230
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
231
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
232
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
233
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
234
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
235
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:nodecolor:function"]
219
236
 
220
237
 
221
238
 
222
- // CIL[END chunk_id="cilgraphpage_nodecolor_1784193942"]
223
- // CIL[BEGIN chunk_id="cilgraphpage_projectgraph_1784193942" type="interface" identity="ProjectGraph" parent="none"]
224
- // CIL[DOC-MACRO purpose="Describe the shape of the project graph API response"]
225
- // CIL[DOC-RESPONSIBILITY responsibility="Define the TypeScript contract for nodes and edges data"]
226
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
227
- // CIL[DOC-CONTRACT inputs="none" outputs="ProjectGraph interface" errors="none" side_effects="none"]
228
- // CIL[DOC-MICRO logic_summary="Declares nodes containing files and chunks arrays and edges containing imports and calls arrays, using any for metadata extensibility." notable_decisions="['Uses any types for flexible API schema']"]
229
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
239
+
240
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:projectgraph:interface" type="interface" identity="ProjectGraph" parent="none"]
241
+ // CIL[DOC-MACRO purpose="Describe the shape of the CIL project graph payload."]
242
+ // CIL[DOC-RESPONSIBILITY responsibility="Type the file and chunk nodes plus import and call edges returned by the graph API."]
243
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
244
+ // CIL[DOC-CONTRACT inputs="none" outputs="ProjectGraph interface definition" errors="none" side_effects="none"]
245
+ // CIL[DOC-MICRO logic_summary="Defines nested file and chunk node arrays and import/call edge arrays with optional metadata." notable_decisions="[]"]
246
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
230
247
  // CIL[DOC-STABILITY stability="stable"]
231
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
232
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
233
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
234
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
235
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
236
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
248
+
237
249
  interface ProjectGraph {
238
250
  nodes: {
239
251
  files: any[]
@@ -244,22 +256,24 @@ interface ProjectGraph {
244
256
  calls: { source_id: string; target_id: string; metadata?: any }[]
245
257
  }
246
258
  }
247
-
248
- // CIL[END chunk_id="cilgraphpage_projectgraph_1784193942"]
249
- // CIL[BEGIN chunk_id="cilgraphpage_buildflowgraph_1784193942" type="function" identity="buildFlowGraph" parent="none"]
250
- // CIL[DOC-MACRO purpose="Build React Flow nodes and edges from project graph data"]
251
- // CIL[DOC-RESPONSIBILITY responsibility="Transform ProjectGraph into React Flow elements per view mode"]
252
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
253
- // CIL[DOC-CONTRACT inputs="none" outputs="{nodes: Node[]; edges: Edge[]}" errors="none" side_effects="none"]
254
- // CIL[DOC-MICRO logic_summary="Constructs file and chunk nodes with styling, adds import and call edges, and applies layoutGraph to position the flow graph." notable_decisions="['Dashed edges for imports','Separate branching for files/chunks/mixed views','Labels call edges with callee_name']"]
255
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
256
- // CIL[DOC-STABILITY stability="stable"]
257
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
258
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
259
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
260
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
259
+ // CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of the CIL project graph payload.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
260
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
261
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
262
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
261
263
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
262
264
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
265
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:projectgraph:interface"]
266
+
267
+
268
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:buildflowgraph:function" type="function" identity="buildFlowGraph" parent="none"]
269
+ // CIL[DOC-MACRO purpose="Build React Flow nodes and edges from a CIL project graph."]
270
+ // CIL[DOC-RESPONSIBILITY responsibility="Convert project graph files, chunks, imports, and calls into React Flow elements."]
271
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
272
+ // CIL[DOC-CONTRACT inputs="graph: ProjectGraph, viewMode: ViewMode" outputs="{ nodes: Node[], edges: Edge[] }" errors="none" side_effects="none"]
273
+ // CIL[DOC-MICRO logic_summary="Creates file and chunk nodes with styles and adds import/call edges for the selected view mode, then runs layoutGraph." notable_decisions="[]"]
274
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
275
+ // CIL[DOC-STABILITY stability="stable"]
276
+
263
277
  function buildFlowGraph(graph: ProjectGraph, viewMode: ViewMode): { nodes: Node[]; edges: Edge[] } {
264
278
  const nodes: Node[] = []
265
279
  const edges: Edge[] = []
@@ -352,24 +366,26 @@ function buildFlowGraph(graph: ProjectGraph, viewMode: ViewMode): { nodes: Node[
352
366
 
353
367
  return layoutGraph(nodes, edges)
354
368
  }
369
+ // CIL[DOC-VECTOR type="context" content="purpose='Build React Flow nodes and edges from a CIL project graph.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
370
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
371
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
372
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
373
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
374
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
375
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:buildflowgraph:function"]
355
376
 
356
377
 
357
378
 
358
- // CIL[END chunk_id="cilgraphpage_buildflowgraph_1784193942"]
359
- // CIL[BEGIN chunk_id="cilgraphpage_nodedetailpanel_1784193942" type="function" identity="NodeDetailPanel" parent="none"]
360
- // CIL[DOC-MACRO purpose="Render metadata for a selected graph node"]
361
- // CIL[DOC-RESPONSIBILITY responsibility="Display file or chunk details and a link to the chunk contract page"]
362
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
363
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
364
- // CIL[DOC-MICRO logic_summary="Renders a placeholder or file/chunk metadata, including badges for dead code, doc confidence, and stored hash, plus a contract link." notable_decisions="['Casts node.data as any for flexible field access']"]
365
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
379
+
380
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:nodedetailpanel:function" type="function" identity="NodeDetailPanel" parent="none"]
381
+ // CIL[DOC-MACRO purpose="Render the inspector panel for a selected graph node."]
382
+ // CIL[DOC-RESPONSIBILITY responsibility="Show file or chunk metadata and provide a link to the chunk contract view."]
383
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
384
+ // CIL[DOC-CONTRACT inputs="node: Node | null, projectId: string" outputs="JSX detail panel" errors="none" side_effects="none"]
385
+ // CIL[DOC-MICRO logic_summary="Displays placeholder text when no node is selected, or file/chunk details including badges and an Open Contract link." notable_decisions="[]"]
386
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
366
387
  // CIL[DOC-STABILITY stability="stable"]
367
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
368
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
369
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
370
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
371
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
372
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
388
+
373
389
  function NodeDetailPanel({
374
390
  node,
375
391
  projectId,
@@ -418,24 +434,25 @@ function NodeDetailPanel({
418
434
  </div>
419
435
  )
420
436
  }
437
+ // CIL[DOC-VECTOR type="context" content="purpose='Render the inspector panel for a selected graph node.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
438
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
439
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
440
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
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
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:nodedetailpanel:function"]
421
444
 
422
445
 
423
446
 
424
- // CIL[END chunk_id="cilgraphpage_nodedetailpanel_1784193942"]
425
- // CIL[BEGIN chunk_id="cilgraphpage_cilgraphpage_1784193942" type="component" identity="CILGraphPage" parent="none"]
426
- // CIL[DOC-MACRO purpose="Main interactive page for the CIL project graph"]
427
- // CIL[DOC-RESPONSIBILITY responsibility="Fetch graph data, manage React Flow state, and render the graph with controls"]
428
- // CIL[DOC-CONTEXT module="cortex:cil-graph" layer="presentation" related_files="[]"]
429
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="swallows fetch errors silently" side_effects="calls apiFetch and updates React state"]
430
- // CIL[DOC-MICRO logic_summary="Loads project graph and title, builds React Flow elements, handles view mode and selection, and renders the graph, legend, and inspector panel." notable_decisions="['Silently catches API errors','Hides React Flow attribution','Refreshes on button click']"]
431
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
447
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:cilgraphpage:function" type="function" identity="CILGraphPage" parent="none"]
448
+ // CIL[DOC-MACRO purpose="Render the main CIL graph exploration page for a selected project."]
449
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetch and display the project call graph, manage view mode, selection, and loading state."]
450
+ // CIL[DOC-CONTEXT module="admin-cil-graph" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILGraphPage.tsx"]
451
+ // CIL[DOC-CONTRACT inputs="none (uses useParams project id and component state)" outputs="JSX page with React Flow canvas, controls, and inspector" errors="none" side_effects="fetches graph and project data from API, updates React state"]
452
+ // CIL[DOC-MICRO logic_summary="Loads graph data, builds React Flow elements, renders view mode selector and inspector, and handles node selection." notable_decisions="[]"]
453
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
432
454
  // CIL[DOC-STABILITY stability="stable"]
433
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
434
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
435
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
436
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
437
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
438
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
455
+
439
456
  export default function CILGraphPage() {
440
457
  const { id: projectId } = useParams<{ id: string }>()
441
458
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
@@ -612,5 +629,10 @@ export default function CILGraphPage() {
612
629
  </div>
613
630
  )
614
631
  }
615
-
616
- // CIL[END chunk_id="cilgraphpage_cilgraphpage_1784193942"]
632
+ // CIL[DOC-VECTOR type="context" content="purpose='Render the main CIL graph exploration page for a selected project.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/badge.tsx"]
633
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
634
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
635
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
636
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
637
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
638
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILGraphPage.tsx:cilgraphpage:function"]