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.
- 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 +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- 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} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- 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 +188 -16
- 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 +685 -537
- 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 +187 -144
- 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 +195 -116
- 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 +5 -2
- 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,36 +1,23 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/**
|
|
3
|
-
* @module cli/context
|
|
4
|
-
* @audience installer
|
|
5
|
-
* @layer cli
|
|
6
|
-
* @stability stable
|
|
7
|
-
*
|
|
8
|
-
* CLI context builder and output utilities. This is the CLI equivalent of
|
|
9
|
-
* `createHandler()` in `middleware.ts` — it resolves the principal, picks the
|
|
10
|
-
* correct Supabase client, and returns a `CoreContext` that every CLI command
|
|
11
|
-
* passes directly to core functions.
|
|
12
|
-
*
|
|
13
|
-
* **Environment variables read from `.xenv` or `process.env`:**
|
|
14
|
-
* | Variable | Required | Purpose |
|
|
15
|
-
* |---------------------------|----------|------------------------------------|
|
|
16
|
-
* | `SUPABASE_URL` | yes | Project API URL |
|
|
17
|
-
* | `SUPABASE_SERVICE_ROLE_KEY` | yes | Service-role client (admin ops) |
|
|
18
|
-
* | `SUPABASE_ANON_KEY` | yes | User-scoped client (JWT mode) |
|
|
19
|
-
* | `SPINE_CLI_ACCOUNT_ID` | no | Default account scope |
|
|
20
|
-
* | `SPINE_CLI_JWT` | no | Human principal (Supabase JWT) |
|
|
21
|
-
* | `SPINE_CLI_API_KEY` | no | Machine principal (hashed key) |
|
|
22
|
-
* | `SPINE_CLI_DEBUG` | no | Print stack traces on error |
|
|
23
|
-
*
|
|
24
|
-
* **Principal resolution priority** (first match wins):
|
|
25
|
-
* 1. `SPINE_CLI_JWT` → human principal (RLS-scoped `getUserDb`)
|
|
26
|
-
* 2. `SPINE_CLI_API_KEY` → machine principal (`adminDb`)
|
|
27
|
-
* 3. Fallback → `SYSTEM_PRINCIPAL` (`adminDb` — admin ops only)
|
|
28
|
-
*
|
|
29
|
-
* @seeAlso functions/_shared/middleware.ts (createHandler — server-side equivalent)
|
|
30
|
-
* @seeAlso functions/_shared/principal.ts (Principal type and SYSTEM_PRINCIPAL)
|
|
31
|
-
* @seeAlso cli/index.ts (entry point that imports all commands)
|
|
32
|
-
*/
|
|
33
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// CIL[BEGIN chunk_id="context_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
|
|
7
|
+
// CIL[DOC-MACRO purpose="Import dependencies and set up directory paths"]
|
|
8
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load required modules and configure paths"]
|
|
9
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" 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\",\"\\\"]"]
|
|
10
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="loaded_modules" errors="none" side_effects="none"]
|
|
11
|
+
// CIL[DOC-MICRO logic_summary="Imports file system, path utilities, and shared functions" notable_decisions="[]"]
|
|
12
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. 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, \."]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
34
21
|
import { readFileSync, existsSync } from 'fs'
|
|
35
22
|
import { resolve, dirname } from 'path'
|
|
36
23
|
import { fileURLToPath } from 'url'
|
|
@@ -38,23 +25,21 @@ import { CoreContext, adminDb, SYSTEM_PRINCIPAL, Principal, getUserDb } from '..
|
|
|
38
25
|
|
|
39
26
|
const __filename = fileURLToPath(import.meta.url)
|
|
40
27
|
const __dirname = dirname(__filename)
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
* @tags environment, configuration, cli, dotenv
|
|
57
|
-
*/
|
|
28
|
+
// CIL[END chunk_id="context_moduleheader_1784068794"]
|
|
29
|
+
// CIL[BEGIN chunk_id="context_loadenv_1784068794" type="function" identity="loadEnv" parent="none"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Load environment variables from .xenv file"]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Parse and set environment variables"]
|
|
32
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" related_files="[\"\\\"]"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="process_env" errors="file_read_errors" side_effects="process_env_modification"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Reads .xenv file and sets non-existent environment variables" notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
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"]
|
|
58
43
|
function loadEnv() {
|
|
59
44
|
const envPath = resolve(__dirname, '../.xenv')
|
|
60
45
|
if (existsSync(envPath)) {
|
|
@@ -72,37 +57,39 @@ function loadEnv() {
|
|
|
72
57
|
}
|
|
73
58
|
}
|
|
74
59
|
}
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
60
|
+
// CIL[END chunk_id="context_loadenv_1784068794"]
|
|
61
|
+
// CIL[BEGIN chunk_id="interface_clioptions_1784068794" type="interface" identity="CliOptions" parent="none"]
|
|
62
|
+
// CIL[DOC-MACRO purpose="Define CLI options interface"]
|
|
63
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Type definition for CLI configuration"]
|
|
64
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
65
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="type_definition" errors="none" side_effects="none"]
|
|
66
|
+
// CIL[DOC-MICRO logic_summary="Interface for optional account override parameter" notable_decisions="[]"]
|
|
67
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
68
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
69
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
70
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
71
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
72
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
73
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
74
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
86
75
|
export interface CliOptions {
|
|
87
76
|
account?: string
|
|
88
77
|
}
|
|
89
|
-
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* @tags cli, authentication, principal-resolution, context
|
|
105
|
-
*/
|
|
78
|
+
// CIL[END chunk_id="interface_clioptions_1784068794"]
|
|
79
|
+
// CIL[BEGIN chunk_id="context_buildclicontext_1784068794" type="function" identity="buildCliContext" parent="none"]
|
|
80
|
+
// CIL[DOC-MACRO purpose="Build CLI context with authentication and database"]
|
|
81
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Create authenticated context for CLI operations"]
|
|
82
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
83
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="core_context" errors="auth_errors" side_effects="database_queries"]
|
|
84
|
+
// CIL[DOC-MICRO logic_summary="Handles API key, JWT, or system authentication with proper principal setup" notable_decisions="[]"]
|
|
85
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
86
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. Direct callers: 2. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 2. Total affected: 2."]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
91
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
92
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
106
93
|
export async function buildCliContext(opts: CliOptions = {}): Promise<CoreContext> {
|
|
107
94
|
loadEnv()
|
|
108
95
|
|
|
@@ -116,7 +103,6 @@ export async function buildCliContext(opts: CliOptions = {}): Promise<CoreContex
|
|
|
116
103
|
const accountId = opts.account || process.env.SPINE_CLI_ACCOUNT_ID || null
|
|
117
104
|
const requestId = crypto.randomUUID()
|
|
118
105
|
|
|
119
|
-
// Machine API key auth
|
|
120
106
|
const apiKey = process.env.SPINE_CLI_API_KEY
|
|
121
107
|
if (apiKey) {
|
|
122
108
|
const { data: keyRecord } = await adminDb
|
|
@@ -151,7 +137,6 @@ export async function buildCliContext(opts: CliOptions = {}): Promise<CoreContex
|
|
|
151
137
|
}
|
|
152
138
|
}
|
|
153
139
|
|
|
154
|
-
// JWT auth (human principal)
|
|
155
140
|
const jwt = process.env.SPINE_CLI_JWT
|
|
156
141
|
if (jwt) {
|
|
157
142
|
const userDb = getUserDb(jwt)
|
|
@@ -192,7 +177,6 @@ export async function buildCliContext(opts: CliOptions = {}): Promise<CoreContex
|
|
|
192
177
|
}
|
|
193
178
|
}
|
|
194
179
|
|
|
195
|
-
// Fallback: system principal (admin ops)
|
|
196
180
|
return {
|
|
197
181
|
principal: SYSTEM_PRINCIPAL,
|
|
198
182
|
accountId,
|
|
@@ -200,25 +184,21 @@ export async function buildCliContext(opts: CliOptions = {}): Promise<CoreContex
|
|
|
200
184
|
requestId
|
|
201
185
|
}
|
|
202
186
|
}
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
//
|
|
206
|
-
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
* @depended-by [All CLI command list/get handlers]
|
|
219
|
-
* @side-effects [console.log output]
|
|
220
|
-
* @tags cli, output, formatting, tables, json
|
|
221
|
-
*/
|
|
187
|
+
// CIL[END chunk_id="context_buildclicontext_1784068794"]
|
|
188
|
+
// CIL[BEGIN chunk_id="context_printresult_1784068794" type="function" identity="printResult" parent="none"]
|
|
189
|
+
// CIL[DOC-MACRO purpose="Format and display CLI output data"]
|
|
190
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle result formatting for CLI output"]
|
|
191
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
192
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="console_output" errors="none" side_effects="console_io"]
|
|
193
|
+
// CIL[DOC-MICRO logic_summary="Formats data as JSON, table, or raw text based on type and options" notable_decisions="[]"]
|
|
194
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
195
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
196
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
197
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
198
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
199
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
200
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
201
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
222
202
|
export function printResult(data: any, opts: { json?: boolean } = {}) {
|
|
223
203
|
if (opts.json) {
|
|
224
204
|
console.log(JSON.stringify(data, null, 2))
|
|
@@ -227,42 +207,44 @@ export function printResult(data: any, opts: { json?: boolean } = {}) {
|
|
|
227
207
|
|
|
228
208
|
if (Array.isArray(data)) {
|
|
229
209
|
if (data.length === 0) {
|
|
230
|
-
console.log('
|
|
210
|
+
console.log('No results found.')
|
|
231
211
|
return
|
|
232
212
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const hr = widths.map(w => '-'.repeat(w)).join(' ')
|
|
237
|
-
console.log(keys.map((k, i) => k.padEnd(widths[i])).join(' '))
|
|
238
|
-
console.log(hr)
|
|
239
|
-
rows.forEach(row => console.log(row.map((v, i) => v.padEnd(widths[i])).join(' ')))
|
|
240
|
-
console.log(`\n(${data.length} row${data.length !== 1 ? 's' : ''})`)
|
|
241
|
-
} else {
|
|
213
|
+
|
|
214
|
+
console.table(data)
|
|
215
|
+
} else if (data && typeof data === 'object') {
|
|
242
216
|
console.log(JSON.stringify(data, null, 2))
|
|
217
|
+
} else {
|
|
218
|
+
console.log(data)
|
|
243
219
|
}
|
|
244
220
|
}
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
//
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
221
|
+
// CIL[END chunk_id="context_printresult_1784068794"]
|
|
222
|
+
// CIL[BEGIN chunk_id="context_handleerror_1784068794" type="function" identity="handleError" parent="none"]
|
|
223
|
+
// CIL[DOC-MACRO purpose="Handle and format CLI errors with context"]
|
|
224
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Process and display error messages appropriately"]
|
|
225
|
+
// CIL[DOC-CONTEXT module="cli" layer="context" related_files="[]"]
|
|
226
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="error_output" errors="none" side_effects="process_exit"]
|
|
227
|
+
// CIL[DOC-MICRO logic_summary="Formats PostgREST errors and exits process with error code" notable_decisions="[]"]
|
|
228
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
229
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
230
|
+
// CIL[DOC-VECTOR type="context" content="Layer: context. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
231
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
232
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
233
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
234
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
235
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
236
|
+
export function handleError(error: any, context?: string) {
|
|
237
|
+
const message = error?.message || String(error)
|
|
238
|
+
const contextStr = context ? `[${context}] ` : ''
|
|
239
|
+
|
|
240
|
+
if (error?.code === 'PGRST116') {
|
|
241
|
+
console.error(`${contextStr}Not found: The requested resource does not exist.`)
|
|
242
|
+
} else if (error?.code === 'PGRST301') {
|
|
243
|
+
console.error(`${contextStr}Permission denied: You don't have access to this resource.`)
|
|
244
|
+
} else {
|
|
245
|
+
console.error(`${contextStr}${message}`)
|
|
265
246
|
}
|
|
247
|
+
|
|
266
248
|
process.exit(1)
|
|
267
249
|
}
|
|
268
|
-
//
|
|
250
|
+
// CIL[END chunk_id="context_handleerror_1784068794"]
|
|
@@ -1,24 +1,41 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/**
|
|
3
|
-
* @module cli/env-loader
|
|
4
|
-
* @audience installer
|
|
5
|
-
* @layer cli
|
|
6
|
-
* @stability stable
|
|
7
|
-
*
|
|
8
|
-
* Side-effect module: loads `v2-core/.xenv` into `process.env` before any
|
|
9
|
-
* other CLI module is imported. Must be the first import in `cli/index.ts`
|
|
10
|
-
* so that `db.ts` (which reads env vars at module-load time) sees the values.
|
|
11
|
-
*
|
|
12
|
-
* @sideEffects Mutates process.env — only sets keys not already present
|
|
13
|
-
*/
|
|
14
1
|
|
|
2
|
+
|
|
3
|
+
// CIL[BEGIN chunk_id="env-loader_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
|
|
4
|
+
// CIL[DOC-MACRO purpose="Import file system and path utilities"]
|
|
5
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load required modules for file operations"]
|
|
6
|
+
// CIL[DOC-CONTEXT module="cli" layer="environment" 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 file system, path utilities, and URL handling" 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: environment. 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"]
|
|
15
18
|
import { readFileSync, existsSync } from 'fs'
|
|
16
19
|
import { resolve, dirname } from 'path'
|
|
17
20
|
import { fileURLToPath } from 'url'
|
|
18
21
|
|
|
19
22
|
const __filename = fileURLToPath(import.meta.url)
|
|
20
23
|
const __dirname = dirname(__filename)
|
|
21
|
-
|
|
24
|
+
// CIL[END chunk_id="env-loader_moduleheader_1784068794"]
|
|
25
|
+
// CIL[BEGIN chunk_id="env-loader_loadenvfile_1784068794" type="function" identity="loadEnvFile" parent="none"]
|
|
26
|
+
// CIL[DOC-MACRO purpose="Load environment variables from a file"]
|
|
27
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Parse and set environment variables from file"]
|
|
28
|
+
// CIL[DOC-CONTEXT module="cli" layer="environment" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/migrations/015_simplify_apps_table.sql\",\"\\\"]"]
|
|
29
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="process_env" errors="file_read_errors" side_effects="process_env_modification"]
|
|
30
|
+
// CIL[DOC-MICRO logic_summary="Reads env file, parses key=value pairs, sets non-existent variables" notable_decisions="[]"]
|
|
31
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
32
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
33
|
+
// CIL[DOC-VECTOR type="context" content="Layer: environment. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/migrations/015_simplify_apps_table.sql, \."]
|
|
34
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
35
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
36
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
37
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
38
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
22
39
|
function loadEnvFile(envPath: string) {
|
|
23
40
|
if (!existsSync(envPath)) return
|
|
24
41
|
const lines = readFileSync(envPath, 'utf8').split('\n')
|
|
@@ -34,10 +51,22 @@ function loadEnvFile(envPath: string) {
|
|
|
34
51
|
}
|
|
35
52
|
}
|
|
36
53
|
}
|
|
37
|
-
|
|
38
|
-
//
|
|
39
|
-
//
|
|
54
|
+
// CIL[END chunk_id="env-loader_loadenvfile_1784068794"]
|
|
55
|
+
// CIL[BEGIN chunk_id="env-loader_execution_1784068794" type="block" identity="env_loading" parent="none"]
|
|
56
|
+
// CIL[DOC-MACRO purpose="Load environment files on module import"]
|
|
57
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Execute environment loading for CLI"]
|
|
58
|
+
// CIL[DOC-CONTEXT module="cli" layer="environment" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
59
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="env_variables_loaded" errors="none" side_effects="process_env_modification"]
|
|
60
|
+
// CIL[DOC-MICRO logic_summary="Loads local .env and framework .xenv files in order" notable_decisions="[]"]
|
|
61
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
62
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
63
|
+
// CIL[DOC-VECTOR type="context" content="Layer: environment. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
64
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
65
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
66
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
67
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
68
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
40
69
|
loadEnvFile(resolve(process.cwd(), '.env'))
|
|
41
70
|
|
|
42
|
-
// 2. Load framework's own .xenv (lower priority — project .env wins)
|
|
43
71
|
loadEnvFile(resolve(__dirname, '../.xenv'))
|
|
72
|
+
// CIL[END chunk_id="env-loader_execution_1784068794"]
|
package/.framework/cli/index.ts
CHANGED
|
@@ -1,43 +1,39 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/**
|
|
4
|
-
* @module cli/index
|
|
5
|
-
* @audience installer
|
|
6
|
-
* @layer cli
|
|
7
|
-
* @stability stable
|
|
8
|
-
*
|
|
9
|
-
* Spine CLI entry point (`npx spine-framework`). Registers all command groups via
|
|
10
|
-
* Commander and delegates each subcommand to the same core logic used by
|
|
11
|
-
* API handlers and direct imports. No business logic lives here — only
|
|
12
|
-
* command registration and top-level error handling.
|
|
13
|
-
*
|
|
14
|
-
* **Command groups registered:**
|
|
15
|
-
* | Group | File |
|
|
16
|
-
* |-------------|----------------------------|
|
|
17
|
-
* | auth | commands/auth.ts |
|
|
18
|
-
* | pipelines | commands/pipelines.ts |
|
|
19
|
-
* | items | commands/items.ts |
|
|
20
|
-
* | agents | commands/agents.ts |
|
|
21
|
-
* | migrations | commands/migrations.ts |
|
|
22
|
-
*
|
|
23
|
-
* **Usage:**
|
|
24
|
-
* ```bash
|
|
25
|
-
* npx spine-framework --help
|
|
26
|
-
* npx spine-framework auth whoami
|
|
27
|
-
* npx spine-framework pipelines run <id> --data '{"key":"value"}'
|
|
28
|
-
* npx spine-framework items list --type support_ticket
|
|
29
|
-
* npx spine-framework items get <id>
|
|
30
|
-
* npx spine-framework agents run <thread-id> --message "Hello"
|
|
31
|
-
* npx spine-framework migrations list
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @seeAlso cli/context.ts (buildCliContext — constructs CoreContext for every command)
|
|
35
|
-
* @seeAlso functions/_shared/index.ts (core functions exposed to CLI)
|
|
36
|
-
*/
|
|
37
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// CIL[BEGIN chunk_id="index_moduleheader_1784068794" type="module_header" identity="imports" parent="none"]
|
|
6
|
+
// CIL[DOC-MACRO purpose="Import CLI dependencies and environment loader"]
|
|
7
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load required modules for CLI setup"]
|
|
8
|
+
// CIL[DOC-CONTEXT module="cli" layer="entry" 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\",\"\\\"]"]
|
|
9
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="loaded_modules" errors="none" side_effects="none"]
|
|
10
|
+
// CIL[DOC-MICRO logic_summary="Imports environment loader and Commander.js" notable_decisions="[]"]
|
|
11
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
12
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
13
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
14
|
+
// CIL[DOC-VECTOR type="context" content="Layer: entry. 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, \."]
|
|
15
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
16
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
17
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
18
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
38
20
|
import './env-loader.ts'
|
|
39
21
|
import { Command } from 'commander'
|
|
40
|
-
|
|
22
|
+
// CIL[END chunk_id="index_moduleheader_1784068794"]
|
|
23
|
+
// CIL[BEGIN chunk_id="index_program_1784068794" type="variable" identity="program" parent="none"]
|
|
24
|
+
// CIL[DOC-MACRO purpose="Initialize CLI program with basic configuration"]
|
|
25
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Configure main CLI program instance"]
|
|
26
|
+
// CIL[DOC-CONTEXT module="cli" layer="entry" 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\",\"\\\"]"]
|
|
27
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="configured_program" errors="none" side_effects="none"]
|
|
28
|
+
// CIL[DOC-MICRO logic_summary="Creates Commander program with name, description, version, and account option" notable_decisions="[]"]
|
|
29
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
30
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
31
|
+
// CIL[DOC-VECTOR type="context" content="Layer: entry. 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, \."]
|
|
32
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
33
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
34
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
35
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
36
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
41
37
|
const program = new Command()
|
|
42
38
|
|
|
43
39
|
program
|
|
@@ -45,7 +41,21 @@ program
|
|
|
45
41
|
.description('Spine Framework CLI — install, migrate, and manage your Spine instance')
|
|
46
42
|
.version('2.0.0')
|
|
47
43
|
.option('--account <id>', 'Override the account ID for this command')
|
|
48
|
-
|
|
44
|
+
// CIL[END chunk_id="index_program_1784068794"]
|
|
45
|
+
// CIL[BEGIN chunk_id="index_imports_1784068794" type="block" identity="command_imports" parent="none"]
|
|
46
|
+
// CIL[DOC-MACRO purpose="Dynamically import all CLI command modules"]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load command registration functions"]
|
|
48
|
+
// CIL[DOC-CONTEXT module="cli" layer="entry" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="command_modules" errors="import_failures" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Uses Promise.all to parallel import all command modules" notable_decisions="[]"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
53
|
+
// CIL[DOC-VECTOR type="context" content="Layer: entry. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
54
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
55
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
56
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
57
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
58
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
49
59
|
const [
|
|
50
60
|
{ registerInitCommands },
|
|
51
61
|
{ registerMigrateCommands },
|
|
@@ -79,7 +89,21 @@ const [
|
|
|
79
89
|
import('./commands/generate.ts'),
|
|
80
90
|
import('./commands/create-app.ts'),
|
|
81
91
|
])
|
|
82
|
-
|
|
92
|
+
// CIL[END chunk_id="index_imports_1784068794"]
|
|
93
|
+
// CIL[BEGIN chunk_id="index_registrations_1784068794" type="block" identity="command_registrations" parent="none"]
|
|
94
|
+
// CIL[DOC-MACRO purpose="Register all CLI commands with the program"]
|
|
95
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Configure CLI with all available commands"]
|
|
96
|
+
// CIL[DOC-CONTEXT module="cli" layer="entry" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
97
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="registered_commands" errors="none" side_effects="none"]
|
|
98
|
+
// CIL[DOC-MICRO logic_summary="Calls each command registration function with the program instance" 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: entry. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.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"]
|
|
83
107
|
registerInitCommands(program)
|
|
84
108
|
registerMigrateCommands(program)
|
|
85
109
|
registerInstallAppCommands(program)
|
|
@@ -95,8 +119,23 @@ registerTestCommands(program)
|
|
|
95
119
|
registerSystemCommands(program)
|
|
96
120
|
registerGenerateCommands(program)
|
|
97
121
|
registerCreateAppCommands(program)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
122
|
+
// CIL[END chunk_id="index_registrations_1784068794"]
|
|
123
|
+
// CIL[BEGIN chunk_id="index_parseasync_1784068794" type="block" identity="error_handling" parent="none"]
|
|
124
|
+
// CIL[DOC-MACRO purpose="Parse CLI arguments and handle errors"]
|
|
125
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Execute CLI and handle uncaught errors"]
|
|
126
|
+
// CIL[DOC-CONTEXT module="cli" layer="entry" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
127
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="command_execution" errors="cli_errors" side_effects="process_exit"]
|
|
128
|
+
// CIL[DOC-MICRO logic_summary="Parses async command line arguments and exits on error" notable_decisions="[]"]
|
|
129
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
130
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
131
|
+
// CIL[DOC-VECTOR type="context" content="Layer: entry. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
132
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
133
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
134
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
135
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
136
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
137
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
138
|
+
console.error('CLI Error:', error.message)
|
|
101
139
|
process.exit(1)
|
|
102
140
|
})
|
|
141
|
+
// CIL[END chunk_id="index_parseasync_1784068794"]
|