spine-framework 0.4.3 → 0.5.0-rc.4
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/.env.example +13 -3
- package/.framework/cli/commands/bootstrap.ts +392 -0
- package/.framework/cli/commands/dev.ts +91 -218
- package/.framework/cli/commands/doctor.ts +132 -26
- package/.framework/cli/commands/generate.ts +38 -298
- package/.framework/cli/commands/init.ts +20 -1
- package/.framework/cli/commands/migrate.ts +36 -30
- package/.framework/cli/commands/migrations.ts +16 -56
- package/.framework/cli/commands/upgrade.ts +35 -0
- package/.framework/cli/commands/validate-schema.ts +147 -0
- package/.framework/cli/context.ts +223 -110
- package/.framework/cli/index.ts +6 -0
- package/.framework/cli/lib/project-files.ts +241 -1
- package/.framework/functions/_shared/agent-runner.ts +1000 -81
- package/.framework/functions/_shared/cil.ts +2 -1
- package/.framework/functions/_shared/db.ts +3 -6
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/kb.ts +61 -7
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/message-sequence.ts +53 -0
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/_shared/pipeline-runner.ts +150 -37
- package/.framework/functions/_shared/principal.ts +9 -6
- package/.framework/functions/_shared/trigger-engine.ts +149 -40
- package/.framework/functions/admin-data.ts +48 -31
- package/.framework/functions/ai-agents.ts +103 -33
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +43 -26
- package/.framework/functions/cil-ingest.ts +48 -15
- package/.framework/functions/debug-auth.ts +14 -8
- package/.framework/functions/deliveries.ts +39 -12
- package/.framework/functions/embeddings.ts +145 -76
- package/.framework/functions/integration-outbound.ts +67 -27
- package/.framework/functions/integrations.ts +254 -127
- package/.framework/functions/logs.ts +273 -133
- package/.framework/functions/observability.ts +277 -147
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipeline-runner-background.ts +120 -0
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +250 -128
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/trigger-scheduler.ts +65 -5
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/064_episode_leases.sql +196 -0
- package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
- package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
- package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
- package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/schemas/spine.config.schema.json +62 -0
- package/.framework/src/App.tsx +3 -1
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
- package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
- package/.framework/src/components/layout/Layout.tsx +4 -2
- package/.framework/src/components/layout/Sidebar.tsx +304 -179
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/hooks/useBranding.ts +47 -0
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +57 -0
- package/.framework/src/instructions/ai-agents.md +69 -0
- package/.framework/src/instructions/alerts.md +80 -0
- package/.framework/src/instructions/api-keys.md +87 -0
- package/.framework/src/instructions/apps.md +77 -0
- package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
- package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
- package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
- package/.framework/src/instructions/concepts/automation.md +186 -0
- package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
- package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
- package/.framework/src/instructions/concepts/design-schema.md +152 -0
- package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
- package/.framework/src/instructions/concepts/observability.md +116 -0
- package/.framework/src/instructions/concepts/permissions.md +150 -0
- package/.framework/src/instructions/concepts/runtime-records.md +111 -0
- package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
- package/.framework/src/instructions/concepts/spine-way.md +172 -0
- package/.framework/src/instructions/deliveries.md +59 -0
- package/.framework/src/instructions/guide/00-orientation.md +106 -0
- package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
- package/.framework/src/instructions/guide/02-project-map.md +147 -0
- package/.framework/src/instructions/guide/03-domain-model.md +223 -0
- package/.framework/src/instructions/guide/04-first-app.md +227 -0
- package/.framework/src/instructions/guide/05-glossary.md +183 -0
- package/.framework/src/instructions/integrations.md +96 -0
- package/.framework/src/instructions/internal/cil-markers.md +83 -0
- package/.framework/src/instructions/invites.md +60 -0
- package/.framework/src/instructions/kb.md +80 -0
- package/.framework/src/instructions/logs.md +77 -0
- package/.framework/src/instructions/observability.md +61 -0
- package/.framework/src/instructions/operations/deployment.md +115 -0
- package/.framework/src/instructions/operations/migrations.md +125 -0
- package/.framework/src/instructions/operations/security-checklist.md +148 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/pipeline-executions.md +62 -0
- package/.framework/src/instructions/pipelines.md +78 -0
- package/.framework/src/instructions/prompts.md +95 -0
- package/.framework/src/instructions/reference/api/admin-data.md +162 -0
- package/.framework/src/instructions/reference/api/auth.md +113 -0
- package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
- package/.framework/src/instructions/reference/app-manifest.md +150 -0
- package/.framework/src/instructions/reference/cli.md +124 -0
- package/.framework/src/instructions/reference/database.md +132 -0
- package/.framework/src/instructions/reference/design-schema.md +280 -0
- package/.framework/src/instructions/reference/env-vars.md +133 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
- package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
- package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
- package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
- package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
- package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
- package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
- package/.framework/src/instructions/reference/functions/apps.md +140 -0
- package/.framework/src/instructions/reference/functions/auth.md +99 -0
- package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
- package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
- package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
- package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
- package/.framework/src/instructions/reference/functions/index.md +103 -0
- package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
- package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
- package/.framework/src/instructions/reference/functions/integrations.md +130 -0
- package/.framework/src/instructions/reference/functions/invites.md +182 -0
- package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
- package/.framework/src/instructions/reference/functions/kb.md +166 -0
- package/.framework/src/instructions/reference/functions/logs.md +141 -0
- package/.framework/src/instructions/reference/functions/observability.md +105 -0
- package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
- package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
- package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
- package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
- package/.framework/src/instructions/reference/functions/roles.md +121 -0
- package/.framework/src/instructions/reference/functions/security.md +140 -0
- package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
- package/.framework/src/instructions/reference/functions/system.md +106 -0
- package/.framework/src/instructions/reference/functions/tests.md +97 -0
- package/.framework/src/instructions/reference/functions/timers.md +117 -0
- package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
- package/.framework/src/instructions/reference/functions/triggers.md +140 -0
- package/.framework/src/instructions/reference/functions/types.md +146 -0
- package/.framework/src/instructions/reference/seeds.md +126 -0
- package/.framework/src/instructions/reference/shared-modules.md +127 -0
- package/.framework/src/instructions/reference/spine-config.md +114 -0
- package/.framework/src/instructions/roles.md +80 -0
- package/.framework/src/instructions/runtime-detail.md +70 -0
- package/.framework/src/instructions/runtime-list.md +77 -0
- package/.framework/src/instructions/security.md +67 -0
- package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
- package/.framework/src/instructions/tasks/add-a-role.md +96 -0
- package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
- package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
- package/.framework/src/instructions/tasks/add-a-type.md +151 -0
- package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
- package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
- package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
- package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
- package/.framework/src/instructions/tasks/test-your-code.md +108 -0
- package/.framework/src/instructions/tasks/write-a-function.md +132 -0
- package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
- package/.framework/src/instructions/testing.md +59 -0
- package/.framework/src/instructions/timers.md +82 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/lib/branding.ts +128 -0
- package/.framework/src/pages/NoAppPage.tsx +3 -1
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/SetupPage.tsx +5 -2
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
- package/.framework/src/pages/auth/LoginPage.tsx +4 -2
- package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
- package/.framework/templates/agent/AGENTS.md +150 -0
- package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
- package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
- package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
- package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
- package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +5 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +496 -47
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/episode-lease.test.ts +695 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
- package/.framework/tests/unit/principal-cache.test.ts +15 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/.framework/tests/unit/trigger-engine.test.ts +278 -91
- package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/netlify.toml +5 -0
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/PipelinesPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module PipelinesPage
|
|
4
|
+
* @audience both
|
|
5
|
+
* @layer shared-core
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* This module represents the PipelinesPage component within the admin section of the application, providing a user interface for managing and viewing pipelines. It leverages hooks for API interactions and includes various UI components for functionality such as sorting and filtering. INVARIANT: The user must have admin privileges to access this page.
|
|
9
|
+
*
|
|
10
|
+
* @seeAlso useApi (provides API interaction capabilities).
|
|
11
|
+
* @seeAlso AdminListPage (base component for admin list functionality).
|
|
12
|
+
* @seeAlso SortableTableHeader (for sorting capabilities in tables).
|
|
13
|
+
*
|
|
14
|
+
* @cil-generated
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
10
25
|
|
|
11
26
|
|
|
12
27
|
|
|
@@ -25,22 +40,31 @@ import { Badge } from '../../components/ui/badge'
|
|
|
25
40
|
import { formatDateTime } from '../../lib/utils'
|
|
26
41
|
import { AdminListPage } from '../../components/admin/AdminListPage'
|
|
27
42
|
import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
28
|
-
|
|
29
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Module header for the admin pipeline management page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
30
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
31
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
32
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
33
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
34
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
35
43
|
// CIL[END stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:module_header:module_header"]
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
36
60
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:Pipeline:interface" type="interface" identity="Pipeline" parent="~/.framework/src/pages/admin/PipelinesPage.tsx"]
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
61
|
+
/**
|
|
62
|
+
* The Pipeline interface defines the structure of a data pipeline, including its configuration, stages, and metadata. It is used to manage and execute data processing workflows within the application.
|
|
63
|
+
*
|
|
64
|
+
* @sideEffects none
|
|
65
|
+
* @stability internal
|
|
66
|
+
* @cil-generated
|
|
67
|
+
*/
|
|
44
68
|
interface Pipeline {
|
|
45
69
|
id: string
|
|
46
70
|
name: string
|
|
@@ -54,114 +78,143 @@ interface Pipeline {
|
|
|
54
78
|
order: number
|
|
55
79
|
}>
|
|
56
80
|
is_active: boolean
|
|
81
|
+
app_id?: string
|
|
57
82
|
created_at: string
|
|
58
83
|
updated_at: string
|
|
59
84
|
created_by: string
|
|
60
85
|
account_id: string
|
|
61
|
-
execution_count
|
|
86
|
+
execution_count?: number
|
|
62
87
|
last_execution?: string
|
|
63
88
|
next_execution?: string
|
|
64
89
|
}
|
|
65
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Define the shape of a Pipeline record.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
66
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
67
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
68
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
69
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
70
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
71
90
|
// CIL[END stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:Pipeline:interface"]
|
|
72
91
|
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
73
107
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:PipelineExecution:interface" type="interface" identity="PipelineExecution" parent="~/.framework/src/pages/admin/PipelinesPage.tsx"]
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
108
|
+
/**
|
|
109
|
+
* The PipelineExecution interface defines the structure for tracking the execution state of a pipeline, including its status and timestamps. It is essential for managing and monitoring the lifecycle of pipeline executions within the application.
|
|
110
|
+
*
|
|
111
|
+
* @sideEffects none
|
|
112
|
+
* @stability internal
|
|
113
|
+
* @cil-generated
|
|
114
|
+
*/
|
|
81
115
|
interface PipelineExecution {
|
|
82
116
|
id: string
|
|
83
117
|
pipeline_id: string
|
|
84
118
|
status: 'pending' | 'running' | 'completed' | 'failed'
|
|
85
|
-
started_at
|
|
119
|
+
started_at?: string
|
|
120
|
+
created_at: string
|
|
86
121
|
completed_at?: string
|
|
87
|
-
trigger_data
|
|
122
|
+
trigger_data?: Record<string, any>
|
|
88
123
|
result?: Record<string, any>
|
|
89
124
|
error?: string
|
|
90
125
|
}
|
|
91
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Define the shape of a pipeline execution record.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
92
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
93
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
94
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
95
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
96
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
97
126
|
// CIL[END stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:PipelineExecution:interface"]
|
|
98
127
|
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
99
143
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:PipelinesPage:component" type="component" identity="PipelinesPage" parent="~/.framework/src/pages/admin/PipelinesPage.tsx"]
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
144
|
+
/**
|
|
145
|
+
* The PipelinesPage component manages the display and interaction with pipeline data in the admin interface. It fetches pipelines, executions, and related statistics from the API and allows users to filter and sort this data.
|
|
146
|
+
*
|
|
147
|
+
* @macro Admin interface component for managing and displaying pipeline data.
|
|
148
|
+
* @micro Uses multiple API calls to fetch pipelines, executions, and statistics, and maintains local state for filtering and sorting.
|
|
149
|
+
* @outputSpec JSX.Element — renders the pipelines management interface.
|
|
150
|
+
* @throws Error — failed to fetch pipelines
|
|
151
|
+
* @sideEffects Makes external API calls to fetch pipeline and execution data.
|
|
152
|
+
* @stability internal
|
|
153
|
+
* @calls useApi, apiFetch
|
|
154
|
+
* @errorHandling none
|
|
155
|
+
* @cil-generated
|
|
156
|
+
*/
|
|
107
157
|
export function PipelinesPage() {
|
|
108
|
-
console.log('PipelinesPage rendering...')
|
|
109
158
|
const navigate = useNavigate()
|
|
110
159
|
const [searchTerm, setSearchTerm] = useState('')
|
|
111
160
|
const [selectedTrigger, setSelectedTrigger] = useState('all')
|
|
112
161
|
const [selectedStatus, setSelectedStatus] = useState('all')
|
|
113
|
-
const [selectedPipeline, setSelectedPipeline] = useState<Pipeline | null>(null)
|
|
114
162
|
const [sortKey, setSortKey] = useState('name')
|
|
115
163
|
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
|
|
116
164
|
|
|
117
|
-
|
|
118
165
|
const { data: pipelines, loading, error, refetch } = useApi<Pipeline[]>(
|
|
119
166
|
async ({ signal }: { signal?: AbortSignal }) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const { supabase } = await import('../../lib/supabase')
|
|
125
|
-
const { data: { session } } = await supabase.auth.getSession()
|
|
126
|
-
console.log('Supabase session exists:', !!session)
|
|
127
|
-
console.log('Supabase access token exists:', !!session?.access_token)
|
|
128
|
-
console.log('Supabase access token length:', session?.access_token?.length || 0)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const localToken = localStorage.getItem('access_token')
|
|
132
|
-
console.log('localStorage token exists:', !!localToken)
|
|
133
|
-
console.log('localStorage token length:', localToken?.length || 0)
|
|
134
|
-
|
|
135
|
-
const response = await apiFetch('/api/pipelines?action=list', { signal })
|
|
136
|
-
console.log('Response status:', response.status)
|
|
137
|
-
console.log('Response headers:', Object.fromEntries(response.headers.entries()))
|
|
138
|
-
|
|
139
|
-
if (!response.ok) {
|
|
140
|
-
console.error('Response not ok:', response.statusText)
|
|
141
|
-
throw new Error(`Failed to fetch pipelines: ${response.statusText}`)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const result = await response.json()
|
|
145
|
-
console.log('Raw API result:', result)
|
|
146
|
-
console.log('Result data type:', typeof result.data)
|
|
147
|
-
console.log('Result data is array:', Array.isArray(result.data))
|
|
148
|
-
console.log('Result data length:', result.data?.length || 'N/A')
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const pipelines = result.data || result
|
|
152
|
-
console.log('Pipelines after processing:', pipelines)
|
|
153
|
-
console.log('Pipelines is array:', Array.isArray(pipelines))
|
|
154
|
-
console.log('Pipelines length:', pipelines.length)
|
|
155
|
-
|
|
156
|
-
return pipelines
|
|
157
|
-
} catch (error) {
|
|
158
|
-
console.error('Error in PipelinesPage:', error)
|
|
159
|
-
throw error
|
|
160
|
-
}
|
|
167
|
+
const response = await apiFetch('/api/pipelines?action=list', { signal })
|
|
168
|
+
if (!response.ok) throw new Error('Failed to fetch pipelines')
|
|
169
|
+
const result = await response.json()
|
|
170
|
+
return result.data || result
|
|
161
171
|
},
|
|
162
172
|
{ immediate: true }
|
|
163
173
|
)
|
|
164
174
|
|
|
175
|
+
const { data: executions } = useApi<PipelineExecution[]>(
|
|
176
|
+
async ({ signal }: { signal?: AbortSignal }) => {
|
|
177
|
+
const response = await apiFetch('/api/pipeline-executions?action=list&limit=500', { signal })
|
|
178
|
+
if (!response.ok) return []
|
|
179
|
+
const result = await response.json()
|
|
180
|
+
return result.data || result || []
|
|
181
|
+
},
|
|
182
|
+
{ immediate: true }
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
const { data: execStats } = useApi<{ total: number }>(
|
|
186
|
+
async ({ signal }: { signal?: AbortSignal }) => {
|
|
187
|
+
const today = new Date()
|
|
188
|
+
today.setUTCHours(0, 0, 0, 0)
|
|
189
|
+
const response = await apiFetch(`/api/pipeline-executions?action=stats&date_from=${encodeURIComponent(today.toISOString())}`, { signal })
|
|
190
|
+
if (!response.ok) return { total: 0 }
|
|
191
|
+
const result = await response.json()
|
|
192
|
+
return result.data || result
|
|
193
|
+
},
|
|
194
|
+
{ immediate: true }
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
const { data: apps } = useApi<Array<{ id: string; name: string }>>(
|
|
198
|
+
async ({ signal }: { signal?: AbortSignal }) => {
|
|
199
|
+
const response = await apiFetch('/api/apps?action=list', { signal })
|
|
200
|
+
if (!response.ok) return []
|
|
201
|
+
const result = await response.json()
|
|
202
|
+
return result.data || []
|
|
203
|
+
},
|
|
204
|
+
{ immediate: true }
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
const appNameById = new Map((apps || []).map(a => [a.id, a.name]))
|
|
208
|
+
|
|
209
|
+
const lastExecByPipeline = new Map<string, string>()
|
|
210
|
+
const execCountByPipeline = new Map<string, number>()
|
|
211
|
+
for (const exec of executions || []) {
|
|
212
|
+
const ts = exec.started_at || exec.created_at
|
|
213
|
+
execCountByPipeline.set(exec.pipeline_id, (execCountByPipeline.get(exec.pipeline_id) || 0) + 1)
|
|
214
|
+
const prev = lastExecByPipeline.get(exec.pipeline_id)
|
|
215
|
+
if (ts && (!prev || ts > prev)) lastExecByPipeline.set(exec.pipeline_id, ts)
|
|
216
|
+
}
|
|
217
|
+
|
|
165
218
|
const triggerOptions = [
|
|
166
219
|
{ value: 'all', label: 'All Triggers' },
|
|
167
220
|
{ value: 'schedule', label: 'Schedule' },
|
|
@@ -238,14 +291,6 @@ export function PipelinesPage() {
|
|
|
238
291
|
return isActive ? 'bg-green-100 text-green-800' : 'bg-slate-100 text-slate-800'
|
|
239
292
|
}
|
|
240
293
|
|
|
241
|
-
const handleTogglePipeline = (pipeline: Pipeline) => {
|
|
242
|
-
console.log('Toggle pipeline:', pipeline.id)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const handleExecutePipeline = (pipeline: Pipeline) => {
|
|
246
|
-
console.log('Execute pipeline:', pipeline.id)
|
|
247
|
-
}
|
|
248
|
-
|
|
249
294
|
const handleViewExecutions = (pipeline: Pipeline) => {
|
|
250
295
|
navigate(`/spine-framework/admin/configs/pipelines/${pipeline.id}/executions`)
|
|
251
296
|
}
|
|
@@ -288,7 +333,7 @@ export function PipelinesPage() {
|
|
|
288
333
|
},
|
|
289
334
|
{
|
|
290
335
|
title: "Runs Today",
|
|
291
|
-
value:
|
|
336
|
+
value: execStats?.total ?? 0,
|
|
292
337
|
icon: Clock,
|
|
293
338
|
iconColor: "text-orange-600"
|
|
294
339
|
}
|
|
@@ -356,8 +401,8 @@ export function PipelinesPage() {
|
|
|
356
401
|
onSort={handleSort}
|
|
357
402
|
/>
|
|
358
403
|
<SortableTableHeader
|
|
359
|
-
title="
|
|
360
|
-
sortKey="
|
|
404
|
+
title="App"
|
|
405
|
+
sortKey="app_id"
|
|
361
406
|
currentSortKey={sortKey}
|
|
362
407
|
currentSortDirection={sortDirection}
|
|
363
408
|
onSort={handleSort}
|
|
@@ -403,10 +448,10 @@ export function PipelinesPage() {
|
|
|
403
448
|
</Badge>
|
|
404
449
|
</td>
|
|
405
450
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-900">
|
|
406
|
-
{pipeline.
|
|
451
|
+
{(pipeline.app_id && appNameById.get(pipeline.app_id)) || '—'}
|
|
407
452
|
</td>
|
|
408
453
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">
|
|
409
|
-
{pipeline.
|
|
454
|
+
{lastExecByPipeline.get(pipeline.id) ? formatDateTime(lastExecByPipeline.get(pipeline.id)!) : 'Never'}
|
|
410
455
|
</td>
|
|
411
456
|
<td className="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
|
412
457
|
<div className="flex justify-end space-x-2" onClick={(e) => e.stopPropagation()}>
|
|
@@ -434,10 +479,10 @@ export function PipelinesPage() {
|
|
|
434
479
|
</AdminListPage>
|
|
435
480
|
)
|
|
436
481
|
}
|
|
437
|
-
// CIL[
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
482
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/PipelinesPage.tsx:PipelinesPage:component"]
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
|