spine-framework 0.4.4 → 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/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/admin-data.ts +39 -28
- package/.framework/functions/ai-agents.ts +10 -6
- 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/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 +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- 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/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 +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- 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/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/pages/NotFoundPage.tsx +62 -31
- 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/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 +4 -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 +479 -44
- 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/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -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/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- 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,28 @@
|
|
|
1
1
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module TriggerDetailPage
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The TriggerDetailPage module is responsible for displaying and managing the details of a specific trigger within the admin interface. It allows users to view, edit, and configure trigger settings, integrating with the backend API for data fetching and updates. INVARIANT: The user must have appropriate permissions to access this page.
|
|
9
|
+
*
|
|
10
|
+
* @seeAlso apiFetch (for data fetching functionality).
|
|
11
|
+
* @seeAlso PageInstructions (for user guidance on the page).
|
|
12
|
+
* @seeAlso EntitySelect (for selecting entities related to triggers).
|
|
13
|
+
* @seeAlso utils (for utility functions like formatDateTime).
|
|
14
|
+
*
|
|
15
|
+
* @cil-generated
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
|
|
11
27
|
|
|
12
28
|
|
|
@@ -20,30 +36,40 @@ import { Textarea } from '../../components/ui/textarea'
|
|
|
20
36
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../components/ui/select'
|
|
21
37
|
import { Checkbox } from '../../components/ui/checkbox'
|
|
22
38
|
import { Label } from '../../components/ui/label'
|
|
39
|
+
import { AppSelect, PipelineSelect } from '../../components/admin/EntitySelect'
|
|
23
40
|
import { Card, CardContent, CardHeader, CardTitle } from '../../components/ui/card'
|
|
24
41
|
import { Skeleton } from '../../components/ui/skeleton'
|
|
25
42
|
import { Alert, AlertDescription, AlertTitle } from '../../components/ui/alert'
|
|
26
43
|
import { Badge } from '../../components/ui/badge'
|
|
27
44
|
import { ArrowLeft, Zap, AlertCircle } from 'lucide-react'
|
|
28
45
|
import { formatDateTime } from '../../lib/utils'
|
|
29
|
-
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
30
|
-
|
|
31
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Provides the admin trigger detail page module'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
32
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
33
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
34
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
35
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
36
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
37
46
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:module_header:module_header"]
|
|
38
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:Trigger:interface" type="interface" identity="Trigger" parent="~/.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
39
|
-
// CIL[DOC-MACRO purpose="Defines the shape of a trigger record"]
|
|
40
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provides the TypeScript interface for trigger data used in the admin page"]
|
|
41
|
-
// CIL[DOC-CONTEXT module="triggers" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
42
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Trigger type definition" errors="none" side_effects="none"]
|
|
43
|
-
// CIL[DOC-MICRO logic_summary="Declares the fields, optionality, and types for a Trigger record" notable_decisions="[]"]
|
|
44
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
45
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
46
47
|
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:Trigger:interface" type="interface" identity="Trigger" parent="~/.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
66
|
+
/**
|
|
67
|
+
* The Trigger interface defines the structure for a trigger object used in the application, encapsulating essential properties related to the trigger's identity, configuration, and state. It serves to standardize the representation of triggers across the application.
|
|
68
|
+
*
|
|
69
|
+
* @sideEffects none
|
|
70
|
+
* @stability stable
|
|
71
|
+
* @cil-generated
|
|
72
|
+
*/
|
|
47
73
|
interface Trigger {
|
|
48
74
|
id: string
|
|
49
75
|
name: string
|
|
@@ -57,23 +83,39 @@ interface Trigger {
|
|
|
57
83
|
created_at: string
|
|
58
84
|
updated_at: string
|
|
59
85
|
}
|
|
60
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of a trigger record'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
61
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
62
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
63
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
64
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
65
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
66
86
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:Trigger:interface"]
|
|
67
87
|
|
|
68
|
-
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:TriggerDetailPage:component" type="component" identity="TriggerDetailPage" parent="~/.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
69
|
-
// CIL[DOC-MACRO purpose="Renders and manages the trigger create/edit form"]
|
|
70
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Fetches trigger data, manages form state, validates JSON, and saves the trigger via the admin API"]
|
|
71
|
-
// CIL[DOC-CONTEXT module="triggers" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
72
|
-
// CIL[DOC-CONTRACT inputs="id route param" outputs="JSX detail page with edit/create controls" errors="API or JSON parse failures" side_effects="Updates form state, navigates on save"]
|
|
73
|
-
// CIL[DOC-MICRO logic_summary="Loads a trigger, supports create and edit modes, validates config and metadata JSON, persists via apiFetch, and renders PageInstructions" notable_decisions="[]"]
|
|
74
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
75
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
76
88
|
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:TriggerDetailPage:component" type="component" identity="TriggerDetailPage" parent="~/.framework/src/pages/admin/TriggerDetailPage.tsx"]
|
|
107
|
+
/**
|
|
108
|
+
* The TriggerDetailPage component manages the creation and editing of trigger configurations in an admin interface. It handles fetching existing trigger data or initializing a new trigger form based on the provided ID.
|
|
109
|
+
*
|
|
110
|
+
* @macro Component for managing trigger details in an admin interface.
|
|
111
|
+
* @micro Utilizes React hooks for state management and side effects, including fetching data from an external API.
|
|
112
|
+
* @outputSpec JSX.Element
|
|
113
|
+
* @sideEffects Fetches trigger data from an external API, updates application state.
|
|
114
|
+
* @stability stable
|
|
115
|
+
* @calls apiFetch, useParams, useNavigate
|
|
116
|
+
* @errorHandling Sets error state on failure to fetch or save trigger data.
|
|
117
|
+
* @cil-generated
|
|
118
|
+
*/
|
|
77
119
|
export function TriggerDetailPage() {
|
|
78
120
|
const { id } = useParams<{ id: string }>()
|
|
79
121
|
const navigate = useNavigate()
|
|
@@ -174,54 +216,18 @@ export function TriggerDetailPage() {
|
|
|
174
216
|
) : !isCreateMode && <Button onClick={() => setIsEditing(true)}>Edit</Button>}
|
|
175
217
|
</div>
|
|
176
218
|
</div>
|
|
177
|
-
|
|
178
|
-
<PageInstructions
|
|
179
|
-
description="Define a trigger that reacts to events and invokes a pipeline."
|
|
180
|
-
sections={[
|
|
181
|
-
{ title: 'What this trigger controls', content: 'A trigger listens for a Spine event_type and, when active, hands the event payload to a pipeline for processing. The config and metadata JSON objects configure the trigger engine.' },
|
|
182
|
-
{ title: 'Fields explained', content: <ul className="list-disc pl-4 space-y-1">
|
|
183
|
-
<li><strong>Name</strong> — string. The display name. Missing name prevents saving.</li>
|
|
184
|
-
<li><strong>Event Type</strong> — string. The event to listen to, e.g. item.created. Must match the emitted event name exactly.</li>
|
|
185
|
-
<li><strong>App ID</strong> — string. Optional owning app UUID; blank means account-scoped.</li>
|
|
186
|
-
<li><strong>Pipeline ID</strong> — string. The pipeline to invoke when the trigger fires.</li>
|
|
187
|
-
<li><strong>Active</strong> — checkbox. Inactive triggers ignore all events.</li>
|
|
188
|
-
<li><strong>Description</strong> — string. Optional notes.</li>
|
|
189
|
-
<li><strong>Config (JSON)</strong> — JSON. Trigger engine configuration, e.g. filters or payload mapping.</li>
|
|
190
|
-
<li><strong>Metadata (JSON)</strong> — JSON. Optional metadata about the trigger.</li>
|
|
191
|
-
</ul> },
|
|
192
|
-
{ title: 'Options and values', content: <ul className="list-disc pl-4 space-y-1">
|
|
193
|
-
<li><strong>Active</strong>: enabled means the trigger subscribes to the event bus; disabled means it is ignored.</li>
|
|
194
|
-
</ul> },
|
|
195
|
-
{ title: 'Downstream impact', content: <ul className="list-disc pl-4 space-y-1">
|
|
196
|
-
<li>The event bus routes matching events to active triggers. A wrong Event Type means no execution.</li>
|
|
197
|
-
<li>Pipeline ID must refer to an existing pipeline; otherwise the event is dropped.</li>
|
|
198
|
-
<li>Config JSON is passed to the trigger engine; bad config can cause repeated failures.</li>
|
|
199
|
-
</ul> },
|
|
200
|
-
{ title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
|
|
201
|
-
<li>In create mode, enter the name, event type, and pipeline ID, and provide Config and Metadata as valid JSON.</li>
|
|
202
|
-
<li>Click Create or Save. The form validates JSON and required fields.</li>
|
|
203
|
-
<li>After saving, the trigger subscribes to the event bus when active.</li>
|
|
204
|
-
</ol> },
|
|
205
|
-
{ title: 'Common mistakes', content: <ul className="list-disc pl-4 space-y-1">
|
|
206
|
-
<li>Using a typo in the Event Type so the trigger never matches.</li>
|
|
207
|
-
<li>Forgetting to set Active after saving.</li>
|
|
208
|
-
<li>Writing Config as a string instead of a JSON object.</li>
|
|
209
|
-
</ul> },
|
|
210
|
-
]}
|
|
211
|
-
/>
|
|
212
|
-
|
|
213
219
|
<Card><CardContent className="p-6 space-y-6">
|
|
214
220
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
215
221
|
<div className="space-y-4">
|
|
216
222
|
<h3 className="text-sm font-medium text-muted-foreground">Trigger</h3>
|
|
217
223
|
<div className="space-y-2"><Label>Name</Label>{isEditing ? <Input value={formData.name} onChange={e => setFormData({...formData, name: e.target.value})} /> : <div className="text-sm">{trigger?.name}</div>}</div>
|
|
218
|
-
<div className="space-y-2"><Label>App
|
|
224
|
+
<div className="space-y-2"><Label>App</Label>{isEditing ? <AppSelect value={formData.app_id} onChange={v => setFormData({...formData, app_id: v})} /> : <div className="text-sm font-mono">{trigger?.app_id || '—'}</div>}</div>
|
|
219
225
|
<div className="space-y-2"><Label>Event Type</Label>{isEditing ? <Input value={formData.event_type} onChange={e => setFormData({...formData, event_type: e.target.value})} placeholder="e.g., item.created" /> : <Badge>{trigger?.event_type}</Badge>}</div>
|
|
220
226
|
<div className="space-y-2"><Label>Active</Label>{isEditing ? <div className="flex items-center gap-2"><Checkbox id="active" checked={formData.is_active} onCheckedChange={c => setFormData({...formData, is_active: c === true})} /><Label htmlFor="active">Enabled</Label></div> : <div className="text-sm">{trigger?.is_active ? 'Yes' : 'No'}</div>}</div>
|
|
221
227
|
</div>
|
|
222
228
|
<div className="space-y-4">
|
|
223
229
|
<h3 className="text-sm font-medium text-muted-foreground">Action</h3>
|
|
224
|
-
<div className="space-y-2"><Label>Pipeline
|
|
230
|
+
<div className="space-y-2"><Label>Pipeline</Label>{isEditing ? <PipelineSelect value={formData.pipeline_id} onChange={v => setFormData({...formData, pipeline_id: v})} /> : <div className="text-sm font-mono">{trigger?.pipeline_id || '—'}</div>}</div>
|
|
225
231
|
</div>
|
|
226
232
|
</div>
|
|
227
233
|
<div className="mt-6 space-y-2"><Label>Description</Label>{isEditing ? <Textarea value={formData.description} onChange={e => setFormData({...formData, description: e.target.value})} rows={2} /> : <div className="text-sm">{trigger?.description || '—'}</div>}</div>
|
|
@@ -233,10 +239,11 @@ export function TriggerDetailPage() {
|
|
|
233
239
|
</div>
|
|
234
240
|
)
|
|
235
241
|
}
|
|
236
|
-
// CIL[
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
242
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/TriggerDetailPage.tsx:TriggerDetailPage:component"]
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/TriggersPage.tsx"]
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @module TriggersPage
|
|
4
|
+
* @audience internal
|
|
5
|
+
* @layer app-specific
|
|
6
|
+
* @stability stable
|
|
7
|
+
*
|
|
8
|
+
* The TriggersPage module provides an interface for managing triggers within the admin section of the application. It allows users to view, create, and manipulate triggers through a user-friendly UI. This module relies on various UI components and hooks for API interaction and state management.
|
|
9
|
+
*
|
|
10
|
+
* @seeAlso useApi (provides API interaction hooks).
|
|
11
|
+
* @seeAlso LoadingSpinner (displays loading state).
|
|
12
|
+
* @seeAlso AdminListPage (base component for admin list views).
|
|
13
|
+
* @seeAlso SortableTableHeader (enables sorting functionality in tables).
|
|
14
|
+
*
|
|
15
|
+
* @cil-generated
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
|
|
11
27
|
|
|
12
28
|
import React, { useState } from 'react'
|
|
@@ -21,22 +37,32 @@ import { Badge } from '../../components/ui/badge'
|
|
|
21
37
|
import { formatDateTime } from '../../lib/utils'
|
|
22
38
|
import { AdminListPage } from '../../components/admin/AdminListPage'
|
|
23
39
|
import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
24
|
-
|
|
25
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Admin triggers management module for the Spine framework'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
26
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
27
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
28
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
29
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
30
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
31
40
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:module_header:module_header"]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
32
58
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:Trigger:interface" type="interface" identity="Trigger" parent="~/.framework/src/pages/admin/TriggersPage.tsx"]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
/**
|
|
60
|
+
* The Trigger interface defines the structure for trigger objects used in the admin panel, encapsulating properties related to the trigger's identity, configuration, and state. It serves as a blueprint for managing triggers within the application.
|
|
61
|
+
*
|
|
62
|
+
* @sideEffects none
|
|
63
|
+
* @stability stable
|
|
64
|
+
* @cil-generated
|
|
65
|
+
*/
|
|
40
66
|
interface Trigger {
|
|
41
67
|
id: string
|
|
42
68
|
name: string
|
|
@@ -50,26 +76,36 @@ interface Trigger {
|
|
|
50
76
|
updated_at: string
|
|
51
77
|
created_by: string
|
|
52
78
|
account_id: string
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
next_execution?: string
|
|
79
|
+
trigger_count?: number
|
|
80
|
+
last_triggered?: string
|
|
56
81
|
}
|
|
57
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Define the data shape for a Trigger record'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
58
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
59
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
60
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
61
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
62
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
82
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:Trigger:interface"]
|
|
64
83
|
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
65
101
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:TriggerExecution:interface" type="interface" identity="TriggerExecution" parent="~/.framework/src/pages/admin/TriggersPage.tsx"]
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
102
|
+
/**
|
|
103
|
+
* The TriggerExecution interface defines the structure for tracking the execution status of triggers within the system. It captures essential details such as the trigger's ID, execution status, timestamps, and any associated data or errors.
|
|
104
|
+
*
|
|
105
|
+
* @sideEffects none
|
|
106
|
+
* @stability stable
|
|
107
|
+
* @cil-generated
|
|
108
|
+
*/
|
|
73
109
|
interface TriggerExecution {
|
|
74
110
|
id: string
|
|
75
111
|
trigger_id: string
|
|
@@ -80,24 +116,40 @@ interface TriggerExecution {
|
|
|
80
116
|
result?: Record<string, any>
|
|
81
117
|
error?: string
|
|
82
118
|
}
|
|
83
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Define the data shape for a trigger execution record'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
84
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
85
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
86
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
87
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
88
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
89
119
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:TriggerExecution:interface"]
|
|
90
120
|
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
91
138
|
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:TriggersPage:component" type="component" identity="TriggersPage" parent="~/.framework/src/pages/admin/TriggersPage.tsx"]
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
139
|
+
/**
|
|
140
|
+
* The TriggersPage component manages the display and filtering of trigger events in the admin interface. It allows users to search, sort, and filter triggers based on type and status.
|
|
141
|
+
*
|
|
142
|
+
* @macro User interface component for managing trigger events.
|
|
143
|
+
* @micro Utilizes state management and API calls to fetch and filter trigger data dynamically.
|
|
144
|
+
* @outputSpec JSX.Element — renders the triggers page UI.
|
|
145
|
+
* @throws Error — if the API response is not ok
|
|
146
|
+
* @sideEffects API call to '/api/triggers?action=list'
|
|
147
|
+
* @stability stable
|
|
148
|
+
* @calls apiFetch
|
|
149
|
+
* @errorHandling throws an error if the API response is not ok
|
|
150
|
+
* @cil-generated
|
|
151
|
+
*/
|
|
99
152
|
export function TriggersPage() {
|
|
100
|
-
console.log('TriggersPage rendering...')
|
|
101
153
|
const navigate = useNavigate()
|
|
102
154
|
const [searchTerm, setSearchTerm] = useState('')
|
|
103
155
|
const [selectedType, setSelectedType] = useState('all')
|
|
@@ -107,28 +159,10 @@ export function TriggersPage() {
|
|
|
107
159
|
|
|
108
160
|
const { data: triggers, loading, error, refetch } = useApi<Trigger[]>(
|
|
109
161
|
async ({ signal }: { signal?: AbortSignal }) => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
console.log('Response status:', response.status)
|
|
115
|
-
|
|
116
|
-
if (!response.ok) {
|
|
117
|
-
console.error('Response not ok:', response.statusText)
|
|
118
|
-
throw new Error(`Failed to fetch triggers: ${response.statusText}`)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const result = await response.json()
|
|
122
|
-
console.log('Raw API result:', result)
|
|
123
|
-
|
|
124
|
-
const triggers = result.data || result
|
|
125
|
-
console.log('Triggers after processing:', triggers)
|
|
126
|
-
|
|
127
|
-
return triggers
|
|
128
|
-
} catch (error) {
|
|
129
|
-
console.error('Error in TriggersPage:', error)
|
|
130
|
-
throw error
|
|
131
|
-
}
|
|
162
|
+
const response = await apiFetch('/api/triggers?action=list', { signal })
|
|
163
|
+
if (!response.ok) throw new Error('Failed to fetch triggers')
|
|
164
|
+
const result = await response.json()
|
|
165
|
+
return result.data || result
|
|
132
166
|
},
|
|
133
167
|
{ immediate: true }
|
|
134
168
|
)
|
|
@@ -177,9 +211,6 @@ export function TriggersPage() {
|
|
|
177
211
|
return 0
|
|
178
212
|
})
|
|
179
213
|
|
|
180
|
-
console.log('TriggersPage - triggers:', triggers)
|
|
181
|
-
console.log('TriggersPage - filteredTriggers:', filteredTriggers)
|
|
182
|
-
|
|
183
214
|
const getTriggerIcon = (triggerType: string) => {
|
|
184
215
|
switch (triggerType) {
|
|
185
216
|
case 'item_created':
|
|
@@ -222,14 +253,6 @@ export function TriggersPage() {
|
|
|
222
253
|
return isActive ? 'bg-green-100 text-green-800' : 'bg-slate-100 text-slate-800'
|
|
223
254
|
}
|
|
224
255
|
|
|
225
|
-
const handleToggleTrigger = (trigger: Trigger) => {
|
|
226
|
-
console.log('Toggle trigger:', trigger.id)
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const handleExecuteTrigger = (trigger: Trigger) => {
|
|
230
|
-
console.log('Execute trigger:', trigger.id)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
256
|
const handleViewExecutions = (trigger: Trigger) => {
|
|
234
257
|
navigate(`/spine-framework/admin/configs/triggers/${trigger.id}/executions`)
|
|
235
258
|
}
|
|
@@ -271,8 +294,8 @@ export function TriggersPage() {
|
|
|
271
294
|
iconColor: "text-green-600"
|
|
272
295
|
},
|
|
273
296
|
{
|
|
274
|
-
title: "
|
|
275
|
-
value:
|
|
297
|
+
title: "Total Fires",
|
|
298
|
+
value: (triggers || []).reduce((sum, t) => sum + (t.trigger_count || 0), 0),
|
|
276
299
|
icon: Clock,
|
|
277
300
|
iconColor: "text-orange-600"
|
|
278
301
|
}
|
|
@@ -340,15 +363,15 @@ export function TriggersPage() {
|
|
|
340
363
|
onSort={handleSort}
|
|
341
364
|
/>
|
|
342
365
|
<SortableTableHeader
|
|
343
|
-
title="
|
|
344
|
-
sortKey="
|
|
366
|
+
title="Fires"
|
|
367
|
+
sortKey="trigger_count"
|
|
345
368
|
currentSortKey={sortKey}
|
|
346
369
|
currentSortDirection={sortDirection}
|
|
347
370
|
onSort={handleSort}
|
|
348
371
|
/>
|
|
349
372
|
<SortableTableHeader
|
|
350
|
-
title="Last
|
|
351
|
-
sortKey="
|
|
373
|
+
title="Last Fired"
|
|
374
|
+
sortKey="last_triggered"
|
|
352
375
|
currentSortKey={sortKey}
|
|
353
376
|
currentSortDirection={sortDirection}
|
|
354
377
|
onSort={handleSort}
|
|
@@ -387,10 +410,10 @@ export function TriggersPage() {
|
|
|
387
410
|
</Badge>
|
|
388
411
|
</td>
|
|
389
412
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-900">
|
|
390
|
-
{trigger.
|
|
413
|
+
{trigger.trigger_count ?? 0}
|
|
391
414
|
</td>
|
|
392
415
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">
|
|
393
|
-
{trigger.
|
|
416
|
+
{trigger.last_triggered ? formatDateTime(trigger.last_triggered) : 'Never'}
|
|
394
417
|
</td>
|
|
395
418
|
<td className="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
|
396
419
|
<div className="flex justify-end space-x-2" onClick={(e) => e.stopPropagation()}>
|
|
@@ -418,10 +441,12 @@ export function TriggersPage() {
|
|
|
418
441
|
</AdminListPage>
|
|
419
442
|
)
|
|
420
443
|
}
|
|
421
|
-
// CIL[DOC-VECTOR type="context" content="purpose='Render the admin triggers list page with filtering, sorting, and navigation'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/LoadingSpinner.tsx"]
|
|
422
|
-
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
423
|
-
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
424
|
-
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
425
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
426
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
427
444
|
// CIL[END stable_id="~/.framework/src/pages/admin/TriggersPage.tsx:TriggersPage:component"]
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
|