spine-framework 0.4.4 → 0.5.0-rc.5

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 (305) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/install-app.ts +183 -13
  8. package/.framework/cli/commands/migrate.ts +36 -30
  9. package/.framework/cli/commands/migrations.ts +16 -56
  10. package/.framework/cli/commands/upgrade.ts +35 -0
  11. package/.framework/cli/commands/validate-app.ts +127 -1
  12. package/.framework/cli/commands/validate-schema.ts +147 -0
  13. package/.framework/cli/context.ts +223 -110
  14. package/.framework/cli/index.ts +6 -0
  15. package/.framework/cli/lib/project-files.ts +241 -1
  16. package/.framework/functions/_shared/app-manifest.ts +2 -0
  17. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  18. package/.framework/functions/_shared/logging.ts +562 -224
  19. package/.framework/functions/_shared/middleware.ts +47 -44
  20. package/.framework/functions/_shared/permissions.ts +4 -0
  21. package/.framework/functions/admin-data.ts +51 -28
  22. package/.framework/functions/ai-agents.ts +10 -6
  23. package/.framework/functions/api-keys.ts +301 -122
  24. package/.framework/functions/apps.ts +63 -29
  25. package/.framework/functions/cil-ingest.ts +48 -15
  26. package/.framework/functions/debug-auth.ts +14 -8
  27. package/.framework/functions/deliveries.ts +39 -12
  28. package/.framework/functions/embeddings.ts +149 -78
  29. package/.framework/functions/integration-outbound.ts +67 -27
  30. package/.framework/functions/integrations.ts +254 -127
  31. package/.framework/functions/logs.ts +273 -133
  32. package/.framework/functions/observability.ts +278 -148
  33. package/.framework/functions/pipeline-executions.ts +1 -1
  34. package/.framework/functions/pipelines.ts +14 -9
  35. package/.framework/functions/prompt-configs.ts +7 -4
  36. package/.framework/functions/roles.ts +8 -5
  37. package/.framework/functions/security.ts +30 -17
  38. package/.framework/functions/system-cron.ts +240 -127
  39. package/.framework/functions/tests.ts +7 -6
  40. package/.framework/functions/timers.ts +310 -107
  41. package/.framework/functions/triggers.ts +28 -13
  42. package/.framework/functions/types.ts +13 -10
  43. package/.framework/migrations/069_log_stats_window.sql +54 -0
  44. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  45. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  46. package/.framework/migrations/072_slug_autofill.sql +77 -0
  47. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  48. package/.framework/migrations/074_app_route_prefix_domains.sql +168 -0
  49. package/.framework/migrations/075_security_definer_grants.sql +157 -0
  50. package/.framework/src/apps/admin/index.tsx +1141 -775
  51. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  52. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  53. package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
  54. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  55. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  56. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  57. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  58. package/.framework/src/components/layout/Sidebar.tsx +300 -177
  59. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  60. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  61. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  62. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  63. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  64. package/.framework/src/components/ui/sheet.tsx +24 -26
  65. package/.framework/src/components/ui/textarea.tsx +74 -48
  66. package/.framework/src/contexts/AppContext.tsx +5 -12
  67. package/.framework/src/contexts/AuthContext.tsx +17 -9
  68. package/.framework/src/hooks/useApps.ts +18 -22
  69. package/.framework/src/hooks/useEntityList.ts +12 -9
  70. package/.framework/src/hooks/useListSchema.ts +108 -58
  71. package/.framework/src/instructions/README.md +74 -0
  72. package/.framework/src/instructions/accounts.md +97 -0
  73. package/.framework/src/instructions/ai-agents.md +69 -0
  74. package/.framework/src/instructions/alerts.md +80 -0
  75. package/.framework/src/instructions/api-keys.md +87 -0
  76. package/.framework/src/instructions/apps.md +77 -0
  77. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  78. package/.framework/src/instructions/concepts/apps-and-renderers.md +228 -0
  79. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  80. package/.framework/src/instructions/concepts/automation.md +186 -0
  81. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  82. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  83. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  84. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  85. package/.framework/src/instructions/concepts/observability.md +116 -0
  86. package/.framework/src/instructions/concepts/permissions.md +150 -0
  87. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  88. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  89. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  90. package/.framework/src/instructions/deliveries.md +59 -0
  91. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  92. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  93. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  94. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  95. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  96. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  97. package/.framework/src/instructions/integrations.md +96 -0
  98. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  99. package/.framework/src/instructions/internal/docs-contract.md +158 -0
  100. package/.framework/src/instructions/invites.md +60 -0
  101. package/.framework/src/instructions/kb.md +80 -0
  102. package/.framework/src/instructions/logs.md +77 -0
  103. package/.framework/src/instructions/notifications.md +77 -0
  104. package/.framework/src/instructions/observability.md +61 -0
  105. package/.framework/src/instructions/operations/deployment.md +115 -0
  106. package/.framework/src/instructions/operations/migrations.md +125 -0
  107. package/.framework/src/instructions/operations/security-checklist.md +170 -0
  108. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  109. package/.framework/src/instructions/operations/upgrade.md +116 -0
  110. package/.framework/src/instructions/people.md +91 -0
  111. package/.framework/src/instructions/pipeline-executions.md +62 -0
  112. package/.framework/src/instructions/pipelines.md +78 -0
  113. package/.framework/src/instructions/prompts.md +95 -0
  114. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  115. package/.framework/src/instructions/reference/api/auth.md +113 -0
  116. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  117. package/.framework/src/instructions/reference/app-manifest.md +184 -0
  118. package/.framework/src/instructions/reference/cli.md +124 -0
  119. package/.framework/src/instructions/reference/database.md +132 -0
  120. package/.framework/src/instructions/reference/design-schema.md +280 -0
  121. package/.framework/src/instructions/reference/env-vars.md +133 -0
  122. package/.framework/src/instructions/reference/frontend-sdk.md +207 -0
  123. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  124. package/.framework/src/instructions/reference/functions/admin-data.md +197 -0
  125. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  126. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  127. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  128. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  129. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  130. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  131. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  132. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  133. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  134. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  135. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  136. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  137. package/.framework/src/instructions/reference/functions/index.md +103 -0
  138. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  139. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  140. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  141. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  142. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  143. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  144. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  145. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  146. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  147. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  148. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  149. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  150. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  151. package/.framework/src/instructions/reference/functions/security.md +140 -0
  152. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  153. package/.framework/src/instructions/reference/functions/system.md +106 -0
  154. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  155. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  156. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  157. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  158. package/.framework/src/instructions/reference/functions/types.md +146 -0
  159. package/.framework/src/instructions/reference/seeds.md +126 -0
  160. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  161. package/.framework/src/instructions/reference/spine-config.md +114 -0
  162. package/.framework/src/instructions/roles.md +80 -0
  163. package/.framework/src/instructions/runtime-collaboration.md +106 -0
  164. package/.framework/src/instructions/runtime-detail.md +70 -0
  165. package/.framework/src/instructions/runtime-list.md +77 -0
  166. package/.framework/src/instructions/security.md +67 -0
  167. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  168. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  169. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  170. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  171. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  172. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  173. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  174. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  175. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  176. package/.framework/src/instructions/tasks/document-your-app.md +117 -0
  177. package/.framework/src/instructions/tasks/package-and-install-an-app.md +136 -0
  178. package/.framework/src/instructions/tasks/register-an-app.md +137 -0
  179. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  180. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  181. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  182. package/.framework/src/instructions/testing.md +59 -0
  183. package/.framework/src/instructions/timers.md +84 -0
  184. package/.framework/src/instructions/triggers.md +69 -0
  185. package/.framework/src/instructions/types.md +93 -0
  186. package/.framework/src/lib/app-mount.ts +88 -0
  187. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  188. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  189. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  190. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  191. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  192. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  193. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  194. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  195. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  196. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  197. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  198. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  199. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  200. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  201. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  202. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  203. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  204. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  205. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  206. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  207. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  208. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  209. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  210. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  211. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  212. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  213. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  214. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  215. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  216. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  217. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  218. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  219. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  220. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  221. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  222. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  223. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  224. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  225. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  226. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  227. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  228. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  229. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  230. package/.framework/src/pages/auth/LoginPage.tsx +3 -2
  231. package/.framework/src/pages/auth/RegisterPage.tsx +16 -8
  232. package/.framework/templates/agent/AGENTS.md +167 -0
  233. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  234. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  235. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  236. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  237. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +79 -0
  238. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  239. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +79 -0
  240. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +71 -0
  241. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +72 -0
  242. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  243. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  244. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  245. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  246. package/.framework/templates/project.json +4 -1
  247. package/.framework/tests/unit/account-scoping-gates.test.ts +394 -0
  248. package/.framework/tests/unit/agent-files.test.ts +355 -0
  249. package/.framework/tests/unit/agent-runner.test.ts +479 -44
  250. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  251. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  252. package/.framework/tests/unit/app-mount.test.ts +80 -0
  253. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  254. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  255. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  256. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  257. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  258. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  259. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  260. package/.framework/tests/unit/security-definer-grants.test.ts +154 -0
  261. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  262. package/.framework/tests/unit/system-cron.test.ts +240 -0
  263. package/.framework/tests/unit/timers.test.ts +159 -0
  264. package/README.md +125 -166
  265. package/config/tsconfig.cli.json +2 -2
  266. package/package.json +15 -4
  267. package/templates/project/package-lock.json +2 -2
  268. package/.framework/docs/admin-routes.md +0 -76
  269. package/.framework/docs/api-docs-progress.md +0 -38
  270. package/.framework/docs/api-governance.md +0 -146
  271. package/.framework/docs/api-testing-results.md +0 -212
  272. package/.framework/docs/assembly-launch-guide.md +0 -138
  273. package/.framework/docs/audit-results.md +0 -590
  274. package/.framework/docs/db-api-inventory.md +0 -95
  275. package/.framework/docs/gap-remediation-backlog.md +0 -103
  276. package/.framework/docs/ui-adoption-verification.md +0 -111
  277. package/.framework/docs/ui-api-coverage.md +0 -84
  278. package/.framework/docs/v2-compatibility-audit.md +0 -228
  279. package/.framework/mcp/index.ts +0 -133
  280. package/.framework/mcp/load-env.ts +0 -60
  281. package/.framework/mcp/shared/app-manifest.ts +0 -275
  282. package/.framework/mcp/shared/db.ts +0 -477
  283. package/.framework/mcp/shared/kb.ts +0 -118
  284. package/.framework/mcp/tools/architect.ts +0 -431
  285. package/.framework/mcp/tools/cil/context.ts +0 -345
  286. package/.framework/mcp/tools/cil/graph.ts +0 -242
  287. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  288. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  289. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  290. package/.framework/mcp/tools/cil/project.ts +0 -791
  291. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  292. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  293. package/.framework/mcp/tools/cil/search.ts +0 -97
  294. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  295. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  296. package/.framework/mcp/tools/kb/delete.ts +0 -139
  297. package/.framework/mcp/tools/kb/index.ts +0 -52
  298. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  299. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  300. package/.framework/mcp/tools/kb/publish.ts +0 -100
  301. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  302. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  303. package/.framework/mcp/tools/kb/search.ts +0 -101
  304. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  305. package/.framework/mcp/tools/observability.ts +0 -510
@@ -10,17 +10,27 @@
10
10
 
11
11
  import { createHandler } from './_shared/middleware'
12
12
  import { emitLog } from './_shared/audit'
13
- import { SYSTEM_PRINCIPAL } from './_shared/principal'
13
+ import { SYSTEM_PRINCIPAL, isSystemAdmin } from './_shared/principal'
14
14
  import { execute as executeOutbound } from './integration-outbound'
15
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:module_header:module_header"]
15
16
  // CIL[DOC-VECTOR type="context" content="purpose='Module: webhook delivery handlers'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
16
17
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
17
18
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
18
19
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
19
20
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
21
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
- // CIL[END stable_id="~/.framework/functions/deliveries.ts:module_header:module_header"]
22
22
 
23
- // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/deliveries.ts"]
23
+ // True only for platform-level principals: a system_admin role or an
24
+ // internal machine principal with no account binding (SYSTEM_PRINCIPAL,
25
+ // produced only by the INTERNAL_INVOKE_SECRET path). Machine principals
26
+ // resolve to the service-role adminDb via getPrincipalDb, so account-bound
27
+ // API keys must be scoped to their own account below.
28
+ // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:isSystemPrincipal:function" type="function" identity="isSystemPrincipal" parent="~/.framework/functions/deliveries.ts"]
29
+ function isSystemPrincipal(ctx: any): boolean {
30
+ return isSystemAdmin(ctx.principal) || (ctx.principal?.isInternal === true && !ctx.accountId)
31
+ }
32
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:isSystemPrincipal:function"]
33
+
24
34
  // CIL[DOC-MACRO purpose="List webhook deliveries for the current account with optional filters."]
25
35
  // CIL[DOC-RESPONSIBILITY responsibility="Query and return a paginated list of webhook deliveries."]
26
36
  // CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
@@ -28,6 +38,7 @@ import { execute as executeOutbound } from './integration-outbound'
28
38
  // CIL[DOC-MICRO logic_summary="Builds a Supabase query for webhook_deliveries scoped to the account, applies optional equality filters, and returns a paginated range of results." notable_decisions="Defaults limit to 100 and offset to 0; returns empty array when no data."]
29
39
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
30
40
  // CIL[DOC-STABILITY stability="stable"]
41
+ // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/deliveries.ts"]
31
42
  export const list = createHandler(async (ctx, _body) => {
32
43
  const { direction, status, integration_id, api_key_id, limit = 100, offset = 0 } = ctx.query || {}
33
44
 
@@ -54,15 +65,14 @@ export const list = createHandler(async (ctx, _body) => {
54
65
  if (err) throw err
55
66
  return data || []
56
67
  })
68
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:list:constant"]
57
69
  // CIL[DOC-VECTOR type="context" content="purpose='List webhook deliveries for the current account with optional filters.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
58
70
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
59
71
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
60
72
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
61
73
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
62
74
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
63
- // CIL[END stable_id="~/.framework/functions/deliveries.ts:list:constant"]
64
75
 
65
- // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/deliveries.ts"]
66
76
  // CIL[DOC-MACRO purpose="Retrieve a single webhook delivery by ID."]
67
77
  // CIL[DOC-RESPONSIBILITY responsibility="Fetch and return one webhook delivery record."]
68
78
  // CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
@@ -70,29 +80,35 @@ export const list = createHandler(async (ctx, _body) => {
70
80
  // CIL[DOC-MICRO logic_summary="Selects a single webhook delivery matching the provided id." notable_decisions="Assumes id is present and unique; throws generic database error."]
71
81
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
72
82
  // CIL[DOC-STABILITY stability="stable"]
83
+ // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/deliveries.ts"]
73
84
  export const get = createHandler(async (ctx, _body) => {
74
85
  const { id } = ctx.query || {}
75
86
 
76
87
  if (!id) throw new Error('Delivery ID is required')
77
88
 
78
- const { data, error: err } = await ctx.db
89
+ let query = ctx.db
79
90
  .from('webhook_deliveries')
80
91
  .select('*')
81
92
  .eq('id', id)
82
- .single()
93
+
94
+ if (!isSystemPrincipal(ctx)) {
95
+ if (!ctx.accountId) throw new Error('Account context required')
96
+ query = query.eq('account_id', ctx.accountId)
97
+ }
98
+
99
+ const { data, error: err } = await query.single()
83
100
 
84
101
  if (err) throw err
85
102
  return data
86
103
  })
104
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:get:constant"]
87
105
  // CIL[DOC-VECTOR type="context" content="purpose='Retrieve a single webhook delivery by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
88
106
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
89
107
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
90
108
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
91
109
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
92
110
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
- // CIL[END stable_id="~/.framework/functions/deliveries.ts:get:constant"]
94
111
 
95
- // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:retry:constant" type="constant" identity="retry" parent="~/.framework/functions/deliveries.ts"]
96
112
  // CIL[DOC-MACRO purpose="Manually retry an outbound webhook delivery."]
97
113
  // CIL[DOC-RESPONSIBILITY responsibility="Validate the delivery exists and is outbound, then re-run the outbound executor."]
98
114
  // CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
@@ -100,6 +116,7 @@ export const get = createHandler(async (ctx, _body) => {
100
116
  // CIL[DOC-MICRO logic_summary="Loads the delivery by id, restricts to outbound direction, builds a retry context using the stored account and system principal, invokes executeOutbound, and logs the retry." notable_decisions="Uses SYSTEM_PRINCIPAL for retries; emits audit log with delivery metadata."]
101
117
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
102
118
  // CIL[DOC-STABILITY stability="stable"]
119
+ // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:retry:constant" type="constant" identity="retry" parent="~/.framework/functions/deliveries.ts"]
103
120
  export const retry = createHandler(async (ctx, body) => {
104
121
  const { id } = body
105
122
 
@@ -113,6 +130,16 @@ export const retry = createHandler(async (ctx, body) => {
113
130
 
114
131
  if (error || !delivery) throw new Error('Delivery not found')
115
132
 
133
+ // Retry re-executes the delivery under its own account as SYSTEM_PRINCIPAL,
134
+ // so the caller must be entitled to that account first: system-level
135
+ // callers pass through; everyone else may only retry their own account's
136
+ // deliveries.
137
+ if (!isSystemPrincipal(ctx) && (!ctx.accountId || delivery.account_id !== ctx.accountId)) {
138
+ const e: any = new Error('Insufficient permissions to retry this delivery')
139
+ e.statusCode = 403
140
+ throw e
141
+ }
142
+
116
143
  if (delivery.direction !== 'outbound') {
117
144
  throw new Error('Manual retry is only supported for outbound deliveries in this release')
118
145
  }
@@ -134,15 +161,14 @@ export const retry = createHandler(async (ctx, body) => {
134
161
 
135
162
  return result
136
163
  })
164
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:retry:constant"]
137
165
  // CIL[DOC-VECTOR type="context" content="purpose='Manually retry an outbound webhook delivery.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
138
166
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
139
167
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
140
168
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
141
169
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
142
170
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
143
- // CIL[END stable_id="~/.framework/functions/deliveries.ts:retry:constant"]
144
171
 
145
- // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/deliveries.ts"]
146
172
  // CIL[DOC-MACRO purpose="Route delivery requests to list, get, or retry handlers."]
147
173
  // CIL[DOC-RESPONSIBILITY responsibility="Dispatch incoming requests based on action and HTTP method."]
148
174
  // CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
@@ -150,6 +176,7 @@ export const retry = createHandler(async (ctx, body) => {
150
176
  // CIL[DOC-MICRO logic_summary="Routes GET requests with id to get, without id to list, and POST action retry to retry; otherwise throws." notable_decisions="Defaults method to GET; validates action and method combination."]
151
177
  // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
152
178
  // CIL[DOC-STABILITY stability="stable"]
179
+ // CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/deliveries.ts"]
153
180
  export const handler = createHandler(async (ctx, body) => {
154
181
  const { action } = ctx.query || {}
155
182
  const method = ctx.query?.method || 'GET'
@@ -167,10 +194,10 @@ export const handler = createHandler(async (ctx, body) => {
167
194
 
168
195
  throw new Error('Invalid action or method')
169
196
  })
197
+ // CIL[END stable_id="~/.framework/functions/deliveries.ts:handler:constant"]
170
198
  // CIL[DOC-VECTOR type="context" content="purpose='Route delivery requests to list, get, or retry handlers.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
171
199
  // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
172
200
  // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
173
201
  // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
174
202
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
175
203
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
176
- // CIL[END stable_id="~/.framework/functions/deliveries.ts:handler:constant"]