spine-framework 0.3.145 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,18 +1,13 @@
1
- // CIL[BEGIN chunk_id="cilsearchpage_module_header_1784193942" type="module_header" identity="module_header" parent="none"]
2
- // CIL[DOC-MACRO purpose="Import dependencies and icons for the CIL search page"]
3
- // CIL[DOC-RESPONSIBILITY responsibility="Provides React hooks, apiFetch, app path hook, UI components, and icons used by the page"]
4
- // CIL[DOC-CONTEXT module="cortex:cil-search" 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="none" errors="none" side_effects="none"]
6
- // CIL[DOC-MICRO logic_summary="Sets up React hooks, apiFetch, useAppPath, UI card/button/input/select/label/badge components, and lucide icons" notable_decisions="[]"]
7
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Provides the React page for searching indexed CIL code chunks across projects with hybrid, semantic, or text modes."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Import dependencies, define shared types and helper components, and export the default CILSearchPage component."]
4
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="default export CILSearchPage React component" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Sets up the CIL search UI layout, search controls, result list and filters." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
8
  // CIL[DOC-STABILITY stability="stable"]
9
- // CIL[DOC-AUDIENCE audience="developer"]
10
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .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"]
9
+ // CIL[DOC-AUDIENCE audience="admin UI developers maintaining the CIL search interface"]
10
+
16
11
  import { useState, useRef, useMemo } from 'react'
17
12
  import { apiFetch } from '@core/lib/api'
18
13
  import { Card, CardContent } from '@core/components/ui/card'
@@ -40,21 +35,23 @@ import {
40
35
 
41
36
 
42
37
  import { PageInstructions } from '../../../components/admin/PageInstructions'
43
- // CIL[END chunk_id="cilsearchpage_module_header_1784193942"]
44
- // CIL[BEGIN chunk_id="cilsearchpage_searchresult_1784193942" type="interface" identity="SearchResult" parent="none"]
45
- // CIL[DOC-MACRO purpose="Define the shape of a search result chunk"]
46
- // CIL[DOC-RESPONSIBILITY responsibility="Declares the TypeScript interface for chunk data returned by the CIL search API"]
47
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
48
- // CIL[DOC-CONTRACT inputs="none" outputs="SearchResult type contract" errors="none" side_effects="none"]
49
- // CIL[DOC-MICRO logic_summary="Describes id, chunk_name, file_path, macro, micro, chunk_type, doc_confidence, similarity, and match_type fields" notable_decisions="[]"]
50
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
51
- // CIL[DOC-STABILITY stability="stable"]
52
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
53
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
54
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
55
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
38
+
39
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides the React page for searching indexed CIL code chunks across projects with hybrid, semantic, or text modes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
40
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
41
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
42
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
56
43
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
57
44
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:module_header:module_header"]
46
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SearchResult:interface" type="interface" identity="SearchResult" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
47
+ // CIL[DOC-MACRO purpose="Defines the shape of a CIL search result returned by the code intelligence search API."]
48
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the data contract for search result objects including metadata and similarity scores."]
49
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
50
+ // CIL[DOC-CONTRACT inputs="none" outputs="SearchResult interface type" errors="none" side_effects="none"]
51
+ // CIL[DOC-MICRO logic_summary="Specifies fields: id, chunk_name, file_path, macro, micro, chunk_type, doc_confidence, similarity, match_type." notable_decisions="[]"]
52
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
53
+ // CIL[DOC-STABILITY stability="stable"]
54
+
58
55
  interface SearchResult {
59
56
  id: string
60
57
  chunk_name: string
@@ -66,24 +63,29 @@ interface SearchResult {
66
63
  similarity: number | null
67
64
  match_type: 'semantic' | 'text'
68
65
  }
66
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of a CIL search result returned by the code intelligence search API.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
67
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
68
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
69
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
70
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
71
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
72
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SearchResult:interface"]
73
+
69
74
 
70
75
 
71
76
 
72
- // CIL[END chunk_id="cilsearchpage_searchresult_1784193942"]
73
- // CIL[BEGIN chunk_id="cilsearchpage_chunk_type_colors_1784193942" type="constant" identity="CHUNK_TYPE_COLORS" parent="none"]
74
- // CIL[DOC-MACRO purpose="Map chunk types to Tailwind badge color classes"]
75
- // CIL[DOC-RESPONSIBILITY responsibility="Supplies a color palette used by result cards to style chunk-type badges"]
76
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
77
- // CIL[DOC-CONTRACT inputs="none" outputs="Record<string, string> color classes" errors="none" side_effects="none"]
78
- // CIL[DOC-MICRO logic_summary="Maps each chunk type to background, text, and border utility classes for badge rendering" notable_decisions="[]"]
79
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
77
+
78
+
79
+
80
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:CHUNK_TYPE_COLORS:constant" type="constant" identity="CHUNK_TYPE_COLORS" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
81
+ // CIL[DOC-MACRO purpose="Maps chunk type names to Tailwind CSS color class strings used in result badges."]
82
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide visual styling classes for chunk type badges in search results."]
83
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
84
+ // CIL[DOC-CONTRACT inputs="chunk_type: string" outputs="Tailwind class string" errors="unknown type falls back to config style" side_effects="none"]
85
+ // CIL[DOC-MICRO logic_summary="Record of style classes keyed by chunk type for consistent badge rendering." notable_decisions="[]"]
86
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
80
87
  // CIL[DOC-STABILITY stability="stable"]
81
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
82
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
83
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
84
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
85
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
86
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
88
+
87
89
  const CHUNK_TYPE_COLORS: Record<string, string> = {
88
90
  function: 'bg-indigo-100 text-indigo-700 border-indigo-200',
89
91
  class: 'bg-violet-100 text-violet-700 border-violet-200',
@@ -94,43 +96,58 @@ const CHUNK_TYPE_COLORS: Record<string, string> = {
94
96
  route: 'bg-red-100 text-red-700 border-red-200',
95
97
  config: 'bg-slate-100 text-slate-700 border-slate-200',
96
98
  }
97
-
98
- // CIL[END chunk_id="cilsearchpage_chunk_type_colors_1784193942"]
99
- // CIL[BEGIN chunk_id="cilsearchpage_doc_confidence_label_1784193942" type="constant" identity="DOC_CONFIDENCE_LABEL" parent="none"]
100
- // CIL[DOC-MACRO purpose="Map documentation confidence keys to human labels and badge classes"]
101
- // CIL[DOC-RESPONSIBILITY responsibility="Supplies badge label and color config for documentation confidence states"]
102
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
103
- // CIL[DOC-CONTRACT inputs="none" outputs="Record of label and className objects" errors="none" side_effects="none"]
104
- // CIL[DOC-MICRO logic_summary="Maps human_verified, ai_generated, and unverified_legacy to display label and Tailwind className" notable_decisions="[]"]
105
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
106
- // CIL[DOC-STABILITY stability="stable"]
107
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
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."]
99
+ // CIL[DOC-VECTOR type="context" content="purpose='Maps chunk type names to Tailwind CSS color class strings used in result badges.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
100
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
101
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
102
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
111
103
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
112
104
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
105
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:CHUNK_TYPE_COLORS:constant"]
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:DOC_CONFIDENCE_LABEL:constant" type="constant" identity="DOC_CONFIDENCE_LABEL" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
116
+ // CIL[DOC-MACRO purpose="Maps documentation confidence levels to badge labels and Tailwind CSS classes."]
117
+ // CIL[DOC-RESPONSIBILITY responsibility="Render confidence badges in search result cards."]
118
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
119
+ // CIL[DOC-CONTRACT inputs="doc_confidence: string" outputs="{ label: string; className: string }" errors="unknown key falls back to unverified_legacy style" side_effects="none"]
120
+ // CIL[DOC-MICRO logic_summary="Record of display labels and styling classes for each documentation confidence tier." notable_decisions="[]"]
121
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
122
+ // CIL[DOC-STABILITY stability="stable"]
123
+
113
124
  const DOC_CONFIDENCE_LABEL: Record<string, { label: string; className: string }> = {
114
125
  human_verified: { label: 'Verified', className: 'bg-green-100 text-green-700 border-green-200' },
115
126
  ai_generated: { label: 'AI Docs', className: 'bg-blue-100 text-blue-700 border-blue-200' },
116
127
  unverified_legacy: { label: 'No Docs', className: 'bg-slate-100 text-slate-500 border-slate-200' },
117
128
  }
118
-
119
- // CIL[END chunk_id="cilsearchpage_doc_confidence_label_1784193942"]
120
- // CIL[BEGIN chunk_id="cilsearchpage_similaritybar_1784193942" type="function" identity="SimilarityBar" parent="none"]
121
- // CIL[DOC-MACRO purpose="Render a percentage bar for a similarity score"]
122
- // CIL[DOC-RESPONSIBILITY responsibility="Display numeric similarity as a small indigo progress bar and percentage text"]
123
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
124
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element | null" errors="none" side_effects="none"]
125
- // CIL[DOC-MICRO logic_summary="Renders null for null scores, otherwise a rounded percentage with an indigo progress bar" notable_decisions="[]"]
126
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
127
- // CIL[DOC-STABILITY stability="stable"]
128
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
129
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
130
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
131
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
129
+ // CIL[DOC-VECTOR type="context" content="purpose='Maps documentation confidence levels to badge labels and Tailwind CSS classes.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
130
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
131
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
132
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
132
133
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
133
134
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
135
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:DOC_CONFIDENCE_LABEL:constant"]
136
+
137
+
138
+
139
+
140
+
141
+
142
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SimilarityBar:component" type="component" identity="SimilarityBar" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
143
+ // CIL[DOC-MACRO purpose="Render a small progress bar showing the semantic search similarity score percentage."]
144
+ // CIL[DOC-RESPONSIBILITY responsibility="Display a visual percentage bar for a single result score."]
145
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
146
+ // CIL[DOC-CONTRACT inputs="score: number | null" outputs="JSX progress bar or null" errors="none" side_effects="none"]
147
+ // CIL[DOC-MICRO logic_summary="Converts score to percentage and renders a fixed-width bar with an inline numeric label." notable_decisions="[]"]
148
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
149
+ // CIL[DOC-STABILITY stability="stable"]
150
+
134
151
  function SimilarityBar({ score }: { score: number | null }) {
135
152
  if (score === null) return null
136
153
  const pct = Math.round(score * 100)
@@ -146,27 +163,40 @@ function SimilarityBar({ score }: { score: number | null }) {
146
163
  </div>
147
164
  )
148
165
  }
149
-
150
- // CIL[END chunk_id="cilsearchpage_similaritybar_1784193942"]
151
- // CIL[BEGIN chunk_id="cilsearchpage_resultcard_1784193942" type="function" identity="ResultCard" parent="none"]
152
- // CIL[DOC-MACRO purpose="Render a single search result as a link card"]
153
- // CIL[DOC-RESPONSIBILITY responsibility="Display chunk name, type badge, doc confidence badge, file path, macro snippet, and similarity bar"]
154
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[]"]
155
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
156
- // CIL[DOC-MICRO logic_summary="Uses CHUNK_TYPE_COLORS and DOC_CONFIDENCE_LABEL to style badges, links to chunk detail via appPath, and renders SimilarityBar" notable_decisions="[]"]
157
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
158
- // CIL[DOC-STABILITY stability="stable"]
159
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
160
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
161
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
162
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
166
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a small progress bar showing the semantic search similarity score percentage.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
167
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
168
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
169
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
163
170
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
164
171
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
172
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SimilarityBar:component"]
173
+
174
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:ResultCard:component" type="component" identity="ResultCard" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
175
+ // CIL[DOC-MACRO purpose="Display a single CIL search result as a clickable card with metadata and similarity score."]
176
+ // CIL[DOC-RESPONSIBILITY responsibility="Render chunk name, type, confidence, file path, macro preview, and link to chunk detail."]
177
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
178
+ // CIL[DOC-CONTRACT inputs="result: SearchResult, projectId: string" outputs="JSX clickable card" errors="none" side_effects="navigates on click to chunk detail"]
179
+ // CIL[DOC-MICRO logic_summary="Builds an app path, selects style classes, and returns a Card linking to the chunk detail view." notable_decisions="[]"]
180
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
181
+ // CIL[DOC-STABILITY stability="stable"]
182
+
165
183
  function ResultCard({ result, projectId }: { result: SearchResult; projectId: string }) {
184
+
185
+
166
186
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
187
+
188
+
189
+
190
+
167
191
  const typeClass = CHUNK_TYPE_COLORS[result.chunk_type] || CHUNK_TYPE_COLORS.config
192
+
193
+
194
+
195
+
196
+
168
197
  const docCfg = DOC_CONFIDENCE_LABEL[result.doc_confidence] || DOC_CONFIDENCE_LABEL.unverified_legacy
169
198
 
199
+
170
200
  return (
171
201
  <a
172
202
  href={appPath(`/cil/${projectId}/chunks/${result.id}`)}
@@ -208,73 +238,51 @@ function ResultCard({ result, projectId }: { result: SearchResult; projectId: st
208
238
  </a>
209
239
  )
210
240
  }
241
+ // CIL[DOC-VECTOR type="context" content="purpose='Display a single CIL search result as a clickable card with metadata and similarity score.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
242
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
243
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
244
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
245
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
246
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
247
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:ResultCard:component"]
248
+
249
+
250
+
211
251
 
212
252
 
213
253
 
214
- // CIL[END chunk_id="cilsearchpage_resultcard_1784193942"]
215
- // CIL[BEGIN chunk_id="cilsearchpage_sortby_1784193942" type="type" identity="SortBy" parent="none"]
216
- // CIL[DOC-MACRO purpose="Union type for result sort keys"]
217
- // CIL[DOC-RESPONSIBILITY responsibility="Defines the allowed sort column identifiers for the search results"]
218
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[]"]
219
- // CIL[DOC-CONTRACT inputs="none" outputs="'relevance' | 'name' | 'file' | 'doc_confidence'" errors="none" side_effects="none"]
220
- // CIL[DOC-MICRO logic_summary="Constrains sortBy state to four predefined string literals" notable_decisions="[]"]
221
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
254
+
255
+
256
+
257
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SortBy:type" type="type" identity="SortBy" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
258
+ // CIL[DOC-MACRO purpose="Declare union types for search result sorting, type filtering, and documentation confidence filtering."]
259
+ // CIL[DOC-RESPONSIBILITY responsibility="Constrain filter and sort state values to allowed string literals."]
260
+ // CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
261
+ // CIL[DOC-CONTRACT inputs="none" outputs="SortBy, ChunkTypeFilter, DocConfidenceFilter type aliases" errors="none" side_effects="none"]
262
+ // CIL[DOC-MICRO logic_summary="Defines union type literals for sort keys, chunk type and documentation confidence filters." notable_decisions="[]"]
263
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
222
264
  // CIL[DOC-STABILITY stability="stable"]
223
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
224
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
225
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
226
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
227
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
228
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
265
+
229
266
  type SortBy = 'relevance' | 'name' | 'file' | 'doc_confidence'
230
- // CIL[END chunk_id="cilsearchpage_sortby_1784193942"]
231
- // CIL[BEGIN chunk_id="cilsearchpage_chunktypefilter_1784193942" type="type" identity="ChunkTypeFilter" parent="none"]
232
- // CIL[DOC-MACRO purpose="Union type for chunk type filter values"]
233
- // CIL[DOC-RESPONSIBILITY responsibility="Defines the allowed chunk type filter options including 'all'"]
234
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[]"]
235
- // CIL[DOC-CONTRACT inputs="none" outputs="'all' | chunk type literals" errors="none" side_effects="none"]
236
- // CIL[DOC-MICRO logic_summary="Constrains chunkTypeFilter state to 'all' or one of the supported chunk type strings" notable_decisions="[]"]
237
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
238
- // CIL[DOC-STABILITY stability="stable"]
239
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
240
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
241
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
242
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
243
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
244
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
245
267
  type ChunkTypeFilter = 'all' | 'function' | 'class' | 'interface' | 'type' | 'component' | 'hook' | 'route' | 'config'
246
- // CIL[END chunk_id="cilsearchpage_chunktypefilter_1784193942"]
247
- // CIL[BEGIN chunk_id="cilsearchpage_docconfidencefilter_1784193942" type="type" identity="DocConfidenceFilter" parent="none"]
248
- // CIL[DOC-MACRO purpose="Union type for documentation confidence filter values"]
249
- // CIL[DOC-RESPONSIBILITY responsibility="Defines the allowed doc confidence filter options"]
250
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[]"]
251
- // CIL[DOC-CONTRACT inputs="none" outputs="'all' | 'human_verified' | 'ai_generated' | 'unverified_legacy'" errors="none" side_effects="none"]
252
- // CIL[DOC-MICRO logic_summary="Constrains docConfidenceFilter state to 'all' or one of the confidence level strings" notable_decisions="[]"]
253
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
254
- // CIL[DOC-STABILITY stability="stable"]
255
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
256
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
257
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
258
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
259
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
260
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
261
268
  type DocConfidenceFilter = 'all' | 'human_verified' | 'ai_generated' | 'unverified_legacy'
262
-
263
- // CIL[END chunk_id="cilsearchpage_docconfidencefilter_1784193942"]
264
- // CIL[BEGIN chunk_id="cilsearchpage_cilsearchpage_1784193942" type="component" identity="CILSearchPage" parent="none"]
265
- // CIL[DOC-MACRO purpose="Main page component for searching CIL chunks"]
266
- // CIL[DOC-RESPONSIBILITY responsibility="Provide a UI for query input, search mode/limit/project filters, result filtering/sorting, and rendering results"]
267
- // CIL[DOC-CONTEXT module="cortex:cil-search" layer="presentation" related_files="[]"]
268
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="Displays error message string" side_effects="Calls apiFetch on search, sets React state"]
269
- // CIL[DOC-MICRO logic_summary="Manages query, projectId, mode, limit, chunkTypeFilter, docConfidenceFilter, and sortBy state; calls /api/cil-graph search endpoint; filters and sorts displayResults; renders controls, error, empty state, and ResultCard list" notable_decisions="[]"]
270
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
271
- // CIL[DOC-STABILITY stability="stable"]
272
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
273
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
274
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
275
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
269
+ // CIL[DOC-VECTOR type="context" content="purpose='Declare union types for search result sorting, type filtering, and documentation confidence filtering.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
270
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
271
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
272
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
276
273
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
277
274
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
275
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:SortBy:type"]
276
+
277
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:CILSearchPage:component" type="component" identity="CILSearchPage" parent="~/.framework/src/pages/admin/cil/CILSearchPage.tsx"]
278
+ // CIL[DOC-MACRO purpose="Render the full CIL chunk search page with query controls, filters, and result list."]
279
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage search state, fetch results, apply client-side filters and sorting, and render the UI."]
280
+ // CIL[DOC-CONTEXT module="admin/cil" 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/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILSearchPage.tsx"]
281
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX search page" errors="Sets error state on API failure" side_effects="Calls /api/cil-graph search endpoint"]
282
+ // CIL[DOC-MICRO logic_summary="Maintains query, project, mode, filters and sort state; performs apiFetch to /api/cil-graph; filters and sorts results; renders suggestions and result cards." notable_decisions="[]"]
283
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
284
+ // CIL[DOC-STABILITY stability="stable"]
285
+
278
286
  export default function CILSearchPage() {
279
287
  const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
280
288
  const [query, setQuery] = useState('')
@@ -567,5 +575,10 @@ export default function CILSearchPage() {
567
575
  </div>
568
576
  )
569
577
  }
570
-
571
- // CIL[END chunk_id="cilsearchpage_cilsearchpage_1784193942"]
578
+ // CIL[DOC-VECTOR type="context" content="purpose='Render the full CIL chunk search page with query controls, filters, and result list.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
579
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
580
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
581
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
582
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
583
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
584
+ // CIL[END stable_id="~/.framework/src/pages/admin/cil/CILSearchPage.tsx:CILSearchPage:component"]