@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
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "@pikku/core",
3
- "version": "0.12.106",
3
+ "version": "0.12.111",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "git+https://github.com/pikkujs/pikku.git",
7
+ "directory": "packages/core"
8
+ },
4
9
  "description": "The Pikku runtime — functions, wirings, services, middleware and types",
5
10
  "author": "yasser.fadl@gmail.com",
6
11
  "license": "MIT",
@@ -13,7 +18,7 @@
13
18
  "test": "bash run-tests.sh",
14
19
  "test:watch": "bash run-tests.sh --watch",
15
20
  "test:coverage": "bash run-tests.sh --coverage",
16
- "prepublishOnly": "yarn build",
21
+ "prepublishOnly": "bun run build",
17
22
  "api-report": "tsx scripts/generate-api-report.mts"
18
23
  },
19
24
  "sideEffects": [
@@ -51,6 +56,7 @@
51
56
  "./mcp": "./dist/wirings/mcp/index.js",
52
57
  "./agent": "./dist/wirings/agent/index.js",
53
58
  "./agent-scorer": "./dist/wirings/agent-scorer/index.js",
59
+ "./analytics": "./dist/analytics/index.js",
54
60
  "./gateway": "./dist/wirings/gateway/index.js",
55
61
  "./cli": "./dist/wirings/cli/index.js",
56
62
  "./cli/command-parser": "./dist/wirings/cli/command-parser.js",
@@ -65,6 +71,7 @@
65
71
  "./oauth2": "./dist/wirings/oauth2/index.js",
66
72
  "./errors": "./dist/errors/index.js",
67
73
  "./services": "./dist/services/index.js",
74
+ "./flag": "./dist/wirings/flag/index.js",
68
75
  "./services/local-meta": "./dist/services/meta-service.js",
69
76
  "./services/v8-coverage": "./dist/services/v8-coverage-service.js",
70
77
  "./services/istanbul-coverage": "./dist/services/istanbul-coverage-service.js",
@@ -92,10 +99,9 @@
92
99
  "@ag-ui/core": "0.0.57",
93
100
  "@types/node": "^24.13.3",
94
101
  "esbuild": "~0.28.2",
95
- "tsx": "^4.23.12",
96
- "typescript": "^6.0.3"
102
+ "tsx": "^4.23.12"
97
103
  },
98
104
  "engines": {
99
105
  "node": ">=24"
100
106
  }
101
- }
107
+ }
package/run-tests.sh CHANGED
@@ -1,8 +1,5 @@
1
1
  #!/bin/bash
2
2
 
3
- script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4
- cd "$script_dir"
5
-
6
3
  # Enable nullglob to handle cases where no files match the pattern
7
4
  shopt -s nullglob
8
5
 
@@ -43,18 +40,29 @@ if [ ${#files[@]} -eq 0 ]; then
43
40
  exit 0
44
41
  fi
45
42
 
46
- # Construct the node command
47
- node_cmd=(node --import tsx --test)
43
+ # Construct the bun command
44
+ #
45
+ # --parallel gives every test file its own worker process, which is what node's
46
+ # `--test` did. Several suites keep module-level caches (a TypeScript program, a
47
+ # temp fixture directory) that a shared process would leak between files.
48
+ #
49
+ # --timeout because bun caps a test at 5s by default where node had no cap, and
50
+ # the suites that build real TypeScript programs run well past that.
51
+ bun_cmd=(bun test --parallel --timeout 120000)
48
52
 
49
53
  # Append options based on flags
50
54
  if [ "$watch_mode" = true ]; then
51
- node_cmd+=(--watch)
55
+ # --watch reruns in one process; parallel workers have nothing to watch.
56
+ bun_cmd=(bun test --watch --timeout 120000)
52
57
  fi
53
58
 
54
59
  if [ "$coverage_mode" = true ]; then
55
- node_cmd+=(--test-coverage-include="src/**/*.{ts,js}" --test-coverage-exclude="**/dist/**" --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info)
60
+ # --coverage-dir=. keeps lcov.info at the package root: CI merges every
61
+ # package's report by prefixing its SF paths with the file's own directory,
62
+ # so a nested coverage/ directory would re-root them one level too deep.
63
+ bun_cmd+=(--coverage --coverage-reporter=lcov --coverage-reporter=text --coverage-dir=.)
56
64
  export PIKKU_TEST_COVERAGE=1
57
65
  fi
58
66
 
59
- # Execute the node command with the expanded list of files
60
- "${node_cmd[@]}" "${files[@]}"
67
+ # Execute the bun command with the expanded list of files
68
+ "${bun_cmd[@]}" "${files[@]}"
@@ -350,6 +350,7 @@
350
350
  "BadRequestError",
351
351
  "ConflictError",
352
352
  "ExpectationFailedError",
353
+ "FeatureUnavailableError",
353
354
  "ForbiddenError",
354
355
  "GatewayTimeoutError",
355
356
  "GoneError",
@@ -449,6 +450,19 @@
449
450
  "verifyActorSecret",
450
451
  "withoutSecrets"
451
452
  ],
453
+ "./flag": [
454
+ "CachedFlagSource",
455
+ "assertFeatureAvailable",
456
+ "bucketOf",
457
+ "compiledFallbackSnapshot",
458
+ "defineFeatureFlags",
459
+ "flattenFeatureFlagDefinitions",
460
+ "resolveFlag",
461
+ "resolveFlagForClient",
462
+ "resolveFlagsForClient",
463
+ "subjectIdOf",
464
+ "validateAndBuildFeatureFlagDefinitionsMeta"
465
+ ],
452
466
  "./services/local-meta": [
453
467
  "LocalMetaService"
454
468
  ],
@@ -549,5 +563,17 @@
549
563
  "pikkuDevReloader",
550
564
  "reconcileAddonRegistry",
551
565
  "reloadGeneratedMeta"
566
+ ],
567
+ "./analytics": [
568
+ "LoggerAnalyticsService",
569
+ "anonymousAnalyticsIdentity",
570
+ "composeAnalyticsIdentity",
571
+ "cookieAnalyticsIdentity",
572
+ "createInvocationAnalytics",
573
+ "defineAnalyticsEvents",
574
+ "fanOutAnalytics",
575
+ "flattenAnalyticsEvent",
576
+ "mintCookie",
577
+ "randomDigits"
552
578
  ]
553
579
  }
@@ -1,68 +0,0 @@
1
- import { describe, test } from 'node:test'
2
- import assert from 'node:assert/strict'
3
- import { readFileSync } from 'node:fs'
4
- import { fileURLToPath } from 'node:url'
5
- import { join, dirname } from 'node:path'
6
-
7
- const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
8
- const reportPath = join(packageRoot, 'api-report.md')
9
-
10
- /**
11
- * `AI` described the model provider, never the agent runtime, so #596 renamed
12
- * every agent symbol to `Agent`. The names below are the ones that survived,
13
- * because each really does wrap a provider call.
14
- *
15
- * Listing them here is what makes the rule checkable: anything else exported as
16
- * `AI*` is a symbol that slipped back to the old naming, and this fails rather
17
- * than letting it reach a consumer.
18
- */
19
- const PROVIDER_SYMBOLS = new Set([
20
- 'AIEmbeddingService',
21
- 'AIEmbedManyParams',
22
- 'AIEmbedManyResult',
23
- 'AIEmbedParams',
24
- 'AIEmbedResult',
25
- 'AIGenerateImageParams',
26
- 'AIGenerateImagePrompt',
27
- 'AIGenerateImageResult',
28
- 'AIGenerateSpeechParams',
29
- 'AIGenerateSpeechResult',
30
- 'AIProviderAuthError',
31
- 'AIProviderNotConfiguredError',
32
- 'AIProviderOptions',
33
- 'AIRerankParams',
34
- 'AIRerankResult',
35
- 'AITranscriptionParams',
36
- 'AITranscriptionResult',
37
- ])
38
-
39
- describe('the agent runtime is not exported under the AI name', () => {
40
- test('every AI* symbol in the public surface is a provider wrapper', () => {
41
- const report = readFileSync(reportPath, 'utf-8')
42
- const found = new Set(report.match(/\bAI[A-Z][A-Za-z]*/g) ?? [])
43
-
44
- const strays = [...found].filter((name) => !PROVIDER_SYMBOLS.has(name))
45
-
46
- assert.deepEqual(
47
- strays,
48
- [],
49
- 'these are exported as `AI*` but are not provider wrappers — rename them ' +
50
- 'to `Agent*`, or add them to PROVIDER_SYMBOLS if they genuinely wrap a ' +
51
- 'model provider call'
52
- )
53
- })
54
-
55
- test('the agent entry points are the renamed ones', () => {
56
- const { exports } = JSON.parse(
57
- readFileSync(join(packageRoot, 'package.json'), 'utf-8')
58
- )
59
-
60
- assert.ok(exports['./agent'], 'expected the ./agent entry point')
61
- assert.ok(
62
- exports['./agent-scorer'],
63
- 'expected the ./agent-scorer entry point'
64
- )
65
- assert.equal(exports['./ai-agent'], undefined)
66
- assert.equal(exports['./ai-scorer'], undefined)
67
- })
68
- })
@@ -1,138 +0,0 @@
1
- import { describe, test } from 'node:test'
2
- import assert from 'node:assert/strict'
3
- import { execFileSync } from 'node:child_process'
4
- import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
5
- import { tmpdir } from 'node:os'
6
- import { fileURLToPath } from 'node:url'
7
- import { join, dirname } from 'node:path'
8
-
9
- const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
10
- const reportPath = join(packageRoot, 'api-report.md')
11
-
12
- /**
13
- * `public-surface.json` pins the *names* a consumer can reach. That catches an
14
- * export appearing or vanishing and nothing else — adding a method to
15
- * `MetaService`, or making a field on `ChannelMeta` required, sails past it,
16
- * as does every type-only export. Those are the changes that break a
17
- * consumer's build, and the report's summary counts how many more of them
18
- * there are than there are names.
19
- *
20
- * So `api-report.md` records what each symbol *is*, and this fails when the
21
- * committed report and the code disagree.
22
- *
23
- * knowledge: decisions/internals/the-api-report-pins-members-not-just-names.md
24
- */
25
- describe('the API report matches the code', () => {
26
- test('regenerating produces no diff', () => {
27
- const committed = readFileSync(reportPath, 'utf-8')
28
-
29
- execFileSync(
30
- 'npx',
31
- ['tsx', join(packageRoot, 'scripts', 'generate-api-report.mts')],
32
- { cwd: packageRoot, stdio: 'pipe' }
33
- )
34
- const regenerated = readFileSync(reportPath, 'utf-8')
35
-
36
- if (committed !== regenerated) {
37
- // Restore, so a failing run does not leave the tree dirty.
38
- const committedLines = committed.split('\n')
39
- const regeneratedLines = regenerated.split('\n')
40
- const firstDiff = regeneratedLines.findIndex(
41
- (line, i) => line !== committedLines[i]
42
- )
43
- writeFileSync(reportPath, committed)
44
-
45
- assert.fail(
46
- 'the public API changed but api-report.md was not regenerated.\n' +
47
- `First difference at line ${firstDiff + 1}:\n` +
48
- ` committed: ${committedLines[firstDiff] ?? '(end of file)'}\n` +
49
- ` regenerated: ${regeneratedLines[firstDiff] ?? '(end of file)'}\n` +
50
- 'Run `yarn api-report` and review the diff — a member added to an ' +
51
- 'exported interface or class is a change consumers compile against.'
52
- )
53
- }
54
- })
55
-
56
- test('the report actually contains member-level detail', () => {
57
- // Guards the test above: a report of bare names would match itself forever
58
- // while pinning nothing that public-surface.json does not already pin.
59
- const report = readFileSync(reportPath, 'utf-8')
60
-
61
- assert.ok(
62
- /export interface MetaService \{[^}]*getHttpMeta/.test(report),
63
- 'expected MetaService to be reported with its members'
64
- )
65
- assert.ok(
66
- !/^\w+: any$/m.test(report),
67
- 'symbols reported as `any` mean re-export aliases are not being followed'
68
- )
69
- })
70
- })
71
-
72
- /**
73
- * Every branch that touches the public surface rewrites the whole report, so
74
- * two of them meeting is a ~9000-line conflict with no meaningful resolution
75
- * in it. A merge driver takes the conflict away; the test above is what still
76
- * insists on a report that matches the code.
77
- *
78
- * knowledge: decisions/internals/the-api-report-pins-members-not-just-names.md
79
- */
80
- describe('merging the API report is not hand work', () => {
81
- const repoRoot = join(packageRoot, '..', '..')
82
-
83
- test('.gitattributes routes the report through the driver', () => {
84
- const attributes = readFileSync(join(repoRoot, '.gitattributes'), 'utf-8')
85
-
86
- assert.match(
87
- attributes,
88
- /^packages\/core\/api-report\.md\s+merge=api-report\b/m,
89
- 'the report must name the merge driver, or git conflicts on it as usual'
90
- )
91
- })
92
-
93
- test('the setup script registers the driver as a plain take-one-side', () => {
94
- // Against a throwaway repository rather than this one: a driver is written
95
- // to `.git/config`, which every worktree of a checkout shares, so running
96
- // this in place would reach into whatever else is checked out beside it.
97
- const sandbox = mkdtempSync(join(tmpdir(), 'pikku-merge-driver-'))
98
- try {
99
- execFileSync('git', ['init', '--quiet', sandbox], { stdio: 'pipe' })
100
- execFileSync(
101
- 'node',
102
- [join(repoRoot, 'scripts', 'setup-merge-drivers.mjs')],
103
- { cwd: sandbox, stdio: 'pipe' }
104
- )
105
- const driver = execFileSync(
106
- 'git',
107
- ['config', '--local', 'merge.api-report.driver'],
108
- { cwd: sandbox, stdio: 'pipe' }
109
- )
110
- .toString()
111
- .trim()
112
-
113
- // `true` writes nothing and succeeds, which is how a driver tells git to
114
- // keep the side already in %A. Anything that regenerates the report is
115
- // the trap this pins shut: git runs a driver while merging that one
116
- // path, with the rest of the tree still unmerged, so the generator reads
117
- // the old sources and resolves to a report missing exactly the API the
118
- // incoming branch adds — conflict-free and wrong, which is worse than a
119
- // conflict. The regeneration belongs to the guard above, which runs
120
- // against a finished tree.
121
- assert.equal(
122
- driver,
123
- 'true',
124
- 'the driver must resolve to one side verbatim and run nothing'
125
- )
126
- } finally {
127
- rmSync(sandbox, { recursive: true, force: true })
128
- }
129
- })
130
-
131
- test('postinstall runs the setup, so a fresh clone is not left without it', () => {
132
- const manifest = JSON.parse(
133
- readFileSync(join(repoRoot, 'package.json'), 'utf-8')
134
- )
135
-
136
- assert.match(manifest.scripts.postinstall, /setup-merge-drivers\.mjs/)
137
- })
138
- })
@@ -1,179 +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 generated `#pikku` alias is the app developer's public API. An app
10
- * reaching past it into `@pikku/core` is the smell this file measures: the
11
- * alias is typed against that app's own functions, so a name pulled from core
12
- * directly is one the app is holding untyped and one the CLI cannot evolve.
13
- *
14
- * The trees below are apps rather than packages, so they have no `src`
15
- * convention to walk — bootstrap and test files sit wherever the runtime wants
16
- * them. Walking each tree root means skipping what an app accumulates:
17
- * installed dependencies, build output, and its own generated `.pikku`.
18
- */
19
- const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '../../..')
20
- const appTrees = ['templates', 'e2e', 'verifiers']
21
- const skipped = new Set(['node_modules', 'dist', '.next', 'build'])
22
-
23
- /**
24
- * `outDir` is a project's own setting, so the generated tree is not always
25
- * `.pikku` — the treeshake verifier writes one output tree per scenario under
26
- * `.pikku-shake`. Matching the prefix keeps a leaf's generated `index.ts`, which
27
- * carries no `.gen.` in its name, from reading as hand-written app code.
28
- */
29
- const isGeneratedTree = (entry: string) => entry.startsWith('.pikku')
30
-
31
- const walkApp = (dir: string, out: string[] = []): string[] => {
32
- for (const entry of readdirSync(dir)) {
33
- if (skipped.has(entry) || isGeneratedTree(entry)) continue
34
- const path = join(dir, entry)
35
- if (statSync(path).isDirectory()) walkApp(path, out)
36
- else if (path.endsWith('.ts') || path.endsWith('.tsx')) out.push(path)
37
- }
38
- return out
39
- }
40
-
41
- /**
42
- * `.gen.*` and `.d.ts` files are CLI output, not hand-written source: what they
43
- * import is decided by the codegen templates, which are the thing that writes
44
- * the alias in the first place.
45
- */
46
- const isGenerated = (path: string) =>
47
- path.includes('.gen.') || path.endsWith('.d.ts')
48
-
49
- const appSourceFiles = () =>
50
- appTrees
51
- .flatMap((tree) => walkApp(join(repoRoot, tree)))
52
- .filter((file) => !isGenerated(file))
53
-
54
- /**
55
- * Parsed rather than grepped: a step body held as a template literal is fixture
56
- * text describing a user's file, not an import the app itself makes.
57
- */
58
- const coreImports = (file: string) => {
59
- const source = ts.createSourceFile(
60
- file,
61
- readFileSync(file, 'utf8'),
62
- ts.ScriptTarget.Latest,
63
- true
64
- )
65
- const found: { specifier: string; line: number; names: string[] }[] = []
66
- for (const statement of source.statements) {
67
- if (
68
- !ts.isImportDeclaration(statement) &&
69
- !ts.isExportDeclaration(statement)
70
- ) {
71
- continue
72
- }
73
- const moduleSpecifier = statement.moduleSpecifier
74
- if (!moduleSpecifier || !ts.isStringLiteral(moduleSpecifier)) continue
75
- const specifier = moduleSpecifier.text
76
- if (specifier !== '@pikku/core' && !specifier.startsWith('@pikku/core/')) {
77
- continue
78
- }
79
- const { line } = source.getLineAndCharacterOfPosition(
80
- statement.getStart(source)
81
- )
82
- const clause = ts.isImportDeclaration(statement)
83
- ? statement.importClause?.namedBindings
84
- : statement.exportClause
85
- const names =
86
- clause && (ts.isNamedImports(clause) || ts.isNamedExports(clause))
87
- ? clause.elements.map((element) => element.name.text)
88
- : []
89
- found.push({ specifier, line: line + 1, names })
90
- }
91
- return found
92
- }
93
-
94
- /**
95
- * The scenario and persona surfaces are test-only names — actors, cookie jars,
96
- * polling helpers, the typed personas an app declares. They are app code, but a
97
- * distinct surface from wiring, so they reach the app through their own
98
- * sub-entry rather than crowding the main hub.
99
- */
100
- const scenarioSubpaths = new Set(['@pikku/core/scenario', '@pikku/core/persona'])
101
-
102
- /**
103
- * A relative path into the generated scenario barrel reaches the same file the
104
- * alias does, so it compiles — and then hard-codes how far the app file sits
105
- * from `outDir`. Moving either end breaks it, and the CLI has no way to see
106
- * that it is depended upon.
107
- */
108
- const relativeIntoScenarioBarrel = (file: string) => {
109
- const source = ts.createSourceFile(
110
- file,
111
- readFileSync(file, 'utf8'),
112
- ts.ScriptTarget.Latest,
113
- true
114
- )
115
- const found: { specifier: string; line: number }[] = []
116
- for (const statement of source.statements) {
117
- if (
118
- !ts.isImportDeclaration(statement) &&
119
- !ts.isExportDeclaration(statement)
120
- ) {
121
- continue
122
- }
123
- const moduleSpecifier = statement.moduleSpecifier
124
- if (!moduleSpecifier || !ts.isStringLiteral(moduleSpecifier)) continue
125
- if (!moduleSpecifier.text.startsWith('.')) continue
126
- if (!/\/pikku-scenario-types\.gen\.js$/.test(moduleSpecifier.text)) continue
127
- const { line } = source.getLineAndCharacterOfPosition(
128
- statement.getStart(source)
129
- )
130
- found.push({ specifier: moduleSpecifier.text, line: line + 1 })
131
- }
132
- return found
133
- }
134
-
135
- describe('the #pikku alias is the app surface', () => {
136
- test('scenario code reaches the test surface through #pikku/scenario', () => {
137
- const offenders: string[] = []
138
-
139
- for (const file of appSourceFiles()) {
140
- for (const { specifier, line, names } of coreImports(file)) {
141
- if (!scenarioSubpaths.has(specifier)) continue
142
- offenders.push(
143
- `${relative(repoRoot, file)}:${line} ${names.join(', ')} from '${specifier}'`
144
- )
145
- }
146
- }
147
-
148
- assert.deepStrictEqual(
149
- offenders,
150
- [],
151
- `Scenario and persona names come from the generated ` +
152
- `'#pikku/scenario' entry, which is typed against this app's own ` +
153
- `personas and steps.\n` +
154
- `Reaching '@pikku/core/scenario' or '@pikku/core/persona' directly ` +
155
- `gets the untyped shape, from a subpath scheduled for deletion.\n\n` +
156
- offenders.join('\n')
157
- )
158
- })
159
-
160
- test('the scenario barrel is reached through the alias, not a relative path', () => {
161
- const offenders: string[] = []
162
-
163
- for (const file of appSourceFiles()) {
164
- for (const { specifier, line } of relativeIntoScenarioBarrel(file)) {
165
- offenders.push(`${relative(repoRoot, file)}:${line} '${specifier}'`)
166
- }
167
- }
168
-
169
- assert.deepStrictEqual(
170
- offenders,
171
- [],
172
- `The generated scenario barrel is reached through '#pikku/scenario', ` +
173
- `which the app's own 'imports' map points at.\n` +
174
- `A relative path hard-codes the distance from the file to 'outDir', ` +
175
- `so moving either end breaks it silently.\n\n` +
176
- offenders.join('\n')
177
- )
178
- })
179
- })