spine-framework 0.3.125 → 0.3.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +169 -97
  6. package/.framework/cli/commands/generate.ts +82 -160
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +222 -347
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +162 -14
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +687 -533
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +173 -145
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +192 -115
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +3 -3
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. 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"]