@pikku/core 0.12.141 → 0.12.143

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 (251) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/errors/errors.d.ts +1 -1
  3. package/dist/errors/errors.js +1 -1
  4. package/dist/function/function-meta.types.d.ts +6 -6
  5. package/dist/function/functions.types.d.ts +2 -2
  6. package/dist/services/audit-service.d.ts +4 -4
  7. package/dist/services/feature-flag-service.d.ts +3 -3
  8. package/dist/services/{http-personas.d.ts → http-virtual-users.d.ts} +25 -47
  9. package/dist/services/{http-personas.js → http-virtual-users.js} +29 -53
  10. package/dist/services/in-memory-queue-service.d.ts +8 -1
  11. package/dist/services/in-memory-queue-service.js +67 -0
  12. package/dist/services/incoming-webhook-service.d.ts +2 -0
  13. package/dist/services/incoming-webhook-service.js +4 -0
  14. package/dist/services/index.d.ts +2 -2
  15. package/dist/services/index.js +1 -1
  16. package/dist/services/meta-service.d.ts +6 -6
  17. package/dist/services/meta-service.js +8 -8
  18. package/dist/{wirings/workflow → services}/scenario-cookie-jar.d.ts +2 -0
  19. package/dist/{wirings/workflow → services}/scenario-cookie-jar.js +18 -14
  20. package/dist/services/scheduler-service.d.ts +3 -0
  21. package/dist/services/scheduler-service.js +4 -0
  22. package/dist/services/system-role-guard.d.ts +1 -1
  23. package/dist/services/virtual-user-sign-in.d.ts +52 -0
  24. package/dist/services/virtual-user-sign-in.js +80 -0
  25. package/dist/services/virtual-user-statement.d.ts +31 -0
  26. package/dist/services/virtual-user-statement.js +24 -0
  27. package/dist/services/{personas-service.d.ts → virtual-users-service.d.ts} +25 -23
  28. package/dist/services/{personas-service.js → virtual-users-service.js} +3 -3
  29. package/dist/types/core.types.d.ts +11 -11
  30. package/dist/wirings/queue/index.d.ts +1 -1
  31. package/dist/wirings/queue/queue.types.d.ts +21 -0
  32. package/dist/wirings/queue/signed-queue-service.d.ts +4 -1
  33. package/dist/wirings/queue/signed-queue-service.js +3 -0
  34. package/dist/wirings/role/define-system-role.d.ts +1 -1
  35. package/dist/wirings/role/define-system-role.js +1 -1
  36. package/dist/wirings/scheduler/index.d.ts +1 -1
  37. package/dist/wirings/scheduler/scheduler.types.d.ts +12 -0
  38. package/dist/wirings/{actor-flow/actor-flow.types.d.ts → virtual-user/conversation/conversation.types.d.ts} +5 -5
  39. package/dist/wirings/virtual-user/conversation/index.d.ts +2 -0
  40. package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +36 -0
  41. package/dist/wirings/{actor-flow → virtual-user/conversation}/run-conversation.js +30 -30
  42. package/dist/wirings/virtual-user/define-virtual-users.d.ts +32 -0
  43. package/dist/wirings/{persona/define-personas.js → virtual-user/define-virtual-users.js} +9 -9
  44. package/dist/wirings/virtual-user/index.d.ts +30 -7
  45. package/dist/wirings/virtual-user/index.js +23 -4
  46. package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +8 -8
  47. package/dist/wirings/virtual-user/prepare-virtual-user-run.js +9 -9
  48. package/dist/wirings/virtual-user/run-virtual-user.d.ts +6 -6
  49. package/dist/wirings/virtual-user/run-virtual-user.js +10 -10
  50. package/dist/wirings/{persona/validate-personas.d.ts → virtual-user/validate-virtual-users.d.ts} +11 -11
  51. package/dist/wirings/{persona/validate-personas.js → virtual-user/validate-virtual-users.js} +24 -24
  52. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +7 -7
  53. package/dist/wirings/virtual-user/virtual-user-agents.js +2 -2
  54. package/dist/wirings/{persona/persona-app-scopes.d.ts → virtual-user/virtual-user-app-scopes.d.ts} +10 -10
  55. package/dist/wirings/{persona/persona-app-scopes.js → virtual-user/virtual-user-app-scopes.js} +12 -12
  56. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +3 -3
  57. package/dist/wirings/virtual-user/virtual-user-catalogue.js +2 -2
  58. package/dist/wirings/{persona/persona.types.d.ts → virtual-user/virtual-user-declaration.types.d.ts} +24 -24
  59. package/dist/wirings/virtual-user/virtual-user-derive.js +13 -7
  60. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +1 -1
  61. package/dist/wirings/{persona/persona-email.d.ts → virtual-user/virtual-user-email.d.ts} +11 -11
  62. package/dist/wirings/{persona/persona-email.js → virtual-user/virtual-user-email.js} +19 -19
  63. package/dist/wirings/{persona/persona-environments.d.ts → virtual-user/virtual-user-environments.d.ts} +10 -10
  64. package/dist/wirings/{persona/persona-environments.js → virtual-user/virtual-user-environments.js} +21 -21
  65. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +3 -3
  66. package/dist/wirings/virtual-user/virtual-user-intents.js +3 -3
  67. package/dist/wirings/{persona/persona-mailbox.d.ts → virtual-user/virtual-user-mailbox.d.ts} +4 -4
  68. package/dist/wirings/virtual-user/virtual-user-run-store.d.ts +4 -4
  69. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +42 -61
  70. package/dist/wirings/virtual-user/virtual-user-scaffold.js +69 -117
  71. package/dist/wirings/virtual-user/virtual-user-schedule-store.d.ts +15 -15
  72. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +6 -6
  73. package/dist/wirings/virtual-user/virtual-user-schedule.js +11 -11
  74. package/dist/wirings/virtual-user/virtual-user-target.d.ts +6 -6
  75. package/dist/wirings/virtual-user/virtual-user-target.js +5 -5
  76. package/dist/wirings/virtual-user/virtual-user.types.d.ts +11 -11
  77. package/dist/wirings/virtual-user/virtual-user.types.js +1 -1
  78. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +9 -9
  79. package/dist/wirings/workflow/pikku-scenario-service.d.ts +28 -28
  80. package/dist/wirings/workflow/pikku-scenario-service.js +77 -77
  81. package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -2
  82. package/dist/wirings/workflow/pikku-workflow-service.js +4 -4
  83. package/dist/wirings/workflow/scenario-prose.d.ts +8 -8
  84. package/dist/wirings/workflow/scenario-prose.js +12 -8
  85. package/dist/wirings/workflow/scenario-run.types.d.ts +13 -13
  86. package/dist/wirings/workflow/scenario-step.types.d.ts +23 -23
  87. package/dist/wirings/workflow/workflow.types.d.ts +2 -2
  88. package/knowledge/decisions/index.md +0 -2
  89. package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +29 -0
  90. package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +29 -0
  91. package/knowledge/decisions/internals/a-latency-budget-is-asserted-by-its-cause.md +32 -0
  92. package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +22 -0
  93. package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +28 -0
  94. package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +32 -0
  95. package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +12 -12
  96. package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +24 -0
  97. package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +34 -0
  98. package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +2 -2
  99. package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +3 -0
  100. package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +27 -0
  101. package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +26 -0
  102. package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +22 -0
  103. package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +22 -0
  104. package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +28 -0
  105. package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +24 -0
  106. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +3 -3
  107. package/knowledge/decisions/internals/index.md +47 -31
  108. package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +10 -10
  109. package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +30 -0
  110. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +23 -19
  111. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +2 -2
  112. package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +12 -12
  113. package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +22 -0
  114. package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +24 -0
  115. package/knowledge/decisions/internals/{the-actor-prompt-says-json-because-of-json-object-mode.md → the-virtual-user-prompt-says-json-because-of-json-object-mode.md} +4 -4
  116. package/knowledge/decisions/internals/{the-persona-runtime-is-exported-from-the-persona-entry-point.md → the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md} +8 -8
  117. package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +43 -0
  118. package/knowledge/decisions/internals/{actor-flow-drives-the-target-through-a-transport-seam.md → virtual-user-conversation-drives-the-target-through-a-transport-seam.md} +6 -6
  119. package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +25 -0
  120. package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +23 -0
  121. package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +30 -0
  122. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +5 -5
  123. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +2 -2
  124. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +4 -4
  125. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +1 -1
  126. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +2 -2
  127. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +1 -1
  128. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +1 -1
  129. package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +26 -0
  130. package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +20 -0
  131. package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +23 -0
  132. package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +16 -0
  133. package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +26 -0
  134. package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +32 -0
  135. package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +27 -0
  136. package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +33 -0
  137. package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +25 -0
  138. package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +10 -5
  139. package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +27 -0
  140. package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +26 -0
  141. package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +25 -0
  142. package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +29 -0
  143. package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +25 -0
  144. package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +24 -0
  145. package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +29 -0
  146. package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +30 -0
  147. package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +38 -0
  148. package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +23 -0
  149. package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +27 -0
  150. package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +41 -0
  151. package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +25 -0
  152. package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +32 -0
  153. package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +20 -0
  154. package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +26 -0
  155. package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +33 -0
  156. package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +16 -0
  157. package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +26 -0
  158. package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +38 -0
  159. package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +31 -0
  160. package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +18 -0
  161. package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +32 -0
  162. package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +24 -0
  163. package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +26 -0
  164. package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +27 -0
  165. package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +25 -0
  166. package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +18 -0
  167. package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +29 -0
  168. package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +22 -0
  169. package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +29 -0
  170. package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +27 -0
  171. package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +25 -0
  172. package/knowledge/decisions/security/index.md +88 -24
  173. package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +21 -0
  174. package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +38 -0
  175. package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +18 -0
  176. package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +22 -0
  177. package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +26 -0
  178. package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +24 -0
  179. package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +35 -0
  180. package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +31 -0
  181. package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +22 -0
  182. package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +34 -0
  183. package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +26 -0
  184. package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +24 -0
  185. package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +16 -0
  186. package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +21 -0
  187. package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +24 -0
  188. package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +34 -0
  189. package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +16 -0
  190. package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +29 -0
  191. package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +23 -0
  192. package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +25 -0
  193. package/knowledge/decisions/security/{actor-flow-missing-approval-decisions-default-to-denied.md → virtual-user-conversation-missing-approval-decisions-default-to-denied.md} +7 -7
  194. package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +18 -0
  195. package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +25 -0
  196. package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +42 -0
  197. package/knowledge/decisions/security/{actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md → virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md} +10 -8
  198. package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +29 -0
  199. package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +18 -0
  200. package/knowledge/decisions/security/{workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md → workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md} +6 -6
  201. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +5 -5
  202. package/knowledge/decisions/security/{workflow-actor-steps-always-use-the-real-transport.md → workflow-virtual-user-steps-always-use-the-real-transport.md} +11 -11
  203. package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +18 -0
  204. package/knowledge/index.md +0 -2
  205. package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +24 -0
  206. package/knowledge/questions/dev-quick-login-as-impersonation.md +25 -0
  207. package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +26 -0
  208. package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +27 -0
  209. package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +26 -0
  210. package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +26 -0
  211. package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +34 -0
  212. package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +20 -0
  213. package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +24 -0
  214. package/knowledge/questions/does-the-store-session-match-the-other-two.md +19 -0
  215. package/knowledge/questions/index.md +25 -2
  216. package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +21 -0
  217. package/knowledge/questions/live-scheduled-tests-may-write.md +19 -0
  218. package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +23 -0
  219. package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +32 -0
  220. package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +25 -0
  221. package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +23 -0
  222. package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +35 -0
  223. package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +23 -0
  224. package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +27 -0
  225. package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +26 -0
  226. package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +20 -0
  227. package/knowledge/questions/staging-impersonation-rules.md +27 -0
  228. package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +33 -0
  229. package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +20 -0
  230. package/knowledge/questions/what-an-impersonated-session-carries.md +22 -0
  231. package/package.json +2 -3
  232. package/src/public-surface.json +38 -47
  233. package/dist/services/persona-actor-secret.d.ts +0 -38
  234. package/dist/services/persona-actor-secret.js +0 -39
  235. package/dist/services/persona-sign-in.d.ts +0 -117
  236. package/dist/services/persona-sign-in.js +0 -154
  237. package/dist/wirings/actor-flow/index.d.ts +0 -2
  238. package/dist/wirings/actor-flow/run-conversation.d.ts +0 -36
  239. package/dist/wirings/persona/define-personas.d.ts +0 -32
  240. package/dist/wirings/persona/index.d.ts +0 -23
  241. package/dist/wirings/persona/index.js +0 -19
  242. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +0 -23
  243. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +0 -25
  244. package/knowledge/decisions/internals/validate-checks-personas-through-a-shared-module.md +0 -43
  245. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +0 -31
  246. package/knowledge/decisions/security/an-actor-credential-is-derived-per-persona.md +0 -42
  247. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +0 -26
  248. /package/dist/wirings/{actor-flow/actor-flow.types.js → virtual-user/conversation/conversation.types.js} +0 -0
  249. /package/dist/wirings/{actor-flow → virtual-user/conversation}/index.js +0 -0
  250. /package/dist/wirings/{persona/persona.types.js → virtual-user/virtual-user-declaration.types.js} +0 -0
  251. /package/dist/wirings/{persona/persona-mailbox.js → virtual-user/virtual-user-mailbox.js} +0 -0
@@ -1,9 +1,9 @@
1
- import type { ScenarioHttpResponse } from '../../services/personas-service.js';
2
- import type { ActorFlowVerdict } from '../actor-flow/actor-flow.types.js';
1
+ import type { ScenarioHttpResponse } from '../../services/virtual-users-service.js';
2
+ import type { ConversationVerdict } from './conversation/conversation.types.js';
3
3
  /**
4
4
  * How a virtual user behaves, mechanically. A disposition changes the loop, the
5
5
  * input generation, the memory and the oracle — anything that only changes how
6
- * the user *talks* is persona prose (`ResolvedPersona.personality`) and does
6
+ * the user *talks* is virtual user prose (`ResolvedVirtualUser.personality`) and does
7
7
  * not belong here.
8
8
  *
9
9
  * - `realistic` — schema-first, goal-directed, plausible values (default).
@@ -17,11 +17,11 @@ import type { ActorFlowVerdict } from '../actor-flow/actor-flow.types.js';
17
17
  * `accountable` sits opposite `adversarial` on an *intent* axis — bad faith
18
18
  * against good faith — where `careless` and `thorough` are a *care* axis. It is
19
19
  * the one disposition whose actions carry consequences: no oracle, no rollback,
20
- * and every call attributed to the persona in the audit log like anyone else's.
20
+ * and every call attributed to the virtual user in the audit log like anyone else's.
21
21
  */
22
22
  export type VirtualUserDisposition = 'realistic' | 'careless' | 'newcomer' | 'stale' | 'auditor' | 'adversarial' | 'accountable';
23
23
  /**
24
- * The one disposition a production environment accepts.
24
+ * The one disposition a declaration may name for a production environment. Virtual users never run against production, so this only keeps the declaration check honest.
25
25
  *
26
26
  * Every other disposition exists to find out what the product does wrong, which
27
27
  * is not a thing to do to real customers' data. Named here so the declaration
@@ -79,7 +79,7 @@ export interface ApiCatalogueEntry {
79
79
  /**
80
80
  * Scopes the session must hold to call this, all of them.
81
81
  *
82
- * Splits the catalogue in two: what a persona's roles entitle it to reach,
82
+ * Splits the catalogue in two: what a virtual user's roles entitle it to reach,
83
83
  * and what they do not. Scopes rather than permission-function names because
84
84
  * a scope is declared and checkable, whereas a permission is arbitrary code
85
85
  * whose verdict nobody can predict without running it.
@@ -105,8 +105,8 @@ export interface IntentSource {
105
105
  /** Step prose, as a person would be told it. Never rpc names. */
106
106
  steps?: readonly string[];
107
107
  tags?: readonly string[];
108
- /** Persona ids this intent is available to. Empty means everyone. */
109
- personas?: readonly string[];
108
+ /** Virtual user ids this intent is available to. Empty means everyone. */
109
+ virtualUsers?: readonly string[];
110
110
  }
111
111
  /** Why the engine flagged something. */
112
112
  export type VirtualUserFindingKind = 'server-error' | 'transport-error' | 'schema-violation' | 'unexpected-success' | 'custom';
@@ -122,14 +122,14 @@ export interface VirtualUserFinding {
122
122
  }
123
123
  /**
124
124
  * The transport the virtual user acts through. HTTP in production (an
125
- * `HttpPersona`), but the engine only sees this contract — which is what
125
+ * `HttpVirtualUser`), but the engine only sees this contract — which is what
126
126
  * lets the whole loop be tested without a network.
127
127
  */
128
128
  export interface VirtualUserTarget {
129
129
  /** Invoke an RPC as this user, reporting the status as data rather than throwing. */
130
130
  call(rpcName: string, args: unknown): Promise<ScenarioHttpResponse>;
131
- /** Converse with an AI agent in persona. Omitted by apps that have no agents. */
132
- talkTo?(agent: string, task: string): Promise<ActorFlowVerdict>;
131
+ /** Converse with an AI agent in virtual user. Omitted by apps that have no agents. */
132
+ talkTo?(agent: string, task: string): Promise<ConversationVerdict>;
133
133
  /** Send a fixture file. Omitted by apps with no upload surface. */
134
134
  upload?(file: string): Promise<ScenarioHttpResponse>;
135
135
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The one disposition a production environment accepts.
2
+ * The one disposition a declaration may name for a production environment. Virtual users never run against production, so this only keeps the declaration check honest.
3
3
  *
4
4
  * Every other disposition exists to find out what the product does wrong, which
5
5
  * is not a thing to do to real customers' data. Named here so the declaration
@@ -5,7 +5,7 @@
5
5
  import type { StandardSchemaV1 } from '@standard-schema/spec';
6
6
  import type { SerializedError } from '../../../errors/serialized-error.js';
7
7
  import type { WorkflowRun } from '../workflow.types.js';
8
- import type { ScenarioPersona } from '../../../services/personas-service.js';
8
+ import type { ScenarioVirtualUser } from '../../../services/virtual-users-service.js';
9
9
  import type { ScenarioStepOptions, ScenarioStepPhase, ScenarioSurface } from '../scenario-step.types.js';
10
10
  /**
11
11
  * Workflow step options
@@ -24,12 +24,12 @@ export interface WorkflowStepOptions {
24
24
  */
25
25
  compensate?: false;
26
26
  /**
27
- * Run this step as an actor (scenarios). The RPC is sent through the
28
- * actor's authenticated client over the REAL transport — never dispatched
27
+ * Run this step as a virtual user (scenarios). The RPC is sent through the
28
+ * virtual user's authenticated client over the REAL transport — never dispatched
29
29
  * internally — so auth middleware and permissions are exercised end-to-end.
30
30
  * The step is recorded durably like any RPC step.
31
31
  */
32
- actor?: ScenarioPersona;
32
+ virtualUser?: ScenarioVirtualUser;
33
33
  }
34
34
  /**
35
35
  * Options for workflow.expectEventually() — a durable polling step used by
@@ -240,8 +240,8 @@ export interface RpcStepMeta {
240
240
  inputs?: Record<string, InputSource> | 'passthrough';
241
241
  /** Step options */
242
242
  options?: WorkflowStepOptions;
243
- /** Scenario actor name this step runs as ({ actor: actors.x }) */
244
- actor?: string;
243
+ /** Scenario virtual user name this step runs as ({ virtualUser: virtualUsers.x }) */
244
+ virtualUser?: string;
245
245
  /** True for workflow.expectEventually polling steps */
246
246
  expectEventually?: boolean;
247
247
  }
@@ -267,8 +267,8 @@ export interface ScenarioStepMeta {
267
267
  inputs?: Record<string, InputSource> | 'passthrough';
268
268
  /** Step options */
269
269
  options?: WorkflowStepOptions;
270
- /** Scenario actor name this step runs as ({ actor: actors.x }) */
271
- actor?: string;
270
+ /** Scenario virtual user name this step runs as ({ virtualUser: virtualUsers.x }) */
271
+ virtualUser?: string;
272
272
  /** Mirrors the surfaces the step function declares a binding for */
273
273
  surfaces?: ScenarioSurface[];
274
274
  }
@@ -595,7 +595,7 @@ export interface PikkuScenarioWire<Out = unknown> extends PikkuWorkflowWire {
595
595
  */
596
596
  context: ScenarioContext<Out>;
597
597
  /**
598
- * Durable polling step: invoke `rpcName` (as an actor when `options.actor`
598
+ * Durable polling step: invoke `rpcName` (as a virtual user when `options.virtualUser`
599
599
  * is set) until `predicate` passes or `options.within` elapses.
600
600
  */
601
601
  expectEventually: <TOutput = any, TInput = any>(stepName: string, rpcName: string, data: TInput, predicate: (output: TOutput) => boolean, options?: WorkflowExpectEventuallyOptions) => Promise<TOutput>;
@@ -2,7 +2,7 @@ import { PikkuError } from '../../errors/error-handler.js';
2
2
  import { InMemoryWorkflowService } from '../../services/in-memory-workflow-service.js';
3
3
  import type { RunLifecycleContext, WorkflowRunEngine, WorkflowRunExtension } from './workflow-run-engine.types.js';
4
4
  import type { PikkuRawWire } from '../../types/core.types.js';
5
- import type { ScenarioPersonas } from '../../services/personas-service.js';
5
+ import type { ScenarioVirtualUsers } from '../../services/virtual-users-service.js';
6
6
  import type { ScenarioStepVideoOffset } from './scenario-run.types.js';
7
7
  import type { ScenarioBrowserProvider, ScenarioEnvironment, ScenarioSurface } from './scenario-step.types.js';
8
8
  import type { PikkuWorkflowWire, WorkflowQueueOptions } from './workflow.types.js';
@@ -12,11 +12,11 @@ export type { ScenarioArtifact, ScenarioFailureDetail, ScenarioResult, ScenarioR
12
12
  export { SCENARIO_SURFACES } from './scenario-step.types.js';
13
13
  export { resolveScenarioSurfaces } from './scenario-surface.js';
14
14
  export { pollUntil, type PollOptions } from './scenario-poll.js';
15
- export { createCookieJar } from './scenario-cookie-jar.js';
16
- export type { ScenarioCookieJar } from './scenario-cookie-jar.js';
15
+ export { createCookieJar } from '../../services/scenario-cookie-jar.js';
16
+ export type { ScenarioCookieJar } from '../../services/scenario-cookie-jar.js';
17
17
  export { composeStepProse, renderStepTemplate } from './scenario-prose.js';
18
18
  export { requireScenarioEnv } from './scenario-step-guards.js';
19
- export type { ScenarioHttpResponse, ScenarioJsonRequest, } from '../../services/personas-service.js';
19
+ export type { ScenarioHttpResponse, ScenarioJsonRequest, } from '../../services/virtual-users-service.js';
20
20
  /**
21
21
  * A workflow service with the scenario capability attached — the two lines
22
22
  * `pikku scenario run` needs, in one call so no caller has to remember that the
@@ -44,7 +44,7 @@ export declare class ScenarioHookError extends PikkuError {
44
44
  * Two witnesses of the same `then` disagreed.
45
45
  *
46
46
  * This is the failure the whole additive-witness design exists to produce: the
47
- * system of record is right and the surface the actor was looking at is not, or
47
+ * system of record is right and the surface the virtual user was looking at is not, or
48
48
  * the other way round. Both observations go in the message, because either one
49
49
  * alone reads as a passing assertion.
50
50
  */
@@ -74,14 +74,14 @@ export declare class ScenarioBrowserUnavailable extends PikkuError {
74
74
  constructor(stepFunc: string);
75
75
  }
76
76
  /**
77
- * A step that is driven by a persona was dispatched without one.
77
+ * A step that is driven by a virtual user was dispatched without one.
78
78
  *
79
79
  * Raised before the body runs rather than partway through it: the step declared
80
- * that it needs an actor — by having a `browser` binding, which cannot be
81
- * provisioned without a window to open, or by `actor: true` — so a call site
80
+ * that it needs a virtual user — by having a `browser` binding, which cannot be
81
+ * provisioned without a window to open, or by `virtualUser: true` — so a call site
82
82
  * that omits one is a mistake at the call site.
83
83
  */
84
- export declare class ScenarioActorRequired extends PikkuError {
84
+ export declare class ScenarioVirtualUserRequired extends PikkuError {
85
85
  readonly stepFunc: string;
86
86
  constructor(stepFunc: string);
87
87
  }
@@ -122,7 +122,7 @@ export declare class ScenarioNoWitness extends PikkuError {
122
122
  * An assertion ran, but not on the surface the run targets.
123
123
  *
124
124
  * The sibling of {@link ScenarioNoWitness}: that one checked nothing anywhere,
125
- * this one checked the system of record while the prose claims the actor saw it
125
+ * this one checked the system of record while the prose claims the virtual user saw it
126
126
  * on the page. Ordinary runs count it as a coverage gap; a strict run refuses
127
127
  * it, because a flow that cannot be observed end to end on the run surface is
128
128
  * not a flow that surface can be documented from.
@@ -138,7 +138,7 @@ export declare class ScenarioUnwitnessedAssertion extends PikkuError {
138
138
  * The scenario capability, layered onto a workflow service rather than being
139
139
  * one.
140
140
  *
141
- * Every scenario affordance — steps, actors, lifecycle hooks, the browser
141
+ * Every scenario affordance — steps, virtual users, lifecycle hooks, the browser
142
142
  * provider, the assertion wire members — lives here rather than on
143
143
  * `PikkuWorkflowService`, because a bundler drops an unused *module* but never
144
144
  * an unused class member: anything declared on the workflow service ships in
@@ -160,7 +160,7 @@ export declare class ScenarioUnwitnessedAssertion extends PikkuError {
160
160
  */
161
161
  export declare class PikkuScenarioService implements WorkflowRunExtension {
162
162
  private readonly engine;
163
- private runActors;
163
+ private runVirtualUsers;
164
164
  private runContexts;
165
165
  private runVideoOffsets;
166
166
  private scenarioBrowserProvider?;
@@ -169,7 +169,7 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
169
169
  private strictSurface;
170
170
  constructor(engine: WorkflowRunEngine);
171
171
  /**
172
- * The surface every actor drives the system through for this run, set once by
172
+ * The surface every virtual user drives the system through for this run, set once by
173
173
  * the runner from `--run`. `default` is the server-side path — the fast suite.
174
174
  *
175
175
  * `strict` removes both routes off that surface: an action may not fall back
@@ -196,7 +196,7 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
196
196
  setScenarioEnvironment(env: ScenarioEnvironment | undefined): void;
197
197
  getScenarioEnvironment(): ScenarioEnvironment | undefined;
198
198
  /**
199
- * Where each of a run's browser steps fell in its actor's video, keyed by the
199
+ * Where each of a run's browser steps fell in its virtual user's video, keyed by the
200
200
  * durable step name, handed over and forgotten in one call.
201
201
  *
202
202
  * Taken rather than read because the runner joins these onto the step rows
@@ -204,18 +204,18 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
204
204
  * clear them, and the only moment they are still wanted.
205
205
  */
206
206
  takeStepVideoOffsets(runId: string): Map<string, ScenarioStepVideoOffset[]>;
207
- /** Where a step starting now falls in this actor's recording, if anywhere. */
207
+ /** Where a step starting now falls in this virtual user's recording, if anywhere. */
208
208
  private videoOffsetFor;
209
209
  /**
210
- * Stamp where a step began inside one actor's recording.
210
+ * Stamp where a step began inside one virtual user's recording.
211
211
  *
212
- * First write per actor wins: a `then` step runs once per witness, and the
212
+ * First write per virtual user wins: a `then` step runs once per witness, and the
213
213
  * moment the reader wants is when the sentence started, not when its last
214
214
  * witness got around to the browser.
215
215
  */
216
216
  private recordVideoOffset;
217
217
  attachRunContext(runId: string, workflowMeta: any, options?: {
218
- actors?: ScenarioPersonas;
218
+ virtualUsers?: ScenarioVirtualUsers;
219
219
  }): Promise<void>;
220
220
  detachRunContext(runId: string): void;
221
221
  /**
@@ -249,20 +249,20 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
249
249
  *
250
250
  * A hook is not a pikku function: it has no id, no meta and no schema, so it
251
251
  * cannot go through `runPikkuFunc` and the runner records nothing for it. It
252
- * gets exactly what the scenario body gets — the same wire (so `actors` is
252
+ * gets exactly what the scenario body gets — the same wire (so `virtualUsers` is
253
253
  * how it reaches the app), and singleton services composed with this
254
254
  * invocation's wire services — and nothing else.
255
255
  */
256
256
  private runScenarioHook;
257
257
  /**
258
- * Build HTTP scenario actors for a run started without them; undefined when
259
- * SCENARIO_ACTOR_SECRET or the API URL is missing.
258
+ * Build HTTP scenario virtual users for a run started without them; undefined when
259
+ * the app has no auth service or the API URL is missing.
260
260
  *
261
- * The actor client is imported lazily so that even a runner bundle only pays
262
- * for the AI persona conversation loop it pulls in when a scenario actually
263
- * signs an actor in.
261
+ * The virtual user client is imported lazily so that even a runner bundle only pays
262
+ * for the AI virtual user conversation loop it pulls in when a scenario actually
263
+ * signs a virtual user in.
264
264
  */
265
- resolvePersonas(): Promise<ScenarioPersonas | undefined>;
265
+ resolveVirtualUsers(): Promise<ScenarioVirtualUsers | undefined>;
266
266
  decorateWorkflowWire(wire: PikkuWorkflowWire, context: {
267
267
  name: string;
268
268
  runId: string;
@@ -278,8 +278,8 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
278
278
  */
279
279
  private declaredSurfaces;
280
280
  /**
281
- * Whether a step is driven by a persona, and so must be given one. Stamped by
282
- * the definer from a `browser` binding or an explicit `actor: true`.
281
+ * Whether a step is driven by a virtual user, and so must be given one. Stamped by
282
+ * the definer from a `browser` binding or an explicit `virtualUser: true`.
283
283
  */
284
- private requiresActor;
284
+ private requiresVirtualUser;
285
285
  }