spine-framework 0.3.125 → 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.
- package/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +169 -97
- package/.framework/cli/commands/generate.ts +82 -160
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +222 -347
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +162 -14
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +687 -533
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +173 -145
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +192 -115
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +3 -3
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- 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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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'
|
|
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"]
|