@pikku/core 0.12.84 → 0.12.88

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 (577) hide show
  1. package/CHANGELOG.md +503 -0
  2. package/dist/bootstrap-compat/root.d.ts +20 -0
  3. package/dist/classification/column-form.d.ts +32 -0
  4. package/dist/classification/column-form.js +42 -0
  5. package/dist/classification/data-classification.d.ts +64 -0
  6. package/dist/classification/index.d.ts +13 -0
  7. package/dist/classification/index.js +2 -0
  8. package/dist/classification/secret-value.d.ts +56 -0
  9. package/dist/classification/secret-value.js +46 -0
  10. package/dist/crypto-utils.d.ts +1 -1
  11. package/dist/dev/hot-reload.d.ts +1 -1
  12. package/dist/dev/hot-reload.js +1 -1
  13. package/dist/ecosystem/agent-scorer.d.ts +1 -1
  14. package/dist/ecosystem/agent.d.ts +4 -1
  15. package/dist/ecosystem/channel/local.d.ts +2 -0
  16. package/dist/ecosystem/channel/local.js +2 -0
  17. package/dist/ecosystem/channel/serverless.d.ts +9 -0
  18. package/dist/ecosystem/channel/serverless.js +1 -0
  19. package/dist/ecosystem/channel.d.ts +3 -0
  20. package/dist/ecosystem/channel.js +1 -0
  21. package/dist/ecosystem/cli.d.ts +1 -1
  22. package/dist/ecosystem/cli.js +1 -1
  23. package/dist/ecosystem/credential.d.ts +1 -0
  24. package/dist/ecosystem/crypto-utils.d.ts +8 -0
  25. package/dist/ecosystem/crypto-utils.js +1 -0
  26. package/dist/ecosystem/dev.d.ts +1 -0
  27. package/dist/ecosystem/dev.js +1 -0
  28. package/{src/ecosystem/testing.ts → dist/ecosystem/errors.d.ts} +3 -3
  29. package/dist/ecosystem/errors.js +2 -0
  30. package/dist/ecosystem/function.d.ts +1 -1
  31. package/dist/ecosystem/function.js +1 -1
  32. package/dist/ecosystem/http.d.ts +3 -1
  33. package/dist/ecosystem/http.js +3 -1
  34. package/dist/ecosystem/mcp.d.ts +1 -1
  35. package/dist/ecosystem/mcp.js +1 -1
  36. package/dist/ecosystem/middleware.d.ts +2 -1
  37. package/dist/ecosystem/middleware.js +2 -1
  38. package/dist/ecosystem/persona.d.ts +4 -2
  39. package/dist/ecosystem/persona.js +2 -1
  40. package/dist/ecosystem/queue.d.ts +4 -2
  41. package/dist/ecosystem/queue.js +3 -1
  42. package/dist/ecosystem/role.d.ts +1 -0
  43. package/dist/ecosystem/rpc.d.ts +2 -0
  44. package/dist/ecosystem/rpc.js +1 -0
  45. package/dist/ecosystem/scenario.d.ts +8 -2
  46. package/dist/ecosystem/scenario.js +5 -1
  47. package/dist/ecosystem/scheduler.d.ts +2 -1
  48. package/dist/ecosystem/scheduler.js +2 -1
  49. package/dist/ecosystem/schema.d.ts +2 -1
  50. package/dist/ecosystem/schema.js +1 -1
  51. package/dist/ecosystem/scope.d.ts +2 -0
  52. package/dist/ecosystem/scope.js +1 -0
  53. package/dist/ecosystem/secret.d.ts +2 -0
  54. package/dist/ecosystem/secret.js +1 -0
  55. package/dist/ecosystem/services/local-content.d.ts +2 -1
  56. package/dist/ecosystem/services/local-content.js +1 -1
  57. package/dist/ecosystem/services/local-meta.d.ts +1 -0
  58. package/dist/ecosystem/services/local-meta.js +1 -0
  59. package/dist/ecosystem/services.d.ts +11 -3
  60. package/dist/ecosystem/services.js +7 -1
  61. package/dist/ecosystem/trigger.d.ts +1 -0
  62. package/dist/ecosystem/trigger.js +1 -1
  63. package/dist/ecosystem/types.d.ts +6 -3
  64. package/dist/ecosystem/types.js +3 -2
  65. package/dist/ecosystem/variable.d.ts +1 -0
  66. package/dist/ecosystem/virtual-user.d.ts +3 -0
  67. package/dist/ecosystem/virtual-user.js +3 -0
  68. package/dist/ecosystem/workflow.d.ts +2 -0
  69. package/dist/ecosystem/workflow.js +2 -0
  70. package/dist/errors/index.d.ts +8 -0
  71. package/dist/errors/index.js +1 -0
  72. package/dist/errors/serialized-error.d.ts +7 -0
  73. package/dist/function/function-meta.types.d.ts +139 -0
  74. package/dist/function/function-runner.d.ts +3 -2
  75. package/dist/function/function-runner.js +31 -11
  76. package/dist/function/functions.types.d.ts +10 -2
  77. package/dist/function/index.d.ts +8 -2
  78. package/dist/function/index.js +4 -1
  79. package/dist/function/pikku-request.d.ts +8 -0
  80. package/dist/function/pikku-request.js +15 -0
  81. package/dist/middleware/auth-apikey.d.ts +2 -10
  82. package/dist/middleware/auth-apikey.js +1 -1
  83. package/dist/middleware/auth-bearer.d.ts +2 -10
  84. package/dist/middleware/auth-bearer.js +1 -1
  85. package/dist/middleware/auth-cookie.d.ts +2 -10
  86. package/dist/middleware/auth-cookie.js +1 -1
  87. package/dist/middleware/cors.d.ts +5 -11
  88. package/dist/middleware/cors.js +13 -6
  89. package/dist/middleware/index.d.ts +3 -0
  90. package/dist/middleware/index.js +1 -0
  91. package/dist/middleware/middleware-factories.d.ts +9 -0
  92. package/dist/middleware/middleware-factories.js +19 -0
  93. package/dist/middleware/middleware.types.d.ts +27 -0
  94. package/dist/middleware/middleware.types.js +1 -0
  95. package/dist/middleware/remote-auth.d.ts +2 -2
  96. package/dist/middleware/remote-auth.js +1 -1
  97. package/dist/middleware/telemetry.d.ts +4 -20
  98. package/dist/middleware/telemetry.js +1 -1
  99. package/dist/middleware-runner.d.ts +2 -1
  100. package/dist/pikku-state.d.ts +2 -1
  101. package/dist/services/audit-service.d.ts +1 -1
  102. package/dist/services/credential-wire-service.js +1 -1
  103. package/dist/services/email-service.d.ts +1 -1
  104. package/dist/services/file-scenario-run-store.d.ts +58 -0
  105. package/dist/services/file-scenario-run-store.js +214 -0
  106. package/dist/services/in-memory-workflow-service.d.ts +1 -1
  107. package/dist/services/index.d.ts +5 -1
  108. package/dist/services/index.js +3 -0
  109. package/dist/services/local-secrets.d.ts +1 -1
  110. package/dist/services/local-secrets.js +1 -1
  111. package/dist/services/logger.d.ts +7 -7
  112. package/dist/services/meta-service.d.ts +2 -1
  113. package/dist/services/scoped-secret-service.d.ts +1 -1
  114. package/dist/services/secret-service.d.ts +1 -1
  115. package/dist/services/typed-secret-service.d.ts +16 -2
  116. package/dist/services/typed-secret-service.js +5 -0
  117. package/dist/services/webhook-service.d.ts +1 -1
  118. package/dist/services/workflow-service.d.ts +2 -1
  119. package/dist/testing/index.d.ts +1 -0
  120. package/dist/testing/index.js +1 -0
  121. package/dist/types/core.types.d.ts +30 -180
  122. package/dist/types/core.types.js +1 -19
  123. package/dist/types/index.d.ts +2 -0
  124. package/dist/types/index.js +1 -0
  125. package/dist/types/state.types.d.ts +3 -1
  126. package/dist/utils.d.ts +13 -0
  127. package/dist/utils.js +2 -0
  128. package/dist/wirings/addon/addon-runner.d.ts +17 -0
  129. package/dist/wirings/addon/addon-runner.js +150 -0
  130. package/dist/wirings/addon/index.d.ts +6 -0
  131. package/dist/wirings/addon/index.js +3 -0
  132. package/dist/wirings/addon/remote-addon-auth.d.ts +16 -0
  133. package/dist/wirings/addon/remote-addon-auth.js +39 -0
  134. package/dist/wirings/addon/wire-addon.d.ts +80 -0
  135. package/dist/wirings/addon/wire-addon.js +120 -0
  136. package/dist/wirings/addon/wire-remote-addon.d.ts +22 -0
  137. package/dist/wirings/addon/wire-remote-addon.js +11 -0
  138. package/dist/wirings/agent/agent-memory.d.ts +11 -0
  139. package/dist/wirings/agent/agent-memory.js +17 -2
  140. package/dist/wirings/agent/agent-prepare.d.ts +3 -3
  141. package/dist/wirings/agent/agent-prepare.js +1 -1
  142. package/dist/wirings/agent/agent-runner.js +2 -3
  143. package/dist/wirings/agent/agent-stream.js +117 -93
  144. package/dist/wirings/agent/agent-utils.d.ts +13 -0
  145. package/dist/wirings/agent/agent-utils.js +16 -0
  146. package/dist/wirings/agent/agent.types.d.ts +12 -10
  147. package/dist/wirings/agent/index.d.ts +1 -1
  148. package/dist/wirings/agent/voice-input.js +1 -1
  149. package/dist/wirings/agent/voice-output.js +1 -1
  150. package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +13 -0
  151. package/dist/wirings/agent-scorer/agent-scorer-judge.js +52 -0
  152. package/dist/wirings/agent-scorer/agent-scorer.d.ts +7 -1
  153. package/dist/wirings/agent-scorer/agent-scorer.js +1 -0
  154. package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +20 -0
  155. package/dist/wirings/agent-scorer/index.d.ts +1 -1
  156. package/dist/wirings/channel/channel-common.d.ts +2 -1
  157. package/dist/wirings/channel/channel-middleware-runner.d.ts +2 -1
  158. package/dist/wirings/channel/channel.types.d.ts +1 -1
  159. package/dist/wirings/channel/serverless/index.d.ts +1 -0
  160. package/dist/wirings/cli/channel/index.d.ts +1 -1
  161. package/dist/wirings/cli/cli-runner.d.ts +2 -1
  162. package/dist/wirings/cli/cli-runner.js +4 -1
  163. package/dist/wirings/cli/cli.types.d.ts +21 -2
  164. package/dist/wirings/cli/command-parser.js +157 -23
  165. package/dist/wirings/gateway/gateway.types.d.ts +2 -1
  166. package/dist/wirings/http/http-runner.d.ts +1 -1
  167. package/dist/wirings/http/http-runner.js +1 -1
  168. package/dist/wirings/http/http.types.d.ts +2 -2
  169. package/dist/wirings/http/index.d.ts +1 -0
  170. package/dist/wirings/http/index.js +1 -0
  171. package/dist/wirings/http/pikku-fetch-http-request.js +1 -1
  172. package/dist/wirings/http/pikku-fetch-http-response.js +2 -2
  173. package/dist/wirings/mcp/mcp.types.d.ts +1 -1
  174. package/dist/wirings/persona/index.d.ts +1 -1
  175. package/dist/wirings/persona/index.js +1 -1
  176. package/dist/wirings/persona/persona.types.d.ts +14 -0
  177. package/dist/wirings/queue/queue.types.d.ts +1 -1
  178. package/dist/wirings/queue/signed-queue-service.d.ts +1 -1
  179. package/dist/wirings/rpc/index.d.ts +0 -6
  180. package/dist/wirings/rpc/index.js +0 -3
  181. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -1
  182. package/dist/wirings/rpc/remote-addon-auth.js +1 -1
  183. package/dist/wirings/rpc/rpc-runner.js +2 -2
  184. package/dist/wirings/rpc/wire-addon.d.ts +1 -1
  185. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -1
  186. package/dist/wirings/scope/index.d.ts +1 -0
  187. package/dist/wirings/scope/index.js +1 -0
  188. package/dist/wirings/secret/secret.types.d.ts +10 -0
  189. package/dist/wirings/secret/validate-secret-definitions.js +2 -0
  190. package/dist/wirings/variable/validate-variable-definitions.js +2 -0
  191. package/dist/wirings/variable/variable.types.d.ts +15 -0
  192. package/dist/wirings/virtual-user/index.d.ts +1 -1
  193. package/dist/wirings/virtual-user/index.js +1 -1
  194. package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +1 -1
  195. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +1 -1
  196. package/dist/wirings/workflow/graph/graph-node.d.ts +9 -2
  197. package/dist/wirings/workflow/graph/graph-node.js +2 -0
  198. package/dist/wirings/workflow/graph/graph-runner.d.ts +1 -0
  199. package/dist/wirings/workflow/graph/graph-runner.js +283 -31
  200. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +16 -1
  201. package/dist/wirings/workflow/index.d.ts +2 -0
  202. package/dist/wirings/workflow/index.js +1 -0
  203. package/dist/wirings/workflow/pikku-scenario-service.d.ts +15 -5
  204. package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
  205. package/dist/wirings/workflow/pikku-workflow-service.d.ts +22 -7
  206. package/dist/wirings/workflow/pikku-workflow-service.js +28 -29
  207. package/dist/wirings/workflow/run-timeline.d.ts +1 -1
  208. package/dist/wirings/workflow/scenario-run.types.d.ts +171 -0
  209. package/dist/wirings/workflow/scenario-run.types.js +1 -0
  210. package/dist/wirings/workflow/scenario-step-guards.d.ts +1 -2
  211. package/dist/wirings/workflow/scenario-step-guards.js +0 -8
  212. package/dist/wirings/workflow/scenario-step.types.d.ts +27 -12
  213. package/dist/wirings/workflow/workflow-approval.js +2 -1
  214. package/dist/wirings/workflow/workflow-run-engine.types.d.ts +2 -1
  215. package/dist/wirings/workflow/workflow-step-claim.d.ts +16 -0
  216. package/dist/wirings/workflow/workflow-step-claim.js +27 -0
  217. package/dist/wirings/workflow/workflow.types.d.ts +2 -1
  218. package/knowledge/decisions/index.md +2 -0
  219. package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +1 -1
  220. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +1 -1
  221. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +2 -2
  222. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +6 -6
  223. package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +1 -1
  224. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +1 -1
  225. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +1 -1
  226. package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +1 -1
  227. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +1 -1
  228. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +1 -1
  229. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +1 -1
  230. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +1 -1
  231. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +1 -1
  232. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +1 -1
  233. package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +4 -4
  234. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +1 -1
  235. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +3 -3
  236. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +2 -2
  237. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +2 -2
  238. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +1 -1
  239. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +1 -1
  240. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +3 -3
  241. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +1 -1
  242. package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +4 -4
  243. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +1 -1
  244. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +1 -1
  245. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +1 -1
  246. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +1 -1
  247. package/knowledge/decisions/internals/index.md +4 -2
  248. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +1 -1
  249. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +1 -1
  250. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +1 -1
  251. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +1 -1
  252. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +1 -1
  253. package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +2 -2
  254. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +5 -5
  255. package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +1 -1
  256. package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +1 -1
  257. package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +43 -19
  258. package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +1 -1
  259. package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +1 -1
  260. package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +3 -3
  261. package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +1 -1
  262. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +1 -1
  263. package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +1 -1
  264. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +1 -1
  265. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +1 -1
  266. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +1 -1
  267. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +1 -1
  268. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +1 -1
  269. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +1 -1
  270. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +9 -5
  271. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +1 -1
  272. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +2 -2
  273. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +1 -1
  274. package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +1 -1
  275. package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +47 -0
  276. package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +1 -1
  277. package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +2 -3
  278. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +1 -1
  279. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +1 -1
  280. package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +1 -1
  281. package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +3 -3
  282. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +4 -3
  283. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +1 -1
  284. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +2 -2
  285. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +1 -1
  286. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +2 -2
  287. package/knowledge/decisions/security/index.md +4 -1
  288. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +1 -1
  289. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +3 -3
  290. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +1 -1
  291. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +8 -2
  292. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +1 -1
  293. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +2 -2
  294. package/knowledge/index.md +3 -1
  295. package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +1 -1
  296. package/knowledge/questions/index.md +2 -0
  297. package/package.json +14 -13
  298. package/run-tests.sh +0 -0
  299. package/scripts/generate-api-report.d.mts +1 -1
  300. package/scripts/generate-api-report.mjs +67 -60
  301. package/scripts/generate-api-report.mts +11 -45
  302. package/src/api-report.test.ts +70 -1
  303. package/src/app-alias-surface.test.ts +179 -0
  304. package/src/app-leaf-surface.test.ts +217 -0
  305. package/src/bootstrap-compat/root.ts +20 -0
  306. package/src/{column-form.test.ts → classification/column-form.test.ts} +2 -2
  307. package/src/{data-classification.ts → classification/data-classification.ts} +1 -5
  308. package/src/classification/index.ts +38 -0
  309. package/src/{secret-value.test.ts → classification/secret-value.test.ts} +2 -2
  310. package/src/{secret-value.ts → classification/secret-value.ts} +1 -6
  311. package/src/crypto-utils.ts +1 -1
  312. package/src/dev/hot-reload.ts +1 -1
  313. package/src/dev/reload-meta.test.ts +1 -1
  314. package/src/errors/index.ts +9 -0
  315. package/src/errors/serialized-error.ts +9 -0
  316. package/src/factory-functions.test.ts +4 -2
  317. package/src/function/function-meta.types.ts +151 -0
  318. package/src/function/function-runner.test.ts +4 -2
  319. package/src/function/function-runner.ts +47 -14
  320. package/src/function/functions.types.ts +11 -7
  321. package/src/function/index.ts +24 -5
  322. package/src/function/list.types.ts +1 -3
  323. package/src/middleware/auth-apikey.ts +4 -2
  324. package/src/middleware/auth-bearer.test.ts +1 -1
  325. package/src/middleware/auth-bearer.ts +4 -2
  326. package/src/middleware/auth-cookie.ts +4 -1
  327. package/src/middleware/cors.test.ts +126 -5
  328. package/src/middleware/cors.ts +19 -8
  329. package/src/middleware/index.ts +16 -0
  330. package/src/middleware/middleware-factories.ts +62 -0
  331. package/src/middleware/middleware.types.ts +61 -0
  332. package/src/middleware/remote-auth.test.ts +1 -1
  333. package/src/middleware/remote-auth.ts +1 -1
  334. package/src/middleware/telemetry.ts +4 -2
  335. package/src/middleware-runner.test.ts +2 -3
  336. package/src/middleware-runner.ts +2 -2
  337. package/src/no-root-barrel.test.ts +114 -0
  338. package/src/permissions.ts +2 -4
  339. package/src/pikku-state.ts +3 -1
  340. package/src/public-surface.json +56 -241
  341. package/src/public-surface.json.README +3 -3
  342. package/src/public-surface.test.ts +5 -5
  343. package/src/remote.test.ts +1 -1
  344. package/src/removed-legacy-exports.test.ts +5 -1
  345. package/src/services/audit-service.ts +1 -1
  346. package/src/services/credential-wire-service.ts +1 -1
  347. package/src/services/email-service.ts +2 -4
  348. package/src/services/file-scenario-run-store.test.ts +349 -0
  349. package/src/services/file-scenario-run-store.ts +282 -0
  350. package/src/services/in-memory-workflow-service.ts +1 -1
  351. package/src/services/index.ts +13 -1
  352. package/src/services/local-content-request-handler.ts +1 -2
  353. package/src/services/local-secrets.ts +1 -1
  354. package/src/services/logger.ts +7 -7
  355. package/src/services/meta-service.ts +2 -2
  356. package/src/services/queue-webhook-service.test.ts +1 -1
  357. package/src/services/scoped-secret-service.ts +1 -1
  358. package/src/services/secret-service.ts +1 -1
  359. package/src/services/typed-secret-service.test.ts +52 -0
  360. package/src/services/typed-secret-service.ts +26 -2
  361. package/src/services/webhook-service.ts +1 -1
  362. package/src/services/workflow-service.ts +2 -1
  363. package/src/template-alias-surface.test.ts +240 -0
  364. package/src/testing/index.ts +1 -0
  365. package/src/types/core.types.ts +33 -285
  366. package/src/types/index.ts +25 -0
  367. package/src/types/state.types.ts +6 -5
  368. package/src/types/typed-credentials.test.ts +72 -0
  369. package/src/utils.ts +34 -0
  370. package/src/wirings/{rpc → addon}/addon-scopes.test.ts +1 -1
  371. package/src/wirings/addon/index.ts +12 -0
  372. package/src/wirings/{rpc → addon}/remote-addon-auth.ts +4 -1
  373. package/src/wirings/{rpc → addon}/wire-addon.ts +37 -2
  374. package/src/wirings/agent/agent-memory.test.ts +73 -0
  375. package/src/wirings/agent/agent-memory.ts +16 -2
  376. package/src/wirings/agent/agent-middleware.types.test.ts +41 -0
  377. package/src/wirings/agent/agent-prepare.ts +8 -5
  378. package/src/wirings/agent/agent-runner.ts +2 -3
  379. package/src/wirings/agent/agent-stream-delegate.test.ts +381 -0
  380. package/src/wirings/agent/agent-stream.ts +160 -81
  381. package/src/wirings/agent/agent-utils.ts +19 -0
  382. package/src/wirings/agent/agent.types.ts +12 -11
  383. package/src/wirings/agent/index.ts +1 -0
  384. package/src/wirings/agent/voice-input.ts +1 -1
  385. package/src/wirings/agent/voice-output.test.ts +2 -4
  386. package/src/wirings/agent/voice-output.ts +1 -1
  387. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +145 -0
  388. package/src/wirings/agent-scorer/agent-scorer-judge.ts +60 -0
  389. package/src/wirings/agent-scorer/agent-scorer.ts +8 -0
  390. package/src/wirings/agent-scorer/agent-scorer.types.ts +21 -0
  391. package/src/wirings/agent-scorer/index.ts +1 -0
  392. package/src/wirings/channel/channel-common.ts +4 -2
  393. package/src/wirings/channel/channel-handler.ts +2 -5
  394. package/src/wirings/channel/channel-middleware-runner.ts +1 -1
  395. package/src/wirings/channel/channel-rpc.types.ts +1 -5
  396. package/src/wirings/channel/channel.types.ts +1 -2
  397. package/src/wirings/channel/local/local-channel-runner.test.ts +1 -2
  398. package/src/wirings/channel/serverless/index.ts +1 -0
  399. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +2 -2
  400. package/src/wirings/cli/channel/index.ts +1 -3
  401. package/src/wirings/cli/cli-runner.test.ts +1 -1
  402. package/src/wirings/cli/cli-runner.ts +11 -7
  403. package/src/wirings/cli/cli.types.ts +24 -3
  404. package/src/wirings/cli/command-parser.test.ts +388 -1
  405. package/src/wirings/cli/command-parser.ts +189 -29
  406. package/src/wirings/gateway/gateway-runner.test.ts +1 -2
  407. package/src/wirings/gateway/gateway-runner.ts +3 -6
  408. package/src/wirings/gateway/gateway.types.ts +5 -4
  409. package/src/wirings/http/http-routes.test.ts +1 -2
  410. package/src/wirings/http/http-runner-addon-ref.test.ts +238 -0
  411. package/src/wirings/http/http-runner.test.ts +3 -8
  412. package/src/wirings/http/http-runner.ts +9 -3
  413. package/src/wirings/http/http.types.ts +3 -12
  414. package/src/wirings/http/index.ts +1 -0
  415. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  416. package/src/wirings/http/pikku-fetch-http-response.ts +3 -2
  417. package/src/wirings/mcp/mcp-runner.test.ts +1 -1
  418. package/src/wirings/mcp/mcp.types.ts +1 -2
  419. package/src/wirings/persona/index.ts +1 -4
  420. package/src/wirings/persona/persona.types.ts +14 -0
  421. package/src/wirings/queue/queue-identity.test.ts +1 -1
  422. package/src/wirings/queue/queue.types.ts +2 -6
  423. package/src/wirings/queue/signed-queue-service.ts +1 -1
  424. package/src/wirings/rpc/index.ts +0 -12
  425. package/src/wirings/rpc/rpc-runner.test.ts +4 -4
  426. package/src/wirings/rpc/rpc-runner.ts +3 -3
  427. package/src/wirings/scheduler/scheduler.types.ts +2 -5
  428. package/src/wirings/scope/index.ts +1 -0
  429. package/src/wirings/secret/secret.types.ts +10 -0
  430. package/src/wirings/secret/validate-secret-definitions.test.ts +23 -0
  431. package/src/wirings/secret/validate-secret-definitions.ts +2 -0
  432. package/src/wirings/variable/validate-variable-definitions.test.ts +24 -0
  433. package/src/wirings/variable/validate-variable-definitions.ts +2 -0
  434. package/src/wirings/variable/variable.types.ts +15 -0
  435. package/src/wirings/virtual-user/index.ts +1 -4
  436. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
  437. package/src/wirings/virtual-user/virtual-user-derive.test.ts +1 -1
  438. package/src/wirings/virtual-user/virtual-user-derive.ts +1 -1
  439. package/src/wirings/virtual-user/virtual-user.types.ts +1 -5
  440. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +569 -0
  441. package/src/wirings/workflow/graph/graph-foreach.test.ts +626 -0
  442. package/src/wirings/workflow/graph/graph-node.ts +16 -1
  443. package/src/wirings/workflow/graph/graph-runner.ts +387 -61
  444. package/src/wirings/workflow/graph/workflow-graph.types.ts +28 -3
  445. package/src/wirings/workflow/index.ts +8 -0
  446. package/src/wirings/workflow/pikku-scenario-service.ts +83 -20
  447. package/src/wirings/workflow/pikku-workflow-service.ts +37 -35
  448. package/src/wirings/workflow/run-timeline.ts +1 -1
  449. package/src/wirings/workflow/scenario-expectations.test.ts +28 -13
  450. package/src/wirings/workflow/scenario-run.types.ts +186 -0
  451. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  452. package/src/wirings/workflow/scenario-step.test.ts +32 -7
  453. package/src/wirings/workflow/scenario-step.types.ts +27 -12
  454. package/src/wirings/workflow/workflow-approval-policy.test.ts +117 -47
  455. package/src/wirings/workflow/workflow-approval.ts +2 -1
  456. package/src/wirings/workflow/workflow-run-engine.types.ts +2 -1
  457. package/src/wirings/workflow/workflow-step-claim.ts +46 -0
  458. package/src/wirings/workflow/workflow.types.ts +4 -12
  459. package/src/wirings-stay-decoupled.test.ts +6 -3
  460. package/tsconfig.tsbuildinfo +1 -1
  461. package/tsconfig.type-tests.json +4 -2
  462. package/dist/ecosystem/ai-agent.d.ts +0 -18
  463. package/dist/ecosystem/ai-agent.js +0 -6
  464. package/dist/ecosystem/ai-scorer.d.ts +0 -12
  465. package/dist/ecosystem/ai-scorer.js +0 -5
  466. package/dist/services/ai-agent-runner-service.d.ts +0 -220
  467. package/dist/services/ai-run-state-service.d.ts +0 -29
  468. package/dist/services/ai-storage-service.d.ts +0 -18
  469. package/dist/services/in-memory-ai-run-state-service.d.ts +0 -19
  470. package/dist/services/in-memory-ai-run-state-service.js +0 -54
  471. package/dist/testing/service-tests/ai-storage-service-tests.d.ts +0 -3
  472. package/dist/testing/service-tests/ai-storage-service-tests.js +0 -302
  473. package/dist/wirings/ai-agent/agent-rpc.d.ts +0 -15
  474. package/dist/wirings/ai-agent/agent-rpc.js +0 -53
  475. package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -79
  476. package/dist/wirings/ai-agent/ai-agent-agui.js +0 -327
  477. package/dist/wirings/ai-agent/ai-agent-finalize.d.ts +0 -58
  478. package/dist/wirings/ai-agent/ai-agent-finalize.js +0 -138
  479. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +0 -35
  480. package/dist/wirings/ai-agent/ai-agent-helpers.js +0 -47
  481. package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +0 -153
  482. package/dist/wirings/ai-agent/ai-agent-interrupt.js +0 -257
  483. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +0 -42
  484. package/dist/wirings/ai-agent/ai-agent-memory.js +0 -333
  485. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -16
  486. package/dist/wirings/ai-agent/ai-agent-model-config.js +0 -51
  487. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +0 -117
  488. package/dist/wirings/ai-agent/ai-agent-prepare.js +0 -728
  489. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +0 -16
  490. package/dist/wirings/ai-agent/ai-agent-registry.js +0 -51
  491. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +0 -7
  492. package/dist/wirings/ai-agent/ai-agent-runner.js +0 -580
  493. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +0 -41
  494. package/dist/wirings/ai-agent/ai-agent-stream.js +0 -1029
  495. package/dist/wirings/ai-agent/ai-agent-turn.d.ts +0 -57
  496. package/dist/wirings/ai-agent/ai-agent-turn.js +0 -82
  497. package/dist/wirings/ai-agent/ai-agent-utils.d.ts +0 -1
  498. package/dist/wirings/ai-agent/ai-agent-utils.js +0 -1
  499. package/dist/wirings/ai-agent/ai-agent.types.d.ts +0 -625
  500. package/dist/wirings/ai-agent/index.d.ts +0 -12
  501. package/dist/wirings/ai-agent/index.js +0 -10
  502. package/dist/wirings/ai-agent/voice-input.d.ts +0 -69
  503. package/dist/wirings/ai-agent/voice-input.js +0 -150
  504. package/dist/wirings/ai-agent/voice-output.d.ts +0 -85
  505. package/dist/wirings/ai-agent/voice-output.js +0 -196
  506. package/dist/wirings/ai-scorer/ai-scorer-grade.d.ts +0 -26
  507. package/dist/wirings/ai-scorer/ai-scorer-grade.js +0 -33
  508. package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +0 -17
  509. package/dist/wirings/ai-scorer/ai-scorer-judge.js +0 -92
  510. package/dist/wirings/ai-scorer/ai-scorer-live.d.ts +0 -15
  511. package/dist/wirings/ai-scorer/ai-scorer-live.js +0 -38
  512. package/dist/wirings/ai-scorer/ai-scorer-registry.d.ts +0 -18
  513. package/dist/wirings/ai-scorer/ai-scorer-registry.js +0 -46
  514. package/dist/wirings/ai-scorer/ai-scorer-sampling.d.ts +0 -8
  515. package/dist/wirings/ai-scorer/ai-scorer-sampling.js +0 -31
  516. package/dist/wirings/ai-scorer/ai-scorer-snapshots.d.ts +0 -10
  517. package/dist/wirings/ai-scorer/ai-scorer-snapshots.js +0 -40
  518. package/dist/wirings/ai-scorer/ai-scorer-worker.d.ts +0 -15
  519. package/dist/wirings/ai-scorer/ai-scorer-worker.js +0 -58
  520. package/dist/wirings/ai-scorer/ai-scorer.d.ts +0 -39
  521. package/dist/wirings/ai-scorer/ai-scorer.js +0 -40
  522. package/dist/wirings/ai-scorer/ai-scorer.types.d.ts +0 -90
  523. package/dist/wirings/ai-scorer/ai-scorer.types.js +0 -4
  524. package/dist/wirings/ai-scorer/index.d.ts +0 -6
  525. package/dist/wirings/ai-scorer/index.js +0 -5
  526. package/src/ecosystem/agent-scorer.ts +0 -24
  527. package/src/ecosystem/agent.ts +0 -42
  528. package/src/ecosystem/channel/local.ts +0 -1
  529. package/src/ecosystem/channel.ts +0 -22
  530. package/src/ecosystem/cli/channel.ts +0 -25
  531. package/src/ecosystem/cli.ts +0 -21
  532. package/src/ecosystem/credential.ts +0 -10
  533. package/src/ecosystem/dev.ts +0 -12
  534. package/src/ecosystem/function.ts +0 -28
  535. package/src/ecosystem/gateway.ts +0 -4
  536. package/src/ecosystem/hmac.ts +0 -1
  537. package/src/ecosystem/http.ts +0 -22
  538. package/src/ecosystem/mcp.ts +0 -17
  539. package/src/ecosystem/middleware.ts +0 -27
  540. package/src/ecosystem/node-host-resolver.ts +0 -1
  541. package/src/ecosystem/node.ts +0 -5
  542. package/src/ecosystem/oauth2.ts +0 -4
  543. package/src/ecosystem/persona.ts +0 -30
  544. package/src/ecosystem/queue.ts +0 -23
  545. package/src/ecosystem/remote.ts +0 -9
  546. package/src/ecosystem/role.ts +0 -13
  547. package/src/ecosystem/rpc.ts +0 -7
  548. package/src/ecosystem/safe-fetch.ts +0 -8
  549. package/src/ecosystem/scenario.ts +0 -32
  550. package/src/ecosystem/scheduler.ts +0 -5
  551. package/src/ecosystem/schema.ts +0 -1
  552. package/src/ecosystem/scope.ts +0 -14
  553. package/src/ecosystem/secret.ts +0 -15
  554. package/src/ecosystem/services/istanbul-coverage.ts +0 -1
  555. package/src/ecosystem/services/local-content-request-handler.ts +0 -16
  556. package/src/ecosystem/services/local-content.ts +0 -1
  557. package/src/ecosystem/services/v8-coverage.ts +0 -1
  558. package/src/ecosystem/services.ts +0 -82
  559. package/src/ecosystem/trigger.ts +0 -7
  560. package/src/ecosystem/types.ts +0 -34
  561. package/src/ecosystem/variable.ts +0 -14
  562. package/src/ecosystem/virtual-user.ts +0 -48
  563. package/src/ecosystem/workflow.ts +0 -68
  564. package/src/ecosystem.ts +0 -40
  565. package/src/index.ts +0 -244
  566. /package/dist/{services/ai-agent-runner-service.js → bootstrap-compat/root.js} +0 -0
  567. /package/dist/{services/ai-run-state-service.js → classification/data-classification.js} +0 -0
  568. /package/dist/{services/ai-storage-service.js → errors/serialized-error.js} +0 -0
  569. /package/dist/{wirings/ai-agent/ai-agent.types.js → function/function-meta.types.js} +0 -0
  570. /package/src/{column-form.ts → classification/column-form.ts} +0 -0
  571. /package/src/{pikku-request.test.ts → function/pikku-request.test.ts} +0 -0
  572. /package/src/{pikku-request.ts → function/pikku-request.ts} +0 -0
  573. /package/src/wirings/{rpc → addon}/addon-auth-tags.test.ts +0 -0
  574. /package/src/wirings/{rpc → addon}/addon-runner.ts +0 -0
  575. /package/src/wirings/{rpc → addon}/addon-secrets.test.ts +0 -0
  576. /package/src/wirings/{rpc → addon}/wire-addon.test.ts +0 -0
  577. /package/src/wirings/{rpc → addon}/wire-remote-addon.ts +0 -0
@@ -1,625 +0,0 @@
1
- import type { CorePermissionGroup, CorePikkuPermission } from '../../function/functions.types.js';
2
- import type { CorePikkuMiddleware, MiddlewareMetadata, PermissionMetadata } from '../../types/core.types.js';
3
- import type { AIProviderOptions } from '../../services/ai-agent-runner-service.js';
4
- import type { PikkuChannel } from '../channel/channel.types.js';
5
- import type { CorePikkuChannelMiddleware } from '../channel/channel.types.js';
6
- import type { ApprovalPolicy } from '../channel/channel-rpc.js';
7
- export interface AIThread {
8
- id: string;
9
- resourceId: string;
10
- title?: string;
11
- metadata?: Record<string, unknown>;
12
- createdAt: Date;
13
- updatedAt: Date;
14
- }
15
- export type AIContentPart = {
16
- type: 'text';
17
- text: string;
18
- } | {
19
- type: 'image';
20
- data?: string;
21
- url?: string;
22
- mediaType?: string;
23
- } | {
24
- type: 'file';
25
- data?: string;
26
- url?: string;
27
- mediaType: string;
28
- filename?: string;
29
- } | {
30
- type: 'data';
31
- name: string;
32
- data: unknown;
33
- } | {
34
- type: 'generative-ui';
35
- spec: unknown;
36
- };
37
- export interface AIToolCall {
38
- id: string;
39
- name: string;
40
- args: Record<string, unknown>;
41
- }
42
- export interface AIToolResult {
43
- id: string;
44
- name: string;
45
- result: string;
46
- /**
47
- * Set when the tool threw rather than returned. Carried separately from
48
- * `result`, which is a rendered string by the time it is persisted — a tool
49
- * may legitimately return text beginning `Error:`, so the prefix cannot be
50
- * read as a failure signal.
51
- */
52
- error?: string;
53
- }
54
- export interface AIMessage {
55
- id: string;
56
- role: 'system' | 'user' | 'assistant' | 'tool';
57
- content?: string | AIContentPart[];
58
- toolCalls?: AIToolCall[];
59
- toolResults?: AIToolResult[];
60
- reasoningContent?: string;
61
- /**
62
- * Set on an assistant message whose generation was cut short by
63
- * an interrupt — the text is a mid-sentence fragment, not a reply.
64
- * Carried into the next turn's context so the model can see it said only
65
- * this much before being talked over, and decide for itself whether to
66
- * resume, restate or move on. Storage that drops unknown fields loses the
67
- * marker but keeps the fragment, which degrades to a truncated reply.
68
- */
69
- interrupted?: boolean;
70
- /**
71
- * Set on a tool message whose result arrived after the run was interrupted,
72
- * so the model never got to describe it. The work happened; only the reply
73
- * about it was lost. It is ordinary thread context on the next turn — the
74
- * model raises it unprompted ("that deploy did go through") rather than the
75
- * result being silently dropped or replayed as a fresh tool call.
76
- */
77
- undelivered?: boolean;
78
- createdAt: Date;
79
- }
80
- export interface AIAgentStep {
81
- usage: {
82
- inputTokens: number;
83
- outputTokens: number;
84
- };
85
- toolCalls?: {
86
- name: string;
87
- args: Record<string, unknown>;
88
- result: string;
89
- /** The failure message, when the tool threw rather than returned. */
90
- error?: string;
91
- }[];
92
- }
93
- export interface AIAgentInputAttachment {
94
- type: 'image' | 'file';
95
- data?: string;
96
- url?: string;
97
- mediaType?: string;
98
- filename?: string;
99
- }
100
- export interface AIAgentInput {
101
- message: string;
102
- threadId: string;
103
- resourceId: string;
104
- attachments?: AIAgentInputAttachment[];
105
- model?: string;
106
- temperature?: number;
107
- /** Structured context injected into the system instructions for this request.
108
- * Use to provide upfront state (e.g. current org/project/branch/deployment)
109
- * so the agent can call tools without asking the user for identifiers. */
110
- context?: string;
111
- }
112
- export interface AIAgentOutput {
113
- runId: string;
114
- text: string;
115
- object?: unknown;
116
- threadId: string;
117
- steps: AIAgentStep[];
118
- usage: {
119
- inputTokens: number;
120
- outputTokens: number;
121
- };
122
- status?: 'completed' | 'suspended';
123
- pendingApprovals?: Array<{
124
- toolCallId: string;
125
- toolName: string;
126
- args: unknown;
127
- reason?: string;
128
- runId: string;
129
- }>;
130
- }
131
- /**
132
- * How an agent's threads/runs are owned and partitioned.
133
- * - `'user'` (default): owner is the authenticated `session.userId`; the caller's
134
- * `resourceId` becomes a sub-partition within that user (`userId:resourceId`).
135
- * - `'org'`: owner is the authenticated `session.orgId` (`orgId:resourceId`), so
136
- * threads are shared across everyone in the org. Requires a session with an org
137
- * (e.g. Better Auth's `organization` plugin) — otherwise access is denied.
138
- *
139
- * The trusted principal is always the prefix, so a client-supplied `resourceId`
140
- * can sub-divide within the caller's own boundary but can never widen access to
141
- * another user's or org's threads.
142
- */
143
- export type SessionScope = 'user' | 'org';
144
- /**
145
- * `ApprovalPolicy` is shared with channel capabilities, but `Partial` here:
146
- * absent `needsApproval` means "do not ask", which is safe because a tool is
147
- * written by whoever runs the server it executes on. A capability runs on
148
- * someone else's machine, so it requires the field instead.
149
- */
150
- export interface AIAgentToolDef extends Partial<ApprovalPolicy> {
151
- name: string;
152
- description: string;
153
- inputSchema: Record<string, unknown>;
154
- execute: (input: unknown) => Promise<unknown>;
155
- /**
156
- * Mirrors the pikku function's `readonly` flag. A read that gets interrupted
157
- * is discarded rather than reported: nothing changed, and by the next turn
158
- * the data may be stale anyway — re-reading is cheaper than explaining a
159
- * result the user never asked to hear about.
160
- */
161
- readonly?: boolean;
162
- /**
163
- * Set only by the framework on sub-agent delegating tools. Such a tool may
164
- * legitimately return an `__approvalRequired` marker to forward a nested
165
- * sub-agent approval. The marker is honored ONLY from a tool with this flag —
166
- * a plain tool's output (which an attacker may influence) can never forge an
167
- * approval request. See `checkForApprovals`.
168
- */
169
- forwardsApproval?: boolean;
170
- }
171
- export interface PikkuAIMiddlewareHooks<State extends Record<string, unknown> = Record<string, unknown>, Services = any> {
172
- modifyInput?: (services: Services, ctx: {
173
- messages: AIMessage[];
174
- instructions: string;
175
- /**
176
- * Notes about this run that every middleware can read and write, as
177
- * opposed to {@link modifyOutputStream}'s `state`, which is private to
178
- * one middleware.
179
- *
180
- * It exists because middlewares transform the turn for each other, and
181
- * the transformation can destroy what a later one needed to know. Voice
182
- * is the case in point: `voiceInput` replaces the user's audio with its
183
- * transcript, so by the time anything downstream looks, the turn is
184
- * indistinguishable from one that was typed — and whether it was typed is
185
- * exactly what `voiceOutput` needs in order to decide whether to answer
186
- * aloud. Only the middleware that consumed the audio can still say so.
187
- *
188
- * Namespace what you put here (`voice:spokenTurn`); it is one bag for
189
- * everybody. Cleared between runs.
190
- */
191
- shared: Record<string, unknown>;
192
- }) => Promise<{
193
- messages: AIMessage[];
194
- instructions: string;
195
- }> | {
196
- messages: AIMessage[];
197
- instructions: string;
198
- };
199
- modifyOutputStream?: (services: Services, ctx: {
200
- event: AIStreamEvent;
201
- allEvents: readonly AIStreamEvent[];
202
- /** Private to this middleware, for this run. Cross-middleware facts go in `shared`. */
203
- state: State;
204
- /** Per-run notes shared with every middleware — see {@link modifyInput}. */
205
- shared: Record<string, unknown>;
206
- /**
207
- * Push an event into the stream *after* this call has returned.
208
- *
209
- * Returning events blocks the stream until the hook resolves, which is
210
- * right for anything derived from the event and wrong for anything slow.
211
- * Speech is the motivating case: awaiting a text-to-speech call before
212
- * returning the text delta stalls the reader at every full stop and
213
- * serialises synthesis behind playback. Return the text immediately,
214
- * start the slow work, and `emit` its result when it lands.
215
- *
216
- * Ordering among emitted events is the caller's problem — chain them if
217
- * it matters — and a hook that emits must make sure anything still
218
- * outstanding has landed before it lets `done` through.
219
- */
220
- emit: (event: AIStreamEvent) => Promise<void>;
221
- /**
222
- * Aborts when the run is interrupted. Pass it to any provider call the
223
- * hook makes: work started for a reply the user has already talked over
224
- * is billed but never heard.
225
- */
226
- signal?: AbortSignal;
227
- }) => Promise<AIStreamEvent | AIStreamEvent[] | null> | AIStreamEvent | AIStreamEvent[] | null;
228
- /**
229
- * The last chance to rewrite what the run produced, before it is persisted
230
- * and returned.
231
- *
232
- * It does **not** run on a streamed run: there the text has already reached
233
- * the client and each step is flushed to storage as it goes, so nothing could
234
- * act on what this returned. Use {@link modifyOutputStream} to rewrite a
235
- * streamed reply — a middleware that implements only this one is warned about
236
- * when an agent it is attached to streams.
237
- *
238
- * `toolCalls` is here so a redaction pass covers the whole run record rather
239
- * than just the visible answer: the tool arguments and results are persisted
240
- * and handed to anything that grades the run, and scrubbing the reply alone
241
- * leaves them untouched.
242
- */
243
- modifyOutput?: (services: Services, ctx: {
244
- text: string;
245
- messages: AIMessage[];
246
- usage: {
247
- inputTokens: number;
248
- outputTokens: number;
249
- };
250
- toolCalls: NonNullable<AIAgentStep['toolCalls']>;
251
- }) => Promise<{
252
- text: string;
253
- messages: AIMessage[];
254
- toolCalls?: NonNullable<AIAgentStep['toolCalls']>;
255
- }> | {
256
- text: string;
257
- messages: AIMessage[];
258
- toolCalls?: NonNullable<AIAgentStep['toolCalls']>;
259
- };
260
- beforeToolCall?: (services: Services, ctx: {
261
- toolName: string;
262
- toolCallId: string;
263
- args: Record<string, unknown>;
264
- }) => Promise<{
265
- args: Record<string, unknown>;
266
- } | void> | {
267
- args: Record<string, unknown>;
268
- } | void;
269
- afterToolCall?: (services: Services, ctx: {
270
- toolName: string;
271
- toolCallId: string;
272
- args: Record<string, unknown>;
273
- result: unknown;
274
- durationMs: number;
275
- }) => Promise<{
276
- result: unknown;
277
- } | void> | {
278
- result: unknown;
279
- } | void;
280
- afterStep?: (services: Services, ctx: {
281
- stepNumber: number;
282
- text: string;
283
- toolCalls: {
284
- toolCallId: string;
285
- toolName: string;
286
- args: unknown;
287
- }[];
288
- toolResults: {
289
- toolCallId: string;
290
- toolName: string;
291
- result: unknown;
292
- /** Set when the tool threw rather than returned. */
293
- error?: string;
294
- }[];
295
- usage: {
296
- inputTokens: number;
297
- outputTokens: number;
298
- };
299
- finishReason: string;
300
- }) => Promise<void> | void;
301
- onError?: (services: Services, ctx: {
302
- error: Error;
303
- stepNumber: number;
304
- messages: AIMessage[];
305
- }) => Promise<void> | void;
306
- }
307
- export type AIAgentMemoryConfig = {
308
- storage?: string;
309
- vector?: string;
310
- embedder?: string;
311
- lastMessages?: number;
312
- workingMemory?: unknown;
313
- };
314
- export type CoreAIAgent<PikkuPermission = CorePikkuPermission<any, any>, PikkuMiddleware = CorePikkuMiddleware<any>, Scope extends string = string, Scorer extends string = string> = {
315
- name: string;
316
- description: string;
317
- summary?: string;
318
- errors?: string[];
319
- /**
320
- * The three fields below are the system prompt. `buildInstructions` joins
321
- * whichever are set with a blank line, always in this order — role, then
322
- * personality, then goal — and appends the tool-usage rules if the agent has
323
- * tools. Nothing checks them against each other: the split is there to keep a
324
- * prompt legible, and text put in the wrong one still reaches the model.
325
- *
326
- * Who the agent is. 'You are a support engineer triaging inbound bugs.'
327
- */
328
- role?: string;
329
- /** How it should sound: tone, vocabulary, how much it says at a time. */
330
- personality?: string;
331
- /** What it is for — the only one of the three that is required. */
332
- goal: string;
333
- model: string;
334
- temperature?: number;
335
- /** Ownership/partitioning of this agent's threads and runs. Defaults to `'user'`. */
336
- sessionScope?: SessionScope;
337
- tools?: unknown[];
338
- agents?: unknown[];
339
- workflows?: unknown[];
340
- /**
341
- * Grades this agent's finished runs on live traffic, named by the generated
342
- * `ScorerName` union rather than by `ref()` — a scorer is not a function, so
343
- * there is nothing in the function map for a ref to resolve against.
344
- *
345
- * A reference-based judge listed here is never sampled: live traffic has no
346
- * answer key. Scenarios name scorers directly and may grade with scorers an
347
- * agent does not ship with.
348
- */
349
- scorers?: Scorer[];
350
- agentMode?: 'delegate' | 'supervise';
351
- memory?: AIAgentMemoryConfig;
352
- maxSteps?: number;
353
- toolChoice?: 'auto' | 'required' | 'none';
354
- /**
355
- * Per-provider model settings, keyed by provider id and passed through
356
- * untouched — for anything only one vendor offers, which the fields above
357
- * deliberately do not try to unify.
358
- *
359
- * `{ openai: { reasoningEffort: 'minimal' } }` is the one that matters for
360
- * voice: on gpt-5-mini it measured 0.9s to first token against 2.5s at the
361
- * default, and a spoken reply is waited through rather than skimmed.
362
- */
363
- providerOptions?: AIProviderOptions;
364
- input?: unknown;
365
- output?: unknown;
366
- tags?: string[];
367
- prepareStep?: (ctx: {
368
- stepNumber: number;
369
- messages: AIMessage[];
370
- tools: AIAgentToolDef[];
371
- toolChoice: 'auto' | 'required' | 'none';
372
- model: string;
373
- stop: () => void;
374
- }) => void | Promise<void>;
375
- middleware?: PikkuMiddleware[];
376
- channelMiddleware?: CorePikkuChannelMiddleware<any, any>[];
377
- aiMiddleware?: PikkuAIMiddlewareHooks<any, any>[];
378
- /**
379
- * Whether a session is required to run this agent. Defaults to `false`, since
380
- * agents are commonly invoked from an already-authenticated `pikkuFunc` or
381
- * from genuinely sessionless contexts (crons, queue workers). Set `true` to
382
- * require a session at the agent itself. `scopes` and `permissions` are
383
- * enforced either way.
384
- */
385
- auth?: boolean;
386
- /**
387
- * Scopes the session must hold to run this agent. All of them are required
388
- * (AND), and they are checked before `permissions` — unlike permissions,
389
- * which OR together, a scope can only narrow access.
390
- *
391
- * Narrowed to the generated `ScopeId` union in a project's own
392
- * `pikku-types.gen.ts`, so an undeclared scope is a compile error.
393
- */
394
- scopes?: Scope[];
395
- permissions?: CorePermissionGroup<PikkuPermission>;
396
- };
397
- export type AIStreamEvent = {
398
- type: 'step-start';
399
- stepNumber: number;
400
- agent?: string;
401
- session?: string;
402
- } | {
403
- type: 'text-delta';
404
- text: string;
405
- agent?: string;
406
- session?: string;
407
- } | {
408
- type: 'reasoning-delta';
409
- text: string;
410
- agent?: string;
411
- session?: string;
412
- } | {
413
- type: 'tool-call';
414
- toolCallId: string;
415
- toolName: string;
416
- args: unknown;
417
- agent?: string;
418
- session?: string;
419
- } | {
420
- type: 'tool-result';
421
- toolCallId: string;
422
- toolName: string;
423
- result: unknown;
424
- /**
425
- * The failure message, set when the tool threw rather than returned.
426
- * Carried explicitly because a tool may legitimately return text that
427
- * reads like an error, so `result` cannot be matched on to tell.
428
- */
429
- error?: string;
430
- agent?: string;
431
- session?: string;
432
- } | {
433
- type: 'agent-call';
434
- agentName: string;
435
- session: string;
436
- input: unknown;
437
- } | {
438
- type: 'agent-result';
439
- agentName: string;
440
- session: string;
441
- result: unknown;
442
- } | {
443
- type: 'approval-request';
444
- toolCallId: string;
445
- toolName: string;
446
- args: unknown;
447
- reason?: string;
448
- runId: string;
449
- agent?: string;
450
- session?: string;
451
- } | {
452
- type: 'credential-request';
453
- toolCallId: string;
454
- toolName: string;
455
- args: unknown;
456
- credentialName: string;
457
- credentialType: 'oauth2' | 'apikey';
458
- connectUrl?: string;
459
- runId: string;
460
- agent?: string;
461
- session?: string;
462
- } | {
463
- type: 'usage';
464
- tokens: {
465
- input: number;
466
- output: number;
467
- };
468
- model: string;
469
- agent?: string;
470
- session?: string;
471
- } | {
472
- type: 'error';
473
- message: string;
474
- agent?: string;
475
- session?: string;
476
- } | {
477
- type: 'audio-delta';
478
- data: string;
479
- format: string;
480
- /**
481
- * The sentence this audio says.
482
- *
483
- * Carried alongside the bytes because a client that gets talked over has
484
- * to tell the model what the user actually heard, and playback position
485
- * is the only place that is knowable. Without it a barge-in can stop the
486
- * sound but not report it, and the next turn is answered as though the
487
- * whole reply had landed.
488
- */
489
- text?: string;
490
- agent?: string;
491
- session?: string;
492
- } | {
493
- type: 'audio-done';
494
- agent?: string;
495
- session?: string;
496
- } | {
497
- /**
498
- * What the user was heard to say, sent once at the start of a spoken
499
- * turn. Only the server knows this — the client sent audio — and a chat
500
- * surface needs it to show the user's own message.
501
- */
502
- type: 'transcript';
503
- text: string;
504
- agent?: string;
505
- session?: string;
506
- } | {
507
- type: 'data';
508
- name: string;
509
- data: unknown;
510
- agent?: string;
511
- session?: string;
512
- } | {
513
- type: 'generative-ui';
514
- spec: unknown;
515
- agent?: string;
516
- session?: string;
517
- } | {
518
- type: 'suspended';
519
- reason: 'rpc-missing';
520
- missingRpcs: string[];
521
- } | {
522
- type: 'interrupted';
523
- runId: string;
524
- /** The truncated assistant text at the moment generation stopped. */
525
- text: string;
526
- reason: 'speech' | 'user' | 'timeout';
527
- agent?: string;
528
- session?: string;
529
- } | {
530
- type: 'done';
531
- };
532
- export interface AIStreamChannel extends PikkuChannel<unknown, AIStreamEvent> {
533
- }
534
- export type PendingApproval = {
535
- type: 'tool-call';
536
- toolCallId: string;
537
- toolName: string;
538
- args: unknown;
539
- } | {
540
- type: 'agent-call';
541
- toolCallId: string;
542
- agentName: string;
543
- agentRunId: string;
544
- displayToolName: string;
545
- displayArgs: unknown;
546
- } | {
547
- type: 'credential-request';
548
- toolCallId: string;
549
- toolName: string;
550
- args: unknown;
551
- credentialName: string;
552
- credentialType: 'oauth2' | 'apikey';
553
- connectUrl?: string;
554
- };
555
- export interface AgentRunState {
556
- runId: string;
557
- agentName: string;
558
- threadId: string;
559
- resourceId: string;
560
- status: 'running' | 'suspended' | 'completed' | 'failed' | 'interrupted';
561
- errorMessage?: string;
562
- suspendReason?: 'approval' | 'credential' | 'rpc-missing';
563
- missingRpcs?: string[];
564
- pendingApprovals?: PendingApproval[];
565
- usage: {
566
- inputTokens: number;
567
- outputTokens: number;
568
- model: string;
569
- };
570
- createdAt: Date;
571
- updatedAt: Date;
572
- }
573
- export interface AgentRunRow {
574
- runId: string;
575
- agentName: string;
576
- threadId: string;
577
- resourceId: string;
578
- status: string;
579
- errorMessage?: string;
580
- suspendReason?: string;
581
- missingRpcs?: string[];
582
- usageInputTokens: number;
583
- usageOutputTokens: number;
584
- usageModel: string;
585
- createdAt: Date;
586
- updatedAt: Date;
587
- }
588
- export interface AgentRunService {
589
- listThreads(options?: {
590
- agentName?: string;
591
- resourceId?: string;
592
- /**
593
- * Restrict results to threads owned by one of these session principals. A
594
- * thread matches when its `resourceId` is the principal itself or one of its
595
- * `principal:` sub-partitions, mirroring the composition
596
- * `resolveOwnerResourceId` writes.
597
- *
598
- * Unlike `resourceId`, which is an optional exact-match filter, this is an
599
- * authorization constraint: an empty array matches nothing. Callers exposing
600
- * threads over the wire must derive it from the session, never from input.
601
- */
602
- owners?: string[];
603
- limit?: number;
604
- offset?: number;
605
- }): Promise<AIThread[]>;
606
- getThread(threadId: string): Promise<AIThread | null>;
607
- getThreadMessages(threadId: string): Promise<AIMessage[]>;
608
- getThreadRuns(threadId: string): Promise<AgentRunRow[]>;
609
- deleteThread(threadId: string): Promise<boolean>;
610
- getDistinctAgentNames(): Promise<string[]>;
611
- }
612
- export type AIAgentMeta = Record<string, Omit<CoreAIAgent, 'input' | 'output' | 'tools' | 'agents' | 'workflows' | 'middleware' | 'channelMiddleware' | 'aiMiddleware' | 'permissions'> & {
613
- tools?: string[];
614
- agents?: string[];
615
- workflows?: string[];
616
- inputSchema: string | null;
617
- outputSchema: string | null;
618
- workingMemorySchema: string | null;
619
- middleware?: MiddlewareMetadata[];
620
- channelMiddleware?: MiddlewareMetadata[];
621
- aiMiddleware?: MiddlewareMetadata[];
622
- permissions?: PermissionMetadata[];
623
- sourceFile?: string;
624
- exportedName?: string;
625
- }>;
@@ -1,12 +0,0 @@
1
- export { agent, agentStream, agentResume, agentApprove, agentInterrupt, } from './ai-agent-helpers.js';
2
- export { wrapChannelWithAGUI } from './ai-agent-agui.js';
3
- export { runAIAgent, resumeAIAgentSync } from './ai-agent-runner.js';
4
- export { resolveModelAlias } from './ai-agent-model-config.js';
5
- export { streamAIAgent, resumeAIAgent, interruptAIAgent, } from './ai-agent-stream.js';
6
- export { voiceInput, NoSpeechDetectedError, SPOKEN_TURN, SPOKEN_TRANSCRIPT, } from './voice-input.js';
7
- export { voiceOutput, unspeakableScripts, voiceForText, type SpeakableScripts, } from './voice-output.js';
8
- export { AgentInterruptedError, signalRunInterrupt, } from './ai-agent-interrupt.js';
9
- export type { AgentInterruption, AgentInterruptResult, InterruptibleRunHandle, } from './ai-agent-interrupt.js';
10
- export { type RunAIAgentParams, type StreamAIAgentOptions, ToolApprovalRequired, ToolCredentialRequired, canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from './ai-agent-prepare.js';
11
- export { addAIAgent, } from './ai-agent-registry.js';
12
- export type { AIAgentInput, AIAgentMeta, AIAgentMemoryConfig, AIAgentStep, AIContentPart, AgentRunRow, AgentRunService, AgentRunState, AIMessage, AIStreamChannel, AIStreamEvent, AIThread, CoreAIAgent, PendingApproval, PikkuAIMiddlewareHooks, } from './ai-agent.types.js';
@@ -1,10 +0,0 @@
1
- export { agent, agentStream, agentResume, agentApprove, agentInterrupt, } from './ai-agent-helpers.js';
2
- export { wrapChannelWithAGUI } from './ai-agent-agui.js';
3
- export { runAIAgent, resumeAIAgentSync } from './ai-agent-runner.js';
4
- export { resolveModelAlias } from './ai-agent-model-config.js';
5
- export { streamAIAgent, resumeAIAgent, interruptAIAgent, } from './ai-agent-stream.js';
6
- export { voiceInput, NoSpeechDetectedError, SPOKEN_TURN, SPOKEN_TRANSCRIPT, } from './voice-input.js';
7
- export { voiceOutput, unspeakableScripts, voiceForText, } from './voice-output.js';
8
- export { AgentInterruptedError, signalRunInterrupt, } from './ai-agent-interrupt.js';
9
- export { ToolApprovalRequired, ToolCredentialRequired, canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from './ai-agent-prepare.js';
10
- export { addAIAgent, } from './ai-agent-registry.js';