@pikku/core 0.12.107 → 0.12.111

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 (588) hide show
  1. package/CHANGELOG.md +344 -0
  2. package/dist/analytics/analytics.d.ts +6 -0
  3. package/dist/analytics/analytics.js +58 -0
  4. package/dist/analytics/analytics.types.d.ts +156 -0
  5. package/dist/analytics/analytics.types.js +1 -0
  6. package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
  7. package/dist/analytics/anonymous-analytics-identity.js +27 -0
  8. package/dist/analytics/compose-analytics-identity.d.ts +14 -0
  9. package/dist/analytics/compose-analytics-identity.js +33 -0
  10. package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
  11. package/dist/analytics/cookie-analytics-identity.js +37 -0
  12. package/dist/analytics/define-analytics-events.d.ts +22 -0
  13. package/dist/analytics/define-analytics-events.js +9 -0
  14. package/dist/analytics/fan-out-analytics.d.ts +15 -0
  15. package/dist/analytics/fan-out-analytics.js +36 -0
  16. package/dist/analytics/index.d.ts +13 -0
  17. package/dist/analytics/index.js +8 -0
  18. package/dist/analytics/logger-analytics-service.d.ts +14 -0
  19. package/dist/analytics/logger-analytics-service.js +23 -0
  20. package/dist/analytics/mint-cookie.d.ts +44 -0
  21. package/dist/analytics/mint-cookie.js +55 -0
  22. package/dist/errors/errors.d.ts +7 -0
  23. package/dist/errors/errors.js +17 -0
  24. package/dist/function/function-meta.types.d.ts +2 -0
  25. package/dist/function/function-runner.js +29 -0
  26. package/dist/function/functions.types.d.ts +22 -3
  27. package/dist/middleware/auth-apikey.d.ts +1 -1
  28. package/dist/pikku-state.d.ts +1 -1
  29. package/dist/scopes.d.ts +11 -0
  30. package/dist/scopes.js +17 -0
  31. package/dist/services/credential-wire-service.d.ts +1 -1
  32. package/dist/services/feature-flag-service.d.ts +100 -0
  33. package/dist/services/feature-flag-service.js +1 -0
  34. package/dist/services/index.d.ts +1 -0
  35. package/dist/services/meta-service.d.ts +16 -0
  36. package/dist/services/meta-service.js +19 -0
  37. package/dist/services/webhook-service.d.ts +7 -2
  38. package/dist/services/webhook-service.js +11 -6
  39. package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
  40. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
  41. package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
  42. package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
  43. package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
  44. package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
  45. package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
  46. package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
  47. package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
  48. package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
  49. package/dist/types/core.types.d.ts +23 -0
  50. package/dist/wirings/agent/agent-rpc.d.ts +1 -1
  51. package/dist/wirings/agent/agent-turn.d.ts +1 -1
  52. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
  53. package/dist/wirings/channel/channel-common.d.ts +1 -1
  54. package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
  55. package/dist/wirings/channel/channel-runner.d.ts +1 -1
  56. package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
  57. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
  58. package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
  59. package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
  60. package/dist/wirings/flag/assert-feature-available.js +23 -0
  61. package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
  62. package/dist/wirings/flag/cached-flag-source.js +96 -0
  63. package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
  64. package/dist/wirings/flag/define-feature-flags.js +32 -0
  65. package/dist/wirings/flag/flag.types.d.ts +97 -0
  66. package/dist/wirings/flag/flag.types.js +1 -0
  67. package/dist/wirings/flag/index.d.ts +7 -0
  68. package/dist/wirings/flag/index.js +5 -0
  69. package/dist/wirings/flag/resolve-flag.d.ts +52 -0
  70. package/dist/wirings/flag/resolve-flag.js +90 -0
  71. package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
  72. package/dist/wirings/flag/validate-flag-definitions.js +103 -0
  73. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
  74. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
  75. package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
  76. package/package.json +11 -5
  77. package/run-tests.sh +17 -9
  78. package/src/public-surface.json +26 -0
  79. package/src/agent-naming.test.ts +0 -68
  80. package/src/api-report.test.ts +0 -138
  81. package/src/app-alias-surface.test.ts +0 -179
  82. package/src/app-leaf-surface.test.ts +0 -222
  83. package/src/bootstrap-compat/root.ts +0 -20
  84. package/src/classification/column-form.test.ts +0 -97
  85. package/src/classification/column-form.ts +0 -55
  86. package/src/classification/data-classification.ts +0 -73
  87. package/src/classification/index.ts +0 -40
  88. package/src/classification/key-ids.ts +0 -2
  89. package/src/classification/secret-value.test.ts +0 -204
  90. package/src/classification/secret-value.ts +0 -106
  91. package/src/crypto-utils.test.ts +0 -668
  92. package/src/crypto-utils.ts +0 -460
  93. package/src/dev/hot-reload.test.ts +0 -587
  94. package/src/dev/hot-reload.ts +0 -225
  95. package/src/dev/module-runner.test.ts +0 -235
  96. package/src/dev/module-runner.ts +0 -138
  97. package/src/dev/reload-meta.test.ts +0 -183
  98. package/src/dev/reload-meta.ts +0 -144
  99. package/src/ecosystem-tier-removed.test.ts +0 -72
  100. package/src/env.ts +0 -1
  101. package/src/errors/error-handler.ts +0 -77
  102. package/src/errors/error.test.ts +0 -229
  103. package/src/errors/errors.ts +0 -393
  104. package/src/errors/index.ts +0 -11
  105. package/src/errors/serialized-error.ts +0 -12
  106. package/src/factory-functions.test.ts +0 -111
  107. package/src/function/abort-scope.test.ts +0 -97
  108. package/src/function/abort-scope.ts +0 -80
  109. package/src/function/function-meta.types.ts +0 -151
  110. package/src/function/function-runner.test.ts +0 -1619
  111. package/src/function/function-runner.ts +0 -499
  112. package/src/function/functions.types.ts +0 -319
  113. package/src/function/index.ts +0 -40
  114. package/src/function/list.types.test.ts +0 -100
  115. package/src/function/list.types.ts +0 -69
  116. package/src/function/pikku-request.test.ts +0 -35
  117. package/src/function/pikku-request.ts +0 -17
  118. package/src/gopass-secrets-removed.test.ts +0 -51
  119. package/src/handle-error.test.ts +0 -532
  120. package/src/handle-error.ts +0 -64
  121. package/src/middleware/auth-apikey.test.ts +0 -362
  122. package/src/middleware/auth-apikey.ts +0 -39
  123. package/src/middleware/auth-bearer.test.ts +0 -566
  124. package/src/middleware/auth-bearer.ts +0 -83
  125. package/src/middleware/auth-cookie.test.ts +0 -572
  126. package/src/middleware/auth-cookie.ts +0 -107
  127. package/src/middleware/cors.test.ts +0 -579
  128. package/src/middleware/cors.ts +0 -103
  129. package/src/middleware/index.ts +0 -30
  130. package/src/middleware/middleware-factories.ts +0 -76
  131. package/src/middleware/middleware.types.ts +0 -61
  132. package/src/middleware/remote-auth.test.ts +0 -547
  133. package/src/middleware/remote-auth.ts +0 -95
  134. package/src/middleware/remote-jobs-secret.ts +0 -35
  135. package/src/middleware/require-origin.test.ts +0 -115
  136. package/src/middleware/require-origin.ts +0 -79
  137. package/src/middleware/telemetry.ts +0 -83
  138. package/src/middleware-runner.test.ts +0 -578
  139. package/src/middleware-runner.ts +0 -232
  140. package/src/no-any-casts.test.ts +0 -57
  141. package/src/no-root-barrel.test.ts +0 -122
  142. package/src/permissions.test.ts +0 -256
  143. package/src/permissions.ts +0 -217
  144. package/src/pikku-state.test.ts +0 -198
  145. package/src/pikku-state.ts +0 -206
  146. package/src/production-barrels-stay-lean.test.ts +0 -110
  147. package/src/public-surface.test.ts +0 -133
  148. package/src/remote.test.ts +0 -173
  149. package/src/remote.ts +0 -56
  150. package/src/removed-legacy-exports.test.ts +0 -66
  151. package/src/run-tests-script.test.ts +0 -67
  152. package/src/schema.test.ts +0 -430
  153. package/src/schema.ts +0 -204
  154. package/src/scopes.test.ts +0 -203
  155. package/src/scopes.ts +0 -67
  156. package/src/services/agent-run-state-service.ts +0 -37
  157. package/src/services/agent-runner-service.ts +0 -238
  158. package/src/services/agent-storage-service.ts +0 -39
  159. package/src/services/ai-embedding-service.ts +0 -9
  160. package/src/services/audit-service.test.ts +0 -44
  161. package/src/services/audit-service.ts +0 -280
  162. package/src/services/content-service.ts +0 -65
  163. package/src/services/credential-service.ts +0 -20
  164. package/src/services/credential-wire-service.test.ts +0 -235
  165. package/src/services/credential-wire-service.ts +0 -120
  166. package/src/services/deployment-service.ts +0 -32
  167. package/src/services/email-service.test.ts +0 -100
  168. package/src/services/email-service.ts +0 -60
  169. package/src/services/email-template.test.ts +0 -311
  170. package/src/services/email-template.ts +0 -254
  171. package/src/services/file-scenario-run-store.test.ts +0 -349
  172. package/src/services/file-scenario-run-store.ts +0 -282
  173. package/src/services/gateway-service.ts +0 -5
  174. package/src/services/http-personas-converse.test.ts +0 -274
  175. package/src/services/http-personas.test.ts +0 -379
  176. package/src/services/http-personas.ts +0 -508
  177. package/src/services/in-memory-agent-run-state-service.ts +0 -87
  178. package/src/services/in-memory-queue-service.test.ts +0 -162
  179. package/src/services/in-memory-queue-service.ts +0 -78
  180. package/src/services/in-memory-session-store.test.ts +0 -58
  181. package/src/services/in-memory-session-store.ts +0 -20
  182. package/src/services/in-memory-trigger-service.ts +0 -47
  183. package/src/services/in-memory-workflow-service.test.ts +0 -430
  184. package/src/services/in-memory-workflow-service.ts +0 -595
  185. package/src/services/index.ts +0 -192
  186. package/src/services/istanbul-coverage-service.test.ts +0 -66
  187. package/src/services/istanbul-coverage-service.ts +0 -59
  188. package/src/services/jwt-service.ts +0 -15
  189. package/src/services/local-content-request-handler.test.ts +0 -240
  190. package/src/services/local-content-request-handler.ts +0 -295
  191. package/src/services/local-content.test.ts +0 -186
  192. package/src/services/local-content.ts +0 -242
  193. package/src/services/local-credential-service.ts +0 -63
  194. package/src/services/local-email-service.test.ts +0 -182
  195. package/src/services/local-email-service.ts +0 -43
  196. package/src/services/local-gateway-service.ts +0 -51
  197. package/src/services/local-secrets.test.ts +0 -95
  198. package/src/services/local-secrets.ts +0 -71
  199. package/src/services/local-variables.test.ts +0 -61
  200. package/src/services/local-variables.ts +0 -45
  201. package/src/services/logger-console.test.ts +0 -117
  202. package/src/services/logger-console.ts +0 -174
  203. package/src/services/logger.ts +0 -48
  204. package/src/services/meta-service.test.ts +0 -75
  205. package/src/services/meta-service.ts +0 -767
  206. package/src/services/persona-actor-secret.test.ts +0 -68
  207. package/src/services/persona-actor-secret.ts +0 -70
  208. package/src/services/persona-sign-in.test.ts +0 -219
  209. package/src/services/persona-sign-in.ts +0 -238
  210. package/src/services/personas-service.ts +0 -191
  211. package/src/services/pikku-user-id.test.ts +0 -62
  212. package/src/services/pikku-user-id.ts +0 -13
  213. package/src/services/queue-webhook-service.test.ts +0 -409
  214. package/src/services/queue-webhook-service.ts +0 -150
  215. package/src/services/remote-jobs.test.ts +0 -106
  216. package/src/services/remote-jobs.ts +0 -92
  217. package/src/services/scheduler-service.ts +0 -37
  218. package/src/services/schema-service.ts +0 -10
  219. package/src/services/scope-service.ts +0 -91
  220. package/src/services/scoped-credential-service.test.ts +0 -86
  221. package/src/services/scoped-credential-service.ts +0 -63
  222. package/src/services/scoped-secret-service.test.ts +0 -93
  223. package/src/services/scoped-secret-service.ts +0 -40
  224. package/src/services/secret-host-binding.test.ts +0 -138
  225. package/src/services/secret-host-binding.ts +0 -51
  226. package/src/services/secret-service.ts +0 -25
  227. package/src/services/secretless.test.ts +0 -54
  228. package/src/services/secretless.ts +0 -29
  229. package/src/services/session-store.ts +0 -9
  230. package/src/services/stub-tracker.test.ts +0 -104
  231. package/src/services/stub-tracker.ts +0 -175
  232. package/src/services/system-role-guard.test.ts +0 -96
  233. package/src/services/system-role-guard.ts +0 -71
  234. package/src/services/temporary-file-service.ts +0 -76
  235. package/src/services/trigger-service.ts +0 -5
  236. package/src/services/typed-credential-service.ts +0 -83
  237. package/src/services/typed-secret-service.test.ts +0 -204
  238. package/src/services/typed-secret-service.ts +0 -132
  239. package/src/services/typed-variables-service.test.ts +0 -166
  240. package/src/services/typed-variables-service.ts +0 -166
  241. package/src/services/user-session-service.test.ts +0 -147
  242. package/src/services/user-session-service.ts +0 -85
  243. package/src/services/v8-coverage-service.test.ts +0 -69
  244. package/src/services/v8-coverage-service.ts +0 -163
  245. package/src/services/variables-service.ts +0 -13
  246. package/src/services/webhook-service.ts +0 -147
  247. package/src/services/workflow-service.ts +0 -120
  248. package/src/side-effects-are-declared.test.ts +0 -84
  249. package/src/source-files-stay-composable.test.ts +0 -41
  250. package/src/template-alias-surface.test.ts +0 -240
  251. package/src/test-utils.ts +0 -38
  252. package/src/testing/index.ts +0 -3
  253. package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
  254. package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
  255. package/src/testing/service-tests/channel-store-tests.ts +0 -98
  256. package/src/testing/service-tests/credential-service-tests.ts +0 -143
  257. package/src/testing/service-tests/deployment-service-tests.ts +0 -33
  258. package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
  259. package/src/testing/service-tests/secret-service-tests.ts +0 -105
  260. package/src/testing/service-tests/session-store-tests.ts +0 -62
  261. package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
  262. package/src/testing/service-tests/workflow-service-tests.ts +0 -308
  263. package/src/testing/service-tests.ts +0 -95
  264. package/src/time-utils.test.ts +0 -56
  265. package/src/time-utils.ts +0 -89
  266. package/src/types/core.types.ts +0 -446
  267. package/src/types/index.ts +0 -25
  268. package/src/types/state.types.ts +0 -226
  269. package/src/types/typed-credentials.test.ts +0 -72
  270. package/src/utils/hash.test.ts +0 -68
  271. package/src/utils/hash.ts +0 -26
  272. package/src/utils/hmac.ts +0 -21
  273. package/src/utils/node-host-resolver.ts +0 -20
  274. package/src/utils/safe-fetch.test.ts +0 -515
  275. package/src/utils/safe-fetch.ts +0 -347
  276. package/src/utils.test.ts +0 -359
  277. package/src/utils.ts +0 -165
  278. package/src/version.test.ts +0 -80
  279. package/src/version.ts +0 -25
  280. package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
  281. package/src/wirings/actor-flow/index.ts +0 -10
  282. package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
  283. package/src/wirings/actor-flow/run-conversation.ts +0 -280
  284. package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
  285. package/src/wirings/addon/addon-runner.ts +0 -236
  286. package/src/wirings/addon/addon-scopes.test.ts +0 -225
  287. package/src/wirings/addon/addon-secrets.test.ts +0 -391
  288. package/src/wirings/addon/index.ts +0 -12
  289. package/src/wirings/addon/remote-addon-auth.ts +0 -65
  290. package/src/wirings/addon/wire-addon.test.ts +0 -102
  291. package/src/wirings/addon/wire-addon.ts +0 -202
  292. package/src/wirings/addon/wire-remote-addon.ts +0 -41
  293. package/src/wirings/agent/agent-agui.test.ts +0 -1213
  294. package/src/wirings/agent/agent-agui.ts +0 -405
  295. package/src/wirings/agent/agent-authorization.test.ts +0 -208
  296. package/src/wirings/agent/agent-finalize.test.ts +0 -187
  297. package/src/wirings/agent/agent-finalize.ts +0 -197
  298. package/src/wirings/agent/agent-helpers.test.ts +0 -215
  299. package/src/wirings/agent/agent-helpers.ts +0 -96
  300. package/src/wirings/agent/agent-interrupt.test.ts +0 -833
  301. package/src/wirings/agent/agent-interrupt.ts +0 -400
  302. package/src/wirings/agent/agent-memory.test.ts +0 -397
  303. package/src/wirings/agent/agent-memory.ts +0 -496
  304. package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
  305. package/src/wirings/agent/agent-model-config.test.ts +0 -103
  306. package/src/wirings/agent/agent-model-config.ts +0 -59
  307. package/src/wirings/agent/agent-prepare.test.ts +0 -977
  308. package/src/wirings/agent/agent-prepare.ts +0 -1083
  309. package/src/wirings/agent/agent-registry.test.ts +0 -455
  310. package/src/wirings/agent/agent-registry.ts +0 -99
  311. package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
  312. package/src/wirings/agent/agent-rpc.ts +0 -116
  313. package/src/wirings/agent/agent-runner.test.ts +0 -1229
  314. package/src/wirings/agent/agent-runner.ts +0 -858
  315. package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
  316. package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
  317. package/src/wirings/agent/agent-stream.test.ts +0 -1800
  318. package/src/wirings/agent/agent-stream.ts +0 -1639
  319. package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
  320. package/src/wirings/agent/agent-turn.test.ts +0 -65
  321. package/src/wirings/agent/agent-turn.ts +0 -122
  322. package/src/wirings/agent/agent-utils.ts +0 -20
  323. package/src/wirings/agent/agent.types.ts +0 -676
  324. package/src/wirings/agent/index.ts +0 -58
  325. package/src/wirings/agent/voice-input.test.ts +0 -220
  326. package/src/wirings/agent/voice-input.ts +0 -180
  327. package/src/wirings/agent/voice-output.test.ts +0 -510
  328. package/src/wirings/agent/voice-output.ts +0 -311
  329. package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
  330. package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
  331. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
  332. package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
  333. package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
  334. package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
  335. package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
  336. package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
  337. package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
  338. package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
  339. package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
  340. package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
  341. package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
  342. package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
  343. package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
  344. package/src/wirings/agent-scorer/index.ts +0 -23
  345. package/src/wirings/channel/channel-common.ts +0 -102
  346. package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
  347. package/src/wirings/channel/channel-handler.test.ts +0 -322
  348. package/src/wirings/channel/channel-handler.ts +0 -259
  349. package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
  350. package/src/wirings/channel/channel-host-rpc.ts +0 -69
  351. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
  352. package/src/wirings/channel/channel-middleware-runner.ts +0 -126
  353. package/src/wirings/channel/channel-rpc-registry.ts +0 -116
  354. package/src/wirings/channel/channel-rpc-responder.ts +0 -117
  355. package/src/wirings/channel/channel-rpc-service.ts +0 -132
  356. package/src/wirings/channel/channel-rpc-validators.ts +0 -65
  357. package/src/wirings/channel/channel-rpc.test.ts +0 -841
  358. package/src/wirings/channel/channel-rpc.ts +0 -5
  359. package/src/wirings/channel/channel-rpc.types.ts +0 -160
  360. package/src/wirings/channel/channel-runner.ts +0 -164
  361. package/src/wirings/channel/channel-store.ts +0 -35
  362. package/src/wirings/channel/channel.types.ts +0 -193
  363. package/src/wirings/channel/define-channel-routes.ts +0 -5
  364. package/src/wirings/channel/eventhub-service.ts +0 -16
  365. package/src/wirings/channel/eventhub-store.ts +0 -13
  366. package/src/wirings/channel/index.ts +0 -40
  367. package/src/wirings/channel/local/index.ts +0 -3
  368. package/src/wirings/channel/local/local-channel-handler.ts +0 -98
  369. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
  370. package/src/wirings/channel/local/local-channel-runner.ts +0 -271
  371. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
  372. package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
  373. package/src/wirings/channel/log-channels.ts +0 -16
  374. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
  375. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
  376. package/src/wirings/channel/serverless/index.ts +0 -6
  377. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
  378. package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
  379. package/src/wirings/cli/channel/cli-approval.ts +0 -135
  380. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
  381. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
  382. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
  383. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
  384. package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
  385. package/src/wirings/cli/channel/index.ts +0 -6
  386. package/src/wirings/cli/cli-runner.test.ts +0 -969
  387. package/src/wirings/cli/cli-runner.ts +0 -538
  388. package/src/wirings/cli/cli.types.ts +0 -388
  389. package/src/wirings/cli/command-parser.test.ts +0 -1120
  390. package/src/wirings/cli/command-parser.ts +0 -713
  391. package/src/wirings/cli/define-cli-commands.ts +0 -13
  392. package/src/wirings/cli/format-cli-error.test.ts +0 -91
  393. package/src/wirings/cli/format-cli-error.ts +0 -96
  394. package/src/wirings/cli/index.ts +0 -19
  395. package/src/wirings/credential/credential.types.ts +0 -37
  396. package/src/wirings/credential/define-credential.ts +0 -49
  397. package/src/wirings/credential/index.ts +0 -7
  398. package/src/wirings/credential/validate-credential-definitions.ts +0 -63
  399. package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
  400. package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
  401. package/src/wirings/gateway/gateway-runner.test.ts +0 -581
  402. package/src/wirings/gateway/gateway-runner.ts +0 -411
  403. package/src/wirings/gateway/gateway.types.ts +0 -137
  404. package/src/wirings/gateway/index.ts +0 -15
  405. package/src/wirings/http/http-routes.test.ts +0 -318
  406. package/src/wirings/http/http-routes.ts +0 -111
  407. package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
  408. package/src/wirings/http/http-runner.test.ts +0 -503
  409. package/src/wirings/http/http-runner.ts +0 -462
  410. package/src/wirings/http/http.types.ts +0 -307
  411. package/src/wirings/http/index.ts +0 -27
  412. package/src/wirings/http/log-http-routes.ts +0 -18
  413. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
  414. package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
  415. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
  416. package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
  417. package/src/wirings/http/routers/http-router.ts +0 -13
  418. package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
  419. package/src/wirings/http/routers/path-to-regex.ts +0 -115
  420. package/src/wirings/http/web-request.test.ts +0 -382
  421. package/src/wirings/http/web-request.ts +0 -162
  422. package/src/wirings/mcp/index.ts +0 -26
  423. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
  424. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  425. package/src/wirings/mcp/mcp-runner.test.ts +0 -588
  426. package/src/wirings/mcp/mcp-runner.ts +0 -330
  427. package/src/wirings/mcp/mcp.types.ts +0 -199
  428. package/src/wirings/node/index.ts +0 -2
  429. package/src/wirings/node/node.types.ts +0 -23
  430. package/src/wirings/oauth2/index.ts +0 -1
  431. package/src/wirings/oauth2/oauth2.types.ts +0 -12
  432. package/src/wirings/persona/define-personas.ts +0 -33
  433. package/src/wirings/persona/index.ts +0 -75
  434. package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
  435. package/src/wirings/persona/persona-app-scopes.ts +0 -74
  436. package/src/wirings/persona/persona-email.ts +0 -87
  437. package/src/wirings/persona/persona-environments.test.ts +0 -194
  438. package/src/wirings/persona/persona-environments.ts +0 -138
  439. package/src/wirings/persona/persona-mailbox.ts +0 -156
  440. package/src/wirings/persona/persona.test.ts +0 -230
  441. package/src/wirings/persona/persona.types.ts +0 -156
  442. package/src/wirings/persona/validate-personas.ts +0 -137
  443. package/src/wirings/queue/index.ts +0 -29
  444. package/src/wirings/queue/queue-identity.test.ts +0 -454
  445. package/src/wirings/queue/queue-identity.ts +0 -176
  446. package/src/wirings/queue/queue-runner.test.ts +0 -705
  447. package/src/wirings/queue/queue-runner.ts +0 -181
  448. package/src/wirings/queue/queue.types.ts +0 -161
  449. package/src/wirings/queue/register-queue-helper.ts +0 -46
  450. package/src/wirings/queue/signed-queue-service.ts +0 -60
  451. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  452. package/src/wirings/queue/validate-worker-config.ts +0 -90
  453. package/src/wirings/role/define-system-role.ts +0 -33
  454. package/src/wirings/role/index.ts +0 -13
  455. package/src/wirings/role/role.test.ts +0 -104
  456. package/src/wirings/role/role.types.ts +0 -47
  457. package/src/wirings/role/validate-role-definitions.ts +0 -93
  458. package/src/wirings/rpc/index.ts +0 -8
  459. package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
  460. package/src/wirings/rpc/rpc-runner.ts +0 -569
  461. package/src/wirings/rpc/rpc-types.ts +0 -87
  462. package/src/wirings/scheduler/index.ts +0 -11
  463. package/src/wirings/scheduler/log-schedulers.ts +0 -16
  464. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
  465. package/src/wirings/scheduler/scheduler-runner.ts +0 -138
  466. package/src/wirings/scheduler/scheduler.types.ts +0 -42
  467. package/src/wirings/scope/define-scope.ts +0 -33
  468. package/src/wirings/scope/index.ts +0 -15
  469. package/src/wirings/scope/scope.test.ts +0 -159
  470. package/src/wirings/scope/scope.types.ts +0 -42
  471. package/src/wirings/scope/validate-scope-definitions.ts +0 -107
  472. package/src/wirings/secret/index.ts +0 -9
  473. package/src/wirings/secret/secret.types.ts +0 -70
  474. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
  475. package/src/wirings/secret/validate-secret-definitions.ts +0 -88
  476. package/src/wirings/trigger/index.ts +0 -9
  477. package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
  478. package/src/wirings/trigger/trigger-runner.test.ts +0 -78
  479. package/src/wirings/trigger/trigger-runner.ts +0 -113
  480. package/src/wirings/trigger/trigger.types.ts +0 -100
  481. package/src/wirings/variable/index.ts +0 -8
  482. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
  483. package/src/wirings/variable/validate-variable-definitions.ts +0 -71
  484. package/src/wirings/variable/variable.types.ts +0 -40
  485. package/src/wirings/virtual-user/index.ts +0 -107
  486. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
  487. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
  488. package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
  489. package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
  490. package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
  491. package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
  492. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
  493. package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
  494. package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
  495. package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
  496. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
  497. package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
  498. package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
  499. package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
  500. package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
  501. package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
  502. package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
  503. package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
  504. package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
  505. package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
  506. package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
  507. package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
  508. package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
  509. package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
  510. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
  511. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
  512. package/src/wirings/workflow/feature.test.ts +0 -131
  513. package/src/wirings/workflow/feature.ts +0 -59
  514. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
  515. package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
  516. package/src/wirings/workflow/graph/graph-node.ts +0 -115
  517. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
  518. package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
  519. package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
  520. package/src/wirings/workflow/graph/graph-validation.ts +0 -41
  521. package/src/wirings/workflow/graph/template.test.ts +0 -49
  522. package/src/wirings/workflow/graph/template.ts +0 -42
  523. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
  524. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
  525. package/src/wirings/workflow/index.ts +0 -107
  526. package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
  527. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
  528. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
  529. package/src/wirings/workflow/run-timeline.test.ts +0 -199
  530. package/src/wirings/workflow/run-timeline.ts +0 -185
  531. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
  532. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
  533. package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
  534. package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
  535. package/src/wirings/workflow/scenario-poll.test.ts +0 -64
  536. package/src/wirings/workflow/scenario-poll.ts +0 -27
  537. package/src/wirings/workflow/scenario-prose.test.ts +0 -275
  538. package/src/wirings/workflow/scenario-prose.ts +0 -86
  539. package/src/wirings/workflow/scenario-run.types.ts +0 -193
  540. package/src/wirings/workflow/scenario-service.test.ts +0 -147
  541. package/src/wirings/workflow/scenario-step-guards.ts +0 -23
  542. package/src/wirings/workflow/scenario-step.test.ts +0 -800
  543. package/src/wirings/workflow/scenario-step.types.ts +0 -262
  544. package/src/wirings/workflow/scenario-surface.test.ts +0 -146
  545. package/src/wirings/workflow/scenario-surface.ts +0 -71
  546. package/src/wirings/workflow/scenario.types.ts +0 -63
  547. package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
  548. package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
  549. package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
  550. package/src/wirings/workflow/workflow-approval.ts +0 -290
  551. package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
  552. package/src/wirings/workflow/workflow-constants.ts +0 -66
  553. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
  554. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
  555. package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
  556. package/src/wirings/workflow/workflow-errors.ts +0 -132
  557. package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
  558. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
  559. package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
  560. package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
  561. package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
  562. package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
  563. package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
  564. package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
  565. package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
  566. package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
  567. package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
  568. package/src/wirings/workflow/workflow-recovery.ts +0 -192
  569. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
  570. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
  571. package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
  572. package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
  573. package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
  574. package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
  575. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
  576. package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
  577. package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
  578. package/src/wirings/workflow/workflow-status-stream.ts +0 -144
  579. package/src/wirings/workflow/workflow-step-claim.ts +0 -46
  580. package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
  581. package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
  582. package/src/wirings/workflow/workflow-suspend.ts +0 -61
  583. package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
  584. package/src/wirings/workflow/workflow.types.ts +0 -268
  585. package/src/wirings-stay-decoupled.test.ts +0 -130
  586. package/tsconfig.json +0 -14
  587. package/tsconfig.tsbuildinfo +0 -1
  588. package/tsconfig.type-tests.json +0 -15
@@ -0,0 +1,100 @@
1
+ import type { DeclaredFlag, FlagConfigSnapshot, FlagSubject } from '../wirings/flag/flag.types.js';
2
+ /**
3
+ * The read half of feature flags, and the only half on the request path.
4
+ *
5
+ * Split from {@link FeatureFlagStore} so a third-party provider — PostHog,
6
+ * Unleash, LaunchDarkly — can back flags without pretending to implement an
7
+ * administration surface it does not own. Their UI is the operator surface;
8
+ * writing flags back through their management API means two systems own the
9
+ * same rows, and an implementation that throws from six methods is a console
10
+ * full of buttons that 500.
11
+ */
12
+ export interface FeatureFlagSource {
13
+ /**
14
+ * The global config half: one small blob shared by every user, never
15
+ * per-user data.
16
+ *
17
+ * Implementations MUST cache this in isolate memory and MUST fall back to the
18
+ * compiled declaration when the backing store cannot be read — never to a
19
+ * database query, which would put I/O on the request path this design exists
20
+ * to keep clear. See `compiledFallbackSnapshot`.
21
+ */
22
+ snapshot(): Promise<FlagConfigSnapshot>;
23
+ /**
24
+ * The flags the running app declares, where the implementation was told.
25
+ *
26
+ * Optional because it is not on the request path: resolution reads the
27
+ * snapshot, and a declaration absent from it already fails open. It exists so
28
+ * an administration surface can report the drift a provider cannot fix for
29
+ * itself — a flag declared in code that nobody created in PostHog resolves as
30
+ * on for everyone, and that is worth seeing before production finds it.
31
+ */
32
+ declaredFlags?(): readonly DeclaredFlag[];
33
+ }
34
+ /** One flag as an administration surface sees it. */
35
+ export type FlagRow = DeclaredFlag & {
36
+ enabled: boolean;
37
+ rolloutPercent: number | null;
38
+ /**
39
+ * False when the flag's declaration has been removed from code but its row
40
+ * survives: still switchable, no longer offered, awaiting `pikku flags
41
+ * prune`. Never a silent revoke.
42
+ */
43
+ declared: boolean;
44
+ };
45
+ /**
46
+ * One override, as an administration surface sees it.
47
+ *
48
+ * Carries the subject's kind, which resolution does not: by the time a flag is
49
+ * resolved the organization and the user are one opaque string, and only a
50
+ * screen rendering the row needs to say which it was.
51
+ */
52
+ export type FlagOverrideRow = {
53
+ /** The organization or user this override pins, as an opaque id. */
54
+ subjectId: string;
55
+ /** Which of the two `subjectId` is — `organization` or `user`. */
56
+ subjectKind: string;
57
+ /** Whether the subject is pinned on or pinned off, past the rollout either way. */
58
+ enabled: boolean;
59
+ /** The user who wrote the override, where the store recorded one. */
60
+ grantedBy?: string;
61
+ /** When it was written, as an ISO-8601 instant, where the store recorded one. */
62
+ grantedAt?: string;
63
+ };
64
+ /**
65
+ * The write half: the declaration lifecycle plus the operator controls.
66
+ *
67
+ * Implemented by a store pikku owns. Absent when flags come from a provider,
68
+ * which is what makes the console's Flags tab read-only rather than lying.
69
+ */
70
+ export interface FeatureFlagStore extends FeatureFlagSource {
71
+ /**
72
+ * Registers the declared vocabulary. Additive on the same terms as
73
+ * `syncScopes`: a removed declaration leaves the row marked `declared: false`
74
+ * rather than deleting an operator's switch on deploy.
75
+ *
76
+ * A flag's description and `anyOf` *are* re-synced, because that is the
77
+ * declaration's whole content — editing it is how you change what the flag
78
+ * means, and the deploy is when it takes effect. `enabled`, the rollout and
79
+ * every override are the operator's, and are never touched.
80
+ */
81
+ syncFlags(flags: DeclaredFlag[]): Promise<void>;
82
+ listFlags(): Promise<FlagRow[]>;
83
+ /**
84
+ * One flag's overrides, in full.
85
+ *
86
+ * Not folded into {@link listFlags}: the overrides are unbounded per flag
87
+ * while the list is one row each, and a screen that reads every override of
88
+ * every flag to render a board would grow with the wrong number.
89
+ */
90
+ listOverrides(key: string): Promise<FlagOverrideRow[]>;
91
+ setEnabled(key: string, enabled: boolean, actor?: string, note?: string): Promise<void>;
92
+ /** `percent` is 0–100, or null to remove the rollout constraint. */
93
+ setRollout(key: string, percent: number | null, actor?: string): Promise<void>;
94
+ setOverride(key: string, subject: FlagSubject, enabled: boolean, actor?: string): Promise<void>;
95
+ clearOverride(key: string, subject: FlagSubject): Promise<void>;
96
+ /** Flags in the store with no declaration left in code; powers `pikku flags audit`. */
97
+ findStaleFlags(): Promise<string[]>;
98
+ /** Removes undeclared flags and their overrides. */
99
+ pruneFlags(): Promise<string[]>;
100
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -47,6 +47,7 @@ export type { VariableMeta } from './typed-variables-service.js';
47
47
  export type { MetaService } from './meta-service.js';
48
48
  export type { SessionStore } from './session-store.js';
49
49
  export type { ScopeService, Role } from './scope-service.js';
50
+ export type { FeatureFlagSource, FeatureFlagStore, FlagRow, FlagOverrideRow, } from './feature-flag-service.js';
50
51
  export type { IsSystemRole } from './system-role-guard.js';
51
52
  export { NoopAuditService, createInvocationAudit } from './audit-service.js';
52
53
  export type { AuditConfig, AuditDurability, AuditEvent, AuditEventBatch, AuditLog, AuditService, AuditUserIdentity, ResolvedAuditConfig, } from './audit-service.js';
@@ -9,6 +9,8 @@ import type { WorkflowsMeta } from '../wirings/workflow/workflow.types.js';
9
9
  import type { FeaturesMeta } from '../wirings/workflow/scenario.types.js';
10
10
  import type { ResolvedPersona } from './personas-service.js';
11
11
  import type { SystemRoleDefinitionsMeta } from '../wirings/role/role.types.js';
12
+ import type { FeatureFlagDefinitionsMeta } from '../wirings/flag/flag.types.js';
13
+ import type { AnalyticsEventsMeta } from '../analytics/analytics.types.js';
12
14
  import type { TriggerMeta, TriggerSourceMeta } from '../wirings/trigger/trigger.types.js';
13
15
  import type { SecretDefinitionsMeta } from '../wirings/secret/secret.types.js';
14
16
  import type { CredentialDefinitionsMeta } from '../wirings/credential/credential.types.js';
@@ -152,6 +154,16 @@ export interface MetaService {
152
154
  * seed granted from rather than a second one.
153
155
  */
154
156
  getSystemRolesMeta(): Promise<SystemRoleDefinitionsMeta>;
157
+ /**
158
+ * The flags declared with `defineFeatureFlags`, keyed by name.
159
+ *
160
+ * The declaration half only. What an operator set — the switch, the rollout,
161
+ * the overrides — lives in the flag store and is read through the admin
162
+ * surface, because it changes without a deploy and this does not.
163
+ */
164
+ getFeatureFlagsMeta(): Promise<FeatureFlagDefinitionsMeta>;
165
+ /** The events declared with `defineAnalyticsEvents`, keyed by name. */
166
+ getAnalyticsMeta(): Promise<AnalyticsEventsMeta>;
155
167
  getFeaturesMeta(): Promise<FeaturesMeta>;
156
168
  getTriggerMeta(): Promise<TriggerMeta>;
157
169
  getTriggerSourceMeta(): Promise<TriggerSourceMeta>;
@@ -182,6 +194,8 @@ export declare class LocalMetaService implements MetaService {
182
194
  private workflowMetaCache;
183
195
  private personasMetaCache;
184
196
  private systemRolesMetaCache;
197
+ private featureFlagsMetaCache;
198
+ private analyticsMetaCache;
185
199
  private featuresMetaCache;
186
200
  private triggerMetaCache;
187
201
  private triggerSourceMetaCache;
@@ -216,6 +230,8 @@ export declare class LocalMetaService implements MetaService {
216
230
  getWorkflowMeta(): Promise<WorkflowsMeta>;
217
231
  getPersonasMeta(): Promise<Record<string, ResolvedPersona>>;
218
232
  getSystemRolesMeta(): Promise<SystemRoleDefinitionsMeta>;
233
+ getFeatureFlagsMeta(): Promise<FeatureFlagDefinitionsMeta>;
234
+ getAnalyticsMeta(): Promise<AnalyticsEventsMeta>;
219
235
  getFeaturesMeta(): Promise<FeaturesMeta>;
220
236
  getTriggerMeta(): Promise<TriggerMeta>;
221
237
  getTriggerSourceMeta(): Promise<TriggerSourceMeta>;
@@ -15,6 +15,8 @@ export class LocalMetaService {
15
15
  workflowMetaCache = null;
16
16
  personasMetaCache = null;
17
17
  systemRolesMetaCache = null;
18
+ featureFlagsMetaCache = null;
19
+ analyticsMetaCache = null;
18
20
  featuresMetaCache = null;
19
21
  triggerMetaCache = null;
20
22
  triggerSourceMetaCache = null;
@@ -111,6 +113,8 @@ export class LocalMetaService {
111
113
  this.workflowMetaCache = null;
112
114
  this.personasMetaCache = null;
113
115
  this.systemRolesMetaCache = null;
116
+ this.featureFlagsMetaCache = null;
117
+ this.analyticsMetaCache = null;
114
118
  this.featuresMetaCache = null;
115
119
  this.triggerMetaCache = null;
116
120
  this.triggerSourceMetaCache = null;
@@ -270,6 +274,21 @@ export class LocalMetaService {
270
274
  this.systemRolesMetaCache = content ? JSON.parse(content) : {};
271
275
  return this.systemRolesMetaCache;
272
276
  }
277
+ async getFeatureFlagsMeta() {
278
+ if (this.featureFlagsMetaCache)
279
+ return this.featureFlagsMetaCache;
280
+ // Beside the scopes their `anyOf` names, which is where codegen writes it.
281
+ const content = await this.readFile('scopes/pikku-flags-meta.gen.json');
282
+ this.featureFlagsMetaCache = content ? JSON.parse(content) : {};
283
+ return this.featureFlagsMetaCache;
284
+ }
285
+ async getAnalyticsMeta() {
286
+ if (this.analyticsMetaCache)
287
+ return this.analyticsMetaCache;
288
+ const content = await this.readFile('analytics/pikku-analytics-meta.gen.json');
289
+ this.analyticsMetaCache = content ? JSON.parse(content) : {};
290
+ return this.analyticsMetaCache;
291
+ }
273
292
  async getFeaturesMeta() {
274
293
  if (this.featuresMetaCache)
275
294
  return this.featuresMetaCache;
@@ -92,8 +92,13 @@ export declare abstract class WebhookService {
92
92
  verify(secret: string, signature: string, body: string): boolean;
93
93
  /**
94
94
  * The three methods below are optional capability: the default queue-only
95
- * service keeps no history and throws, and a store-backed implementation
96
- * (e.g. `KyselyWebhookService` in `@pikku/kysely`) overrides them.
95
+ * service keeps no history, and a store-backed implementation (e.g.
96
+ * `KyselyWebhookService` in `@pikku/kysely`) overrides them.
97
+ *
98
+ * Only the write throws. A write that goes nowhere loses the caller's data,
99
+ * so it has to say so; a read of a history nobody keeps is honestly empty,
100
+ * and throwing there turns the console's webhooks page into an error on
101
+ * every app that has not opted into persistence.
97
102
  */
98
103
  recordAttempt(_deliveryId: string, _result: WebhookAttemptResult): Promise<void>;
99
104
  /** Most recent first. */
@@ -14,17 +14,22 @@ export class WebhookService {
14
14
  }
15
15
  /**
16
16
  * The three methods below are optional capability: the default queue-only
17
- * service keeps no history and throws, and a store-backed implementation
18
- * (e.g. `KyselyWebhookService` in `@pikku/kysely`) overrides them.
17
+ * service keeps no history, and a store-backed implementation (e.g.
18
+ * `KyselyWebhookService` in `@pikku/kysely`) overrides them.
19
+ *
20
+ * Only the write throws. A write that goes nowhere loses the caller's data,
21
+ * so it has to say so; a read of a history nobody keeps is honestly empty,
22
+ * and throwing there turns the console's webhooks page into an error on
23
+ * every app that has not opted into persistence.
19
24
  */
20
25
  recordAttempt(_deliveryId, _result) {
21
26
  throw new NotImplementedError('webhook delivery persistence is not configured');
22
27
  }
23
28
  /** Most recent first. */
24
- listDeliveries(_opts) {
25
- throw new NotImplementedError('webhook delivery persistence is not configured');
29
+ async listDeliveries(_opts) {
30
+ return [];
26
31
  }
27
- getDelivery(_deliveryId) {
28
- throw new NotImplementedError('webhook delivery persistence is not configured');
32
+ async getDelivery(_deliveryId) {
33
+ return null;
29
34
  }
30
35
  }
@@ -1,10 +1,10 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `agentRunService`. Runs only when a backend supplies one. */
3
- export declare const defineAgentRunServiceTests: (name: string, agentRunService: NonNullable<ServiceTestConfig["services"]["agentRunService"]>,
3
+ export declare const defineAgentRunServiceTests: (name: string, agentRunService: NonNullable<ServiceTestConfig['services']['agentRunService']>,
4
4
  /**
5
5
  * Thread-ownership is a property of the two services together — the run
6
6
  * service lists what the storage service owns — so that half of the suite
7
7
  * only runs when a backend supplies both. Passed explicitly rather than
8
8
  * closed over, so the dependency is visible in the signature.
9
9
  */
10
- agentStorageService?: ServiceTestConfig["services"]["agentStorageService"]) => void;
10
+ agentStorageService?: ServiceTestConfig['services']['agentStorageService']) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `agentStorageService`. Runs only when a backend supplies one. */
3
- export declare const defineAiStorageServiceTests: (name: string, agentStorageService: NonNullable<ServiceTestConfig["services"]["agentStorageService"]>) => void;
3
+ export declare const defineAiStorageServiceTests: (name: string, agentStorageService: NonNullable<ServiceTestConfig['services']['agentStorageService']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `channelStore`. Runs only when a backend supplies one. */
3
- export declare const defineChannelStoreTests: (name: string, channelStore: NonNullable<ServiceTestConfig["services"]["channelStore"]>) => void;
3
+ export declare const defineChannelStoreTests: (name: string, channelStore: NonNullable<ServiceTestConfig['services']['channelStore']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `credentialService`. Runs only when a backend supplies one. */
3
- export declare const defineCredentialServiceTests: (name: string, credentialService: NonNullable<ServiceTestConfig["services"]["credentialService"]>) => void;
3
+ export declare const defineCredentialServiceTests: (name: string, credentialService: NonNullable<ServiceTestConfig['services']['credentialService']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `deploymentService`. Runs only when a backend supplies one. */
3
- export declare const defineDeploymentServiceTests: (name: string, deploymentService: NonNullable<ServiceTestConfig["services"]["deploymentService"]>) => void;
3
+ export declare const defineDeploymentServiceTests: (name: string, deploymentService: NonNullable<ServiceTestConfig['services']['deploymentService']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `eventHubStore`. Runs only when a backend supplies one. */
3
- export declare const defineEventHubStoreTests: (name: string, eventHubStore: NonNullable<ServiceTestConfig["services"]["eventHubStore"]>) => void;
3
+ export declare const defineEventHubStoreTests: (name: string, eventHubStore: NonNullable<ServiceTestConfig['services']['eventHubStore']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `secretService`. Runs only when a backend supplies one. */
3
- export declare const defineSecretServiceTests: (name: string, secretService: NonNullable<ServiceTestConfig["services"]["secretService"]>) => void;
3
+ export declare const defineSecretServiceTests: (name: string, secretService: NonNullable<ServiceTestConfig['services']['secretService']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `sessionStore`. Runs only when a backend supplies one. */
3
- export declare const defineSessionStoreTests: (name: string, sessionStore: NonNullable<ServiceTestConfig["services"]["sessionStore"]>) => void;
3
+ export declare const defineSessionStoreTests: (name: string, sessionStore: NonNullable<ServiceTestConfig['services']['sessionStore']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `workflowRunService`. Runs only when a backend supplies one. */
3
- export declare const defineWorkflowRunServiceTests: (name: string, workflowRunService: NonNullable<ServiceTestConfig["services"]["workflowRunService"]>) => void;
3
+ export declare const defineWorkflowRunServiceTests: (name: string, workflowRunService: NonNullable<ServiceTestConfig['services']['workflowRunService']>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceTestConfig } from '../service-tests.js';
2
2
  /** Conformance suite for `workflowService`. Runs only when a backend supplies one. */
3
- export declare const defineWorkflowServiceTests: (name: string, workflowService: NonNullable<ServiceTestConfig["services"]["workflowService"]>) => void;
3
+ export declare const defineWorkflowServiceTests: (name: string, workflowService: NonNullable<ServiceTestConfig['services']['workflowService']>) => void;
@@ -38,7 +38,9 @@ import type { MetaService } from '../services/meta-service.js';
38
38
  import type { CoverageService } from '../services/v8-coverage-service.js';
39
39
  import type { SessionStore } from '../services/session-store.js';
40
40
  import type { ScopeService } from '../services/scope-service.js';
41
+ import type { FeatureFlagSource } from '../services/feature-flag-service.js';
41
42
  import type { AuditDurability, AuditLog, AuditService } from '../services/audit-service.js';
43
+ import type { AnalyticsLog, AnalyticsIdentityResolver, AnalyticsService } from '../analytics/analytics.types.js';
42
44
  export type PikkuWiringTypes = 'http' | 'scheduler' | 'trigger' | 'channel' | 'rpc' | 'queue' | 'mcp' | 'cli' | 'workflow' | 'agent' | 'gateway';
43
45
  /**
44
46
  * Runtime pool tuning for the Postgres adapter. The connection string stays
@@ -145,6 +147,20 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
145
147
  /** V8 precise-coverage collector (`pikku dev --coverage` only) */
146
148
  coverageService?: CoverageService;
147
149
  audit?: AuditService;
150
+ /** Where product-analytics events go; unset means the logger. */
151
+ analyticsService?: AnalyticsService;
152
+ /**
153
+ * Resolves the browser-originated half of an event's identity — vendor ids
154
+ * and consent — from the wire. Unset means a sink sees only what the session
155
+ * carries, which is enough for a product-analytics tool and not enough for an
156
+ * ad platform.
157
+ */
158
+ analyticsIdentity?: AnalyticsIdentityResolver;
159
+ /**
160
+ * Request-scoped buffer writing into `analyticsService`. Narrow it to the
161
+ * app's own event union in `SingletonServices` to type `record()`.
162
+ */
163
+ analytics?: AnalyticsLog;
148
164
  /**
149
165
  * Request-scoped audit buffer that writes into `audit` (the durable sink).
150
166
  * Returned as a wire service so the runner flushes it via `close()` when the
@@ -158,6 +174,13 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
158
174
  * never by the function runner.
159
175
  */
160
176
  scopeService?: ScopeService;
177
+ /**
178
+ * The global feature-flag config, read by the function runner to enforce a
179
+ * flag's availability. Inert when absent: a project that declares no flag
180
+ * carries nothing, and a `featureFlag:` with no source registered is a
181
+ * no-op rather than a closed door.
182
+ */
183
+ featureFlags?: FeatureFlagSource;
161
184
  /**
162
185
  * Built once by the factory an auth package registers and injected by the
163
186
  * generated `pikkuServices` wrapper — service factories must not return it
@@ -12,4 +12,4 @@ export type AgentRPCOptions = {
12
12
  * to the runner and stream code it delegates to, instead of a wing of the RPC
13
13
  * primitive.
14
14
  */
15
- export declare const createAgentRPC: (wire: PikkuRawWire, options: AgentRPCOptions) => PikkuRPC["agent"];
15
+ export declare const createAgentRPC: (wire: PikkuRawWire, options: AgentRPCOptions) => PikkuRPC['agent'];
@@ -30,10 +30,10 @@ export declare const toAccumulatedStep: (stepResult: StepResult) => {
30
30
  outputTokens: number;
31
31
  };
32
32
  toolCalls: {
33
- error?: string | undefined;
34
33
  name: string;
35
34
  args: Record<string, unknown>;
36
35
  result: string;
36
+ error?: string | undefined;
37
37
  }[];
38
38
  };
39
39
  type PendingApproval = {
@@ -8,7 +8,7 @@ import { type ScorerInput } from './agent-scorer.types.js';
8
8
  * also strictly best-effort: the client already has its answer, so nothing here
9
9
  * may fail the run.
10
10
  */
11
- export declare const scoreFinishedRun: (run: ScorerInput, services: Pick<CoreSingletonServices, "logger"> & {
11
+ export declare const scoreFinishedRun: (run: ScorerInput, services: Pick<CoreSingletonServices, 'logger'> & {
12
12
  queueService?: {
13
13
  add: (queueName: string, data: unknown) => Promise<any>;
14
14
  };
@@ -6,7 +6,7 @@ export declare const runChannelLifecycleWithMiddleware: ({ channelConfig, meta,
6
6
  channelConfig: CoreChannel<unknown, any>;
7
7
  meta: ChannelMessageMeta;
8
8
  lifecycleConfig: any;
9
- lifecycleType: "connect" | "disconnect";
9
+ lifecycleType: 'connect' | 'disconnect';
10
10
  services: CoreSingletonServices;
11
11
  channel: any;
12
12
  data?: unknown;
@@ -5,10 +5,10 @@ import type { ChannelRPCValidator } from './channel-rpc.types.js';
5
5
  * declared return type — the same one an agent tool or an HTTP response is
6
6
  * checked against.
7
7
  */
8
- export declare const createChannelRPCResultValidator: (singletonServices: Pick<CoreSingletonServices, "logger" | "schema">, packageName?: string | null) => ChannelRPCValidator;
8
+ export declare const createChannelRPCResultValidator: (singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>, packageName?: string | null) => ChannelRPCValidator;
9
9
  /**
10
10
  * Checks outbound arguments against the declared input type. Unlike the result
11
11
  * check this is not a boundary — it catches version drift, where a server built
12
12
  * against a newer capability signature calls a client that predates it.
13
13
  */
14
- export declare const createChannelRPCInputValidator: (singletonServices: Pick<CoreSingletonServices, "logger" | "schema">, packageName?: string | null) => ChannelRPCValidator;
14
+ export declare const createChannelRPCInputValidator: (singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>, packageName?: string | null) => ChannelRPCValidator;
@@ -1,7 +1,7 @@
1
1
  import type { SessionService } from '../../services/user-session-service.js';
2
2
  import type { ChannelMeta, CoreChannel, RunChannelOptions, RunChannelParams } from './channel.types.js';
3
3
  export declare const wireChannel: <In, Channel extends string, ChannelConnect, ChannelDisconnect, ChannelFunctionMessage>(channel: CoreChannel<In, Channel, ChannelConnect, ChannelDisconnect, ChannelFunctionMessage>) => void;
4
- export declare const openChannel: ({ route, coerceDataFromSchema, request, }: Pick<CoreChannel<unknown, string>, "route"> & RunChannelParams<unknown> & {
4
+ export declare const openChannel: ({ route, coerceDataFromSchema, request, }: Pick<CoreChannel<unknown, string>, 'route'> & RunChannelParams<unknown> & {
5
5
  userSession: SessionService<any>;
6
6
  } & RunChannelOptions) => Promise<{
7
7
  openingData: unknown;
@@ -1,7 +1,7 @@
1
1
  import type { CoreChannel, RunChannelOptions } from '../channel.types.js';
2
2
  import { PikkuLocalChannelHandler } from './local-channel-handler.js';
3
3
  import type { PikkuHTTPRequest, PikkuHTTPResponse } from '../../http/http.types.js';
4
- export declare const runLocalChannel: ({ channelId, request, response, route, skipUserSession, respondWith404, coerceDataFromSchema, logWarningsForStatusCodes, bubbleErrors, }: Partial<Pick<CoreChannel<unknown, any>, "route">> & RunChannelOptions & {
4
+ export declare const runLocalChannel: ({ channelId, request, response, route, skipUserSession, respondWith404, coerceDataFromSchema, logWarningsForStatusCodes, bubbleErrors, }: Partial<Pick<CoreChannel<unknown, any>, 'route'>> & RunChannelOptions & {
5
5
  channelId: string;
6
6
  request?: PikkuHTTPRequest;
7
7
  response?: PikkuHTTPResponse;
@@ -5,6 +5,6 @@ export interface RunServerlessChannelParams<ChannelData> extends RunChannelParam
5
5
  channelHandlerFactory: PikkuChannelHandlerFactory;
6
6
  channelObject?: unknown;
7
7
  }
8
- export declare const runChannelConnect: ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema, logWarningsForStatusCodes, respondWith404, bubbleErrors, }: Pick<CoreChannel<unknown, any>, "route"> & RunChannelOptions & RunServerlessChannelParams<unknown>) => Promise<void>;
8
+ export declare const runChannelConnect: ({ channelId, channelObject, request, response, route, channelStore, channelHandlerFactory, coerceDataFromSchema, logWarningsForStatusCodes, respondWith404, bubbleErrors, }: Pick<CoreChannel<unknown, any>, 'route'> & RunChannelOptions & RunServerlessChannelParams<unknown>) => Promise<void>;
9
9
  export declare const runChannelDisconnect: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>) => Promise<void>;
10
10
  export declare const runChannelMessage: ({ channelId, channelStore, channelHandlerFactory, }: RunServerlessChannelParams<unknown>, data: unknown) => Promise<unknown>;
@@ -6,8 +6,8 @@ import type { ApprovalRequester } from '../../channel/channel-rpc.js';
6
6
  */
7
7
  export type ApprovalMode = 'prompt' | 'auto' | 'dangerous';
8
8
  export declare const APPROVAL_FLAGS: {
9
- readonly auto: "--auto-approve";
10
- readonly dangerous: "--dangerously-auto-approve";
9
+ readonly auto: '--auto-approve';
10
+ readonly dangerous: '--dangerously-auto-approve';
11
11
  };
12
12
  /**
13
13
  * Stripped from argv, not just read: the server owns the command tree and has
@@ -0,0 +1,15 @@
1
+ import type { CoreUserSession } from '../../types/core.types.js';
2
+ import type { FeatureFlagSource } from '../../services/feature-flag-service.js';
3
+ import type { FlagSubject } from './flag.types.js';
4
+ /**
5
+ * The runner's half of a `featureFlag:` declaration.
6
+ *
7
+ * Availability only. Enforcing the capability half here would make a flag a
8
+ * second authorization path that ORs against `scopes:`, and the two would
9
+ * disagree the first time someone widened a flag's `anyOf` to preview it.
10
+ *
11
+ * No source registered is a no-op rather than a closed door: a project that has
12
+ * not wired one yet should not discover it by having every flagged function
13
+ * start throwing.
14
+ */
15
+ export declare const assertFeatureAvailable: (key: string, featureFlags: FeatureFlagSource | undefined, session: CoreUserSession | undefined, subject?: FlagSubject) => Promise<void>;
@@ -0,0 +1,23 @@
1
+ import { FeatureUnavailableError } from '../../errors/errors.js';
2
+ import { resolveFlag } from './resolve-flag.js';
3
+ /**
4
+ * The runner's half of a `featureFlag:` declaration.
5
+ *
6
+ * Availability only. Enforcing the capability half here would make a flag a
7
+ * second authorization path that ORs against `scopes:`, and the two would
8
+ * disagree the first time someone widened a flag's `anyOf` to preview it.
9
+ *
10
+ * No source registered is a no-op rather than a closed door: a project that has
11
+ * not wired one yet should not discover it by having every flagged function
12
+ * start throwing.
13
+ */
14
+ export const assertFeatureAvailable = async (key, featureFlags, session, subject) => {
15
+ if (!featureFlags) {
16
+ return;
17
+ }
18
+ const config = await featureFlags.snapshot();
19
+ const { available } = resolveFlag(key, undefined, session, config, subject);
20
+ if (!available) {
21
+ throw new FeatureUnavailableError(key);
22
+ }
23
+ };
@@ -0,0 +1,73 @@
1
+ import type { FeatureFlagSource } from '../../services/feature-flag-service.js';
2
+ import type { DeclaredFlag, FlagConfigSnapshot } from './flag.types.js';
3
+ export interface CachedFlagSourceOptions {
4
+ /**
5
+ * How long a snapshot is served before it is refreshed, in milliseconds.
6
+ *
7
+ * This is the latency of a kill switch, so it is short. It is not zero
8
+ * because the alternative is a round trip on every call to every flagged
9
+ * function, and a flag system that costs one is a flag system nobody puts on
10
+ * a hot path — which is exactly where a kill switch earns its keep.
11
+ */
12
+ ttlMs?: number;
13
+ /**
14
+ * The declared flags, used to build the cold-start fallback. Omitted leaves
15
+ * the fallback empty, which resolves every flag as available: a flag absent
16
+ * from a snapshot fails open.
17
+ */
18
+ declared?: readonly DeclaredFlag[];
19
+ }
20
+ /**
21
+ * The caching every flag source needs, so no adapter has to get it right twice.
22
+ *
23
+ * Three layers, in descending order of truth: a fresh read, the last good read,
24
+ * and the compiled declaration. The middle layer is the one that matters —
25
+ * dropping straight to the compiled fallback on a blip would switch on every
26
+ * flag an operator had deliberately left off, which is the opposite of what a
27
+ * dark launch is for. The compiled fallback is reached only on a cold start
28
+ * that has never managed a read, where there is nothing better to say.
29
+ *
30
+ * Refresh is pull-on-demand rather than a background poller on purpose. A
31
+ * poller assumes a long-lived process; an isolate on a serverless runtime is
32
+ * neither long-lived nor allowed to hold a timer between requests, so a vendor
33
+ * SDK built around one either never refreshes or leaks. Fetching inside the
34
+ * request that noticed the snapshot was stale works in both places.
35
+ */
36
+ export declare abstract class CachedFlagSource implements FeatureFlagSource {
37
+ private cached;
38
+ private cachedAt;
39
+ private inflight;
40
+ /**
41
+ * Bumped by every `invalidate()`. A read that started before the signal
42
+ * arrived carries the generation it started in, and stores nothing if that
43
+ * generation is no longer current — otherwise a webhook that landed
44
+ * mid-fetch would be answered by the pre-webhook snapshot, stamped fresh,
45
+ * and the kill switch would sit stale for another whole TTL.
46
+ */
47
+ private generation;
48
+ private fallback;
49
+ private declared;
50
+ private readonly ttlMs;
51
+ constructor(options?: CachedFlagSourceOptions);
52
+ /** One read of the backing store. Never called concurrently with itself. */
53
+ protected abstract fetchSnapshot(): Promise<FlagConfigSnapshot>;
54
+ /** Replaces the cold-start fallback, once the declared set is known. */
55
+ protected setDeclared(declared: DeclaredFlag[]): void;
56
+ declaredFlags(): readonly DeclaredFlag[];
57
+ /**
58
+ * Drops the cache, so the next read goes to the store.
59
+ *
60
+ * Public because the signal usually arrives from outside: PostHog and Unleash
61
+ * both emit a webhook on a flag change, and an HTTP wiring that receives one
62
+ * calls this to cut the kill-switch latency from the TTL to delivery time. A
63
+ * LaunchDarkly stream is the same call from a held-open connection rather
64
+ * than a request.
65
+ *
66
+ * It does not fetch. An eager refetch makes a burst of webhooks N round
67
+ * trips, and on a serverless runtime the isolate that received the signal may
68
+ * be gone before anything reads the result. The request that next notices the
69
+ * cache is empty pays for the read, and it is the one that needs it.
70
+ */
71
+ invalidate(): void;
72
+ snapshot(): Promise<FlagConfigSnapshot>;
73
+ }