@pikku/core 0.12.106 → 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 (589) hide show
  1. package/CHANGELOG.md +358 -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/rpc/rpc-runner.js +3 -0
  74. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
  75. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
  76. package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
  77. package/package.json +11 -5
  78. package/run-tests.sh +17 -9
  79. package/src/public-surface.json +26 -0
  80. package/src/agent-naming.test.ts +0 -68
  81. package/src/api-report.test.ts +0 -138
  82. package/src/app-alias-surface.test.ts +0 -179
  83. package/src/app-leaf-surface.test.ts +0 -222
  84. package/src/bootstrap-compat/root.ts +0 -20
  85. package/src/classification/column-form.test.ts +0 -97
  86. package/src/classification/column-form.ts +0 -55
  87. package/src/classification/data-classification.ts +0 -73
  88. package/src/classification/index.ts +0 -40
  89. package/src/classification/key-ids.ts +0 -2
  90. package/src/classification/secret-value.test.ts +0 -204
  91. package/src/classification/secret-value.ts +0 -106
  92. package/src/crypto-utils.test.ts +0 -668
  93. package/src/crypto-utils.ts +0 -460
  94. package/src/dev/hot-reload.test.ts +0 -587
  95. package/src/dev/hot-reload.ts +0 -225
  96. package/src/dev/module-runner.test.ts +0 -235
  97. package/src/dev/module-runner.ts +0 -138
  98. package/src/dev/reload-meta.test.ts +0 -183
  99. package/src/dev/reload-meta.ts +0 -144
  100. package/src/ecosystem-tier-removed.test.ts +0 -72
  101. package/src/env.ts +0 -1
  102. package/src/errors/error-handler.ts +0 -77
  103. package/src/errors/error.test.ts +0 -229
  104. package/src/errors/errors.ts +0 -393
  105. package/src/errors/index.ts +0 -11
  106. package/src/errors/serialized-error.ts +0 -12
  107. package/src/factory-functions.test.ts +0 -111
  108. package/src/function/abort-scope.test.ts +0 -97
  109. package/src/function/abort-scope.ts +0 -80
  110. package/src/function/function-meta.types.ts +0 -151
  111. package/src/function/function-runner.test.ts +0 -1619
  112. package/src/function/function-runner.ts +0 -499
  113. package/src/function/functions.types.ts +0 -319
  114. package/src/function/index.ts +0 -40
  115. package/src/function/list.types.test.ts +0 -100
  116. package/src/function/list.types.ts +0 -69
  117. package/src/function/pikku-request.test.ts +0 -35
  118. package/src/function/pikku-request.ts +0 -17
  119. package/src/gopass-secrets-removed.test.ts +0 -51
  120. package/src/handle-error.test.ts +0 -532
  121. package/src/handle-error.ts +0 -64
  122. package/src/middleware/auth-apikey.test.ts +0 -362
  123. package/src/middleware/auth-apikey.ts +0 -39
  124. package/src/middleware/auth-bearer.test.ts +0 -566
  125. package/src/middleware/auth-bearer.ts +0 -83
  126. package/src/middleware/auth-cookie.test.ts +0 -572
  127. package/src/middleware/auth-cookie.ts +0 -107
  128. package/src/middleware/cors.test.ts +0 -579
  129. package/src/middleware/cors.ts +0 -103
  130. package/src/middleware/index.ts +0 -30
  131. package/src/middleware/middleware-factories.ts +0 -76
  132. package/src/middleware/middleware.types.ts +0 -61
  133. package/src/middleware/remote-auth.test.ts +0 -547
  134. package/src/middleware/remote-auth.ts +0 -95
  135. package/src/middleware/remote-jobs-secret.ts +0 -35
  136. package/src/middleware/require-origin.test.ts +0 -115
  137. package/src/middleware/require-origin.ts +0 -79
  138. package/src/middleware/telemetry.ts +0 -83
  139. package/src/middleware-runner.test.ts +0 -578
  140. package/src/middleware-runner.ts +0 -232
  141. package/src/no-any-casts.test.ts +0 -57
  142. package/src/no-root-barrel.test.ts +0 -122
  143. package/src/permissions.test.ts +0 -256
  144. package/src/permissions.ts +0 -217
  145. package/src/pikku-state.test.ts +0 -198
  146. package/src/pikku-state.ts +0 -206
  147. package/src/production-barrels-stay-lean.test.ts +0 -110
  148. package/src/public-surface.test.ts +0 -133
  149. package/src/remote.test.ts +0 -173
  150. package/src/remote.ts +0 -56
  151. package/src/removed-legacy-exports.test.ts +0 -66
  152. package/src/run-tests-script.test.ts +0 -67
  153. package/src/schema.test.ts +0 -430
  154. package/src/schema.ts +0 -204
  155. package/src/scopes.test.ts +0 -203
  156. package/src/scopes.ts +0 -67
  157. package/src/services/agent-run-state-service.ts +0 -37
  158. package/src/services/agent-runner-service.ts +0 -238
  159. package/src/services/agent-storage-service.ts +0 -39
  160. package/src/services/ai-embedding-service.ts +0 -9
  161. package/src/services/audit-service.test.ts +0 -44
  162. package/src/services/audit-service.ts +0 -280
  163. package/src/services/content-service.ts +0 -65
  164. package/src/services/credential-service.ts +0 -20
  165. package/src/services/credential-wire-service.test.ts +0 -235
  166. package/src/services/credential-wire-service.ts +0 -120
  167. package/src/services/deployment-service.ts +0 -32
  168. package/src/services/email-service.test.ts +0 -100
  169. package/src/services/email-service.ts +0 -60
  170. package/src/services/email-template.test.ts +0 -311
  171. package/src/services/email-template.ts +0 -254
  172. package/src/services/file-scenario-run-store.test.ts +0 -349
  173. package/src/services/file-scenario-run-store.ts +0 -282
  174. package/src/services/gateway-service.ts +0 -5
  175. package/src/services/http-personas-converse.test.ts +0 -274
  176. package/src/services/http-personas.test.ts +0 -379
  177. package/src/services/http-personas.ts +0 -508
  178. package/src/services/in-memory-agent-run-state-service.ts +0 -87
  179. package/src/services/in-memory-queue-service.test.ts +0 -162
  180. package/src/services/in-memory-queue-service.ts +0 -78
  181. package/src/services/in-memory-session-store.test.ts +0 -58
  182. package/src/services/in-memory-session-store.ts +0 -20
  183. package/src/services/in-memory-trigger-service.ts +0 -47
  184. package/src/services/in-memory-workflow-service.test.ts +0 -430
  185. package/src/services/in-memory-workflow-service.ts +0 -595
  186. package/src/services/index.ts +0 -192
  187. package/src/services/istanbul-coverage-service.test.ts +0 -66
  188. package/src/services/istanbul-coverage-service.ts +0 -59
  189. package/src/services/jwt-service.ts +0 -15
  190. package/src/services/local-content-request-handler.test.ts +0 -240
  191. package/src/services/local-content-request-handler.ts +0 -295
  192. package/src/services/local-content.test.ts +0 -186
  193. package/src/services/local-content.ts +0 -242
  194. package/src/services/local-credential-service.ts +0 -63
  195. package/src/services/local-email-service.test.ts +0 -182
  196. package/src/services/local-email-service.ts +0 -43
  197. package/src/services/local-gateway-service.ts +0 -51
  198. package/src/services/local-secrets.test.ts +0 -95
  199. package/src/services/local-secrets.ts +0 -71
  200. package/src/services/local-variables.test.ts +0 -61
  201. package/src/services/local-variables.ts +0 -45
  202. package/src/services/logger-console.test.ts +0 -117
  203. package/src/services/logger-console.ts +0 -174
  204. package/src/services/logger.ts +0 -48
  205. package/src/services/meta-service.test.ts +0 -75
  206. package/src/services/meta-service.ts +0 -767
  207. package/src/services/persona-actor-secret.test.ts +0 -68
  208. package/src/services/persona-actor-secret.ts +0 -70
  209. package/src/services/persona-sign-in.test.ts +0 -219
  210. package/src/services/persona-sign-in.ts +0 -238
  211. package/src/services/personas-service.ts +0 -191
  212. package/src/services/pikku-user-id.test.ts +0 -62
  213. package/src/services/pikku-user-id.ts +0 -13
  214. package/src/services/queue-webhook-service.test.ts +0 -409
  215. package/src/services/queue-webhook-service.ts +0 -150
  216. package/src/services/remote-jobs.test.ts +0 -106
  217. package/src/services/remote-jobs.ts +0 -92
  218. package/src/services/scheduler-service.ts +0 -37
  219. package/src/services/schema-service.ts +0 -10
  220. package/src/services/scope-service.ts +0 -91
  221. package/src/services/scoped-credential-service.test.ts +0 -86
  222. package/src/services/scoped-credential-service.ts +0 -63
  223. package/src/services/scoped-secret-service.test.ts +0 -93
  224. package/src/services/scoped-secret-service.ts +0 -40
  225. package/src/services/secret-host-binding.test.ts +0 -138
  226. package/src/services/secret-host-binding.ts +0 -51
  227. package/src/services/secret-service.ts +0 -25
  228. package/src/services/secretless.test.ts +0 -54
  229. package/src/services/secretless.ts +0 -29
  230. package/src/services/session-store.ts +0 -9
  231. package/src/services/stub-tracker.test.ts +0 -104
  232. package/src/services/stub-tracker.ts +0 -175
  233. package/src/services/system-role-guard.test.ts +0 -96
  234. package/src/services/system-role-guard.ts +0 -71
  235. package/src/services/temporary-file-service.ts +0 -76
  236. package/src/services/trigger-service.ts +0 -5
  237. package/src/services/typed-credential-service.ts +0 -83
  238. package/src/services/typed-secret-service.test.ts +0 -204
  239. package/src/services/typed-secret-service.ts +0 -132
  240. package/src/services/typed-variables-service.test.ts +0 -166
  241. package/src/services/typed-variables-service.ts +0 -166
  242. package/src/services/user-session-service.test.ts +0 -147
  243. package/src/services/user-session-service.ts +0 -85
  244. package/src/services/v8-coverage-service.test.ts +0 -69
  245. package/src/services/v8-coverage-service.ts +0 -163
  246. package/src/services/variables-service.ts +0 -13
  247. package/src/services/webhook-service.ts +0 -147
  248. package/src/services/workflow-service.ts +0 -120
  249. package/src/side-effects-are-declared.test.ts +0 -84
  250. package/src/source-files-stay-composable.test.ts +0 -41
  251. package/src/template-alias-surface.test.ts +0 -240
  252. package/src/test-utils.ts +0 -38
  253. package/src/testing/index.ts +0 -3
  254. package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
  255. package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
  256. package/src/testing/service-tests/channel-store-tests.ts +0 -98
  257. package/src/testing/service-tests/credential-service-tests.ts +0 -143
  258. package/src/testing/service-tests/deployment-service-tests.ts +0 -33
  259. package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
  260. package/src/testing/service-tests/secret-service-tests.ts +0 -105
  261. package/src/testing/service-tests/session-store-tests.ts +0 -62
  262. package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
  263. package/src/testing/service-tests/workflow-service-tests.ts +0 -308
  264. package/src/testing/service-tests.ts +0 -95
  265. package/src/time-utils.test.ts +0 -56
  266. package/src/time-utils.ts +0 -89
  267. package/src/types/core.types.ts +0 -446
  268. package/src/types/index.ts +0 -25
  269. package/src/types/state.types.ts +0 -226
  270. package/src/types/typed-credentials.test.ts +0 -72
  271. package/src/utils/hash.test.ts +0 -68
  272. package/src/utils/hash.ts +0 -26
  273. package/src/utils/hmac.ts +0 -21
  274. package/src/utils/node-host-resolver.ts +0 -20
  275. package/src/utils/safe-fetch.test.ts +0 -515
  276. package/src/utils/safe-fetch.ts +0 -347
  277. package/src/utils.test.ts +0 -359
  278. package/src/utils.ts +0 -165
  279. package/src/version.test.ts +0 -80
  280. package/src/version.ts +0 -25
  281. package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
  282. package/src/wirings/actor-flow/index.ts +0 -10
  283. package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
  284. package/src/wirings/actor-flow/run-conversation.ts +0 -280
  285. package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
  286. package/src/wirings/addon/addon-runner.ts +0 -236
  287. package/src/wirings/addon/addon-scopes.test.ts +0 -225
  288. package/src/wirings/addon/addon-secrets.test.ts +0 -391
  289. package/src/wirings/addon/index.ts +0 -12
  290. package/src/wirings/addon/remote-addon-auth.ts +0 -65
  291. package/src/wirings/addon/wire-addon.test.ts +0 -102
  292. package/src/wirings/addon/wire-addon.ts +0 -202
  293. package/src/wirings/addon/wire-remote-addon.ts +0 -41
  294. package/src/wirings/agent/agent-agui.test.ts +0 -1213
  295. package/src/wirings/agent/agent-agui.ts +0 -405
  296. package/src/wirings/agent/agent-authorization.test.ts +0 -208
  297. package/src/wirings/agent/agent-finalize.test.ts +0 -187
  298. package/src/wirings/agent/agent-finalize.ts +0 -197
  299. package/src/wirings/agent/agent-helpers.test.ts +0 -215
  300. package/src/wirings/agent/agent-helpers.ts +0 -96
  301. package/src/wirings/agent/agent-interrupt.test.ts +0 -833
  302. package/src/wirings/agent/agent-interrupt.ts +0 -400
  303. package/src/wirings/agent/agent-memory.test.ts +0 -397
  304. package/src/wirings/agent/agent-memory.ts +0 -496
  305. package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
  306. package/src/wirings/agent/agent-model-config.test.ts +0 -103
  307. package/src/wirings/agent/agent-model-config.ts +0 -59
  308. package/src/wirings/agent/agent-prepare.test.ts +0 -977
  309. package/src/wirings/agent/agent-prepare.ts +0 -1083
  310. package/src/wirings/agent/agent-registry.test.ts +0 -455
  311. package/src/wirings/agent/agent-registry.ts +0 -99
  312. package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
  313. package/src/wirings/agent/agent-rpc.ts +0 -116
  314. package/src/wirings/agent/agent-runner.test.ts +0 -1229
  315. package/src/wirings/agent/agent-runner.ts +0 -858
  316. package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
  317. package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
  318. package/src/wirings/agent/agent-stream.test.ts +0 -1800
  319. package/src/wirings/agent/agent-stream.ts +0 -1639
  320. package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
  321. package/src/wirings/agent/agent-turn.test.ts +0 -65
  322. package/src/wirings/agent/agent-turn.ts +0 -122
  323. package/src/wirings/agent/agent-utils.ts +0 -20
  324. package/src/wirings/agent/agent.types.ts +0 -676
  325. package/src/wirings/agent/index.ts +0 -58
  326. package/src/wirings/agent/voice-input.test.ts +0 -220
  327. package/src/wirings/agent/voice-input.ts +0 -180
  328. package/src/wirings/agent/voice-output.test.ts +0 -510
  329. package/src/wirings/agent/voice-output.ts +0 -311
  330. package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
  331. package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
  332. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
  333. package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
  334. package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
  335. package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
  336. package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
  337. package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
  338. package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
  339. package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
  340. package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
  341. package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
  342. package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
  343. package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
  344. package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
  345. package/src/wirings/agent-scorer/index.ts +0 -23
  346. package/src/wirings/channel/channel-common.ts +0 -102
  347. package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
  348. package/src/wirings/channel/channel-handler.test.ts +0 -322
  349. package/src/wirings/channel/channel-handler.ts +0 -259
  350. package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
  351. package/src/wirings/channel/channel-host-rpc.ts +0 -69
  352. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
  353. package/src/wirings/channel/channel-middleware-runner.ts +0 -126
  354. package/src/wirings/channel/channel-rpc-registry.ts +0 -116
  355. package/src/wirings/channel/channel-rpc-responder.ts +0 -117
  356. package/src/wirings/channel/channel-rpc-service.ts +0 -132
  357. package/src/wirings/channel/channel-rpc-validators.ts +0 -65
  358. package/src/wirings/channel/channel-rpc.test.ts +0 -841
  359. package/src/wirings/channel/channel-rpc.ts +0 -5
  360. package/src/wirings/channel/channel-rpc.types.ts +0 -160
  361. package/src/wirings/channel/channel-runner.ts +0 -164
  362. package/src/wirings/channel/channel-store.ts +0 -35
  363. package/src/wirings/channel/channel.types.ts +0 -193
  364. package/src/wirings/channel/define-channel-routes.ts +0 -5
  365. package/src/wirings/channel/eventhub-service.ts +0 -16
  366. package/src/wirings/channel/eventhub-store.ts +0 -13
  367. package/src/wirings/channel/index.ts +0 -40
  368. package/src/wirings/channel/local/index.ts +0 -3
  369. package/src/wirings/channel/local/local-channel-handler.ts +0 -98
  370. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
  371. package/src/wirings/channel/local/local-channel-runner.ts +0 -271
  372. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
  373. package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
  374. package/src/wirings/channel/log-channels.ts +0 -16
  375. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
  376. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
  377. package/src/wirings/channel/serverless/index.ts +0 -6
  378. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
  379. package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
  380. package/src/wirings/cli/channel/cli-approval.ts +0 -135
  381. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
  382. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
  383. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
  384. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
  385. package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
  386. package/src/wirings/cli/channel/index.ts +0 -6
  387. package/src/wirings/cli/cli-runner.test.ts +0 -969
  388. package/src/wirings/cli/cli-runner.ts +0 -538
  389. package/src/wirings/cli/cli.types.ts +0 -388
  390. package/src/wirings/cli/command-parser.test.ts +0 -1120
  391. package/src/wirings/cli/command-parser.ts +0 -713
  392. package/src/wirings/cli/define-cli-commands.ts +0 -13
  393. package/src/wirings/cli/format-cli-error.test.ts +0 -91
  394. package/src/wirings/cli/format-cli-error.ts +0 -96
  395. package/src/wirings/cli/index.ts +0 -19
  396. package/src/wirings/credential/credential.types.ts +0 -37
  397. package/src/wirings/credential/define-credential.ts +0 -49
  398. package/src/wirings/credential/index.ts +0 -7
  399. package/src/wirings/credential/validate-credential-definitions.ts +0 -63
  400. package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
  401. package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
  402. package/src/wirings/gateway/gateway-runner.test.ts +0 -581
  403. package/src/wirings/gateway/gateway-runner.ts +0 -411
  404. package/src/wirings/gateway/gateway.types.ts +0 -137
  405. package/src/wirings/gateway/index.ts +0 -15
  406. package/src/wirings/http/http-routes.test.ts +0 -318
  407. package/src/wirings/http/http-routes.ts +0 -111
  408. package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
  409. package/src/wirings/http/http-runner.test.ts +0 -503
  410. package/src/wirings/http/http-runner.ts +0 -462
  411. package/src/wirings/http/http.types.ts +0 -307
  412. package/src/wirings/http/index.ts +0 -27
  413. package/src/wirings/http/log-http-routes.ts +0 -18
  414. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
  415. package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
  416. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
  417. package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
  418. package/src/wirings/http/routers/http-router.ts +0 -13
  419. package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
  420. package/src/wirings/http/routers/path-to-regex.ts +0 -115
  421. package/src/wirings/http/web-request.test.ts +0 -382
  422. package/src/wirings/http/web-request.ts +0 -162
  423. package/src/wirings/mcp/index.ts +0 -26
  424. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
  425. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  426. package/src/wirings/mcp/mcp-runner.test.ts +0 -588
  427. package/src/wirings/mcp/mcp-runner.ts +0 -330
  428. package/src/wirings/mcp/mcp.types.ts +0 -199
  429. package/src/wirings/node/index.ts +0 -2
  430. package/src/wirings/node/node.types.ts +0 -23
  431. package/src/wirings/oauth2/index.ts +0 -1
  432. package/src/wirings/oauth2/oauth2.types.ts +0 -12
  433. package/src/wirings/persona/define-personas.ts +0 -33
  434. package/src/wirings/persona/index.ts +0 -75
  435. package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
  436. package/src/wirings/persona/persona-app-scopes.ts +0 -74
  437. package/src/wirings/persona/persona-email.ts +0 -87
  438. package/src/wirings/persona/persona-environments.test.ts +0 -194
  439. package/src/wirings/persona/persona-environments.ts +0 -138
  440. package/src/wirings/persona/persona-mailbox.ts +0 -156
  441. package/src/wirings/persona/persona.test.ts +0 -230
  442. package/src/wirings/persona/persona.types.ts +0 -156
  443. package/src/wirings/persona/validate-personas.ts +0 -137
  444. package/src/wirings/queue/index.ts +0 -29
  445. package/src/wirings/queue/queue-identity.test.ts +0 -454
  446. package/src/wirings/queue/queue-identity.ts +0 -176
  447. package/src/wirings/queue/queue-runner.test.ts +0 -705
  448. package/src/wirings/queue/queue-runner.ts +0 -181
  449. package/src/wirings/queue/queue.types.ts +0 -161
  450. package/src/wirings/queue/register-queue-helper.ts +0 -46
  451. package/src/wirings/queue/signed-queue-service.ts +0 -60
  452. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  453. package/src/wirings/queue/validate-worker-config.ts +0 -90
  454. package/src/wirings/role/define-system-role.ts +0 -33
  455. package/src/wirings/role/index.ts +0 -13
  456. package/src/wirings/role/role.test.ts +0 -104
  457. package/src/wirings/role/role.types.ts +0 -47
  458. package/src/wirings/role/validate-role-definitions.ts +0 -93
  459. package/src/wirings/rpc/index.ts +0 -8
  460. package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
  461. package/src/wirings/rpc/rpc-runner.ts +0 -566
  462. package/src/wirings/rpc/rpc-types.ts +0 -87
  463. package/src/wirings/scheduler/index.ts +0 -11
  464. package/src/wirings/scheduler/log-schedulers.ts +0 -16
  465. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
  466. package/src/wirings/scheduler/scheduler-runner.ts +0 -138
  467. package/src/wirings/scheduler/scheduler.types.ts +0 -42
  468. package/src/wirings/scope/define-scope.ts +0 -33
  469. package/src/wirings/scope/index.ts +0 -15
  470. package/src/wirings/scope/scope.test.ts +0 -159
  471. package/src/wirings/scope/scope.types.ts +0 -42
  472. package/src/wirings/scope/validate-scope-definitions.ts +0 -107
  473. package/src/wirings/secret/index.ts +0 -9
  474. package/src/wirings/secret/secret.types.ts +0 -70
  475. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
  476. package/src/wirings/secret/validate-secret-definitions.ts +0 -88
  477. package/src/wirings/trigger/index.ts +0 -9
  478. package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
  479. package/src/wirings/trigger/trigger-runner.test.ts +0 -78
  480. package/src/wirings/trigger/trigger-runner.ts +0 -113
  481. package/src/wirings/trigger/trigger.types.ts +0 -100
  482. package/src/wirings/variable/index.ts +0 -8
  483. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
  484. package/src/wirings/variable/validate-variable-definitions.ts +0 -71
  485. package/src/wirings/variable/variable.types.ts +0 -40
  486. package/src/wirings/virtual-user/index.ts +0 -107
  487. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
  488. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
  489. package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
  490. package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
  491. package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
  492. package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
  493. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
  494. package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
  495. package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
  496. package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
  497. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
  498. package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
  499. package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
  500. package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
  501. package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
  502. package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
  503. package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
  504. package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
  505. package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
  506. package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
  507. package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
  508. package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
  509. package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
  510. package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
  511. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
  512. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
  513. package/src/wirings/workflow/feature.test.ts +0 -131
  514. package/src/wirings/workflow/feature.ts +0 -59
  515. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
  516. package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
  517. package/src/wirings/workflow/graph/graph-node.ts +0 -115
  518. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
  519. package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
  520. package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
  521. package/src/wirings/workflow/graph/graph-validation.ts +0 -41
  522. package/src/wirings/workflow/graph/template.test.ts +0 -49
  523. package/src/wirings/workflow/graph/template.ts +0 -42
  524. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
  525. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
  526. package/src/wirings/workflow/index.ts +0 -107
  527. package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
  528. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
  529. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
  530. package/src/wirings/workflow/run-timeline.test.ts +0 -199
  531. package/src/wirings/workflow/run-timeline.ts +0 -185
  532. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
  533. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
  534. package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
  535. package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
  536. package/src/wirings/workflow/scenario-poll.test.ts +0 -64
  537. package/src/wirings/workflow/scenario-poll.ts +0 -27
  538. package/src/wirings/workflow/scenario-prose.test.ts +0 -275
  539. package/src/wirings/workflow/scenario-prose.ts +0 -86
  540. package/src/wirings/workflow/scenario-run.types.ts +0 -193
  541. package/src/wirings/workflow/scenario-service.test.ts +0 -147
  542. package/src/wirings/workflow/scenario-step-guards.ts +0 -23
  543. package/src/wirings/workflow/scenario-step.test.ts +0 -800
  544. package/src/wirings/workflow/scenario-step.types.ts +0 -262
  545. package/src/wirings/workflow/scenario-surface.test.ts +0 -146
  546. package/src/wirings/workflow/scenario-surface.ts +0 -71
  547. package/src/wirings/workflow/scenario.types.ts +0 -63
  548. package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
  549. package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
  550. package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
  551. package/src/wirings/workflow/workflow-approval.ts +0 -290
  552. package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
  553. package/src/wirings/workflow/workflow-constants.ts +0 -66
  554. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
  555. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
  556. package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
  557. package/src/wirings/workflow/workflow-errors.ts +0 -132
  558. package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
  559. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
  560. package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
  561. package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
  562. package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
  563. package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
  564. package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
  565. package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
  566. package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
  567. package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
  568. package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
  569. package/src/wirings/workflow/workflow-recovery.ts +0 -192
  570. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
  571. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
  572. package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
  573. package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
  574. package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
  575. package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
  576. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
  577. package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
  578. package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
  579. package/src/wirings/workflow/workflow-status-stream.ts +0 -144
  580. package/src/wirings/workflow/workflow-step-claim.ts +0 -46
  581. package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
  582. package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
  583. package/src/wirings/workflow/workflow-suspend.ts +0 -61
  584. package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
  585. package/src/wirings/workflow/workflow.types.ts +0 -268
  586. package/src/wirings-stay-decoupled.test.ts +0 -130
  587. package/tsconfig.json +0 -14
  588. package/tsconfig.tsbuildinfo +0 -1
  589. package/tsconfig.type-tests.json +0 -15
@@ -1,232 +0,0 @@
1
- import type { PikkuWiringTypes } from './types/core.types.js'
2
- import type {
3
- CorePikkuMiddleware,
4
- CorePikkuMiddlewareGroup,
5
- MiddlewareMetadata,
6
- MiddlewarePriority,
7
- } from './middleware/middleware.types.js'
8
- import { pikkuState } from './pikku-state.js'
9
- import { freezeDedupe, getTagGroups } from './utils.js'
10
-
11
- const PRIORITY_ORDER: Record<MiddlewarePriority, number> = {
12
- highest: 0,
13
- high: 1,
14
- medium: 2,
15
- low: 3,
16
- lowest: 4,
17
- }
18
-
19
- const getMiddlewarePriority = (fn: CorePikkuMiddleware<any, any>): number => {
20
- const priority = (
21
- fn as CorePikkuMiddleware<any, any> & { __priority?: MiddlewarePriority }
22
- ).__priority
23
- return PRIORITY_ORDER[priority ?? 'medium']
24
- }
25
-
26
- const sortByPriority = (
27
- middlewares: CorePikkuMiddleware<any, any>[]
28
- ): CorePikkuMiddleware<any, any>[] => {
29
- return middlewares.sort(
30
- (a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b)
31
- )
32
- }
33
-
34
- export const runMiddleware = async <
35
- Middleware extends CorePikkuMiddleware<any, any>,
36
- >(
37
- services: Parameters<Middleware>[0],
38
- wire: Parameters<Middleware>[1],
39
- middlewares: readonly Middleware[],
40
- main?: () => Promise<unknown>
41
- ): Promise<unknown> => {
42
- const sorted = isSortedByPriority(middlewares)
43
- ? middlewares
44
- : ([...middlewares].sort(
45
- (a, b) => getMiddlewarePriority(a) - getMiddlewarePriority(b)
46
- ) as readonly Middleware[])
47
- let result: any
48
- const dispatch = async (index: number): Promise<any> => {
49
- if (sorted && index < sorted.length) {
50
- return await sorted[index]!(
51
- services as Parameters<Middleware>[0],
52
- wire,
53
- () => dispatch(index + 1)
54
- )
55
- } else if (main) {
56
- result = await main()
57
- }
58
- }
59
- await dispatch(0)
60
- return result
61
- }
62
-
63
- const isSortedByPriority = (
64
- middlewares: readonly CorePikkuMiddleware<any, any>[]
65
- ): boolean => {
66
- for (let i = 1; i < middlewares.length; i++) {
67
- if (
68
- getMiddlewarePriority(middlewares[i]) <
69
- getMiddlewarePriority(middlewares[i - 1])
70
- ) {
71
- return false
72
- }
73
- }
74
- return true
75
- }
76
-
77
- /**
78
- * Registers tag-scoped middleware for any wiring carrying the tag. Wrap in a
79
- * factory (`export const x = () => addTagMiddleware(...)`) for tree-shaking.
80
- */
81
- export const addTagMiddleware = <PikkuMiddleware extends CorePikkuMiddleware>(
82
- tag: string,
83
- middleware: CorePikkuMiddlewareGroup,
84
- packageName: string | null = null
85
- ): CorePikkuMiddlewareGroup => {
86
- const tagGroups = pikkuState(packageName, 'middleware', 'tagGroup')
87
- const existing = tagGroups[tag] as CorePikkuMiddleware[] | undefined
88
- tagGroups[tag] = existing
89
- ? [...existing, ...(middleware as CorePikkuMiddleware[])]
90
- : middleware
91
- return middleware
92
- }
93
-
94
- /**
95
- * Registers wire-agnostic global middleware, which runs at the top of every
96
- * wiring's chain — before wire-, tag- and function-level entries.
97
- */
98
- export const addGlobalMiddleware = <
99
- PikkuMiddleware extends CorePikkuMiddleware,
100
- >(
101
- middleware: CorePikkuMiddlewareGroup,
102
- packageName: string | null = null
103
- ): CorePikkuMiddlewareGroup => {
104
- const state = pikkuState(
105
- packageName,
106
- 'middleware',
107
- 'global'
108
- ) as unknown as CorePikkuMiddlewareGroup
109
- ;(state as CorePikkuMiddleware[]).push(
110
- ...(middleware as CorePikkuMiddleware[])
111
- )
112
- return middleware
113
- }
114
-
115
- const getMiddlewareByName = (name: string): CorePikkuMiddleware | undefined => {
116
- const middlewareStore = pikkuState(null, 'misc', 'middleware')
117
- const middleware = middlewareStore[name]
118
- return middleware?.[0]
119
- }
120
-
121
- const middlewareCache: Record<
122
- PikkuWiringTypes,
123
- Record<string, readonly CorePikkuMiddleware[]>
124
- > = {
125
- http: {},
126
- rpc: {},
127
- channel: {},
128
- queue: {},
129
- scheduler: {},
130
- trigger: {},
131
- mcp: {},
132
- agent: {},
133
- cli: {},
134
- workflow: {},
135
- gateway: {},
136
- }
137
-
138
- export const clearMiddlewareCache = () => {
139
- for (const key of Object.keys(middlewareCache) as PikkuWiringTypes[]) {
140
- middlewareCache[key] = {}
141
- }
142
- }
143
-
144
- export const combineMiddleware = (
145
- wireType: PikkuWiringTypes,
146
- uid: string,
147
- {
148
- wireInheritedMiddleware,
149
- wireMiddleware,
150
- funcInheritedMiddleware,
151
- funcMiddleware,
152
- packageName = null,
153
- }: {
154
- wireInheritedMiddleware?: MiddlewareMetadata[]
155
- wireMiddleware?: CorePikkuMiddleware[]
156
- funcInheritedMiddleware?: MiddlewareMetadata[]
157
- funcMiddleware?: CorePikkuMiddleware[]
158
- packageName?: string | null
159
- } = {}
160
- ): readonly CorePikkuMiddleware[] => {
161
- if (middlewareCache[wireType][uid]) {
162
- return middlewareCache[wireType][uid]
163
- }
164
-
165
- const resolved: CorePikkuMiddleware[] = []
166
-
167
- const globals = pikkuState(
168
- packageName,
169
- 'middleware',
170
- 'global'
171
- ) as unknown as CorePikkuMiddleware[]
172
- if (globals && globals.length > 0) {
173
- resolved.push(...globals)
174
- }
175
-
176
- if (wireInheritedMiddleware) {
177
- for (const meta of wireInheritedMiddleware) {
178
- if (meta.type === 'http') {
179
- const group = pikkuState(packageName, 'middleware', 'httpGroup')[
180
- meta.route
181
- ]
182
- if (group) {
183
- // At runtime, all factories should be resolved to middleware
184
- resolved.push(...(group as CorePikkuMiddleware[]))
185
- }
186
- } else if (meta.type === 'tag') {
187
- const groups = getTagGroups(
188
- pikkuState(packageName, 'middleware', 'tagGroup'),
189
- meta.tag
190
- )
191
- for (const group of groups) {
192
- resolved.push(...(group as CorePikkuMiddleware[]))
193
- }
194
- } else if (meta.type === 'wire') {
195
- const middleware = getMiddlewareByName(meta.name)
196
- if (middleware) {
197
- resolved.push(middleware)
198
- }
199
- }
200
- }
201
- }
202
-
203
- if (wireMiddleware) {
204
- resolved.push(...wireMiddleware)
205
- }
206
-
207
- // Only tags here; wire middleware is resolved via wireInheritedMiddleware.
208
- if (funcInheritedMiddleware) {
209
- for (const meta of funcInheritedMiddleware) {
210
- if (meta.type === 'tag') {
211
- const groups = getTagGroups(
212
- pikkuState(packageName, 'middleware', 'tagGroup'),
213
- meta.tag
214
- )
215
- for (const group of groups) {
216
- resolved.push(...(group as CorePikkuMiddleware[]))
217
- }
218
- }
219
- }
220
- }
221
-
222
- if (funcMiddleware) {
223
- resolved.push(...funcMiddleware)
224
- }
225
-
226
- sortByPriority(resolved)
227
- middlewareCache[wireType][uid] = freezeDedupe(
228
- resolved
229
- ) as readonly CorePikkuMiddleware[]
230
-
231
- return middlewareCache[wireType][uid]
232
- }
@@ -1,57 +0,0 @@
1
- import { describe, test } from 'node:test'
2
- import assert from 'node:assert/strict'
3
- import { readFileSync, readdirSync } from 'node:fs'
4
- import { fileURLToPath } from 'node:url'
5
- import { join, dirname, relative } from 'node:path'
6
-
7
- const srcRoot = dirname(fileURLToPath(import.meta.url))
8
- const thisFile = fileURLToPath(import.meta.url)
9
-
10
- /**
11
- * `as any` in a cast position. The word boundary and the following delimiter
12
- * keep prose such as "as any URL a browser can load" out of the match.
13
- */
14
- const AS_ANY = /\bas any\b(?!\s+[A-Za-z])/
15
-
16
- const collectSourceFiles = (directory: string): string[] =>
17
- readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
18
- const entryPath = join(directory, entry.name)
19
- if (entry.isDirectory()) {
20
- return entry.name === 'dist' ? [] : collectSourceFiles(entryPath)
21
- }
22
- return entry.name.endsWith('.ts') && !entry.name.endsWith('.test.ts')
23
- ? [entryPath]
24
- : []
25
- })
26
-
27
- describe('core asserts to named types, never to any', () => {
28
- test('no non-test module casts through `as any`', () => {
29
- const offenders = collectSourceFiles(srcRoot)
30
- .filter((file) => file !== thisFile)
31
- .flatMap((file) =>
32
- readFileSync(file, 'utf-8')
33
- .split('\n')
34
- .flatMap((line, index) =>
35
- AS_ANY.test(line)
36
- ? [`${relative(srcRoot, file)}:${index + 1} ${line.trim()}`]
37
- : []
38
- )
39
- )
40
-
41
- assert.deepEqual(
42
- offenders,
43
- [],
44
- '`as any` discards the target type, so a wrong value passes as readily as ' +
45
- 'a right one. Assert to the type actually wanted — and if the narrowing ' +
46
- 'cannot be expressed, say why in a knowledge note and point at it:\n' +
47
- offenders.join('\n')
48
- )
49
- })
50
-
51
- test('the matcher finds a cast and ignores the prose that reads like one', () => {
52
- // Guards the test above: a regex that matched nothing would pass forever.
53
- assert.equal(AS_ANY.test('const x = y as any'), true)
54
- assert.equal(AS_ANY.test('foo(bar as any)'), true)
55
- assert.equal(AS_ANY.test('a picture, as any URL a browser can load'), false)
56
- })
57
- })
@@ -1,122 +0,0 @@
1
- import { test, describe } from 'node:test'
2
- import * as assert from 'assert'
3
- import ts from 'typescript'
4
- import { readFileSync, readdirSync, statSync } from 'node:fs'
5
- import { dirname, join, relative } from 'node:path'
6
- import { fileURLToPath } from 'node:url'
7
-
8
- /**
9
- * The package root was one barrel of 206 names that no bundler could take
10
- * apart, and the one specifier that revealed nothing about what a consumer
11
- * actually used.
12
- *
13
- * It is gone. Every name lives on the subpath that owns it, and every import
14
- * carries that subpath. What survives is a bootstrap shim, which the second
15
- * test here holds to its exact contents.
16
- */
17
- const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '../../..')
18
-
19
- const skipDirectory = new Set([
20
- 'node_modules',
21
- 'dist',
22
- '.git',
23
- 'build',
24
- 'coverage',
25
- // Agent scratch worktrees are whole Pikku projects scaffolded by whatever CLI
26
- // version happened to write them, so they carry specifiers this repo does not
27
- // own. They are gitignored and belong to no workspace, which is what puts them
28
- // out of scope rather than merely making them noisy.
29
- '.claude',
30
- ])
31
-
32
- /** A verifier's scratch project, left behind by a run that did not clean up. */
33
- const isScratchProject = (entry: string) => entry.startsWith('.tmp-')
34
-
35
- const walk = (dir: string, out: string[] = []): string[] => {
36
- for (const entry of readdirSync(dir)) {
37
- if (skipDirectory.has(entry) || isScratchProject(entry)) continue
38
- const path = join(dir, entry)
39
- if (statSync(path).isDirectory()) walk(path, out)
40
- else if (path.endsWith('.ts') || path.endsWith('.tsx')) out.push(path)
41
- }
42
- return out
43
- }
44
-
45
- /**
46
- * Generated output belongs to whichever CLI wrote it — including the pinned
47
- * published one that bootstraps `packages/cli` and still emits the old
48
- * specifiers. What this branch's serializers emit is covered by the CLI's own
49
- * tests, against the template rather than its output.
50
- */
51
- const isGenerated = (path: string) =>
52
- path.includes('.gen.') || path.endsWith('.d.ts') || path.includes('/.pikku/')
53
-
54
- describe('no root barrel', () => {
55
- /**
56
- * Parsed rather than grepped: several tests hold a user's file as a template
57
- * literal, and `import { pikkuSessionlessFunc } from '@pikku/core'` inside
58
- * one is fixture text for the inspector, not an import this repo makes.
59
- */
60
- test('nothing imports the package root', () => {
61
- const offenders: string[] = []
62
-
63
- for (const file of walk(repoRoot)) {
64
- if (isGenerated(file)) continue
65
- const source = ts.createSourceFile(
66
- file,
67
- readFileSync(file, 'utf8'),
68
- ts.ScriptTarget.Latest,
69
- true
70
- )
71
- for (const statement of source.statements) {
72
- if (
73
- !ts.isImportDeclaration(statement) &&
74
- !ts.isExportDeclaration(statement)
75
- ) {
76
- continue
77
- }
78
- const specifier = statement.moduleSpecifier
79
- if (!specifier || !ts.isStringLiteral(specifier)) continue
80
- if (specifier.text !== '@pikku/core') continue
81
- const { line } = source.getLineAndCharacterOfPosition(
82
- statement.getStart(source)
83
- )
84
- offenders.push(`${relative(repoRoot, file)}:${line + 1}`)
85
- }
86
- }
87
-
88
- assert.deepStrictEqual(
89
- offenders,
90
- [],
91
- `The '@pikku/core' root is a bootstrap shim, not an entry point. Every ` +
92
- `import carries the subpath that owns the name — '@pikku/core/types' ` +
93
- `for the shared types, '@pikku/core/services' for the services.\n\n` +
94
- offenders.join('\n')
95
- )
96
- })
97
-
98
- /**
99
- * The shim exists because `packages/cli` is generated by the published CLI
100
- * pinned in its `build.sh`, which still writes these specifiers. Holding it
101
- * to an exact list is what keeps it a shim: a name can only be added here by
102
- * someone who has read why it should not be.
103
- */
104
- test('the bootstrap shim carries only what the pinned CLI emits', () => {
105
- const surface = (file: string) =>
106
- readFileSync(join(dirname(fileURLToPath(import.meta.url)), file), 'utf8')
107
- .replace(/\/\*\*[\s\S]*?\*\//g, '')
108
- .match(/\b[A-Za-z][A-Za-z0-9]*\b(?=[,\n\s]*(?:,|\}))/g)
109
- ?.sort() ?? []
110
-
111
- assert.deepStrictEqual(surface('bootstrap-compat/root.ts'), [
112
- 'CorePermissionGroup',
113
- 'CorePikkuMiddleware',
114
- 'ListInput',
115
- 'ListOutput',
116
- 'PickRequired',
117
- 'PikkuWire',
118
- 'SecretService',
119
- 'SecretlessServices',
120
- ])
121
- })
122
- })
@@ -1,256 +0,0 @@
1
- import { describe, test, beforeEach } from 'node:test'
2
- import * as assert from 'node:assert'
3
- import {
4
- addGlobalPermission,
5
- runPermissions,
6
- clearPermissionsCache,
7
- checkAuthPermissions,
8
- } from './permissions.js'
9
- import { resetPikkuState } from './pikku-state.js'
10
- import { pikkuAuth } from './function/functions.types.js'
11
- import type { CoreServices, CoreUserSession } from './types/core.types.js'
12
- import type { CorePermissionGroup } from './function/functions.types.js'
13
-
14
- beforeEach(() => {
15
- resetPikkuState()
16
- clearPermissionsCache()
17
- })
18
-
19
- const mockServices: CoreServices = {
20
- logger: {
21
- info: () => {},
22
- warn: () => {},
23
- error: () => {},
24
- debug: () => {},
25
- },
26
- } as any
27
-
28
- const mockSession: CoreUserSession = { userId: 'test-user' } as any
29
-
30
- const run = (opts: {
31
- funcPermissions?: CorePermissionGroup | any[]
32
- data?: any
33
- wire?: any
34
- packageName?: string | null
35
- }) =>
36
- runPermissions({
37
- funcPermissions: opts.funcPermissions,
38
- services: mockServices,
39
- wire: (opts.wire ?? { session: mockSession }) as any,
40
- data: opts.data ?? {},
41
- packageName: opts.packageName ?? null,
42
- })
43
-
44
- describe('runPermissions — function permissions (OR gate)', () => {
45
- test('passes when no permissions are defined', async () => {
46
- await run({})
47
- })
48
-
49
- test('passes when at least one group is satisfied (OR)', async () => {
50
- await run({
51
- funcPermissions: {
52
- owner: [async () => false],
53
- admin: [async () => true],
54
- },
55
- })
56
- })
57
-
58
- test('throws when every group fails', async () => {
59
- await assert.rejects(
60
- run({
61
- funcPermissions: {
62
- owner: [async () => false],
63
- admin: [async () => false],
64
- },
65
- }),
66
- { message: 'Permission denied' }
67
- )
68
- })
69
-
70
- test('ANDs the entries within a single branch array', async () => {
71
- await assert.rejects(
72
- run({ funcPermissions: { grp: [async () => true, async () => false] } }),
73
- { message: 'Permission denied' }
74
- )
75
- await run({
76
- funcPermissions: { grp: [async () => true, async () => true] },
77
- })
78
- })
79
-
80
- test('accepts a bare permission array as a single AND branch', async () => {
81
- await run({ funcPermissions: [async () => true] })
82
- await assert.rejects(run({ funcPermissions: [async () => false] }), {
83
- message: 'Permission denied',
84
- })
85
- })
86
-
87
- test('passes request data and wire through to permission functions', async () => {
88
- let received: any
89
- const wire = { session: mockSession }
90
- const data = { hello: 'world' }
91
- await run({
92
- funcPermissions: {
93
- grp: [
94
- async (services: any, d: any, w: any) => {
95
- received = { services, d, w }
96
- return true
97
- },
98
- ],
99
- },
100
- data,
101
- wire,
102
- })
103
- assert.equal(received.services, mockServices)
104
- assert.equal(received.d, data)
105
- assert.equal(received.w, wire)
106
- })
107
- })
108
-
109
- describe('runPermissions — global permissions (AND gate)', () => {
110
- test('requires every registered global to pass', async () => {
111
- addGlobalPermission([async () => true])
112
- await run({})
113
-
114
- resetPikkuState()
115
- clearPermissionsCache()
116
- addGlobalPermission([async () => false])
117
- await assert.rejects(run({}), { message: 'Permission denied' })
118
- })
119
-
120
- test('ANDs multiple registered globals', async () => {
121
- addGlobalPermission([async () => true])
122
- addGlobalPermission([async () => false])
123
- await assert.rejects(run({}), { message: 'Permission denied' })
124
- })
125
-
126
- test('a global group entry ORs internally but must still pass', async () => {
127
- addGlobalPermission({
128
- a: [async () => false],
129
- b: [async () => true],
130
- } as CorePermissionGroup)
131
- await run({})
132
- })
133
- })
134
-
135
- describe('runPermissions — gates are independent (no escalation)', () => {
136
- test('a passing global does NOT satisfy a failing function permission', async () => {
137
- // The classic escalation bug: a broad global must not grant an admin-only fn.
138
- addGlobalPermission([async () => true])
139
- await assert.rejects(
140
- run({ funcPermissions: { admin: [async () => false] } }),
141
- { message: 'Permission denied' }
142
- )
143
- })
144
-
145
- test('a passing function permission does NOT bypass a failing global', async () => {
146
- addGlobalPermission([async () => false])
147
- await assert.rejects(
148
- run({ funcPermissions: { anyone: [async () => true] } }),
149
- { message: 'Permission denied' }
150
- )
151
- })
152
-
153
- test('passes only when both gates pass', async () => {
154
- addGlobalPermission([async () => true])
155
- await run({ funcPermissions: { admin: [async () => true] } })
156
- })
157
- })
158
-
159
- describe('runPermissions — package isolation', () => {
160
- test('globals are scoped per package', async () => {
161
- addGlobalPermission([async () => false], 'pkg-a')
162
- // A different package sees no globals, so it passes.
163
- await run({ packageName: 'pkg-b' })
164
- // The registering package is gated.
165
- await assert.rejects(run({ packageName: 'pkg-a' }), {
166
- message: 'Permission denied',
167
- })
168
- })
169
-
170
- test('a root global applies inside a package too', async () => {
171
- // The generated `addGlobalPermission` wrapper takes no package argument, so
172
- // an application's rules always land in the root bucket. If those stopped
173
- // at the addon boundary, "every request needs a signed-in user" would
174
- // silently exempt every function an addon contributed.
175
- addGlobalPermission([async () => false])
176
- await assert.rejects(run({ packageName: 'pkg-a' }), {
177
- message: 'Permission denied',
178
- })
179
- })
180
-
181
- test('root and package globals both have to pass', async () => {
182
- addGlobalPermission([async () => true])
183
- addGlobalPermission([async () => false], 'pkg-a')
184
- await assert.rejects(run({ packageName: 'pkg-a' }), {
185
- message: 'Permission denied',
186
- })
187
- })
188
-
189
- test('passes when the root and package globals both pass', async () => {
190
- addGlobalPermission([async () => true])
191
- addGlobalPermission([async () => true], 'pkg-a')
192
- await run({ packageName: 'pkg-a' })
193
- })
194
-
195
- test('a package global does not leak back out to the root', async () => {
196
- addGlobalPermission([async () => false], 'pkg-a')
197
- await run({})
198
- })
199
- })
200
-
201
- describe('checkAuthPermissions', () => {
202
- test('returns true when there are no auth predicates', async () => {
203
- assert.equal(
204
- await checkAuthPermissions(undefined, mockSession, mockServices),
205
- true
206
- )
207
- })
208
-
209
- test('honours a global pikkuAuth predicate at filter time', async () => {
210
- addGlobalPermission([pikkuAuth(async () => false)])
211
- assert.equal(
212
- await checkAuthPermissions(undefined, mockSession, mockServices),
213
- false
214
- )
215
-
216
- resetPikkuState()
217
- clearPermissionsCache()
218
- addGlobalPermission([pikkuAuth(async () => true)])
219
- assert.equal(
220
- await checkAuthPermissions(undefined, mockSession, mockServices),
221
- true
222
- )
223
- })
224
-
225
- test('evaluates a live pikkuAuth predicate from the config group', async () => {
226
- assert.equal(
227
- await checkAuthPermissions(
228
- { admin: pikkuAuth(async () => false) as any },
229
- mockSession,
230
- mockServices
231
- ),
232
- false
233
- )
234
- assert.equal(
235
- await checkAuthPermissions(
236
- { admin: pikkuAuth(async () => true) as any },
237
- mockSession,
238
- mockServices
239
- ),
240
- true
241
- )
242
- })
243
-
244
- test('ignores data-dependent permissions (no auth marker)', async () => {
245
- // A bare pikkuPermission carries no __pikkuAuth brand, so it cannot be
246
- // evaluated at filter time and must not gate the tool list.
247
- assert.equal(
248
- await checkAuthPermissions(
249
- { ownsRow: (async () => false) as any },
250
- mockSession,
251
- mockServices
252
- ),
253
- true
254
- )
255
- })
256
- })