spine-framework 0.3.125 → 0.3.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +169 -97
- package/.framework/cli/commands/generate.ts +82 -161
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +222 -347
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +162 -14
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +687 -533
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +173 -145
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +192 -115
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +3 -3
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// CIL[BEGIN chunk_id="deliveriespage_module_header_1784200009" type="module_header" identity="module_header" parent="none"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin page for webhook deliveries ledger"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render a filterable, sortable list of webhook_deliveries"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="DeliveriesPage" layer="presentation" related_files="[".framework/functions/deliveries.ts",".framework/src/components/admin/AdminListPage.tsx",".framework/src/apps/admin/index.tsx",".framework/src/components/admin/AdminSidebar.tsx"]"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="API calls, navigation"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Fetches deliveries from /api/deliveries, filters by direction/status, and renders a table." notable_decisions="["Manual retry is not wired in the first pass; the action column is a placeholder."]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="experimental"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
10
|
+
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/deliveries.ts, .framework/src/components/admin/AdminListPage.tsx, .framework/src/apps/admin/index.tsx, .framework/src/components/admin/AdminSidebar.tsx."]
|
|
11
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
12
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
13
|
+
// CIL[DOC-VECTOR type="constraint" content="Requires /api/deliveries endpoint."]
|
|
14
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="Standard admin list page."]
|
|
15
|
+
// CIL[DOC-VECTOR type="user_journey" content="Admin monitors inbound and outbound webhook attempts."]
|
|
16
|
+
|
|
17
|
+
import { useState } from 'react'
|
|
18
|
+
import { RefreshCw, Truck, Inbox } from 'lucide-react'
|
|
19
|
+
import { formatDateTime } from '../../lib/utils'
|
|
20
|
+
import { apiFetch } from '../../lib/api'
|
|
21
|
+
import { AdminListPage } from '../../components/admin/AdminListPage'
|
|
22
|
+
import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
23
|
+
import { useApi } from '../../hooks/useApi'
|
|
24
|
+
|
|
25
|
+
interface Delivery {
|
|
26
|
+
id: string
|
|
27
|
+
direction: 'inbound' | 'outbound'
|
|
28
|
+
status: 'pending' | 'processing' | 'delivered' | 'failed'
|
|
29
|
+
integration_id: string
|
|
30
|
+
api_key_id?: string
|
|
31
|
+
record_id?: string
|
|
32
|
+
action_slug?: string
|
|
33
|
+
handler_name?: string
|
|
34
|
+
external_id?: string
|
|
35
|
+
attempt_count: number
|
|
36
|
+
max_attempts: number
|
|
37
|
+
next_attempt_at?: string
|
|
38
|
+
last_error?: string
|
|
39
|
+
response_status?: number
|
|
40
|
+
duration_ms?: number
|
|
41
|
+
created_at: string
|
|
42
|
+
updated_at: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function DeliveriesPage() {
|
|
46
|
+
const [searchTerm, setSearchTerm] = useState('')
|
|
47
|
+
const [selectedStatus, setSelectedStatus] = useState('all')
|
|
48
|
+
const [selectedDirection, setSelectedDirection] = useState('all')
|
|
49
|
+
const [sortKey, setSortKey] = useState('created_at')
|
|
50
|
+
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc')
|
|
51
|
+
|
|
52
|
+
const { data: deliveries, loading, error, refetch } = useApi<Delivery[]>(
|
|
53
|
+
async () => {
|
|
54
|
+
const response = await apiFetch('/api/deliveries')
|
|
55
|
+
if (!response.ok) throw new Error('Failed to fetch deliveries')
|
|
56
|
+
const result = await response.json()
|
|
57
|
+
return (result.data || result) as Delivery[]
|
|
58
|
+
},
|
|
59
|
+
{ immediate: true }
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
const filtered = (deliveries || []).filter(d => {
|
|
63
|
+
const matchesSearch = d.id.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
64
|
+
(d.handler_name || '').toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
65
|
+
(d.action_slug || '').toLowerCase().includes(searchTerm.toLowerCase())
|
|
66
|
+
const matchesStatus = selectedStatus === 'all' || d.status === selectedStatus
|
|
67
|
+
const matchesDirection = selectedDirection === 'all' || d.direction === selectedDirection
|
|
68
|
+
return matchesSearch && matchesStatus && matchesDirection
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
const handleSort = (key: string) => {
|
|
72
|
+
if (sortKey === key) {
|
|
73
|
+
setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
|
|
74
|
+
} else {
|
|
75
|
+
setSortKey(key)
|
|
76
|
+
setSortDirection('asc')
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const sorted = [...(filtered || [])].sort((a, b) => {
|
|
81
|
+
let aValue: any = a[sortKey as keyof Delivery]
|
|
82
|
+
let bValue: any = b[sortKey as keyof Delivery]
|
|
83
|
+
|
|
84
|
+
if (typeof aValue === 'string') {
|
|
85
|
+
return sortDirection === 'asc'
|
|
86
|
+
? aValue.localeCompare(bValue)
|
|
87
|
+
: bValue.localeCompare(aValue)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (typeof aValue === 'number') {
|
|
91
|
+
return sortDirection === 'asc' ? aValue - bValue : bValue - aValue
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return 0
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
const statsCards = [
|
|
98
|
+
{
|
|
99
|
+
title: 'Total',
|
|
100
|
+
value: (deliveries || []).length,
|
|
101
|
+
icon: Truck,
|
|
102
|
+
iconColor: 'text-blue-500'
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
title: 'Pending',
|
|
106
|
+
value: (deliveries || []).filter(d => d.status === 'pending').length,
|
|
107
|
+
icon: RefreshCw,
|
|
108
|
+
iconColor: 'text-yellow-500'
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
title: 'Delivered',
|
|
112
|
+
value: (deliveries || []).filter(d => d.status === 'delivered').length,
|
|
113
|
+
icon: Inbox,
|
|
114
|
+
iconColor: 'text-green-500'
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
const filters = [
|
|
119
|
+
{
|
|
120
|
+
label: 'Direction',
|
|
121
|
+
value: selectedDirection,
|
|
122
|
+
options: [
|
|
123
|
+
{ value: 'all', label: 'All' },
|
|
124
|
+
{ value: 'inbound', label: 'Inbound' },
|
|
125
|
+
{ value: 'outbound', label: 'Outbound' }
|
|
126
|
+
],
|
|
127
|
+
onChange: setSelectedDirection
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
label: 'Status',
|
|
131
|
+
value: selectedStatus,
|
|
132
|
+
options: [
|
|
133
|
+
{ value: 'all', label: 'All Status' },
|
|
134
|
+
{ value: 'pending', label: 'Pending' },
|
|
135
|
+
{ value: 'processing', label: 'Processing' },
|
|
136
|
+
{ value: 'delivered', label: 'Delivered' },
|
|
137
|
+
{ value: 'failed', label: 'Failed' }
|
|
138
|
+
],
|
|
139
|
+
onChange: setSelectedStatus
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<AdminListPage
|
|
145
|
+
title="Deliveries"
|
|
146
|
+
description="Inbound and outbound webhook delivery attempts"
|
|
147
|
+
searchPlaceholder="Search deliveries..."
|
|
148
|
+
searchValue={searchTerm}
|
|
149
|
+
onSearchChange={setSearchTerm}
|
|
150
|
+
filters={filters}
|
|
151
|
+
statsCards={statsCards}
|
|
152
|
+
loading={loading}
|
|
153
|
+
error={error}
|
|
154
|
+
emptyMessage="No deliveries found"
|
|
155
|
+
emptyIcon={Truck}
|
|
156
|
+
>
|
|
157
|
+
<table className="min-w-full divide-y divide-slate-200">
|
|
158
|
+
<thead className="bg-slate-50">
|
|
159
|
+
<tr>
|
|
160
|
+
<SortableTableHeader title="Direction" sortKey="direction" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
161
|
+
<SortableTableHeader title="Status" sortKey="status" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
162
|
+
<SortableTableHeader title="Integration" sortKey="integration_id" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
163
|
+
<SortableTableHeader title="Handler/Action" sortKey="handler_name" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
164
|
+
<SortableTableHeader title="Attempts" sortKey="attempt_count" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
165
|
+
<SortableTableHeader title="Next Attempt" sortKey="next_attempt_at" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
166
|
+
<SortableTableHeader title="Created" sortKey="created_at" currentSortKey={sortKey} currentSortDirection={sortDirection} onSort={handleSort} />
|
|
167
|
+
</tr>
|
|
168
|
+
</thead>
|
|
169
|
+
<tbody className="bg-white divide-y divide-slate-200">
|
|
170
|
+
{sorted.map((d) => (
|
|
171
|
+
<tr key={d.id} className="hover:bg-slate-50">
|
|
172
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-900 capitalize">{d.direction}</td>
|
|
173
|
+
<td className="px-6 py-4 whitespace-nowrap">
|
|
174
|
+
<span className={`inline-flex px-2 py-0.5 text-xs font-medium rounded-md ${
|
|
175
|
+
d.status === 'delivered' ? 'bg-green-100 text-green-700' :
|
|
176
|
+
d.status === 'failed' ? 'bg-red-100 text-red-700' :
|
|
177
|
+
d.status === 'processing' ? 'bg-blue-100 text-blue-700' :
|
|
178
|
+
'bg-yellow-100 text-yellow-700'
|
|
179
|
+
}`}>
|
|
180
|
+
{d.status}
|
|
181
|
+
</span>
|
|
182
|
+
</td>
|
|
183
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500 font-mono truncate max-w-[180px]">{d.integration_id}</td>
|
|
184
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{d.handler_name || d.action_slug || '—'}</td>
|
|
185
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{d.attempt_count} / {d.max_attempts}</td>
|
|
186
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{d.next_attempt_at ? formatDateTime(d.next_attempt_at) : '—'}</td>
|
|
187
|
+
<td className="px-6 py-4 whitespace-nowrap text-sm text-slate-500">{formatDateTime(d.created_at)}</td>
|
|
188
|
+
</tr>
|
|
189
|
+
))}
|
|
190
|
+
</tbody>
|
|
191
|
+
</table>
|
|
192
|
+
</AdminListPage>
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// CIL[END chunk_id="deliveriespage_module_header_1784200009"]
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/pages/admin/DesignedPage
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-page
|
|
5
|
-
* @stability testing
|
|
6
|
-
*
|
|
7
|
-
* A properly designed page with left navigation and content area.
|
|
8
|
-
* Demonstrates shadcn components in a real application context.
|
|
9
|
-
*/
|
|
10
1
|
|
|
2
|
+
|
|
3
|
+
// CIL[BEGIN chunk_id="designedpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
|
|
4
|
+
// CIL[DOC-MACRO purpose="Import dependencies for DesignedPage component"]
|
|
5
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks and comprehensive UI components"]
|
|
6
|
+
// CIL[DOC-CONTEXT module="DesignedPage" layer="presentation" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
7
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
|
|
8
|
+
// CIL[DOC-MICRO logic_summary="Imports React state management and extensive UI component library" 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.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"]
|
|
11
18
|
import { useState } from 'react'
|
|
12
19
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
|
|
13
20
|
import { Button } from '../../components/ui/button'
|
|
@@ -73,7 +80,21 @@ import {
|
|
|
73
80
|
Shield,
|
|
74
81
|
Zap
|
|
75
82
|
} from 'lucide-react'
|
|
76
|
-
|
|
83
|
+
// CIL[END chunk_id="designedpage_module_header_1783668265"]
|
|
84
|
+
// CIL[BEGIN chunk_id="designedpage_function_designedpage_1783668265" type="function" identity="DesignedPage" parent="none"]
|
|
85
|
+
// CIL[DOC-MACRO purpose="Main DesignedPage component implementation"]
|
|
86
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render comprehensive admin dashboard with sidebar, header, and main content"]
|
|
87
|
+
// CIL[DOC-CONTEXT module="DesignedPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
88
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="none" side_effects="State management"]
|
|
89
|
+
// CIL[DOC-MICRO logic_summary="Creates full-featured dashboard UI with navigation, stats, tables, and settings" notable_decisions="[]"]
|
|
90
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
91
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
92
|
+
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/layout/Sidebar.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
93
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
94
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
95
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
96
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
97
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
77
98
|
export function DesignedPage() {
|
|
78
99
|
const [selectedTab, setSelectedTab] = useState('overview')
|
|
79
100
|
const [searchQuery, setSearchQuery] = useState('')
|
|
@@ -82,7 +103,6 @@ export function DesignedPage() {
|
|
|
82
103
|
|
|
83
104
|
return (
|
|
84
105
|
<div className="flex min-h-screen bg-background">
|
|
85
|
-
{/* Left Navigation */}
|
|
86
106
|
<div className="w-64 flex-shrink-0 border-r border-border bg-card">
|
|
87
107
|
<div className="flex h-16 items-center px-6 border-b border-border">
|
|
88
108
|
<div className="flex items-center gap-2">
|
|
@@ -141,9 +161,7 @@ export function DesignedPage() {
|
|
|
141
161
|
</nav>
|
|
142
162
|
</div>
|
|
143
163
|
|
|
144
|
-
{/* Main Content Area */}
|
|
145
164
|
<div className="flex-1 flex flex-col min-w-0">
|
|
146
|
-
{/* Header */}
|
|
147
165
|
<header className="h-16 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 flex-shrink-0">
|
|
148
166
|
<div className="flex h-16 items-center justify-between px-6">
|
|
149
167
|
<div className="flex items-center gap-4">
|
|
@@ -195,10 +213,8 @@ export function DesignedPage() {
|
|
|
195
213
|
</div>
|
|
196
214
|
</header>
|
|
197
215
|
|
|
198
|
-
{/* Page Content */}
|
|
199
216
|
<main className="flex-1 overflow-auto p-6">
|
|
200
217
|
<div className="max-w-7xl mx-auto space-y-6">
|
|
201
|
-
{/* Stats Cards */}
|
|
202
218
|
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-4">
|
|
203
219
|
<Card>
|
|
204
220
|
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
|
|
@@ -253,7 +269,6 @@ export function DesignedPage() {
|
|
|
253
269
|
</Card>
|
|
254
270
|
</div>
|
|
255
271
|
|
|
256
|
-
{/* Main Content Tabs */}
|
|
257
272
|
<Tabs value={selectedTab} onValueChange={setSelectedTab} className="space-y-4">
|
|
258
273
|
<TabsList className="grid w-full grid-cols-4">
|
|
259
274
|
<TabsTrigger value="overview">Overview</TabsTrigger>
|
|
@@ -264,7 +279,6 @@ export function DesignedPage() {
|
|
|
264
279
|
|
|
265
280
|
<TabsContent value="overview" className="space-y-4">
|
|
266
281
|
<div className="grid gap-6 lg:grid-cols-3">
|
|
267
|
-
{/* Recent Activity */}
|
|
268
282
|
<Card className="lg:col-span-2">
|
|
269
283
|
<CardHeader>
|
|
270
284
|
<CardTitle>Recent Activity</CardTitle>
|
|
@@ -310,7 +324,6 @@ export function DesignedPage() {
|
|
|
310
324
|
</CardContent>
|
|
311
325
|
</Card>
|
|
312
326
|
|
|
313
|
-
{/* Quick Actions */}
|
|
314
327
|
<Card>
|
|
315
328
|
<CardHeader>
|
|
316
329
|
<CardTitle>Quick Actions</CardTitle>
|
|
@@ -489,3 +502,4 @@ export function DesignedPage() {
|
|
|
489
502
|
</div>
|
|
490
503
|
)
|
|
491
504
|
}
|
|
505
|
+
// CIL[END chunk_id="designedpage_function_designedpage_1783668265"]
|