spine-framework 0.3.124 → 0.3.126

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 (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,20 +1,20 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/status
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine-framework status` — shows installed apps, migration state, and
9
- * framework version.
10
- *
11
- * **Usage:**
12
- * ```bash
13
- * npx spine-framework status
14
- * npx spine-framework status --json
15
- * ```
16
- */
17
1
 
2
+
3
+ // CIL[BEGIN chunk_id="status_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import dependencies and set up paths"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Load required modules and configure directory paths"]
6
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="loaded_modules" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports Commander, file system, path utilities, and Supabase client" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
18
  import type { Command } from 'commander'
19
19
  import { existsSync, readFileSync, readdirSync } from 'fs'
20
20
  import { resolve, dirname, join, basename } from 'path'
@@ -25,7 +25,21 @@ const __filename = fileURLToPath(import.meta.url)
25
25
  const __dirname = dirname(__filename)
26
26
  const PACKAGE_ROOT = resolve(__dirname, '../../../')
27
27
  const PROJECT_ROOT = process.cwd()
28
-
28
+ // CIL[END chunk_id="status_moduleheader_1784068794"]
29
+ // CIL[BEGIN chunk_id="status_registerstatuscommands_1784068794" type="function" identity="registerStatusCommands" parent="none"]
30
+ // CIL[DOC-MACRO purpose="Register status command with CLI program"]
31
+ // CIL[DOC-RESPONSIBILITY responsibility="Display framework and project status information"]
32
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
33
+ // CIL[DOC-CONTRACT inputs="none" outputs="status_display" errors="file_read_errors" side_effects="console_output"]
34
+ // CIL[DOC-MICRO logic_summary="Shows framework version, installed apps, and migration status" notable_decisions="[]"]
35
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
36
+ // CIL[DOC-STABILITY stability="stable"]
37
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, \."]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
39
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
40
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
41
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
29
43
  export function registerStatusCommands(program: Command) {
30
44
  program
31
45
  .command('status')
@@ -37,14 +51,12 @@ export function registerStatusCommands(program: Command) {
37
51
  const supabaseUrl = process.env.SUPABASE_URL
38
52
  const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY
39
53
 
40
- // Framework version
41
54
  let frameworkVersion = 'unknown'
42
55
  try {
43
56
  const pkg = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf8'))
44
57
  frameworkVersion = pkg.version
45
58
  } catch {}
46
59
 
47
- // Installed apps (from custom/apps/)
48
60
  const appsDir = join(PROJECT_ROOT, 'custom/apps')
49
61
  const installedApps: { slug: string; version?: string; hasManifest: boolean }[] = []
50
62
 
@@ -65,7 +77,6 @@ export function registerStatusCommands(program: Command) {
65
77
  }
66
78
  }
67
79
 
68
- // Migration state
69
80
  let migrations: { applied: number; pending: number; files: string[] } = {
70
81
  applied: 0,
71
82
  pending: 0,
@@ -94,7 +105,6 @@ export function registerStatusCommands(program: Command) {
94
105
  migrations.applied = migrations.files.filter(f => appliedSet.has(f)).length
95
106
  migrations.pending = migrations.files.length - migrations.applied
96
107
  } catch {
97
- // DB not accessible — just show file count
98
108
  migrations.pending = migrations.files.length
99
109
  }
100
110
  }
@@ -104,7 +114,6 @@ export function registerStatusCommands(program: Command) {
104
114
  return
105
115
  }
106
116
 
107
- // Human-readable output
108
117
  console.log('\n── Spine Framework Status ─────────────────────────────')
109
118
  console.log(` Version: spine-framework@${frameworkVersion}`)
110
119
  console.log(` Project: ${PROJECT_ROOT}`)
@@ -136,7 +145,21 @@ export function registerStatusCommands(program: Command) {
136
145
  console.log()
137
146
  })
138
147
  }
139
-
148
+ // CIL[END chunk_id="status_registerstatuscommands_1784068794"]
149
+ // CIL[BEGIN chunk_id="status_loadenv_1784068794" type="function" identity="loadEnv" parent="none"]
150
+ // CIL[DOC-MACRO purpose="Load environment variables from .env file"]
151
+ // CIL[DOC-RESPONSIBILITY responsibility="Parse and set environment variables"]
152
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\"\\\"]"]
153
+ // CIL[DOC-CONTRACT inputs="none" outputs="process_env" errors="file_read_errors" side_effects="process_env_modification"]
154
+ // CIL[DOC-MICRO logic_summary="Reads .env file and sets non-existent environment variables" notable_decisions="[]"]
155
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
156
+ // CIL[DOC-STABILITY stability="stable"]
157
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: \."]
158
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
159
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
160
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
161
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
162
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
140
163
  function loadEnv() {
141
164
  const envPath = join(PROJECT_ROOT, '.env')
142
165
  if (!existsSync(envPath)) return
@@ -151,3 +174,4 @@ function loadEnv() {
151
174
  if (key && !(key in process.env)) process.env[key] = val
152
175
  }
153
176
  }
177
+ // CIL[END chunk_id="status_loadenv_1784068794"]
@@ -1,45 +1,43 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/system
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine system` command — CLI interface to system discovery endpoints.
9
- * Queries the running Spine instance for manifest, health, and OpenAPI spec.
10
- *
11
- * **Commands:**
12
- * | Subcommand | Description |
13
- * |-------------------------|-------------------------------------------------------|
14
- * | `system manifest` | Fetch and display system manifest |
15
- * | `system health` | Fetch and display health check results |
16
- * | `system openapi` | Fetch OpenAPI spec (outputs JSON) |
17
- * | `system --json` | Output as JSON for all subcommands |
18
- *
19
- * **Usage:**
20
- * ```bash
21
- * spine system manifest
22
- * spine system health --json
23
- * spine system openapi > openapi.json
24
- * ```
25
- *
26
- * @seeAlso functions/system.ts (HTTP endpoints this CLI consumes)
27
- */
28
1
 
2
+
3
+ // CIL[BEGIN chunk_id="system_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import CLI dependencies and context utilities"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Load required modules for system commands"]
6
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="loaded_modules" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports Commander type and context utilities" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
29
18
  import type { Command } from 'commander'
30
19
  import { buildCliContext, printResult, handleError } from '../context.ts'
31
-
32
- // ─── API CLIENT ────────────────────────────────────────────────────────────
33
-
20
+ // CIL[END chunk_id="system_moduleheader_1784068794"]
21
+ // CIL[BEGIN chunk_id="system_fetchsystemendpoint_1784068794" type="function" identity="fetchSystemEndpoint" parent="none"]
22
+ // CIL[DOC-MACRO purpose="Fetch system endpoint from local dev server"]
23
+ // CIL[DOC-RESPONSIBILITY responsibility="Make HTTP requests to system functions"]
24
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
25
+ // CIL[DOC-CONTRACT inputs="none" outputs="json_response" errors="http_errors" side_effects="network_requests"]
26
+ // CIL[DOC-MICRO logic_summary="Makes GET requests to local dev server with proper error handling" notable_decisions="[]"]
27
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
28
+ // CIL[DOC-STABILITY stability="stable"]
29
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
30
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
31
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
32
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
33
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
34
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
34
35
  async function fetchSystemEndpoint(ctx: any, action: string): Promise<any> {
35
36
  const supabaseUrl = process.env.SUPABASE_URL
36
37
  if (!supabaseUrl) {
37
38
  throw new Error('SUPABASE_URL not configured')
38
39
  }
39
40
 
40
- // Construct the Netlify function URL
41
- // When running locally, this is http://localhost:8888/.netlify/functions/system
42
- // We'll try localhost:8888 first, then fall back to production URL if configured
43
41
  const localUrl = 'http://localhost:8888/.netlify/functions/system'
44
42
  const url = `${localUrl}?action=${action}`
45
43
 
@@ -59,7 +57,6 @@ async function fetchSystemEndpoint(ctx: any, action: string): Promise<any> {
59
57
 
60
58
  return await response.json()
61
59
  } catch (err: any) {
62
- // If local fails, try direct Supabase function invoke (for production)
63
60
  if (err.message.includes('fetch failed') || err.message.includes('ECONNREFUSED')) {
64
61
  throw new Error(
65
62
  'Cannot connect to local dev server. ' +
@@ -69,9 +66,21 @@ async function fetchSystemEndpoint(ctx: any, action: string): Promise<any> {
69
66
  throw err
70
67
  }
71
68
  }
72
-
73
- // ─── COMMAND REGISTRATION ────────────────────────────────────────────────
74
-
69
+ // CIL[END chunk_id="system_fetchsystemendpoint_1784068794"]
70
+ // CIL[BEGIN chunk_id="system_registersystemcommands_1784068794" type="function" identity="registerSystemCommands" parent="none"]
71
+ // CIL[DOC-MACRO purpose="Register system commands with CLI program"]
72
+ // CIL[DOC-RESPONSIBILITY responsibility="Configure system discovery and health commands"]
73
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
74
+ // CIL[DOC-CONTRACT inputs="none" outputs="system_commands" errors="command_errors" side_effects="console_output"]
75
+ // CIL[DOC-MICRO logic_summary="Registers manifest, health, and openapi subcommands" notable_decisions="[]"]
76
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
77
+ // CIL[DOC-STABILITY stability="stable"]
78
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
79
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
80
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
81
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
82
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
83
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
75
84
  export function registerSystemCommands(program: Command) {
76
85
  const system = program
77
86
  .command('system')
@@ -182,3 +191,4 @@ export function registerSystemCommands(program: Command) {
182
191
  }
183
192
  })
184
193
  }
194
+ // CIL[END chunk_id="system_registersystemcommands_1784068794"]
@@ -1,48 +1,24 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/test
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine test` command — unified test runner for all 4 test surfaces.
9
- * Runs Vitest tests and persists results to Supabase via the custom reporter.
10
- *
11
- * **Commands:**
12
- * | Subcommand | Description |
13
- * |-------------------------|-------------------------------------------------------|
14
- * | `test` | Run all test suites |
15
- * | `test unit` | Run unit tests only |
16
- * | `test integration` | Run integration tests only |
17
- * | `test api` | Run API tests only |
18
- * | `test ui` | Run UI/Playwright tests only |
19
- * | `test --json` | Output structured JSON summary |
20
- * | `test --watch` | Run in watch mode (for unit/integration) |
21
- *
22
- * **Test surfaces:**
23
- * - **unit**: Fast tests, no DB (v2-core/tests/unit/)
24
- * - **integration**: DB tests with fixtures (v2-core/tests/integration/)
25
- * - **api**: HTTP fetch tests against localhost:8888 (v2-core/tests/api/)
26
- * - **ui**: Playwright browser tests (v2-core/tests/ui/)
27
- *
28
- * **Results:**
29
- * All test runs are persisted to `public.test_runs` and `public.test_results`
30
- * via the custom Vitest reporter (v2-core/tests/reporter.ts).
31
- *
32
- * **Usage:**
33
- * ```bash
34
- * spine test
35
- * spine test unit --watch
36
- * spine test integration --json
37
- * spine test api
38
- * spine test ui
39
- * ```
40
- *
41
- * @seeAlso tests/reporter.ts (custom Vitest reporter)
42
- * @seeAlso functions/tests.ts (API endpoint for querying results)
43
- * @seeAlso pages/admin/TestingDashboard.tsx (UI for viewing results)
44
- */
45
1
 
2
+
3
+
4
+
5
+
6
+
7
+ // CIL[BEGIN chunk_id="test_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
8
+ // CIL[DOC-MACRO purpose="Import dependencies and set up test configuration"]
9
+ // CIL[DOC-RESPONSIBILITY responsibility="Load required modules and define test types"]
10
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
11
+ // CIL[DOC-CONTRACT inputs="none" outputs="loaded_modules" errors="none" side_effects="none"]
12
+ // CIL[DOC-MICRO logic_summary="Imports Commander, child process, path utilities and defines TestSuite type" notable_decisions="[]"]
13
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
14
+ // CIL[DOC-STABILITY stability="stable"]
15
+ // CIL[DOC-AUDIENCE audience="developer"]
16
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
17
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
18
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
19
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
20
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
21
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
46
22
  import type { Command } from 'commander'
47
23
  import { spawn } from 'child_process'
48
24
  import { resolve, dirname } from 'path'
@@ -52,21 +28,43 @@ const __filename = fileURLToPath(import.meta.url)
52
28
  const __dirname = dirname(__filename)
53
29
  const PROJECT_ROOT = resolve(__dirname, '../../../')
54
30
 
55
- // ─── TYPES ─────────────────────────────────────────────────────────────────
56
-
57
31
  type TestSuite = 'unit' | 'integration' | 'api' | 'ui' | 'all'
58
-
59
- // ─── SUITE CONFIGURATION ───────────────────────────────────────────────────
60
-
32
+ // CIL[END chunk_id="test_moduleheader_1784068794"]
33
+ // CIL[BEGIN chunk_id="test_suites_1784068794" type="variable" identity="SUITES" parent="none"]
34
+ // CIL[DOC-MACRO purpose="Define test suite configurations"]
35
+ // CIL[DOC-RESPONSIBILITY responsibility="Configure test patterns and runners"]
36
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
37
+ // CIL[DOC-CONTRACT inputs="none" outputs="suite_config" errors="none" side_effects="none"]
38
+ // CIL[DOC-MICRO logic_summary="Maps test suite names to file patterns and test runners" notable_decisions="[]"]
39
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
40
+ // CIL[DOC-STABILITY stability="stable"]
41
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
42
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
43
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
44
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
45
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
46
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
61
47
  const SUITES: Record<string, { pattern: string; runner: 'vitest' | 'playwright' | 'node' }> = {
62
48
  unit: { pattern: 'v2-core/tests/unit', runner: 'vitest' },
63
49
  integration: { pattern: 'v2-core/tests/integration', runner: 'vitest' },
64
50
  api: { pattern: 'v2-core/tests/api', runner: 'vitest' },
65
51
  ui: { pattern: 'v2-core/tests/ui', runner: 'playwright' }
66
52
  }
67
-
68
- // ─── COMMAND REGISTRATION ──────────────────────────────────────────────────
69
-
53
+ // CIL[END chunk_id="test_suites_1784068794"]
54
+ // CIL[BEGIN chunk_id="test_registertestcommands_1784068794" type="function" identity="registerTestCommands" parent="none"]
55
+ // CIL[DOC-MACRO purpose="Register test commands with CLI program"]
56
+ // CIL[DOC-RESPONSIBILITY responsibility="Configure and execute test suite commands"]
57
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
58
+ // CIL[DOC-CONTRACT inputs="none" outputs="test_execution" errors="test_errors" side_effects="process_exit"]
59
+ // CIL[DOC-MICRO logic_summary="Registers test command with options for suite, watch, reporter, and JSON output" notable_decisions="[]"]
60
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
61
+ // CIL[DOC-STABILITY stability="stable"]
62
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
63
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
64
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
65
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
66
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
67
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
70
68
  export function registerTestCommands(program: Command) {
71
69
  const testCmd = program
72
70
  .command('test [suite]')
@@ -77,14 +75,12 @@ export function registerTestCommands(program: Command) {
77
75
  .action(async (suiteArg: string | undefined, opts) => {
78
76
  const suite: TestSuite = (suiteArg || 'all') as TestSuite
79
77
 
80
- // Validate suite
81
78
  if (suite !== 'all' && !SUITES[suite]) {
82
79
  console.error(`\n❌ Unknown test suite: ${suite}`)
83
80
  console.log('Valid suites: unit, integration, api, ui, all')
84
81
  process.exit(1)
85
82
  }
86
83
 
87
- // Determine which suites to run
88
84
  const suitesToRun = suite === 'all'
89
85
  ? ['unit', 'integration', 'api', 'ui']
90
86
  : [suite]
@@ -123,7 +119,6 @@ export function registerTestCommands(program: Command) {
123
119
  }
124
120
  }
125
121
 
126
- // Summary
127
122
  console.log('\n' + '='.repeat(50))
128
123
  console.log('Test Run Summary')
129
124
  console.log('='.repeat(50))
@@ -140,7 +135,6 @@ export function registerTestCommands(program: Command) {
140
135
  console.log()
141
136
  console.log(`Total: ${totalPassed} passed, ${totalFailed} failed`)
142
137
 
143
- // JSON output
144
138
  if (opts.json) {
145
139
  const jsonOutput = {
146
140
  suites: results.map(r => ({
@@ -157,13 +151,24 @@ export function registerTestCommands(program: Command) {
157
151
  console.log('\n' + JSON.stringify(jsonOutput, null, 2))
158
152
  }
159
153
 
160
- // Exit code
161
154
  process.exit(totalFailed > 0 ? 1 : 0)
162
155
  })
163
156
  }
164
-
165
- // ─── RUNNER IMPLEMENTATIONS ────────────────────────────────────────────────
166
-
157
+ // CIL[END chunk_id="test_registertestcommands_1784068794"]
158
+ // CIL[BEGIN chunk_id="test_runvitest_1784068794" type="function" identity="runVitest" parent="none"]
159
+ // CIL[DOC-MACRO purpose="Execute Vitest test runner"]
160
+ // CIL[DOC-RESPONSIBILITY responsibility="Run unit/integration/API tests with Vitest"]
161
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"\\\"]"]
162
+ // CIL[DOC-CONTRACT inputs="none" outputs="exit_code" errors="vitest_errors" side_effects="process_spawn"]
163
+ // CIL[DOC-MICRO logic_summary="Configures and runs Vitest with pattern, config, watch mode, and reporter options" notable_decisions="[]"]
164
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
165
+ // CIL[DOC-STABILITY stability="stable"]
166
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, \."]
167
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
168
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
169
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
170
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
171
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
167
172
  async function runVitest(suite: string, opts: any): Promise<number> {
168
173
  const config = SUITES[suite]
169
174
  const args = [
@@ -173,10 +178,9 @@ async function runVitest(suite: string, opts: any): Promise<number> {
173
178
  ]
174
179
 
175
180
  if (opts.watch) {
176
- args[0] = 'watch' // Replace 'run' with 'watch'
181
+ args[0] = 'watch'
177
182
  }
178
183
 
179
- // Custom reporters - include both default and our custom reporter
180
184
  if (opts.reporter === 'default') {
181
185
  args.push('--reporter=default')
182
186
  args.push('--reporter=' + resolve(PROJECT_ROOT, 'v2-core/tests/reporter.ts'))
@@ -186,10 +190,22 @@ async function runVitest(suite: string, opts: any): Promise<number> {
186
190
 
187
191
  return runCommand('npx', ['vitest', ...args], PROJECT_ROOT)
188
192
  }
189
-
193
+ // CIL[END chunk_id="test_runvitest_1784068794"]
194
+ // CIL[BEGIN chunk_id="test_runplaywright_1784068794" type="function" identity="runPlaywright" parent="none"]
195
+ // CIL[DOC-MACRO purpose="Execute Playwright test runner"]
196
+ // CIL[DOC-RESPONSIBILITY responsibility="Run UI tests with Playwright"]
197
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"\\\"]"]
198
+ // CIL[DOC-CONTRACT inputs="none" outputs="exit_code" errors="playwright_errors" side_effects="process_spawn"]
199
+ // CIL[DOC-MICRO logic_summary="Configures and runs Playwright with pattern and JSON reporter option" notable_decisions="[]"]
200
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
201
+ // CIL[DOC-STABILITY stability="stable"]
202
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, \."]
203
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
204
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
205
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
206
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
207
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
190
208
  async function runPlaywright(suite: string, opts: any): Promise<number> {
191
- // Playwright tests run against a running dev server
192
- // We need to ensure the server is running or start it
193
209
  console.log(' (Playwright tests require dev server on localhost:8888)')
194
210
 
195
211
  const args = ['playwright', 'test', SUITES[suite].pattern]
@@ -200,13 +216,40 @@ async function runPlaywright(suite: string, opts: any): Promise<number> {
200
216
 
201
217
  return runCommand('npx', args, PROJECT_ROOT)
202
218
  }
203
-
219
+ // CIL[END chunk_id="test_runplaywright_1784068794"]
220
+ // CIL[BEGIN chunk_id="test_runnode_1784068794" type="function" identity="runNode" parent="none"]
221
+ // CIL[DOC-MACRO purpose="Execute Node.js test runner"]
222
+ // CIL[DOC-RESPONSIBILITY responsibility="Run tests directly with Node.js"]
223
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[]"]
224
+ // CIL[DOC-CONTRACT inputs="none" outputs="exit_code" errors="node_errors" side_effects="process_spawn"]
225
+ // CIL[DOC-MICRO logic_summary="Runs test files directly with Node.js using suite pattern" notable_decisions="[]"]
226
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
227
+ // CIL[DOC-STABILITY stability="stable"]
228
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: none."]
229
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
230
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
231
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
232
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
233
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
204
234
  async function runNode(suite: string, opts: any): Promise<number> {
205
- // For custom test scripts that aren't Vitest or Playwright
206
235
  const args = [SUITES[suite].pattern]
207
236
  return runCommand('node', args, PROJECT_ROOT)
208
237
  }
209
-
238
+ // CIL[END chunk_id="test_runnode_1784068794"]
239
+ // CIL[BEGIN chunk_id="test_runcommand_1784068794" type="function" identity="runCommand" parent="none"]
240
+ // CIL[DOC-MACRO purpose="Execute shell command with promise wrapper"]
241
+ // CIL[DOC-RESPONSIBILITY responsibility="Spawn child process and handle exit/error"]
242
+ // CIL[DOC-CONTEXT module="cli" layer="commands" related_files="[]"]
243
+ // CIL[DOC-CONTRACT inputs="none" outputs="exit_code" errors="spawn_errors" side_effects="process_spawn"]
244
+ // CIL[DOC-MICRO logic_summary="Wraps child_process.spawn in Promise with proper error handling" notable_decisions="[]"]
245
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
246
+ // CIL[DOC-STABILITY stability="stable"]
247
+ // CIL[DOC-VECTOR type="context" content="Layer: commands. Direct callers: 0. Direct calls: 0. Related files: none."]
248
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
249
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
250
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
251
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
252
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
210
253
  function runCommand(command: string, args: string[], cwd: string): Promise<number> {
211
254
  return new Promise((resolve, reject) => {
212
255
  const proc = spawn(command, args, {
@@ -225,3 +268,4 @@ function runCommand(command: string, args: string[], cwd: string): Promise<numbe
225
268
  })
226
269
  })
227
270
  }
271
+ // CIL[END chunk_id="test_runcommand_1784068794"]