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,44 +1,38 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/doctor
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine doctor` command — comprehensive system validation for agentic IDE setup.
9
- * Checks environment, database, migrations, integrity, and custom code.
10
- *
11
- * **Commands:**
12
- * | Subcommand | Description |
13
- * |-------------------|-------------------------------------------------------|
14
- * | `doctor` | Run all checks and report status |
15
- * | `doctor --json` | Output structured JSON for agent consumption |
16
- * | `doctor --fix` | Attempt automatic remediation where possible |
17
- *
18
- * **Checks performed:**
19
- * 1. Environment variables (SUPABASE_URL, SERVICE_ROLE_KEY)
20
- * 2. Database connectivity and latency
21
- * 3. Migration status (local vs applied)
22
- * 4. Core integrity (manifest hash verification)
23
- * 5. Custom code TypeScript compilation
24
- * 6. Test suite status (last run results)
25
- *
26
- * **Exit codes:**
27
- * - 0: All checks passed (healthy)
28
- * - 1: One or more checks failed
29
- * - 2: Check passed but warnings present (degraded)
30
- *
31
- * **Usage:**
32
- * ```bash
33
- * spine doctor
34
- * spine doctor --json
35
- * spine doctor --fix
36
- * ```
37
- *
38
- * @seeAlso cli/context.ts (buildCliContext)
39
- * @seeAlso functions/system.ts (health endpoint)
40
- */
41
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ // CIL[BEGIN chunk_id="doctor_module_header_1784071456" type="module_header" identity="module_header" parent="none"]
22
+ // CIL[DOC-MACRO purpose="Import dependencies for doctor CLI commands"]
23
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide imports and utilities for health checks"]
24
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
25
+ // CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
26
+ // CIL[DOC-MICRO logic_summary="Imports Command type, context, database, and file system modules" notable_decisions="[]"]
27
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
28
+ // CIL[DOC-STABILITY stability="stable"]
29
+ // CIL[DOC-AUDIENCE audience="developer"]
30
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
31
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
32
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
33
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
34
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
35
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
42
36
  import type { Command } from 'commander'
43
37
  import { buildCliContext, handleError } from '../context.ts'
44
38
  import { adminDb } from '../../functions/_shared/index.ts'
@@ -48,9 +42,21 @@ import { fileURLToPath } from 'url'
48
42
 
49
43
  const __filename = fileURLToPath(import.meta.url)
50
44
  const __dirname = dirname(__filename)
51
-
52
- // ─── TYPES ─────────────────────────────────────────────────────────────────
53
-
45
+ // CIL[END chunk_id="doctor_module_header_1784071456"]
46
+ // CIL[BEGIN chunk_id="doctor_checkresult_1784071456" type="interface" identity="CheckResult" parent="none"]
47
+ // CIL[DOC-MACRO purpose="Define structure for health check results"]
48
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide standardized check result format"]
49
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
50
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
51
+ // CIL[DOC-MICRO logic_summary="Defines check result with status, message, and optional details" notable_decisions="[]"]
52
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
53
+ // CIL[DOC-STABILITY stability="stable"]
54
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. 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, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
55
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
56
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
57
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
58
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
59
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
54
60
  interface CheckResult {
55
61
  name: string
56
62
  status: 'pass' | 'fail' | 'warn'
@@ -58,7 +64,21 @@ interface CheckResult {
58
64
  details?: Record<string, any>
59
65
  fixable?: boolean
60
66
  }
61
-
67
+ // CIL[END chunk_id="doctor_checkresult_1784071456"]
68
+ // CIL[BEGIN chunk_id="doctor_doctorreport_1784071456" type="interface" identity="DoctorReport" parent="none"]
69
+ // CIL[DOC-MACRO purpose="Define structure for comprehensive doctor report"]
70
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide complete health check summary format"]
71
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
72
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
73
+ // CIL[DOC-MICRO logic_summary="Defines report with overall status and check summaries" notable_decisions="[]"]
74
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
75
+ // CIL[DOC-STABILITY stability="stable"]
76
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. 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, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
77
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
78
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
79
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
80
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
81
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
62
82
  interface DoctorReport {
63
83
  overall: 'healthy' | 'degraded' | 'unhealthy'
64
84
  checks: CheckResult[]
@@ -69,9 +89,21 @@ interface DoctorReport {
69
89
  fixable: number
70
90
  }
71
91
  }
72
-
73
- // ─── CHECK IMPLEMENTATIONS ─────────────────────────────────────────────────
74
-
92
+ // CIL[END chunk_id="doctor_doctorreport_1784071456"]
93
+ // CIL[BEGIN chunk_id="doctor_checkenvironment_1784071456" type="function" identity="checkEnvironment" parent="none"]
94
+ // CIL[DOC-MACRO purpose="Check required environment variables"]
95
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate Supabase environment configuration"]
96
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
97
+ // CIL[DOC-CONTRACT inputs="none" outputs="CheckResult" errors="none" side_effects="reads environment variables"]
98
+ // CIL[DOC-MICRO logic_summary="Validates required env vars and checks for .xenv file" notable_decisions="[]"]
99
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
100
+ // CIL[DOC-STABILITY stability="stable"]
101
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
102
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
103
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
104
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
105
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
106
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
75
107
  async function checkEnvironment(): Promise<CheckResult> {
76
108
  const required = ['SUPABASE_URL', 'SUPABASE_SERVICE_ROLE_KEY']
77
109
  const missing = required.filter(v => !process.env[v])
@@ -86,7 +118,7 @@ async function checkEnvironment(): Promise<CheckResult> {
86
118
  }
87
119
  }
88
120
 
89
- // Check if .xenv exists
121
+
90
122
  const xenvPath = resolve(__dirname, '../../.xenv')
91
123
  const hasXenv = existsSync(xenvPath)
92
124
 
@@ -97,7 +129,21 @@ async function checkEnvironment(): Promise<CheckResult> {
97
129
  details: { has_xenv: hasXenv, vars_present: required.length }
98
130
  }
99
131
  }
100
-
132
+ // CIL[END chunk_id="doctor_checkenvironment_1784071456"]
133
+ // CIL[BEGIN chunk_id="doctor_checkdatabase_1784071456" type="function" identity="checkDatabase" parent="none"]
134
+ // CIL[DOC-MACRO purpose="Check database connectivity and performance"]
135
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate database connection and measure latency"]
136
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" 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\",\"\\\"]"]
137
+ // CIL[DOC-CONTRACT inputs="none" outputs="CheckResult" errors="database connection errors" side_effects="queries database"]
138
+ // CIL[DOC-MICRO logic_summary="Tests database connection with simple query and measures latency" notable_decisions="[]"]
139
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
140
+ // CIL[DOC-STABILITY stability="stable"]
141
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. 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, \."]
142
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
143
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
144
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
145
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
146
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
101
147
  async function checkDatabase(): Promise<CheckResult> {
102
148
  const start = Date.now()
103
149
  try {
@@ -129,7 +175,21 @@ async function checkDatabase(): Promise<CheckResult> {
129
175
  }
130
176
  }
131
177
  }
132
-
178
+ // CIL[END chunk_id="doctor_checkdatabase_1784071456"]
179
+ // CIL[BEGIN chunk_id="doctor_checkmigrations_1784071456" type="function" identity="checkMigrations" parent="none"]
180
+ // CIL[DOC-MACRO purpose="Check migration status and pending migrations"]
181
+ // CIL[DOC-RESPONSIBILITY responsibility="Compare local migration files with applied migrations"]
182
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[]"]
183
+ // CIL[DOC-CONTRACT inputs="none" outputs="CheckResult" errors="database query errors" side_effects="queries database, reads filesystem"]
184
+ // CIL[DOC-MICRO logic_summary="Compares local SQL files with database migration records" notable_decisions="[]"]
185
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
186
+ // CIL[DOC-STABILITY stability="stable"]
187
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
188
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
189
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
190
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
191
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
192
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
133
193
  async function checkMigrations(): Promise<CheckResult> {
134
194
  const migrationsDir = resolve(__dirname, '../../migrations_dayzero')
135
195
 
@@ -191,7 +251,21 @@ async function checkMigrations(): Promise<CheckResult> {
191
251
  }
192
252
  }
193
253
  }
194
-
254
+ // CIL[END chunk_id="doctor_checkmigrations_1784071456"]
255
+ // CIL[BEGIN chunk_id="doctor_checkintegrity_1784071456" type="function" identity="checkIntegrity" parent="none"]
256
+ // CIL[DOC-MACRO purpose="Check core integrity manifest"]
257
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate spine manifest and integrity hash"]
258
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[]"]
259
+ // CIL[DOC-CONTRACT inputs="none" outputs="CheckResult" errors="file system errors" side_effects="reads manifest file"]
260
+ // CIL[DOC-MICRO logic_summary="Checks for manifest file and validates integrity hash presence" notable_decisions="[]"]
261
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
262
+ // CIL[DOC-STABILITY stability="stable"]
263
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
264
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
265
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
266
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
267
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
268
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
195
269
  async function checkIntegrity(): Promise<CheckResult> {
196
270
  const manifestPath = resolve(__dirname, '../../.spine-manifest.json')
197
271
 
@@ -218,9 +292,7 @@ async function checkIntegrity(): Promise<CheckResult> {
218
292
  }
219
293
  }
220
294
 
221
- // Note: We don't actually verify the hash here - that would require
222
- // computing SHA256 of all core files, which is slow. We just check
223
- // that a manifest exists and looks valid.
295
+
224
296
  return {
225
297
  name: 'integrity',
226
298
  status: 'pass',
@@ -236,7 +308,21 @@ async function checkIntegrity(): Promise<CheckResult> {
236
308
  }
237
309
  }
238
310
  }
239
-
311
+ // CIL[END chunk_id="doctor_checkintegrity_1784071456"]
312
+ // CIL[BEGIN chunk_id="doctor_checktestruns_1784071456" type="function" identity="checkTestRuns" parent="none"]
313
+ // CIL[DOC-MACRO purpose="Check recent test run status"]
314
+ // CIL[DOC-RESPONSIBILITY responsibility="Query latest test run and report status"]
315
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[]"]
316
+ // CIL[DOC-CONTRACT inputs="none" outputs="CheckResult" errors="database query errors" side_effects="queries test_runs table"]
317
+ // CIL[DOC-MICRO logic_summary="Retrieves most recent test run and reports its status" notable_decisions="[]"]
318
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
319
+ // CIL[DOC-STABILITY stability="stable"]
320
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
321
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
322
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
323
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
324
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
325
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
240
326
  async function checkTestRuns(): Promise<CheckResult> {
241
327
  try {
242
328
  const { data, error } = await adminDb
@@ -281,9 +367,21 @@ async function checkTestRuns(): Promise<CheckResult> {
281
367
  }
282
368
  }
283
369
  }
284
-
285
- // ─── FIX IMPLEMENTATIONS ───────────────────────────────────────────────────
286
-
370
+ // CIL[END chunk_id="doctor_checktestruns_1784071456"]
371
+ // CIL[BEGIN chunk_id="doctor_tryfix_1784071456" type="function" identity="tryFix" parent="none"]
372
+ // CIL[DOC-MACRO purpose="Provide fix suggestions for failed checks"]
373
+ // CIL[DOC-RESPONSIBILITY responsibility="Generate remediation instructions for common issues"]
374
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[]"]
375
+ // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
376
+ // CIL[DOC-MICRO logic_summary="Maps check names to specific fix commands and instructions" notable_decisions="[]"]
377
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
378
+ // CIL[DOC-STABILITY stability="stable"]
379
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
380
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
381
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
382
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
383
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
384
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
287
385
  async function tryFix(check: CheckResult): Promise<string> {
288
386
  switch (check.name) {
289
387
  case 'environment':
@@ -302,9 +400,21 @@ async function tryFix(check: CheckResult): Promise<string> {
302
400
  return 'No automatic fix available'
303
401
  }
304
402
  }
305
-
306
- // ─── COMMAND REGISTRATION ──────────────────────────────────────────────────
307
-
403
+ // CIL[END chunk_id="doctor_tryfix_1784071456"]
404
+ // CIL[BEGIN chunk_id="doctor_registerdoctorcommands_1784071456" type="function" identity="registerDoctorCommands" parent="none"]
405
+ // CIL[DOC-MACRO purpose="Register doctor command with CLI framework"]
406
+ // CIL[DOC-RESPONSIBILITY responsibility="Orchestrate all health checks and generate report"]
407
+ // CIL[DOC-CONTEXT module="doctor-cli" layer="cli" related_files="[]"]
408
+ // CIL[DOC-CONTRACT inputs="none" outputs="doctor command registration" errors="CLI context errors" side_effects="outputs health report"]
409
+ // CIL[DOC-MICRO logic_summary="Runs all checks in dependency order and formats results" notable_decisions="[]"]
410
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
411
+ // CIL[DOC-STABILITY stability="stable"]
412
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
413
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
414
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
415
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
416
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
417
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
308
418
  export function registerDoctorCommands(program: Command) {
309
419
  program
310
420
  .command('doctor')
@@ -313,8 +423,7 @@ export function registerDoctorCommands(program: Command) {
313
423
  .option('--fix', 'Show fix instructions for failed checks')
314
424
  .action(async (opts) => {
315
425
  try {
316
- // Don't require full context for doctor - we want to diagnose issues
317
- // even when env vars are missing
426
+
318
427
  let ctx
319
428
  try {
320
429
  ctx = await buildCliContext()
@@ -322,16 +431,16 @@ export function registerDoctorCommands(program: Command) {
322
431
  ctx = null
323
432
  }
324
433
 
325
- // Run all checks
434
+
326
435
  const checks: CheckResult[] = []
327
436
 
328
437
  checks.push(await checkEnvironment())
329
438
 
330
- // Only proceed with DB checks if env is valid
439
+
331
440
  if (checks[0].status === 'pass') {
332
441
  checks.push(await checkDatabase())
333
442
 
334
- // Only proceed with data checks if DB is connected
443
+
335
444
  if (checks[1].status === 'pass') {
336
445
  checks.push(await checkMigrations())
337
446
  checks.push(await checkTestRuns())
@@ -372,7 +481,7 @@ export function registerDoctorCommands(program: Command) {
372
481
 
373
482
  checks.push(await checkIntegrity())
374
483
 
375
- // Calculate overall status
484
+
376
485
  const failed = checks.filter(c => c.status === 'fail').length
377
486
  const warnings = checks.filter(c => c.status === 'warn').length
378
487
  const fixable = checks.filter(c => c.fixable).length
@@ -397,7 +506,7 @@ export function registerDoctorCommands(program: Command) {
397
506
  }
398
507
  }
399
508
 
400
- // Output
509
+
401
510
  if (opts.json) {
402
511
  console.log(JSON.stringify(report, null, 2))
403
512
  } else {
@@ -426,7 +535,7 @@ export function registerDoctorCommands(program: Command) {
426
535
  console.log()
427
536
  }
428
537
 
429
- // Exit code
538
+
430
539
  if (overall === 'unhealthy') {
431
540
  process.exit(1)
432
541
  } else if (overall === 'degraded') {
@@ -440,3 +549,4 @@ export function registerDoctorCommands(program: Command) {
440
549
  }
441
550
  })
442
551
  }
552
+ // CIL[END chunk_id="doctor_registerdoctorcommands_1784071456"]