@pikku/core 0.12.79 → 0.12.82

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 (479) hide show
  1. package/CHANGELOG.md +473 -0
  2. package/dist/dev/hot-reload.js +1 -6
  3. package/dist/ecosystem.d.ts +27 -0
  4. package/dist/ecosystem.js +26 -0
  5. package/dist/errors/error-handler.js +4 -2
  6. package/dist/errors/index.d.ts +1 -1
  7. package/dist/errors/index.js +1 -1
  8. package/dist/function/function-runner.js +22 -47
  9. package/dist/function/functions.types.d.ts +9 -5
  10. package/dist/function/index.d.ts +1 -1
  11. package/dist/index.d.ts +14 -19
  12. package/dist/index.js +6 -11
  13. package/dist/middleware/auth-cookie.d.ts +0 -4
  14. package/dist/middleware/auth-cookie.js +38 -2
  15. package/dist/middleware/cors.js +1 -0
  16. package/dist/middleware/index.d.ts +1 -1
  17. package/dist/middleware/index.js +1 -1
  18. package/dist/middleware/remote-auth.js +14 -3
  19. package/dist/permissions.d.ts +8 -10
  20. package/dist/permissions.js +0 -11
  21. package/dist/pikku-state.js +16 -5
  22. package/dist/schema.js +35 -1
  23. package/dist/services/ai-agent-runner-service.d.ts +7 -0
  24. package/dist/services/ai-run-state-service.d.ts +17 -1
  25. package/dist/services/in-memory-ai-run-state-service.d.ts +6 -2
  26. package/dist/services/in-memory-ai-run-state-service.js +11 -1
  27. package/dist/services/in-memory-workflow-service.js +2 -0
  28. package/dist/services/index.d.ts +15 -15
  29. package/dist/services/index.js +5 -5
  30. package/dist/services/local-content-request-handler.d.ts +21 -0
  31. package/dist/services/local-content-request-handler.js +72 -53
  32. package/dist/services/local-content.d.ts +6 -0
  33. package/dist/services/local-content.js +14 -1
  34. package/dist/services/scoped-credential-service.d.ts +21 -0
  35. package/dist/services/scoped-credential-service.js +53 -0
  36. package/dist/services/workflow-service.d.ts +4 -2
  37. package/dist/testing/service-tests/agent-run-service-tests.d.ts +10 -0
  38. package/dist/testing/service-tests/agent-run-service-tests.js +72 -0
  39. package/dist/testing/service-tests/ai-storage-service-tests.d.ts +3 -0
  40. package/dist/testing/service-tests/ai-storage-service-tests.js +302 -0
  41. package/dist/testing/service-tests/channel-store-tests.d.ts +3 -0
  42. package/dist/testing/service-tests/channel-store-tests.js +72 -0
  43. package/dist/testing/service-tests/credential-service-tests.d.ts +3 -0
  44. package/dist/testing/service-tests/credential-service-tests.js +109 -0
  45. package/dist/testing/service-tests/deployment-service-tests.d.ts +3 -0
  46. package/dist/testing/service-tests/deployment-service-tests.js +21 -0
  47. package/dist/testing/service-tests/event-hub-store-tests.d.ts +3 -0
  48. package/dist/testing/service-tests/event-hub-store-tests.js +34 -0
  49. package/dist/testing/service-tests/secret-service-tests.d.ts +3 -0
  50. package/dist/testing/service-tests/secret-service-tests.js +80 -0
  51. package/dist/testing/service-tests/session-store-tests.d.ts +3 -0
  52. package/dist/testing/service-tests/session-store-tests.js +43 -0
  53. package/dist/testing/service-tests/workflow-run-service-tests.d.ts +3 -0
  54. package/dist/testing/service-tests/workflow-run-service-tests.js +42 -0
  55. package/dist/testing/service-tests/workflow-service-tests.d.ts +3 -0
  56. package/dist/testing/service-tests/workflow-service-tests.js +150 -0
  57. package/dist/testing/service-tests.d.ts +6 -0
  58. package/dist/testing/service-tests.js +26 -791
  59. package/dist/types/core.types.d.ts +11 -3
  60. package/dist/types/state.types.d.ts +14 -1
  61. package/dist/wirings/actor-flow/index.d.ts +1 -1
  62. package/dist/wirings/actor-flow/run-conversation.js +1 -6
  63. package/dist/wirings/ai-agent/agent-rpc.d.ts +15 -0
  64. package/dist/wirings/ai-agent/agent-rpc.js +53 -0
  65. package/dist/wirings/ai-agent/ai-agent-agui.js +1 -5
  66. package/dist/wirings/ai-agent/ai-agent-finalize.d.ts +58 -0
  67. package/dist/wirings/ai-agent/ai-agent-finalize.js +138 -0
  68. package/dist/wirings/ai-agent/ai-agent-interrupt.js +1 -0
  69. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +2 -8
  70. package/dist/wirings/ai-agent/ai-agent-memory.js +37 -18
  71. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +7 -0
  72. package/dist/wirings/ai-agent/ai-agent-model-config.js +44 -1
  73. package/dist/wirings/ai-agent/ai-agent-prepare.js +5 -9
  74. package/dist/wirings/ai-agent/ai-agent-runner.js +89 -147
  75. package/dist/wirings/ai-agent/ai-agent-stream.js +109 -97
  76. package/dist/wirings/ai-agent/ai-agent-turn.d.ts +57 -0
  77. package/dist/wirings/ai-agent/ai-agent-turn.js +82 -0
  78. package/dist/wirings/ai-agent/ai-agent.types.d.ts +47 -2
  79. package/dist/wirings/ai-agent/index.d.ts +8 -7
  80. package/dist/wirings/ai-agent/index.js +5 -4
  81. package/dist/wirings/ai-agent/voice-input.js +1 -6
  82. package/dist/wirings/ai-agent/voice-output.js +2 -12
  83. package/dist/wirings/ai-scorer/ai-scorer-grade.d.ts +26 -0
  84. package/dist/wirings/ai-scorer/ai-scorer-grade.js +33 -0
  85. package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +17 -0
  86. package/dist/wirings/ai-scorer/ai-scorer-judge.js +92 -0
  87. package/dist/wirings/ai-scorer/ai-scorer-live.d.ts +15 -0
  88. package/dist/wirings/ai-scorer/ai-scorer-live.js +38 -0
  89. package/dist/wirings/ai-scorer/ai-scorer-registry.d.ts +18 -0
  90. package/dist/wirings/ai-scorer/ai-scorer-registry.js +46 -0
  91. package/dist/wirings/ai-scorer/ai-scorer-sampling.d.ts +8 -0
  92. package/dist/wirings/ai-scorer/ai-scorer-sampling.js +31 -0
  93. package/dist/wirings/ai-scorer/ai-scorer-snapshots.d.ts +10 -0
  94. package/dist/wirings/ai-scorer/ai-scorer-snapshots.js +40 -0
  95. package/dist/wirings/ai-scorer/ai-scorer-worker.d.ts +15 -0
  96. package/dist/wirings/ai-scorer/ai-scorer-worker.js +58 -0
  97. package/dist/wirings/ai-scorer/ai-scorer.d.ts +39 -0
  98. package/dist/wirings/ai-scorer/ai-scorer.js +40 -0
  99. package/dist/wirings/ai-scorer/ai-scorer.types.d.ts +90 -0
  100. package/dist/wirings/ai-scorer/ai-scorer.types.js +4 -0
  101. package/dist/wirings/ai-scorer/index.d.ts +6 -0
  102. package/dist/wirings/ai-scorer/index.js +5 -0
  103. package/dist/wirings/channel/channel-common.js +1 -0
  104. package/dist/wirings/channel/channel-handler.js +3 -5
  105. package/dist/wirings/channel/channel-rpc-service.d.ts +0 -6
  106. package/dist/wirings/channel/channel-rpc-service.js +0 -8
  107. package/dist/wirings/channel/channel-rpc.types.d.ts +6 -0
  108. package/dist/wirings/channel/channel-rpc.types.js +8 -0
  109. package/dist/wirings/channel/channel-runner.d.ts +1 -3
  110. package/dist/wirings/channel/channel-runner.js +16 -8
  111. package/dist/wirings/channel/channel.types.d.ts +2 -0
  112. package/dist/wirings/channel/index.d.ts +5 -6
  113. package/dist/wirings/channel/index.js +3 -4
  114. package/dist/wirings/channel/local/local-channel-runner.js +8 -1
  115. package/dist/wirings/channel/pikku-abstract-channel-handler.js +1 -0
  116. package/dist/wirings/channel/serverless/serverless-channel-runner.js +3 -0
  117. package/dist/wirings/cli/channel/cli-channel-runner.js +2 -0
  118. package/dist/wirings/cli/channel/cli-raw-channel-runner.js +9 -1
  119. package/dist/wirings/cli/channel/index.d.ts +1 -2
  120. package/dist/wirings/cli/channel/index.js +0 -1
  121. package/dist/wirings/cli/cli-runner.js +17 -3
  122. package/dist/wirings/cli/cli.types.d.ts +0 -8
  123. package/dist/wirings/cli/command-parser.js +13 -0
  124. package/dist/wirings/credential/index.d.ts +1 -1
  125. package/dist/wirings/gateway/gateway-runner.js +9 -2
  126. package/dist/wirings/gateway/index.d.ts +1 -1
  127. package/dist/wirings/http/http-routes.js +2 -0
  128. package/dist/wirings/http/http-runner.d.ts +0 -10
  129. package/dist/wirings/http/http-runner.js +14 -15
  130. package/dist/wirings/http/http.types.d.ts +0 -10
  131. package/dist/wirings/http/index.d.ts +2 -3
  132. package/dist/wirings/http/index.js +1 -1
  133. package/dist/wirings/mcp/index.d.ts +1 -1
  134. package/dist/wirings/mcp/mcp-runner.d.ts +15 -7
  135. package/dist/wirings/mcp/mcp-runner.js +18 -11
  136. package/dist/wirings/persona/index.d.ts +3 -4
  137. package/dist/wirings/persona/index.js +2 -3
  138. package/dist/wirings/queue/index.d.ts +1 -3
  139. package/dist/wirings/queue/index.js +1 -3
  140. package/dist/wirings/rpc/addon-runner.d.ts +4 -0
  141. package/dist/wirings/rpc/addon-runner.js +19 -3
  142. package/dist/wirings/rpc/rpc-runner.d.ts +8 -51
  143. package/dist/wirings/rpc/rpc-runner.js +55 -86
  144. package/dist/wirings/rpc/rpc-types.d.ts +7 -0
  145. package/dist/wirings/rpc/wire-addon.d.ts +13 -0
  146. package/dist/wirings/rpc/wire-addon.js +4 -0
  147. package/dist/wirings/scheduler/index.d.ts +1 -1
  148. package/dist/wirings/secret/validate-secret-definitions.js +2 -2
  149. package/dist/wirings/trigger/index.d.ts +1 -1
  150. package/dist/wirings/trigger/pikku-trigger-service.d.ts +0 -4
  151. package/dist/wirings/trigger/trigger-runner.js +1 -0
  152. package/dist/wirings/virtual-user/index.d.ts +5 -6
  153. package/dist/wirings/virtual-user/index.js +2 -4
  154. package/dist/wirings/virtual-user/run-virtual-user.js +11 -11
  155. package/dist/wirings/virtual-user/virtual-user-derive.js +4 -25
  156. package/dist/wirings/virtual-user/virtual-user-dispositions.js +1 -4
  157. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +100 -3
  158. package/dist/wirings/workflow/feature.js +7 -4
  159. package/dist/wirings/workflow/graph/graph-runner.d.ts +1 -2
  160. package/dist/wirings/workflow/graph/graph-runner.js +8 -7
  161. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -4
  162. package/dist/wirings/workflow/index.d.ts +12 -7
  163. package/dist/wirings/workflow/index.js +7 -3
  164. package/dist/wirings/workflow/pikku-scenario-service.d.ts +17 -3
  165. package/dist/wirings/workflow/pikku-scenario-service.js +64 -10
  166. package/dist/wirings/workflow/pikku-workflow-service.d.ts +28 -147
  167. package/dist/wirings/workflow/pikku-workflow-service.js +85 -493
  168. package/dist/wirings/workflow/scenario-step.types.d.ts +8 -0
  169. package/dist/wirings/workflow/workflow-approval-audit.d.ts +16 -0
  170. package/dist/wirings/workflow/workflow-approval-audit.js +40 -0
  171. package/dist/wirings/workflow/workflow-approval-policy.d.ts +20 -0
  172. package/dist/wirings/workflow/workflow-approval-policy.js +48 -0
  173. package/dist/wirings/workflow/workflow-approval.d.ts +67 -0
  174. package/dist/wirings/workflow/workflow-approval.js +177 -0
  175. package/dist/wirings/workflow/workflow-constants.d.ts +26 -0
  176. package/dist/wirings/workflow/workflow-constants.js +35 -0
  177. package/dist/wirings/workflow/workflow-errors.d.ts +58 -0
  178. package/dist/wirings/workflow/workflow-errors.js +112 -0
  179. package/dist/wirings/workflow/workflow-meta-resolver.d.ts +11 -0
  180. package/dist/wirings/workflow/workflow-meta-resolver.js +31 -0
  181. package/dist/wirings/workflow/workflow-queue-routing.d.ts +8 -0
  182. package/dist/wirings/workflow/workflow-queue-routing.js +38 -0
  183. package/dist/wirings/workflow/workflow-queue-wiring.d.ts +20 -0
  184. package/dist/wirings/workflow/workflow-queue-wiring.js +79 -0
  185. package/dist/wirings/workflow/workflow-recovery.d.ts +68 -0
  186. package/dist/wirings/workflow/workflow-recovery.js +101 -0
  187. package/dist/wirings/workflow/workflow-run-engine.types.d.ts +54 -0
  188. package/dist/wirings/workflow/workflow-run-ownership.d.ts +17 -0
  189. package/dist/wirings/workflow/workflow-run-ownership.js +30 -0
  190. package/dist/wirings/workflow/workflow-suspend.d.ts +12 -0
  191. package/dist/wirings/workflow/workflow-suspend.js +33 -0
  192. package/dist/wirings/workflow/workflow.types.d.ts +8 -1
  193. package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-airunstate-too.md +22 -0
  194. package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +20 -0
  195. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +21 -0
  196. package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +21 -0
  197. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +46 -0
  198. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +45 -0
  199. package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +32 -0
  200. package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +21 -0
  201. package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +22 -0
  202. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +39 -0
  203. package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +23 -0
  204. package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +25 -0
  205. package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +22 -0
  206. package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +20 -0
  207. package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +22 -0
  208. package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +66 -0
  209. package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +33 -0
  210. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +43 -0
  211. package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +26 -0
  212. package/knowledge/decisions/internals/index.md +42 -3
  213. package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +21 -0
  214. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +24 -0
  215. package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +34 -0
  216. package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +24 -0
  217. package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +22 -0
  218. package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +26 -0
  219. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +43 -0
  220. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +58 -0
  221. package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +40 -0
  222. package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +40 -0
  223. package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +28 -0
  224. package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +25 -0
  225. package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +21 -0
  226. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +22 -0
  227. package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +25 -0
  228. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +115 -0
  229. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +21 -0
  230. package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +24 -0
  231. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +35 -0
  232. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +4 -2
  233. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +37 -0
  234. package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +33 -0
  235. package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +33 -0
  236. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +37 -0
  237. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +28 -0
  238. package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +50 -0
  239. package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +33 -0
  240. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +59 -0
  241. package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +24 -0
  242. package/knowledge/decisions/security/index.md +9 -0
  243. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +35 -0
  244. package/knowledge/questions/index.md +2 -1
  245. package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +44 -0
  246. package/package.json +15 -3
  247. package/scripts/generate-api-report.d.mts +1 -0
  248. package/scripts/generate-api-report.mjs +89 -0
  249. package/scripts/generate-api-report.mts +343 -0
  250. package/src/api-report.test.ts +69 -0
  251. package/src/column-form.ts +1 -4
  252. package/src/crypto-utils.test.ts +15 -2
  253. package/src/dev/hot-reload.ts +2 -7
  254. package/src/ecosystem.ts +40 -0
  255. package/src/errors/error-handler.ts +5 -3
  256. package/src/errors/error.test.ts +4 -1
  257. package/src/errors/index.ts +1 -1
  258. package/src/function/function-runner.test.ts +53 -1
  259. package/src/function/function-runner.ts +33 -48
  260. package/src/function/functions.types.ts +15 -9
  261. package/src/function/index.ts +0 -2
  262. package/src/handle-error.ts +1 -1
  263. package/src/index.ts +3 -57
  264. package/src/middleware/auth-cookie.test.ts +50 -0
  265. package/src/middleware/auth-cookie.ts +38 -2
  266. package/src/middleware/cors.ts +2 -1
  267. package/src/middleware/index.ts +1 -1
  268. package/src/middleware/remote-auth.test.ts +43 -0
  269. package/src/middleware/remote-auth.ts +17 -3
  270. package/src/middleware-runner.ts +4 -2
  271. package/src/no-any-casts.test.ts +57 -0
  272. package/src/permissions.test.ts +3 -1
  273. package/src/permissions.ts +22 -24
  274. package/src/pikku-state.ts +22 -6
  275. package/src/public-surface.json +554 -0
  276. package/src/public-surface.json.README +25 -0
  277. package/src/public-surface.test.ts +105 -0
  278. package/src/removed-legacy-exports.test.ts +62 -0
  279. package/src/schema.test.ts +78 -0
  280. package/src/schema.ts +36 -1
  281. package/src/services/ai-agent-runner-service.ts +12 -1
  282. package/src/services/ai-run-state-service.ts +18 -1
  283. package/src/services/audit-service.ts +2 -2
  284. package/src/services/in-memory-ai-run-state-service.ts +16 -2
  285. package/src/services/in-memory-workflow-service.ts +2 -0
  286. package/src/services/index.ts +4 -47
  287. package/src/services/local-content-request-handler.test.ts +43 -5
  288. package/src/services/local-content-request-handler.ts +103 -74
  289. package/src/services/local-content.ts +15 -1
  290. package/src/services/local-email-service.ts +5 -1
  291. package/src/services/scoped-credential-service.test.ts +86 -0
  292. package/src/services/scoped-credential-service.ts +63 -0
  293. package/src/services/system-role-guard.test.ts +4 -1
  294. package/src/services/workflow-service.ts +9 -2
  295. package/src/side-effects-are-declared.test.ts +84 -0
  296. package/src/source-files-stay-composable.test.ts +41 -0
  297. package/src/testing/service-tests/agent-run-service-tests.ts +98 -0
  298. package/src/testing/service-tests/ai-storage-service-tests.ts +379 -0
  299. package/src/testing/service-tests/channel-store-tests.ts +98 -0
  300. package/src/testing/service-tests/credential-service-tests.ts +143 -0
  301. package/src/testing/service-tests/deployment-service-tests.ts +33 -0
  302. package/src/testing/service-tests/event-hub-store-tests.ts +48 -0
  303. package/src/testing/service-tests/secret-service-tests.ts +105 -0
  304. package/src/testing/service-tests/session-store-tests.ts +62 -0
  305. package/src/testing/service-tests/workflow-run-service-tests.ts +59 -0
  306. package/src/testing/service-tests/workflow-service-tests.ts +308 -0
  307. package/src/testing/service-tests.ts +31 -1111
  308. package/src/types/core.types.ts +14 -3
  309. package/src/types/state.types.ts +17 -1
  310. package/src/wirings/actor-flow/index.ts +0 -3
  311. package/src/wirings/actor-flow/run-conversation.ts +1 -6
  312. package/src/wirings/ai-agent/agent-rpc.ts +120 -0
  313. package/src/wirings/ai-agent/ai-agent-agui.ts +1 -5
  314. package/src/wirings/ai-agent/ai-agent-finalize.test.ts +186 -0
  315. package/src/wirings/ai-agent/ai-agent-finalize.ts +197 -0
  316. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +2 -1
  317. package/src/wirings/ai-agent/ai-agent-interrupt.ts +1 -0
  318. package/src/wirings/ai-agent/ai-agent-memory.ts +62 -39
  319. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +72 -3
  320. package/src/wirings/ai-agent/ai-agent-model-config.ts +49 -1
  321. package/src/wirings/ai-agent/ai-agent-prepare.ts +12 -12
  322. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +1 -0
  323. package/src/wirings/ai-agent/ai-agent-runner.test.ts +82 -2
  324. package/src/wirings/ai-agent/ai-agent-runner.ts +120 -160
  325. package/src/wirings/ai-agent/ai-agent-stream-output-hooks.test.ts +353 -0
  326. package/src/wirings/ai-agent/ai-agent-stream.test.ts +2 -0
  327. package/src/wirings/ai-agent/ai-agent-stream.ts +152 -117
  328. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +1 -1
  329. package/src/wirings/ai-agent/ai-agent-turn.test.ts +67 -0
  330. package/src/wirings/ai-agent/ai-agent-turn.ts +122 -0
  331. package/src/wirings/ai-agent/ai-agent.types.ts +65 -5
  332. package/src/wirings/ai-agent/index.ts +2 -16
  333. package/src/wirings/ai-agent/voice-input.ts +1 -6
  334. package/src/wirings/ai-agent/voice-output.ts +2 -12
  335. package/src/wirings/ai-scorer/ai-scorer-grade.test.ts +106 -0
  336. package/src/wirings/ai-scorer/ai-scorer-grade.ts +55 -0
  337. package/src/wirings/ai-scorer/ai-scorer-judge.test.ts +143 -0
  338. package/src/wirings/ai-scorer/ai-scorer-judge.ts +120 -0
  339. package/src/wirings/ai-scorer/ai-scorer-live.test.ts +174 -0
  340. package/src/wirings/ai-scorer/ai-scorer-live.ts +56 -0
  341. package/src/wirings/ai-scorer/ai-scorer-registry.ts +63 -0
  342. package/src/wirings/ai-scorer/ai-scorer-sampling.test.ts +34 -0
  343. package/src/wirings/ai-scorer/ai-scorer-sampling.ts +36 -0
  344. package/src/wirings/ai-scorer/ai-scorer-snapshots.test.ts +49 -0
  345. package/src/wirings/ai-scorer/ai-scorer-snapshots.ts +46 -0
  346. package/src/wirings/ai-scorer/ai-scorer-worker.test.ts +122 -0
  347. package/src/wirings/ai-scorer/ai-scorer-worker.ts +69 -0
  348. package/src/wirings/ai-scorer/ai-scorer.ts +76 -0
  349. package/src/wirings/ai-scorer/ai-scorer.types.ts +107 -0
  350. package/src/wirings/ai-scorer/index.ts +24 -0
  351. package/src/wirings/channel/channel-common.ts +5 -2
  352. package/src/wirings/channel/channel-handler-shapes.test.ts +72 -0
  353. package/src/wirings/channel/channel-handler.ts +7 -7
  354. package/src/wirings/channel/channel-rpc-service.ts +0 -14
  355. package/src/wirings/channel/channel-rpc.test.ts +25 -4
  356. package/src/wirings/channel/channel-rpc.types.ts +14 -0
  357. package/src/wirings/channel/channel-runner.ts +33 -20
  358. package/src/wirings/channel/channel.types.ts +2 -0
  359. package/src/wirings/channel/index.ts +1 -20
  360. package/src/wirings/channel/local/local-channel-runner.test.ts +68 -0
  361. package/src/wirings/channel/local/local-channel-runner.ts +9 -2
  362. package/src/wirings/channel/pikku-abstract-channel-handler.ts +2 -1
  363. package/src/wirings/channel/serverless/serverless-channel-runner.ts +6 -3
  364. package/src/wirings/cli/channel/cli-channel-runner.ts +3 -1
  365. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +23 -0
  366. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +12 -1
  367. package/src/wirings/cli/channel/cli-raw-client-runner.ts +4 -1
  368. package/src/wirings/cli/channel/index.ts +0 -7
  369. package/src/wirings/cli/cli-runner.test.ts +68 -0
  370. package/src/wirings/cli/cli-runner.ts +25 -5
  371. package/src/wirings/cli/cli.types.ts +0 -39
  372. package/src/wirings/cli/command-parser.test.ts +19 -0
  373. package/src/wirings/cli/command-parser.ts +17 -1
  374. package/src/wirings/credential/index.ts +0 -1
  375. package/src/wirings/gateway/gateway-channel-meta.test.ts +44 -0
  376. package/src/wirings/gateway/gateway-runner.ts +27 -19
  377. package/src/wirings/gateway/index.ts +0 -3
  378. package/src/wirings/http/http-routes.ts +4 -1
  379. package/src/wirings/http/http-runner.test.ts +66 -0
  380. package/src/wirings/http/http-runner.ts +21 -28
  381. package/src/wirings/http/http.types.ts +0 -15
  382. package/src/wirings/http/index.ts +2 -8
  383. package/src/wirings/http/pikku-fetch-http-request.ts +2 -2
  384. package/src/wirings/http/web-request.ts +1 -1
  385. package/src/wirings/mcp/index.ts +0 -1
  386. package/src/wirings/mcp/mcp-runner.test.ts +181 -0
  387. package/src/wirings/mcp/mcp-runner.ts +37 -21
  388. package/src/wirings/persona/index.ts +0 -8
  389. package/src/wirings/persona/persona-environments.test.ts +14 -3
  390. package/src/wirings/persona/persona.test.ts +13 -3
  391. package/src/wirings/persona/validate-personas.ts +5 -1
  392. package/src/wirings/queue/index.ts +0 -14
  393. package/src/wirings/queue/queue-runner.ts +1 -1
  394. package/src/wirings/rpc/addon-auth-tags.test.ts +1 -5
  395. package/src/wirings/rpc/addon-runner.ts +34 -3
  396. package/src/wirings/rpc/addon-secrets.test.ts +261 -0
  397. package/src/wirings/rpc/rpc-runner.test.ts +2 -0
  398. package/src/wirings/rpc/rpc-runner.ts +60 -136
  399. package/src/wirings/rpc/rpc-types.ts +11 -0
  400. package/src/wirings/rpc/wire-addon.ts +20 -1
  401. package/src/wirings/scheduler/index.ts +0 -1
  402. package/src/wirings/secret/validate-secret-definitions.test.ts +22 -0
  403. package/src/wirings/secret/validate-secret-definitions.ts +2 -2
  404. package/src/wirings/trigger/index.ts +0 -1
  405. package/src/wirings/trigger/pikku-trigger-service.ts +0 -5
  406. package/src/wirings/trigger/trigger-runner.ts +7 -5
  407. package/src/wirings/virtual-user/index.ts +0 -16
  408. package/src/wirings/virtual-user/run-virtual-user.test.ts +18 -9
  409. package/src/wirings/virtual-user/run-virtual-user.ts +28 -15
  410. package/src/wirings/virtual-user/virtual-user-agents.test.ts +4 -1
  411. package/src/wirings/virtual-user/virtual-user-derive.ts +4 -25
  412. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +7 -2
  413. package/src/wirings/virtual-user/virtual-user-dispositions.ts +1 -4
  414. package/src/wirings/virtual-user/virtual-user-intents.test.ts +13 -3
  415. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +117 -4
  416. package/src/wirings/workflow/feature.ts +7 -4
  417. package/src/wirings/workflow/graph/graph-node.ts +1 -1
  418. package/src/wirings/workflow/graph/graph-runner.test.ts +76 -2
  419. package/src/wirings/workflow/graph/graph-runner.ts +13 -16
  420. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -5
  421. package/src/wirings/workflow/index.ts +14 -24
  422. package/src/wirings/workflow/pikku-scenario-service.ts +101 -27
  423. package/src/wirings/workflow/pikku-workflow-service.test.ts +15 -14
  424. package/src/wirings/workflow/pikku-workflow-service.ts +214 -743
  425. package/src/wirings/workflow/scenario-expectations.test.ts +75 -0
  426. package/src/wirings/workflow/scenario-hooks.test.ts +52 -0
  427. package/src/wirings/workflow/scenario-step.types.ts +8 -0
  428. package/src/wirings/workflow/workflow-approval-audit.ts +47 -0
  429. package/src/wirings/workflow/workflow-approval-policy.test.ts +524 -0
  430. package/src/wirings/workflow/workflow-approval-policy.ts +68 -0
  431. package/src/wirings/workflow/workflow-approval.ts +289 -0
  432. package/src/wirings/workflow/workflow-child-run-session.test.ts +89 -0
  433. package/src/wirings/workflow/workflow-constants.ts +47 -0
  434. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +1 -1
  435. package/src/wirings/workflow/workflow-errors.ts +128 -0
  436. package/src/wirings/workflow/workflow-inline-authority.test.ts +12 -6
  437. package/src/wirings/workflow/workflow-meta-resolver.ts +45 -0
  438. package/src/wirings/workflow/workflow-missing-meta.test.ts +92 -0
  439. package/src/wirings/workflow/workflow-queue-routing.ts +85 -0
  440. package/src/wirings/workflow/workflow-queue-wiring.ts +149 -0
  441. package/src/wirings/workflow/workflow-recovery.ts +162 -0
  442. package/src/wirings/workflow/workflow-retry-policy.test.ts +1 -1
  443. package/src/wirings/workflow/workflow-run-authority.test.ts +212 -0
  444. package/src/wirings/workflow/workflow-run-engine.types.ts +91 -0
  445. package/src/wirings/workflow/workflow-run-ownership.ts +37 -0
  446. package/src/wirings/workflow/workflow-suspend.ts +61 -0
  447. package/src/wirings/workflow/workflow.types.ts +7 -9
  448. package/src/wirings-stay-decoupled.test.ts +127 -0
  449. package/tsconfig.json +1 -1
  450. package/tsconfig.tsbuildinfo +1 -1
  451. package/dist/internal.d.ts +0 -3
  452. package/dist/internal.js +0 -2
  453. package/dist/middleware/timeout.d.ts +0 -9
  454. package/dist/middleware/timeout.js +0 -15
  455. package/dist/pikku-response.d.ts +0 -6
  456. package/dist/pikku-response.js +0 -6
  457. package/dist/services/gopass-secrets.d.ts +0 -15
  458. package/dist/services/gopass-secrets.js +0 -76
  459. package/dist/services/http-scenario-actors.d.ts +0 -75
  460. package/dist/services/http-scenario-actors.js +0 -195
  461. package/dist/services/http-user-flow-actors.d.ts +0 -67
  462. package/dist/services/http-user-flow-actors.js +0 -193
  463. package/dist/services/scenario-actors-service.d.ts +0 -127
  464. package/dist/services/scenario-actors-service.js +0 -40
  465. package/dist/services/user-flow-actors-service.d.ts +0 -39
  466. package/dist/wirings/credential/wire-credential.d.ts +0 -48
  467. package/dist/wirings/credential/wire-credential.js +0 -47
  468. package/dist/wirings/oauth2/oauth2-client.d.ts +0 -47
  469. package/dist/wirings/oauth2/oauth2-client.js +0 -263
  470. package/dist/wirings/oauth2/oauth2-routes.d.ts +0 -35
  471. package/dist/wirings/oauth2/oauth2-routes.js +0 -146
  472. package/dist/wirings/scope/wire-scope.d.ts +0 -33
  473. package/dist/wirings/scope/wire-scope.js +0 -32
  474. package/dist/wirings/workflow/dsl/index.d.ts +0 -5
  475. package/dist/wirings/workflow/dsl/index.js +0 -4
  476. package/dist/wirings/workflow/graph/index.d.ts +0 -5
  477. package/dist/wirings/workflow/graph/index.js +0 -4
  478. package/src/internal.ts +0 -10
  479. /package/dist/{services/user-flow-actors-service.js → wirings/workflow/workflow-run-engine.types.js} +0 -0
@@ -0,0 +1,554 @@
1
+ {
2
+ ".": [
3
+ "AIProviderAuthError",
4
+ "AIProviderNotConfiguredError",
5
+ "AbandonedError",
6
+ "BadGatewayError",
7
+ "BadRequestError",
8
+ "ConflictError",
9
+ "ExpectationFailedError",
10
+ "ForbiddenError",
11
+ "GatewayTimeoutError",
12
+ "GoneError",
13
+ "HTTPVersionNotSupportedError",
14
+ "InternalServerError",
15
+ "InvalidMiddlewareWireError",
16
+ "InvalidOriginError",
17
+ "InvalidSessionError",
18
+ "LengthRequiredError",
19
+ "LocalEnvironmentOnlyError",
20
+ "LockedError",
21
+ "MaxComputeTimeReachedError",
22
+ "MethodNotAllowedError",
23
+ "MissingCredentialError",
24
+ "MissingSchemaError",
25
+ "MissingScopeError",
26
+ "MissingServiceError",
27
+ "MissingSessionError",
28
+ "NoopAuditService",
29
+ "NotAcceptableError",
30
+ "NotFoundError",
31
+ "NotImplementedError",
32
+ "PayloadTooLargeError",
33
+ "PaymentRequiredError",
34
+ "PikkuError",
35
+ "PikkuMissingMetaError",
36
+ "PikkuRequest",
37
+ "PreconditionFailedError",
38
+ "ProxyAuthenticationRequiredError",
39
+ "REDACTED",
40
+ "RangeNotSatisfiableError",
41
+ "ReadonlySessionError",
42
+ "RequestTimeoutError",
43
+ "SchedulerService",
44
+ "SecretAccessDeniedError",
45
+ "SecretCoercionError",
46
+ "SecretHostNotAllowedError",
47
+ "ServiceUnavailableError",
48
+ "TooManyRequestsError",
49
+ "URITooLongError",
50
+ "UnauthorizedError",
51
+ "UnprocessableContentError",
52
+ "UnsupportedMediaTypeError",
53
+ "addGlobalPermission",
54
+ "addTagMiddleware",
55
+ "assertSecretAllowedForHost",
56
+ "checkAuthPermissions",
57
+ "clearPikkuRuntimeState",
58
+ "createGraph",
59
+ "createInvocationAudit",
60
+ "createSecretValue",
61
+ "fetch",
62
+ "formatVersionedId",
63
+ "getAllFunctionNames",
64
+ "getRelativeTimeOffsetFromNow",
65
+ "hasScopes",
66
+ "hashToken",
67
+ "isExpectedError",
68
+ "isSecretValue",
69
+ "isSerializable",
70
+ "isVersionedId",
71
+ "parseDurationString",
72
+ "parseVersionedId",
73
+ "pikkuAIMiddleware",
74
+ "pikkuApprovalDescription",
75
+ "pikkuAuth",
76
+ "pikkuCLIRender",
77
+ "pikkuChannelMiddleware",
78
+ "pikkuChannelMiddlewareFactory",
79
+ "pikkuMiddleware",
80
+ "pikkuMiddlewareFactory",
81
+ "pikkuPermission",
82
+ "pikkuPermissionFactory",
83
+ "pikkuServerLifecycle",
84
+ "runMiddleware",
85
+ "stopSingletonServices",
86
+ "verifyScopes",
87
+ "wireAddon",
88
+ "wireRemoteAddon",
89
+ "withoutSecrets"
90
+ ],
91
+ "./middleware": [
92
+ "addGlobalMiddleware",
93
+ "addGlobalPermission",
94
+ "addMiddleware",
95
+ "addTagMiddleware",
96
+ "authAPIKey",
97
+ "authBearer",
98
+ "authCookie",
99
+ "cors",
100
+ "pikkuRemoteAuthMiddleware",
101
+ "runMiddleware",
102
+ "telemetryInner",
103
+ "telemetryOuter"
104
+ ],
105
+ "./function": [
106
+ "addFunction",
107
+ "getAllFunctionNames",
108
+ "pikkuApprovalDescription",
109
+ "pikkuAuth",
110
+ "pikkuPermission",
111
+ "pikkuPermissionFactory"
112
+ ],
113
+ "./channel": [
114
+ "ChannelDeploymentService",
115
+ "ChannelRPCError",
116
+ "ChannelRPCRegistry",
117
+ "ChannelStore",
118
+ "EventHubStore",
119
+ "PikkuAbstractChannelHandler",
120
+ "addChannelMiddleware",
121
+ "combineChannelMiddleware",
122
+ "defineChannelRoutes",
123
+ "logChannels",
124
+ "unsupportedChannelRemote",
125
+ "wireChannel"
126
+ ],
127
+ "./workflow": [
128
+ "DEFAULT_STEP_RETRIES",
129
+ "PikkuWorkflowService",
130
+ "SCENARIO_SURFACES",
131
+ "WorkflowApprovalForbiddenError",
132
+ "WorkflowApprovalResolvedError",
133
+ "WorkflowCancelledException",
134
+ "WorkflowDispatchException",
135
+ "WorkflowNotFoundError",
136
+ "WorkflowRunForbiddenError",
137
+ "WorkflowRunNotFoundError",
138
+ "WorkflowStepFunctionMismatchError",
139
+ "WorkflowSuspendedException",
140
+ "addFeature",
141
+ "addWorkflow",
142
+ "assertWorkflowRunOwner",
143
+ "buildRunTimeline",
144
+ "composeStepProse",
145
+ "createCookieJar",
146
+ "deriveInvocationId",
147
+ "isRef",
148
+ "pikkuWorkflowGraph",
149
+ "pollUntil",
150
+ "reconstructFinalState",
151
+ "reconstructStateAt",
152
+ "renderStepTemplate",
153
+ "requireActor",
154
+ "requireScenarioEnv",
155
+ "resolveFeatureScenarios",
156
+ "resolveScenarioSurfaces",
157
+ "template",
158
+ "uuidv5"
159
+ ],
160
+ "./scenario": [
161
+ "PikkuScenarioService",
162
+ "ScenarioBrowserActorRequired",
163
+ "ScenarioBrowserUnavailable",
164
+ "ScenarioHookError",
165
+ "ScenarioNoSurfaceBinding",
166
+ "ScenarioNoWitness",
167
+ "ScenarioWitnessDisagreement",
168
+ "createScenarioRunner"
169
+ ],
170
+ "./workflow/timeline": [
171
+ "buildRunTimeline",
172
+ "reconstructFinalState",
173
+ "reconstructStateAt"
174
+ ],
175
+ "./workflow/types": [],
176
+ "./actor-flow": [
177
+ "runConversation"
178
+ ],
179
+ "./virtual-user": [
180
+ "DISPOSITIONS",
181
+ "IntentStack",
182
+ "PRODUCTION_DISPOSITION",
183
+ "catalogueClassification",
184
+ "catalogueLookup",
185
+ "deriveCatalogue",
186
+ "deriveIntents",
187
+ "dispositionProfile",
188
+ "intentsForPersona",
189
+ "isReadOnly",
190
+ "personaScopes",
191
+ "personaVirtualUserTarget",
192
+ "prepareVirtualUserRun",
193
+ "reachableCatalogue",
194
+ "runVirtualUser",
195
+ "unreachableCatalogue"
196
+ ],
197
+ "./channel/local": [
198
+ "LocalEventHubService",
199
+ "PikkuLocalChannelHandler",
200
+ "runLocalChannel"
201
+ ],
202
+ "./channel/serverless": [
203
+ "runChannelConnect",
204
+ "runChannelDisconnect",
205
+ "runChannelMessage"
206
+ ],
207
+ "./http": [
208
+ "DEFAULT_MAX_BODY_SIZE",
209
+ "PikkuFetchHTTPRequest",
210
+ "PikkuFetchHTTPResponse",
211
+ "addHTTPMiddleware",
212
+ "applyWebResponse",
213
+ "defineHTTPRoutes",
214
+ "fetch",
215
+ "fetchData",
216
+ "logRoutes",
217
+ "toWebRequest",
218
+ "wireHTTP",
219
+ "wireHTTPRoutes"
220
+ ],
221
+ "./remote": [
222
+ "buildRemoteHeaders"
223
+ ],
224
+ "./queue": [
225
+ "QueueJobDiscardedError",
226
+ "QueueJobFailedError",
227
+ "SignedQueueService",
228
+ "registerQueueWorkers",
229
+ "runQueueJob",
230
+ "wireQueueWorker"
231
+ ],
232
+ "./scheduler": [
233
+ "getScheduledTasks",
234
+ "logSchedulers",
235
+ "runScheduledTask",
236
+ "wireScheduler"
237
+ ],
238
+ "./trigger": [
239
+ "PikkuTriggerService",
240
+ "wireTrigger",
241
+ "wireTriggerSource"
242
+ ],
243
+ "./rpc": [
244
+ "PikkuRPCService",
245
+ "RPCNotFoundError",
246
+ "RemoteAddonAuthError",
247
+ "RemoteAddonConfigError",
248
+ "RemoteAddonRequestError",
249
+ "resolveRemoteAddonToken",
250
+ "rpcService",
251
+ "wireAddon",
252
+ "wireRemoteAddon"
253
+ ],
254
+ "./safe-fetch": [
255
+ "assertFetchableUrl",
256
+ "isPrivateHost",
257
+ "safeFetch",
258
+ "setDefaultHostResolver"
259
+ ],
260
+ "./node-host-resolver": [
261
+ "installNodeHostResolver",
262
+ "nodeHostResolver"
263
+ ],
264
+ "./mcp": [
265
+ "MCPEndpointRegistry",
266
+ "MCPError",
267
+ "getMCPPromptsMeta",
268
+ "getMCPResourcesMeta",
269
+ "getMCPToolsMeta",
270
+ "runMCPPrompt",
271
+ "runMCPResource",
272
+ "runMCPTool",
273
+ "wireMCPPrompt",
274
+ "wireMCPResource"
275
+ ],
276
+ "./ai-agent": [
277
+ "AgentInterruptedError",
278
+ "NoSpeechDetectedError",
279
+ "SPOKEN_TRANSCRIPT",
280
+ "SPOKEN_TURN",
281
+ "ToolApprovalRequired",
282
+ "ToolCredentialRequired",
283
+ "addAIAgent",
284
+ "agent",
285
+ "agentApprove",
286
+ "agentInterrupt",
287
+ "agentResume",
288
+ "agentStream",
289
+ "canAccessThread",
290
+ "interruptAIAgent",
291
+ "isOwnedByPrincipal",
292
+ "resolveModelAlias",
293
+ "resumeAIAgent",
294
+ "resumeAIAgentSync",
295
+ "runAIAgent",
296
+ "signalRunInterrupt",
297
+ "streamAIAgent",
298
+ "threadOwnerConstraint",
299
+ "unspeakableScripts",
300
+ "voiceForText",
301
+ "voiceInput",
302
+ "voiceOutput",
303
+ "wrapChannelWithAGUI"
304
+ ],
305
+ "./ai-scorer": [
306
+ "addAIScorer",
307
+ "enableScoreSnapshots",
308
+ "getAIScorers",
309
+ "getAIScorersMeta",
310
+ "getScoreSnapshot",
311
+ "gradeRun",
312
+ "pikkuAIJudge",
313
+ "pikkuAIScorer",
314
+ "wireAIScorerQueueWorkers"
315
+ ],
316
+ "./gateway": [
317
+ "createListenerMessageHandler",
318
+ "resolveGatewayAdapter",
319
+ "wireGateway"
320
+ ],
321
+ "./cli": [
322
+ "CLIError",
323
+ "defineCLICommands",
324
+ "executeCLI",
325
+ "generateCommandHelp",
326
+ "parseCLIArguments",
327
+ "pikkuCLIRender",
328
+ "runCLICommand",
329
+ "wireCLI"
330
+ ],
331
+ "./cli/command-parser": [
332
+ "generateCommandHelp",
333
+ "parseCLIArguments"
334
+ ],
335
+ "./cli/channel": [
336
+ "executeCLIViaChannel",
337
+ "executeRawCLIViaChannel",
338
+ "handleRawCLI"
339
+ ],
340
+ "./node": [],
341
+ "./credential": [
342
+ "defineCredential",
343
+ "validateAndBuildCredentialDefinitionsMeta"
344
+ ],
345
+ "./scope": [
346
+ "defineScope",
347
+ "flattenScopeDefinitions",
348
+ "validateAndBuildScopeDefinitionsMeta"
349
+ ],
350
+ "./role": [
351
+ "defineSystemRole",
352
+ "flattenSystemRoleDefinitions",
353
+ "validateAndBuildSystemRoleDefinitionsMeta"
354
+ ],
355
+ "./persona": [
356
+ "HttpPersona",
357
+ "createHttpPersonas",
358
+ "definePersonas",
359
+ "isRunnablePersona",
360
+ "personaEmail",
361
+ "personaEmails",
362
+ "personaEnvironmentErrors",
363
+ "personaEnvironmentRefusal",
364
+ "postScenarioJson",
365
+ "readScenarioHttpResponse",
366
+ "roleMismatchMessage",
367
+ "runnablePersonas",
368
+ "validateAndBuildPersonasMeta",
369
+ "verifyPersonaRoles"
370
+ ],
371
+ "./secret": [
372
+ "defineSecret",
373
+ "validateAndBuildSecretDefinitionsMeta"
374
+ ],
375
+ "./variable": [
376
+ "defineVariable",
377
+ "validateAndBuildVariableDefinitionsMeta"
378
+ ],
379
+ "./oauth2": [],
380
+ "./errors": [
381
+ "AIProviderAuthError",
382
+ "AIProviderNotConfiguredError",
383
+ "BadGatewayError",
384
+ "BadRequestError",
385
+ "ConflictError",
386
+ "ExpectationFailedError",
387
+ "ForbiddenError",
388
+ "GatewayTimeoutError",
389
+ "GoneError",
390
+ "HTTPVersionNotSupportedError",
391
+ "InternalServerError",
392
+ "InvalidMiddlewareWireError",
393
+ "InvalidOriginError",
394
+ "InvalidSessionError",
395
+ "LengthRequiredError",
396
+ "LocalEnvironmentOnlyError",
397
+ "LockedError",
398
+ "MaxComputeTimeReachedError",
399
+ "MethodNotAllowedError",
400
+ "MissingCredentialError",
401
+ "MissingSchemaError",
402
+ "MissingScopeError",
403
+ "MissingServiceError",
404
+ "MissingSessionError",
405
+ "NotAcceptableError",
406
+ "NotFoundError",
407
+ "NotImplementedError",
408
+ "PayloadTooLargeError",
409
+ "PaymentRequiredError",
410
+ "PikkuError",
411
+ "PikkuMissingMetaError",
412
+ "PreconditionFailedError",
413
+ "ProxyAuthenticationRequiredError",
414
+ "RangeNotSatisfiableError",
415
+ "ReadonlySessionError",
416
+ "RequestTimeoutError",
417
+ "ServiceUnavailableError",
418
+ "SystemRoleImmutableError",
419
+ "SystemRoleShadowedError",
420
+ "TooManyRequestsError",
421
+ "URITooLongError",
422
+ "UnauthorizedError",
423
+ "UnprocessableContentError",
424
+ "UnsupportedMediaTypeError",
425
+ "WeakKeyMaterialError",
426
+ "addError"
427
+ ],
428
+ "./services": [
429
+ "ConsoleLogger",
430
+ "DEFAULT_WEBHOOK_RETRIES",
431
+ "InMemoryAIRunStateService",
432
+ "InMemoryQueueService",
433
+ "InMemorySessionStore",
434
+ "InMemoryTriggerService",
435
+ "InMemoryWorkflowService",
436
+ "JsonConsoleLogger",
437
+ "LocalCredentialService",
438
+ "LocalEmailService",
439
+ "LocalGatewayService",
440
+ "LocalSecretService",
441
+ "LocalVariablesService",
442
+ "LogLevel",
443
+ "NoopAuditService",
444
+ "PIKKU_OUTGOING_WEBHOOK_QUEUE_NAME",
445
+ "PikkuCredentialWireService",
446
+ "PikkuSessionService",
447
+ "QueueWebhookService",
448
+ "ScopedCredentialService",
449
+ "ScopedSecretService",
450
+ "SecretHostNotAllowedError",
451
+ "StubTracker",
452
+ "TypedCredentialService",
453
+ "TypedSecretService",
454
+ "TypedVariablesService",
455
+ "WebhookService",
456
+ "assertSecretAllowedForHost",
457
+ "createInvocationAudit",
458
+ "createMiddlewareSessionWireProps",
459
+ "createStubProxy",
460
+ "getStubTracker",
461
+ "isTestRun",
462
+ "pikkuWebhookWorkerFunc",
463
+ "spy",
464
+ "stub"
465
+ ],
466
+ "./services/local-meta": [
467
+ "LocalMetaService"
468
+ ],
469
+ "./services/v8-coverage": [
470
+ "V8CoverageService"
471
+ ],
472
+ "./services/istanbul-coverage": [
473
+ "IstanbulCoverageService"
474
+ ],
475
+ "./services/local-content": [
476
+ "LocalContent",
477
+ "signedContentPath"
478
+ ],
479
+ "./services/local-content-request-handler": [
480
+ "createLocalContentRequestHandler",
481
+ "verifySignedContentRequest"
482
+ ],
483
+ "./services/temporary-file-service": [
484
+ "TemporaryFileInstance",
485
+ "TemporaryFileService"
486
+ ],
487
+ "./crypto-utils": [
488
+ "MIN_KEY_MATERIAL_LENGTH",
489
+ "REMOTE_SESSION_INFO",
490
+ "assertStrongKeyMaterial",
491
+ "decodeBase64UrlText",
492
+ "decryptJSON",
493
+ "decryptWithKeyMaterial",
494
+ "deriveKEK",
495
+ "encodeBase64UrlText",
496
+ "encryptJSON",
497
+ "encryptWithKeyMaterial",
498
+ "envelopeDecrypt",
499
+ "envelopeEncrypt",
500
+ "envelopeRewrap",
501
+ "generateDEK",
502
+ "generateKEKSalt",
503
+ "signWithKeyMaterial",
504
+ "unwrapDEK",
505
+ "verifyWithKeyMaterial",
506
+ "wrapDEK"
507
+ ],
508
+ "./hmac": [
509
+ "hmacSha256Hex",
510
+ "timingSafeStringEqual"
511
+ ],
512
+ "./ecosystem": [
513
+ "addFunction",
514
+ "addGlobalMiddleware",
515
+ "addMiddleware",
516
+ "getAllPackageStates",
517
+ "getCreateWireServices",
518
+ "getSingletonServices",
519
+ "httpRouter",
520
+ "pikkuState",
521
+ "resetPikkuState",
522
+ "runPikkuFunc",
523
+ "setSingletonServices"
524
+ ],
525
+ "./internal": [
526
+ "addFunction",
527
+ "addGlobalMiddleware",
528
+ "addMiddleware",
529
+ "getAllPackageStates",
530
+ "getCreateWireServices",
531
+ "getSingletonServices",
532
+ "httpRouter",
533
+ "pikkuState",
534
+ "resetPikkuState",
535
+ "runPikkuFunc",
536
+ "setSingletonServices"
537
+ ],
538
+ "./schema": [
539
+ "addSchema",
540
+ "applyDefaultsFromSchema",
541
+ "coerceTopLevelDataFromSchema",
542
+ "compileAllSchemas",
543
+ "getSchema",
544
+ "validateSchema"
545
+ ],
546
+ "./testing": [
547
+ "defineServiceTests"
548
+ ],
549
+ "./dev": [
550
+ "pikkuDevReloader",
551
+ "reconcileAddonRegistry",
552
+ "reloadGeneratedMeta"
553
+ ]
554
+ }
@@ -0,0 +1,25 @@
1
+ `public-surface.json` pins every runtime export reachable through a
2
+ `package.json` `exports` subpath. `public-surface.test.ts` fails when the two
3
+ disagree, so widening the API is a visible diff rather than a side effect of an
4
+ `export *`.
5
+
6
+ Types are not pinned: they are erased before the test can enumerate them.
7
+
8
+ Regenerate after an intentional change, from `packages/core`:
9
+
10
+ ```bash
11
+ cat > src/__gen-surface.mts <<'EOF'
12
+ import { readFileSync, writeFileSync } from 'node:fs'
13
+ import { resolve } from 'node:path'
14
+ import { pathToFileURL } from 'node:url'
15
+
16
+ const pkg = JSON.parse(readFileSync('package.json', 'utf-8'))
17
+ const surface: Record<string, string[]> = {}
18
+ for (const [sub, dist] of Object.entries(pkg.exports as Record<string, string>)) {
19
+ const src = pathToFileURL(resolve(dist.replace('./dist/', './src/'))).href
20
+ surface[sub] = Object.keys(await import(src)).sort()
21
+ }
22
+ writeFileSync('src/public-surface.json', JSON.stringify(surface, null, 2) + '\n')
23
+ EOF
24
+ npx tsx src/__gen-surface.mts && rm src/__gen-surface.mts
25
+ ```
@@ -0,0 +1,105 @@
1
+ import { describe, test } from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import { readFileSync } from 'node:fs'
4
+ import { fileURLToPath, pathToFileURL } from 'node:url'
5
+ import { dirname, join, resolve } from 'node:path'
6
+
7
+ const srcRoot = dirname(fileURLToPath(import.meta.url))
8
+ const packageRoot = join(srcRoot, '..')
9
+
10
+ const packageJson = JSON.parse(
11
+ readFileSync(join(packageRoot, 'package.json'), 'utf-8')
12
+ )
13
+ const expected: Record<string, string[]> = JSON.parse(
14
+ readFileSync(join(srcRoot, 'public-surface.json'), 'utf-8')
15
+ )
16
+
17
+ const subpaths = packageJson.exports as Record<string, string>
18
+
19
+ /**
20
+ * Every runtime export reachable through an entry point, keyed by subpath.
21
+ *
22
+ * Types are absent: they are erased before this can see them, so a type-only
23
+ * addition is not pinned here.
24
+ */
25
+ const actualSurface = async () => {
26
+ const surface: Record<string, string[]> = {}
27
+ for (const [subpath, dist] of Object.entries(subpaths)) {
28
+ const src = resolve(packageRoot, dist.replace('./dist/', './src/'))
29
+ const module = await import(pathToFileURL(src).href)
30
+ surface[subpath] = Object.keys(module).sort()
31
+ }
32
+ return surface
33
+ }
34
+
35
+ const REGENERATE =
36
+ 'Regenerate with the snippet in public-surface.json.README, and make sure ' +
37
+ 'every added name is one @pikku/core means to publish.'
38
+
39
+ describe('the published surface is the surface we meant to publish', () => {
40
+ test('every export subpath resolves to a source file', () => {
41
+ const missing = Object.entries(subpaths).filter(([, dist]) => {
42
+ try {
43
+ readFileSync(
44
+ resolve(packageRoot, dist.replace('./dist/', './src/')).replace(
45
+ /\.js$/,
46
+ '.ts'
47
+ )
48
+ )
49
+ return false
50
+ } catch {
51
+ return true
52
+ }
53
+ })
54
+
55
+ assert.deepEqual(
56
+ missing.map(([subpath]) => subpath),
57
+ [],
58
+ 'package.json exports point at files that do not exist in src'
59
+ )
60
+ })
61
+
62
+ test('no entry point gained or lost a runtime export', async () => {
63
+ const actual = await actualSurface()
64
+
65
+ assert.deepEqual(
66
+ Object.keys(actual).sort(),
67
+ Object.keys(expected).sort(),
68
+ `the set of export subpaths changed. ${REGENERATE}`
69
+ )
70
+
71
+ for (const subpath of Object.keys(expected)) {
72
+ const added = actual[subpath]!.filter(
73
+ (name) => !expected[subpath]!.includes(name)
74
+ )
75
+ const removed = expected[subpath]!.filter(
76
+ (name) => !actual[subpath]!.includes(name)
77
+ )
78
+
79
+ assert.deepEqual(
80
+ { added, removed },
81
+ { added: [], removed: [] },
82
+ `'${subpath}' changed its public exports.\n` +
83
+ (added.length ? ` added: ${added.join(', ')}\n` : '') +
84
+ (removed.length ? ` removed: ${removed.join(', ')}\n` : '') +
85
+ `${REGENERATE}`
86
+ )
87
+ }
88
+ })
89
+
90
+ test('the wildcard re-exports have not widened past their barrels', async () => {
91
+ // `errors/index.ts` and `dev/hot-reload.ts` re-export with `export *`, so a
92
+ // new export in the wrapped module is published without anyone editing an
93
+ // entry point. This pins the two that are reachable publicly.
94
+ const actual = await actualSurface()
95
+
96
+ assert.equal(
97
+ actual['./errors']!.every(
98
+ (name) => name.endsWith('Error') || name.startsWith('addError')
99
+ ),
100
+ true,
101
+ `'@pikku/core/errors' exports something that is not an error or an error ` +
102
+ `registrar: ${actual['./errors']!.filter((n) => !n.endsWith('Error') && !n.startsWith('addError')).join(', ')}`
103
+ )
104
+ })
105
+ })