@pikku/core 0.12.71 → 0.12.74

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 (819) hide show
  1. package/CHANGELOG.md +848 -0
  2. package/dist/crypto-utils.d.ts +30 -5
  3. package/dist/crypto-utils.js +146 -41
  4. package/dist/dev/hot-reload.js +11 -30
  5. package/dist/dev/module-runner.d.ts +3 -7
  6. package/dist/dev/module-runner.js +4 -10
  7. package/dist/dev/reload-meta.d.ts +8 -20
  8. package/dist/dev/reload-meta.js +9 -29
  9. package/dist/errors/error-handler.d.ts +5 -30
  10. package/dist/errors/error-handler.js +16 -32
  11. package/dist/errors/errors.d.ts +32 -151
  12. package/dist/errors/errors.js +55 -157
  13. package/dist/function/abort-scope.d.ts +47 -0
  14. package/dist/function/abort-scope.js +63 -0
  15. package/dist/function/function-runner.js +40 -30
  16. package/dist/function/functions.types.d.ts +44 -136
  17. package/dist/function/functions.types.js +0 -58
  18. package/dist/function/list.types.d.ts +12 -62
  19. package/dist/function/list.types.js +4 -25
  20. package/dist/handle-error.d.ts +0 -11
  21. package/dist/handle-error.js +6 -18
  22. package/dist/index.d.ts +5 -2
  23. package/dist/index.js +4 -1
  24. package/dist/middleware/auth-apikey.d.ts +3 -18
  25. package/dist/middleware/auth-apikey.js +0 -17
  26. package/dist/middleware/auth-bearer.d.ts +6 -41
  27. package/dist/middleware/auth-bearer.js +3 -40
  28. package/dist/middleware/auth-cookie.d.ts +5 -27
  29. package/dist/middleware/auth-cookie.js +2 -26
  30. package/dist/middleware/cors.d.ts +7 -34
  31. package/dist/middleware/cors.js +7 -34
  32. package/dist/middleware/remote-auth.d.ts +3 -1
  33. package/dist/middleware/remote-auth.js +3 -2
  34. package/dist/middleware/telemetry.d.ts +8 -33
  35. package/dist/middleware/telemetry.js +2 -31
  36. package/dist/middleware-runner.d.ts +4 -55
  37. package/dist/middleware-runner.js +5 -74
  38. package/dist/permissions.d.ts +3 -44
  39. package/dist/permissions.js +19 -71
  40. package/dist/pikku-request.d.ts +0 -6
  41. package/dist/pikku-request.js +0 -6
  42. package/dist/pikku-state.d.ts +0 -26
  43. package/dist/pikku-state.js +2 -30
  44. package/dist/remote.d.ts +3 -5
  45. package/dist/remote.js +8 -7
  46. package/dist/schema.d.ts +7 -17
  47. package/dist/schema.js +30 -18
  48. package/dist/scopes.d.ts +4 -23
  49. package/dist/scopes.js +7 -48
  50. package/dist/services/ai-agent-runner-service.d.ts +20 -0
  51. package/dist/services/ai-embedding-service.d.ts +2 -25
  52. package/dist/services/audit-service.js +1 -2
  53. package/dist/services/content-service.d.ts +1 -46
  54. package/dist/services/credential-service.d.ts +3 -40
  55. package/dist/services/deployment-service.d.ts +3 -9
  56. package/dist/services/gateway-service.d.ts +0 -15
  57. package/dist/services/http-personas.d.ts +80 -0
  58. package/dist/services/http-personas.js +233 -0
  59. package/dist/services/in-memory-queue-service.d.ts +0 -14
  60. package/dist/services/in-memory-queue-service.js +1 -15
  61. package/dist/services/in-memory-trigger-service.d.ts +0 -18
  62. package/dist/services/in-memory-trigger-service.js +1 -18
  63. package/dist/services/in-memory-workflow-service.d.ts +0 -16
  64. package/dist/services/in-memory-workflow-service.js +4 -33
  65. package/dist/services/index.d.ts +5 -6
  66. package/dist/services/index.js +2 -5
  67. package/dist/services/istanbul-coverage-service.d.ts +1 -5
  68. package/dist/services/istanbul-coverage-service.js +2 -8
  69. package/dist/services/jwt-service.d.ts +1 -16
  70. package/dist/services/local-content.d.ts +13 -2
  71. package/dist/services/local-content.js +40 -13
  72. package/dist/services/local-gateway-service.d.ts +0 -16
  73. package/dist/services/local-gateway-service.js +2 -17
  74. package/dist/services/local-secrets.d.ts +0 -4
  75. package/dist/services/local-secrets.js +0 -4
  76. package/dist/services/logger-console.d.ts +3 -7
  77. package/dist/services/logger-console.js +3 -7
  78. package/dist/services/logger.d.ts +2 -37
  79. package/dist/services/meta-service.d.ts +23 -26
  80. package/dist/services/meta-service.js +22 -36
  81. package/dist/services/personas-service.d.ts +134 -0
  82. package/dist/services/personas-service.js +40 -0
  83. package/dist/services/pikku-user-id.js +0 -4
  84. package/dist/services/queue-webhook-service.d.ts +2 -36
  85. package/dist/services/queue-webhook-service.js +9 -41
  86. package/dist/services/scheduler-service.d.ts +1 -50
  87. package/dist/services/scheduler-service.js +0 -10
  88. package/dist/services/schema-service.d.ts +1 -24
  89. package/dist/services/scope-service.d.ts +49 -34
  90. package/dist/services/scoped-secret-service.d.ts +0 -4
  91. package/dist/services/scoped-secret-service.js +0 -4
  92. package/dist/services/secret-host-binding.d.ts +8 -0
  93. package/dist/services/secret-host-binding.js +36 -0
  94. package/dist/services/secret-service.d.ts +5 -33
  95. package/dist/services/secretless.d.ts +6 -0
  96. package/dist/services/secretless.js +21 -0
  97. package/dist/services/stub-tracker.d.ts +7 -18
  98. package/dist/services/stub-tracker.js +8 -18
  99. package/dist/services/system-role-guard.d.ts +33 -0
  100. package/dist/services/system-role-guard.js +38 -0
  101. package/dist/services/trigger-service.d.ts +0 -12
  102. package/dist/services/typed-secret-service.d.ts +0 -7
  103. package/dist/services/typed-secret-service.js +1 -7
  104. package/dist/services/v8-coverage-service.d.ts +2 -3
  105. package/dist/services/v8-coverage-service.js +1 -2
  106. package/dist/services/variables-service.d.ts +1 -8
  107. package/dist/services/webhook-service.d.ts +19 -63
  108. package/dist/services/webhook-service.js +6 -20
  109. package/dist/services/workflow-service.d.ts +3 -15
  110. package/dist/testing/service-tests.js +0 -17
  111. package/dist/time-utils.d.ts +0 -16
  112. package/dist/time-utils.js +1 -19
  113. package/dist/types/core.types.d.ts +99 -219
  114. package/dist/types/core.types.js +0 -42
  115. package/dist/types/state.types.d.ts +4 -9
  116. package/dist/utils/hmac.d.ts +4 -10
  117. package/dist/utils/hmac.js +4 -10
  118. package/dist/utils/safe-fetch.d.ts +7 -35
  119. package/dist/utils/safe-fetch.js +13 -53
  120. package/dist/utils.d.ts +1 -6
  121. package/dist/utils.js +6 -15
  122. package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
  123. package/dist/wirings/actor-flow/index.d.ts +0 -9
  124. package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
  125. package/dist/wirings/actor-flow/run-conversation.js +14 -7
  126. package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
  127. package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
  128. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
  129. package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
  130. package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
  131. package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
  132. package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
  133. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
  134. package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
  135. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
  136. package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
  137. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
  138. package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
  139. package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
  140. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
  141. package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
  142. package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
  143. package/dist/wirings/ai-agent/index.d.ts +6 -4
  144. package/dist/wirings/ai-agent/index.js +5 -4
  145. package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
  146. package/dist/wirings/ai-agent/voice-input.js +46 -3
  147. package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
  148. package/dist/wirings/ai-agent/voice-output.js +153 -50
  149. package/dist/wirings/channel/channel-common.d.ts +7 -20
  150. package/dist/wirings/channel/channel-common.js +7 -21
  151. package/dist/wirings/channel/channel-handler.js +25 -6
  152. package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
  153. package/dist/wirings/channel/channel-host-rpc.js +38 -0
  154. package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
  155. package/dist/wirings/channel/channel-middleware-runner.js +0 -12
  156. package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
  157. package/dist/wirings/channel/channel-rpc-registry.js +89 -0
  158. package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
  159. package/dist/wirings/channel/channel-rpc-responder.js +71 -0
  160. package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
  161. package/dist/wirings/channel/channel-rpc-service.js +106 -0
  162. package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
  163. package/dist/wirings/channel/channel-rpc-validators.js +30 -0
  164. package/dist/wirings/channel/channel-rpc.d.ts +5 -0
  165. package/dist/wirings/channel/channel-rpc.js +5 -0
  166. package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
  167. package/dist/wirings/channel/channel-rpc.types.js +50 -0
  168. package/dist/wirings/channel/channel-runner.d.ts +0 -4
  169. package/dist/wirings/channel/channel-runner.js +0 -14
  170. package/dist/wirings/channel/channel-store.d.ts +0 -10
  171. package/dist/wirings/channel/channel.types.d.ts +12 -1
  172. package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
  173. package/dist/wirings/channel/define-channel-routes.js +0 -20
  174. package/dist/wirings/channel/eventhub-service.d.ts +0 -18
  175. package/dist/wirings/channel/index.d.ts +4 -1
  176. package/dist/wirings/channel/index.js +2 -0
  177. package/dist/wirings/channel/local/local-channel-runner.js +3 -1
  178. package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
  179. package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
  180. package/dist/wirings/channel/log-channels.d.ts +0 -4
  181. package/dist/wirings/channel/log-channels.js +0 -4
  182. package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
  183. package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
  184. package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
  185. package/dist/wirings/cli/channel/cli-approval.js +81 -0
  186. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
  187. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
  188. package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
  189. package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
  190. package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
  191. package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
  192. package/dist/wirings/cli/channel/index.d.ts +4 -0
  193. package/dist/wirings/cli/channel/index.js +2 -0
  194. package/dist/wirings/cli/cli-runner.d.ts +20 -20
  195. package/dist/wirings/cli/cli-runner.js +28 -89
  196. package/dist/wirings/cli/cli.types.d.ts +14 -3
  197. package/dist/wirings/cli/command-parser.d.ts +1 -10
  198. package/dist/wirings/cli/command-parser.js +10 -87
  199. package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
  200. package/dist/wirings/cli/define-cli-commands.js +1 -17
  201. package/dist/wirings/credential/credential.types.d.ts +0 -12
  202. package/dist/wirings/credential/define-credential.d.ts +48 -0
  203. package/dist/wirings/credential/define-credential.js +47 -0
  204. package/dist/wirings/credential/index.d.ts +1 -1
  205. package/dist/wirings/credential/index.js +1 -1
  206. package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
  207. package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
  208. package/dist/wirings/gateway/gateway-runner.js +8 -105
  209. package/dist/wirings/gateway/gateway.types.d.ts +7 -80
  210. package/dist/wirings/http/http-routes.d.ts +0 -63
  211. package/dist/wirings/http/http-routes.js +0 -63
  212. package/dist/wirings/http/http-runner.d.ts +1 -100
  213. package/dist/wirings/http/http-runner.js +12 -166
  214. package/dist/wirings/http/http.types.d.ts +16 -55
  215. package/dist/wirings/http/index.d.ts +2 -1
  216. package/dist/wirings/http/index.js +1 -1
  217. package/dist/wirings/http/log-http-routes.d.ts +0 -4
  218. package/dist/wirings/http/log-http-routes.js +0 -4
  219. package/dist/wirings/http/pikku-fetch-http-request.d.ts +6 -36
  220. package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
  221. package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
  222. package/dist/wirings/http/routers/path-to-regex.js +2 -13
  223. package/dist/wirings/http/web-request.d.ts +0 -8
  224. package/dist/wirings/http/web-request.js +25 -17
  225. package/dist/wirings/mcp/mcp-runner.d.ts +2 -0
  226. package/dist/wirings/mcp/mcp-runner.js +6 -16
  227. package/dist/wirings/mcp/mcp.types.d.ts +2 -35
  228. package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
  229. package/dist/wirings/oauth2/oauth2.types.js +0 -3
  230. package/dist/wirings/persona/define-personas.d.ts +28 -0
  231. package/dist/wirings/persona/define-personas.js +27 -0
  232. package/dist/wirings/persona/index.d.ts +21 -0
  233. package/dist/wirings/persona/index.js +17 -0
  234. package/dist/wirings/persona/persona-email.d.ts +37 -0
  235. package/dist/wirings/persona/persona-email.js +69 -0
  236. package/dist/wirings/persona/persona-environments.d.ts +45 -0
  237. package/dist/wirings/persona/persona-environments.js +81 -0
  238. package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
  239. package/dist/wirings/persona/persona-mailbox.js +53 -0
  240. package/dist/wirings/persona/persona.types.d.ts +125 -0
  241. package/dist/wirings/persona/persona.types.js +1 -0
  242. package/dist/wirings/persona/validate-personas.d.ts +53 -0
  243. package/dist/wirings/persona/validate-personas.js +94 -0
  244. package/dist/wirings/queue/index.d.ts +3 -0
  245. package/dist/wirings/queue/index.js +2 -3
  246. package/dist/wirings/queue/queue-identity.d.ts +28 -0
  247. package/dist/wirings/queue/queue-identity.js +102 -0
  248. package/dist/wirings/queue/queue-runner.d.ts +0 -19
  249. package/dist/wirings/queue/queue-runner.js +9 -30
  250. package/dist/wirings/queue/queue.types.d.ts +18 -89
  251. package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
  252. package/dist/wirings/queue/register-queue-helper.js +0 -11
  253. package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
  254. package/dist/wirings/queue/signed-queue-service.js +42 -0
  255. package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
  256. package/dist/wirings/queue/validate-worker-config.js +0 -14
  257. package/dist/wirings/role/define-system-role.d.ts +32 -0
  258. package/dist/wirings/role/define-system-role.js +31 -0
  259. package/dist/wirings/role/index.d.ts +3 -0
  260. package/dist/wirings/role/index.js +2 -0
  261. package/dist/wirings/role/role.types.d.ts +43 -0
  262. package/dist/wirings/role/role.types.js +1 -0
  263. package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
  264. package/dist/wirings/role/validate-role-definitions.js +71 -0
  265. package/dist/wirings/rpc/addon-runner.d.ts +0 -19
  266. package/dist/wirings/rpc/addon-runner.js +0 -51
  267. package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
  268. package/dist/wirings/rpc/remote-addon-auth.js +1 -9
  269. package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
  270. package/dist/wirings/rpc/rpc-runner.js +88 -105
  271. package/dist/wirings/rpc/rpc-types.d.ts +7 -6
  272. package/dist/wirings/rpc/wire-addon.d.ts +25 -0
  273. package/dist/wirings/rpc/wire-addon.js +62 -0
  274. package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
  275. package/dist/wirings/rpc/wire-remote-addon.js +0 -8
  276. package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
  277. package/dist/wirings/scheduler/log-schedulers.js +0 -4
  278. package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
  279. package/dist/wirings/scheduler/scheduler-runner.js +0 -1
  280. package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
  281. package/dist/wirings/scope/define-scope.d.ts +32 -0
  282. package/dist/wirings/scope/define-scope.js +31 -0
  283. package/dist/wirings/scope/index.d.ts +1 -1
  284. package/dist/wirings/scope/index.js +1 -1
  285. package/dist/wirings/scope/scope.types.d.ts +7 -9
  286. package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
  287. package/dist/wirings/scope/validate-scope-definitions.js +3 -21
  288. package/dist/wirings/secret/index.d.ts +1 -1
  289. package/dist/wirings/secret/index.js +1 -1
  290. package/dist/wirings/secret/secret.types.d.ts +19 -15
  291. package/dist/wirings/secret/secret.types.js +1 -1
  292. package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
  293. package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
  294. package/dist/wirings/trigger/trigger-runner.js +1 -24
  295. package/dist/wirings/trigger/trigger.types.d.ts +1 -82
  296. package/dist/wirings/trigger/trigger.types.js +0 -34
  297. package/dist/wirings/variable/index.d.ts +1 -1
  298. package/dist/wirings/variable/index.js +1 -1
  299. package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
  300. package/dist/wirings/variable/variable.types.d.ts +1 -13
  301. package/dist/wirings/variable/variable.types.js +1 -1
  302. package/dist/wirings/virtual-user/index.d.ts +27 -0
  303. package/dist/wirings/virtual-user/index.js +8 -0
  304. package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
  305. package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
  306. package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
  307. package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
  308. package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
  309. package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
  310. package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
  311. package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
  312. package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
  313. package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
  314. package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
  315. package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
  316. package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
  317. package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
  318. package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
  319. package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
  320. package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
  321. package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
  322. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
  323. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
  324. package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
  325. package/dist/wirings/workflow/feature.d.ts +0 -19
  326. package/dist/wirings/workflow/feature.js +0 -19
  327. package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
  328. package/dist/wirings/workflow/graph/graph-node.js +0 -34
  329. package/dist/wirings/workflow/graph/graph-runner.js +6 -41
  330. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
  331. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
  332. package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
  333. package/dist/wirings/workflow/index.d.ts +5 -7
  334. package/dist/wirings/workflow/index.js +3 -17
  335. package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
  336. package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
  337. package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
  338. package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
  339. package/dist/wirings/workflow/run-timeline.d.ts +0 -47
  340. package/dist/wirings/workflow/run-timeline.js +0 -22
  341. package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
  342. package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
  343. package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
  344. package/dist/wirings/workflow/scenario-poll.js +0 -12
  345. package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
  346. package/dist/wirings/workflow/scenario-prose.js +0 -18
  347. package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
  348. package/dist/wirings/workflow/scenario-step-guards.js +1 -14
  349. package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
  350. package/dist/wirings/workflow/scenario-step.types.js +5 -1
  351. package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
  352. package/dist/wirings/workflow/scenario-surface.js +56 -0
  353. package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
  354. package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
  355. package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
  356. package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
  357. package/dist/wirings/workflow/workflow.types.d.ts +0 -197
  358. package/knowledge/decisions/index.md +19 -0
  359. package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
  360. package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
  361. package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
  362. package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
  363. package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
  364. package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
  365. package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
  366. package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
  367. package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
  368. package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
  369. package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
  370. package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
  371. package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
  372. package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
  373. package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
  374. package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
  375. package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
  376. package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
  377. package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
  378. package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
  379. package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
  380. package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
  381. package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
  382. package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
  383. package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
  384. package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
  385. package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
  386. package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
  387. package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
  388. package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
  389. package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
  390. package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
  391. package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
  392. package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
  393. package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
  394. package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
  395. package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
  396. package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
  397. package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
  398. package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
  399. package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
  400. package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
  401. package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
  402. package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
  403. package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
  404. package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
  405. package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
  406. package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
  407. package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
  408. package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
  409. package/knowledge/decisions/internals/index.md +113 -0
  410. package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
  411. package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
  412. package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
  413. package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
  414. package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
  415. package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
  416. package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
  417. package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
  418. package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
  419. package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
  420. package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
  421. package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
  422. package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
  423. package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
  424. package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
  425. package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
  426. package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
  427. package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
  428. package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
  429. package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
  430. package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
  431. package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
  432. package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
  433. package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
  434. package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
  435. package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
  436. package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
  437. package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
  438. package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
  439. package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
  440. package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
  441. package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
  442. package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
  443. package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
  444. package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
  445. package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
  446. package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
  447. package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
  448. package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
  449. package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
  450. package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
  451. package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
  452. package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
  453. package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
  454. package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
  455. package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
  456. package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
  457. package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
  458. package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
  459. package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
  460. package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
  461. package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
  462. package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
  463. package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
  464. package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
  465. package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
  466. package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
  467. package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
  468. package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
  469. package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
  470. package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
  471. package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
  472. package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
  473. package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
  474. package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
  475. package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
  476. package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
  477. package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
  478. package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
  479. package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
  480. package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
  481. package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
  482. package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
  483. package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
  484. package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
  485. package/knowledge/decisions/security/index.md +55 -0
  486. package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
  487. package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
  488. package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
  489. package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
  490. package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
  491. package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
  492. package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
  493. package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
  494. package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
  495. package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
  496. package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
  497. package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
  498. package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
  499. package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
  500. package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
  501. package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
  502. package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
  503. package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
  504. package/knowledge/index.md +24 -0
  505. package/knowledge/questions/index.md +15 -0
  506. package/package.json +4 -2
  507. package/run-tests.sh +0 -0
  508. package/src/crypto-utils.test.ts +460 -19
  509. package/src/crypto-utils.ts +283 -55
  510. package/src/data-classification.ts +1 -7
  511. package/src/dev/hot-reload.test.ts +0 -4
  512. package/src/dev/hot-reload.ts +11 -30
  513. package/src/dev/module-runner.ts +7 -32
  514. package/src/dev/reload-meta.ts +9 -29
  515. package/src/errors/error-handler.ts +20 -35
  516. package/src/errors/error.test.ts +30 -1
  517. package/src/errors/errors.ts +73 -157
  518. package/src/function/abort-scope.test.ts +97 -0
  519. package/src/function/abort-scope.ts +80 -0
  520. package/src/function/function-runner.test.ts +75 -7
  521. package/src/function/function-runner.ts +73 -30
  522. package/src/function/functions.types.ts +56 -136
  523. package/src/function/list.types.test.ts +3 -25
  524. package/src/function/list.types.ts +12 -62
  525. package/src/gopass-secrets-removed.test.ts +51 -0
  526. package/src/handle-error.test.ts +108 -1
  527. package/src/handle-error.ts +8 -18
  528. package/src/index.ts +60 -1
  529. package/src/middleware/auth-apikey.test.ts +0 -1
  530. package/src/middleware/auth-apikey.ts +0 -17
  531. package/src/middleware/auth-bearer.test.ts +0 -3
  532. package/src/middleware/auth-bearer.ts +3 -40
  533. package/src/middleware/auth-cookie.test.ts +0 -6
  534. package/src/middleware/auth-cookie.ts +2 -26
  535. package/src/middleware/cors.test.ts +34 -0
  536. package/src/middleware/cors.ts +12 -33
  537. package/src/middleware/remote-auth.test.ts +24 -9
  538. package/src/middleware/remote-auth.ts +10 -2
  539. package/src/middleware/telemetry.ts +2 -31
  540. package/src/middleware-runner.test.ts +0 -2
  541. package/src/middleware-runner.ts +5 -74
  542. package/src/permissions.test.ts +30 -0
  543. package/src/permissions.ts +24 -74
  544. package/src/pikku-request.ts +0 -6
  545. package/src/pikku-state.ts +2 -30
  546. package/src/production-barrels-stay-lean.test.ts +110 -0
  547. package/src/remote.test.ts +172 -0
  548. package/src/remote.ts +17 -7
  549. package/src/schema.test.ts +103 -0
  550. package/src/schema.ts +35 -18
  551. package/src/scopes.ts +7 -48
  552. package/src/services/ai-agent-runner-service.ts +20 -0
  553. package/src/services/ai-embedding-service.ts +3 -25
  554. package/src/services/audit-service.ts +1 -2
  555. package/src/services/content-service.ts +1 -46
  556. package/src/services/credential-service.ts +3 -40
  557. package/src/services/credential-wire-service.test.ts +0 -2
  558. package/src/services/deployment-service.ts +3 -9
  559. package/src/services/gateway-service.ts +0 -15
  560. package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
  561. package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
  562. package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
  563. package/src/services/in-memory-queue-service.ts +1 -15
  564. package/src/services/in-memory-trigger-service.ts +1 -18
  565. package/src/services/in-memory-workflow-service.test.ts +0 -13
  566. package/src/services/in-memory-workflow-service.ts +4 -38
  567. package/src/services/index.ts +20 -15
  568. package/src/services/istanbul-coverage-service.ts +2 -8
  569. package/src/services/jwt-service.ts +1 -16
  570. package/src/services/local-content.test.ts +159 -27
  571. package/src/services/local-content.ts +55 -23
  572. package/src/services/local-gateway-service.ts +2 -17
  573. package/src/services/local-secrets.ts +0 -4
  574. package/src/services/logger-console.test.ts +0 -1
  575. package/src/services/logger-console.ts +3 -7
  576. package/src/services/logger.ts +2 -37
  577. package/src/services/meta-service.test.ts +1 -5
  578. package/src/services/meta-service.ts +41 -61
  579. package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
  580. package/src/services/pikku-user-id.ts +0 -4
  581. package/src/services/queue-webhook-service.ts +9 -41
  582. package/src/services/scheduler-service.ts +1 -50
  583. package/src/services/schema-service.ts +1 -24
  584. package/src/services/scope-service.ts +50 -34
  585. package/src/services/scoped-secret-service.ts +0 -4
  586. package/src/services/secret-host-binding.test.ts +138 -0
  587. package/src/services/secret-host-binding.ts +51 -0
  588. package/src/services/secret-service.ts +5 -33
  589. package/src/services/secretless.test.ts +54 -0
  590. package/src/services/secretless.ts +29 -0
  591. package/src/services/stub-tracker.ts +8 -18
  592. package/src/services/system-role-guard.test.ts +93 -0
  593. package/src/services/system-role-guard.ts +71 -0
  594. package/src/services/trigger-service.ts +0 -12
  595. package/src/services/typed-secret-service.ts +1 -7
  596. package/src/services/v8-coverage-service.ts +3 -6
  597. package/src/services/variables-service.ts +1 -8
  598. package/src/services/webhook-service.ts +19 -63
  599. package/src/services/workflow-service.ts +3 -20
  600. package/src/testing/service-tests.ts +0 -26
  601. package/src/time-utils.ts +1 -19
  602. package/src/types/core.types.ts +116 -229
  603. package/src/types/state.types.ts +7 -9
  604. package/src/utils/hmac.ts +4 -10
  605. package/src/utils/safe-fetch.ts +13 -54
  606. package/src/utils.test.ts +11 -2
  607. package/src/utils.ts +6 -15
  608. package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
  609. package/src/wirings/actor-flow/index.ts +0 -9
  610. package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
  611. package/src/wirings/actor-flow/run-conversation.ts +19 -12
  612. package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
  613. package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
  614. package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
  615. package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
  616. package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
  617. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
  618. package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
  619. package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
  620. package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
  621. package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
  622. package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
  623. package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
  624. package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
  625. package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
  626. package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
  627. package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
  628. package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
  629. package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
  630. package/src/wirings/ai-agent/index.ts +35 -3
  631. package/src/wirings/ai-agent/voice-input.test.ts +72 -7
  632. package/src/wirings/ai-agent/voice-input.ts +48 -3
  633. package/src/wirings/ai-agent/voice-output.test.ts +422 -0
  634. package/src/wirings/ai-agent/voice-output.ts +216 -56
  635. package/src/wirings/channel/channel-common.ts +15 -20
  636. package/src/wirings/channel/channel-handler.test.ts +50 -0
  637. package/src/wirings/channel/channel-handler.ts +32 -11
  638. package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
  639. package/src/wirings/channel/channel-host-rpc.ts +69 -0
  640. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
  641. package/src/wirings/channel/channel-middleware-runner.ts +0 -12
  642. package/src/wirings/channel/channel-rpc-registry.ts +116 -0
  643. package/src/wirings/channel/channel-rpc-responder.ts +117 -0
  644. package/src/wirings/channel/channel-rpc-service.ts +146 -0
  645. package/src/wirings/channel/channel-rpc-validators.ts +65 -0
  646. package/src/wirings/channel/channel-rpc.test.ts +820 -0
  647. package/src/wirings/channel/channel-rpc.ts +5 -0
  648. package/src/wirings/channel/channel-rpc.types.ts +150 -0
  649. package/src/wirings/channel/channel-runner.ts +0 -14
  650. package/src/wirings/channel/channel-store.ts +0 -10
  651. package/src/wirings/channel/channel.types.ts +19 -8
  652. package/src/wirings/channel/define-channel-routes.ts +0 -20
  653. package/src/wirings/channel/eventhub-service.ts +0 -18
  654. package/src/wirings/channel/index.ts +35 -0
  655. package/src/wirings/channel/local/local-channel-handler.ts +3 -1
  656. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
  657. package/src/wirings/channel/local/local-channel-runner.ts +3 -1
  658. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
  659. package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
  660. package/src/wirings/channel/log-channels.ts +0 -4
  661. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
  662. package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
  663. package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
  664. package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
  665. package/src/wirings/cli/channel/cli-approval.ts +135 -0
  666. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
  667. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
  668. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
  669. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
  670. package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
  671. package/src/wirings/cli/channel/index.ts +9 -0
  672. package/src/wirings/cli/cli-runner.test.ts +0 -1
  673. package/src/wirings/cli/cli-runner.ts +46 -88
  674. package/src/wirings/cli/cli.types.ts +14 -3
  675. package/src/wirings/cli/command-parser.test.ts +0 -4
  676. package/src/wirings/cli/command-parser.ts +11 -91
  677. package/src/wirings/cli/define-cli-commands.ts +1 -17
  678. package/src/wirings/credential/credential.types.ts +0 -12
  679. package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
  680. package/src/wirings/credential/index.ts +1 -1
  681. package/src/wirings/credential/validate-credential-definitions.ts +2 -4
  682. package/src/wirings/gateway/gateway-runner.test.ts +1 -21
  683. package/src/wirings/gateway/gateway-runner.ts +8 -110
  684. package/src/wirings/gateway/gateway.types.ts +7 -80
  685. package/src/wirings/http/http-routes.test.ts +0 -3
  686. package/src/wirings/http/http-routes.ts +0 -86
  687. package/src/wirings/http/http-runner.test.ts +0 -1
  688. package/src/wirings/http/http-runner.ts +12 -168
  689. package/src/wirings/http/http.types.ts +17 -62
  690. package/src/wirings/http/index.ts +5 -1
  691. package/src/wirings/http/log-http-routes.ts +0 -4
  692. package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
  693. package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
  694. package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
  695. package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
  696. package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
  697. package/src/wirings/http/routers/path-to-regex.ts +2 -13
  698. package/src/wirings/http/web-request.test.ts +33 -2
  699. package/src/wirings/http/web-request.ts +30 -17
  700. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
  701. package/src/wirings/mcp/mcp-runner.test.ts +40 -0
  702. package/src/wirings/mcp/mcp-runner.ts +9 -15
  703. package/src/wirings/mcp/mcp.types.ts +7 -42
  704. package/src/wirings/oauth2/oauth2.types.ts +0 -30
  705. package/src/wirings/persona/define-personas.ts +29 -0
  706. package/src/wirings/persona/index.ts +62 -0
  707. package/src/wirings/persona/persona-email.ts +87 -0
  708. package/src/wirings/persona/persona-environments.test.ts +183 -0
  709. package/src/wirings/persona/persona-environments.ts +138 -0
  710. package/src/wirings/persona/persona-mailbox.ts +156 -0
  711. package/src/wirings/persona/persona.test.ts +220 -0
  712. package/src/wirings/persona/persona.types.ts +131 -0
  713. package/src/wirings/persona/validate-personas.ts +133 -0
  714. package/src/wirings/queue/index.ts +13 -3
  715. package/src/wirings/queue/queue-identity.test.ts +453 -0
  716. package/src/wirings/queue/queue-identity.ts +173 -0
  717. package/src/wirings/queue/queue-runner.ts +12 -31
  718. package/src/wirings/queue/queue.types.ts +19 -89
  719. package/src/wirings/queue/register-queue-helper.ts +0 -14
  720. package/src/wirings/queue/signed-queue-service.ts +59 -0
  721. package/src/wirings/queue/validate-worker-config.ts +2 -28
  722. package/src/wirings/role/define-system-role.ts +33 -0
  723. package/src/wirings/role/index.ts +13 -0
  724. package/src/wirings/role/role.test.ts +104 -0
  725. package/src/wirings/role/role.types.ts +47 -0
  726. package/src/wirings/role/validate-role-definitions.ts +93 -0
  727. package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
  728. package/src/wirings/rpc/addon-runner.ts +0 -56
  729. package/src/wirings/rpc/addon-scopes.test.ts +225 -0
  730. package/src/wirings/rpc/remote-addon-auth.ts +1 -13
  731. package/src/wirings/rpc/rpc-runner.test.ts +186 -2
  732. package/src/wirings/rpc/rpc-runner.ts +145 -127
  733. package/src/wirings/rpc/rpc-types.ts +11 -6
  734. package/src/wirings/rpc/wire-addon.test.ts +43 -1
  735. package/src/wirings/rpc/wire-addon.ts +99 -0
  736. package/src/wirings/rpc/wire-remote-addon.ts +9 -29
  737. package/src/wirings/scheduler/log-schedulers.ts +0 -4
  738. package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
  739. package/src/wirings/scheduler/scheduler-runner.ts +0 -2
  740. package/src/wirings/scheduler/scheduler.types.ts +1 -14
  741. package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
  742. package/src/wirings/scope/index.ts +1 -1
  743. package/src/wirings/scope/scope.test.ts +1 -2
  744. package/src/wirings/scope/scope.types.ts +7 -9
  745. package/src/wirings/scope/validate-scope-definitions.ts +3 -21
  746. package/src/wirings/secret/index.ts +1 -1
  747. package/src/wirings/secret/secret.types.ts +19 -15
  748. package/src/wirings/secret/validate-secret-definitions.ts +2 -4
  749. package/src/wirings/trigger/trigger-runner.ts +1 -27
  750. package/src/wirings/trigger/trigger.types.ts +1 -82
  751. package/src/wirings/variable/index.ts +1 -1
  752. package/src/wirings/variable/validate-variable-definitions.ts +2 -4
  753. package/src/wirings/variable/variable.types.ts +1 -13
  754. package/src/wirings/virtual-user/index.ts +76 -0
  755. package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
  756. package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
  757. package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
  758. package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
  759. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
  760. package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
  761. package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
  762. package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
  763. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
  764. package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
  765. package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
  766. package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
  767. package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
  768. package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
  769. package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
  770. package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
  771. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
  772. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
  773. package/src/wirings/workflow/feature.ts +0 -19
  774. package/src/wirings/workflow/graph/graph-node.ts +0 -136
  775. package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
  776. package/src/wirings/workflow/graph/graph-runner.ts +6 -41
  777. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
  778. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
  779. package/src/wirings/workflow/index.ts +10 -44
  780. package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
  781. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
  782. package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
  783. package/src/wirings/workflow/run-timeline.test.ts +7 -19
  784. package/src/wirings/workflow/run-timeline.ts +0 -56
  785. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
  786. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
  787. package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
  788. package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
  789. package/src/wirings/workflow/scenario-poll.test.ts +0 -2
  790. package/src/wirings/workflow/scenario-poll.ts +0 -15
  791. package/src/wirings/workflow/scenario-prose.ts +0 -28
  792. package/src/wirings/workflow/scenario-service.test.ts +2 -9
  793. package/src/wirings/workflow/scenario-step-guards.ts +1 -14
  794. package/src/wirings/workflow/scenario-step.test.ts +159 -14
  795. package/src/wirings/workflow/scenario-step.types.ts +82 -6
  796. package/src/wirings/workflow/scenario-surface.test.ts +145 -0
  797. package/src/wirings/workflow/scenario-surface.ts +71 -0
  798. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
  799. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
  800. package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
  801. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
  802. package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
  803. package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
  804. package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
  805. package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
  806. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
  807. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
  808. package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
  809. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
  810. package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
  811. package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
  812. package/src/wirings/workflow/workflow.types.ts +0 -203
  813. package/tsconfig.tsbuildinfo +1 -1
  814. package/src/middleware/timeout.ts +0 -22
  815. package/src/pikku-response.ts +0 -5
  816. package/src/services/gopass-secrets.ts +0 -78
  817. package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
  818. package/src/wirings/workflow/dsl/index.ts +0 -36
  819. package/src/wirings/workflow/graph/index.ts +0 -15
@@ -1,6 +1,6 @@
1
1
  import type { CorePikkuMiddleware, CoreSingletonServices, CoreUserSession, CoreServices, MiddlewareMetadata } from '../../types/core.types.js';
2
2
  import type { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuFunction, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
3
- import type { PikkuChannel } from '../channel/channel.types.js';
3
+ import type { ChannelRemote, PikkuChannel } from '../channel/channel.types.js';
4
4
  /**
5
5
  * CLI option definition
6
6
  */
@@ -29,11 +29,11 @@ export interface CLIPositional {
29
29
  /**
30
30
  * CLI wire context
31
31
  */
32
- export type PikkuCLI = {
32
+ export type PikkuCLI<Remote extends (...args: any[]) => any = ChannelRemote> = {
33
33
  program: string;
34
34
  command: string[];
35
35
  data: Record<string, any>;
36
- channel: PikkuChannel<unknown, unknown>;
36
+ channel: PikkuChannel<unknown, unknown, Remote>;
37
37
  };
38
38
  /**
39
39
  * Runtime CLI program state
@@ -72,6 +72,12 @@ export type CLIProgramMeta = {
72
72
  commands: Record<string, CLICommandMeta>;
73
73
  options: Record<string, CLIOption>;
74
74
  defaultRenderName?: string;
75
+ /**
76
+ * Whether the channel serving this program over a websocket requires a
77
+ * session. Only meaningful for the generated channel backend — a locally
78
+ * executed CLI has no connection to authenticate.
79
+ */
80
+ auth?: boolean;
75
81
  };
76
82
  /**
77
83
  * Renderer metadata for CLI commands
@@ -195,6 +201,11 @@ export interface CoreCLI<Commands extends Record<string, CoreCLICommandConfig<an
195
201
  summary?: string;
196
202
  errors?: string[];
197
203
  tags?: string[];
204
+ /**
205
+ * Requires a session on the websocket serving this program remotely. Has no
206
+ * effect on local execution, where there is no connection to authenticate.
207
+ */
208
+ auth?: boolean;
198
209
  }
199
210
  /**
200
211
  * Generic renderer type that can transform data into any output format.
@@ -1,21 +1,12 @@
1
1
  import type { CLIMeta } from './cli.types.js';
2
- /**
3
- * Result of parsing CLI arguments
4
- */
5
2
  export interface ParsedCommand {
6
3
  program: string;
7
4
  commandPath: string[];
8
5
  positionals: Record<string, any>;
9
6
  options: Record<string, any>;
10
7
  errors: string[];
11
- /** Non-fatal diagnostics (e.g. unknown options that were accepted+ignored) */
8
+ /** Non-fatal: the command still runs. */
12
9
  warnings: string[];
13
10
  }
14
- /**
15
- * Parses raw CLI arguments into structured data for a specific program
16
- */
17
11
  export declare function parseCLIArguments(args: string[], programName: string, allMeta: CLIMeta): ParsedCommand;
18
- /**
19
- * Generates help text for a command in a specific program
20
- */
21
12
  export declare function generateCommandHelp(programName: string, allMeta: CLIMeta, commandPath?: string[]): string;
@@ -1,17 +1,13 @@
1
- /** Convert kebab-case to camelCase: "from-plan" → "fromPlan" */
1
+ /** "from-plan" → "fromPlan"; the parser accepts either spelling. */
2
2
  function toCamelCase(str) {
3
3
  return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
4
4
  }
5
- /** Convert camelCase to kebab-case for display: "autoApply" → "auto-apply".
6
- * Flags are stored camelCase (matching the function input field) but shown
7
- * kebab; the parser accepts both forms via toCamelCase. */
8
5
  function toKebabCase(str) {
9
6
  return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
10
7
  }
11
8
  /** Options the runner handles itself — never reported as unknown. */
12
9
  const RESERVED_OPTIONS = new Set(['help']);
13
- /** Levenshtein distance, capped-free and dependency-free. Used only to suggest
14
- * a near-miss option name, so the naive O(n*m) implementation is fine. */
10
+ /** Naive O(n*m); only ever used to suggest a near-miss option name. */
15
11
  function levenshtein(a, b) {
16
12
  if (a === b)
17
13
  return 0;
@@ -30,8 +26,7 @@ function levenshtein(a, b) {
30
26
  }
31
27
  return prev[b.length];
32
28
  }
33
- /** Finds the closest declared option (distance <= 2) to what the user typed.
34
- * Compares against the kebab-case rendering, since that is what is typed. */
29
+ /** Returns null beyond a distance of 2. */
35
30
  function suggestOption(typed, availableOptions) {
36
31
  let best = null;
37
32
  let bestDistance = 3;
@@ -45,9 +40,7 @@ function suggestOption(typed, availableOptions) {
45
40
  }
46
41
  return best;
47
42
  }
48
- /** Records a warning that an unknown long option was accepted but ignored.
49
- * Unknown options stay non-fatal for forward compatibility (a newer command
50
- * version may understand them) — they are just no longer silent. */
43
+ // knowledge: decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md
51
44
  function warnUnknownOption(typed, availableOptions, result) {
52
45
  if (RESERVED_OPTIONS.has(toCamelCase(typed))) {
53
46
  return;
@@ -56,9 +49,6 @@ function warnUnknownOption(typed, availableOptions, result) {
56
49
  result.warnings.push(`Unknown option: --${typed} (ignored)` +
57
50
  (suggestion ? ` Did you mean --${suggestion}?` : ''));
58
51
  }
59
- /**
60
- * Parses raw CLI arguments into structured data for a specific program
61
- */
62
52
  export function parseCLIArguments(args, programName, allMeta) {
63
53
  const result = {
64
54
  program: programName,
@@ -75,10 +65,8 @@ export function parseCLIArguments(args, programName, allMeta) {
75
65
  }
76
66
  let currentIndex = 0;
77
67
  let currentMeta = meta;
78
- // Parse command path (non-flag arguments at the beginning)
79
68
  while (currentIndex < args.length && !args[currentIndex].startsWith('-')) {
80
69
  const arg = args[currentIndex];
81
- // Check if this is a known subcommand
82
70
  if (currentMeta.commands && currentMeta.commands[arg]) {
83
71
  result.commandPath.push(arg);
84
72
  currentMeta = {
@@ -93,12 +81,10 @@ export function parseCLIArguments(args, programName, allMeta) {
93
81
  currentIndex++;
94
82
  }
95
83
  else {
96
- // Not a subcommand, must be a positional argument
97
84
  break;
98
85
  }
99
86
  }
100
- // If no command was parsed, check for a default command
101
- // Only use default if user didn't provide any non-flag arguments
87
+ // A default command only applies when the user named no command at all.
102
88
  const hasNonFlagArgs = args.some((arg, idx) => idx >= currentIndex && !arg.startsWith('-'));
103
89
  if (result.commandPath.length === 0 && meta.commands && !hasNonFlagArgs) {
104
90
  for (const [name, cmd] of Object.entries(meta.commands)) {
@@ -117,10 +103,8 @@ export function parseCLIArguments(args, programName, allMeta) {
117
103
  }
118
104
  }
119
105
  }
120
- // Get the final command metadata
121
106
  const commandMeta = getCommandMeta(meta, result.commandPath);
122
107
  if (!commandMeta) {
123
- // If we have no command path but there are non-flag args, the first arg is likely an unknown command
124
108
  if (result.commandPath.length === 0 &&
125
109
  hasNonFlagArgs &&
126
110
  args.length > 0 &&
@@ -132,41 +116,32 @@ export function parseCLIArguments(args, programName, allMeta) {
132
116
  }
133
117
  return result;
134
118
  }
135
- // A group/parent command — has subcommands but no runnable function of its
136
- // own — cannot be executed directly. Surface a routable error so the runner
137
- // shows its subcommand help instead of attempting to run a missing function.
119
+ // knowledge: decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md
138
120
  if (!commandMeta.pikkuFuncId &&
139
121
  commandMeta.subcommands &&
140
122
  Object.keys(commandMeta.subcommands).length > 0) {
141
123
  result.errors.push(`Missing subcommand: ${result.commandPath.join(' ')}`);
142
124
  return result;
143
125
  }
144
- // Collect all available options (global + inherited)
145
126
  const availableOptions = collectAvailableOptions(meta, result.commandPath);
146
- // Parse remaining arguments as positionals and options
147
127
  const positionalArgs = [];
148
128
  const optionArgs = {};
149
129
  while (currentIndex < args.length) {
150
130
  const arg = args[currentIndex];
151
131
  if (arg.startsWith('--')) {
152
- // Long option (--from-plan → fromPlan)
153
132
  const negatedKey = arg.startsWith('--no-')
154
133
  ? toCamelCase(arg.slice(5))
155
134
  : undefined;
156
135
  const equalIndex = arg.indexOf('=');
157
136
  if (negatedKey &&
158
137
  typeof availableOptions[negatedKey]?.default === 'boolean') {
159
- // --no-<flag> turns a boolean option off. Only options that declare a
160
- // boolean default can be negated, so a literal `--no-something` option
161
- // name still parses as itself.
138
+ // Requiring a boolean default keeps a literal `--no-something` option
139
+ // name parsing as itself rather than as a negation.
162
140
  optionArgs[negatedKey] = false;
163
141
  }
164
142
  else if (equalIndex > 0) {
165
- // --option=value format
166
143
  const key = toCamelCase(arg.slice(2, equalIndex));
167
144
  const optionDef = availableOptions[key];
168
- // Unknown options are allowed for forward compatibility, but warned
169
- // about so they are not silently dropped by the input schema.
170
145
  if (!optionDef) {
171
146
  warnUnknownOption(arg.slice(2, equalIndex), availableOptions, result);
172
147
  }
@@ -174,16 +149,12 @@ export function parseCLIArguments(args, programName, allMeta) {
174
149
  optionArgs[key] = parseOptionValue(value, optionDef);
175
150
  }
176
151
  else {
177
- // --option value format
178
152
  const key = toCamelCase(arg.slice(2));
179
153
  const optionDef = availableOptions[key];
180
- // Unknown options are allowed for forward compatibility, but warned
181
- // about so they are not silently dropped by the input schema.
182
154
  if (!optionDef) {
183
155
  warnUnknownOption(arg.slice(2), availableOptions, result);
184
156
  }
185
157
  if (optionDef && optionDef.array) {
186
- // Array option - collect all following non-flag values
187
158
  currentIndex++;
188
159
  const values = [];
189
160
  while (currentIndex < args.length &&
@@ -196,24 +167,20 @@ export function parseCLIArguments(args, programName, allMeta) {
196
167
  }
197
168
  else if (currentIndex + 1 < args.length &&
198
169
  !args[currentIndex + 1].startsWith('-')) {
199
- // Next arg is the value
200
170
  currentIndex++;
201
171
  optionArgs[key] = parseOptionValue(args[currentIndex], optionDef);
202
172
  }
203
173
  else {
204
- // Boolean flag
205
174
  optionArgs[key] = true;
206
175
  }
207
176
  }
208
177
  }
209
178
  else if (arg.startsWith('-') && arg.length > 1) {
210
- // Short option(s)
211
179
  for (let i = 1; i < arg.length; i++) {
212
180
  const shortFlag = arg[i];
213
- // Find the corresponding long option
214
181
  const longOption = findLongOption(shortFlag, availableOptions);
215
182
  if (longOption) {
216
- // Check if this is the last character and there's a value
183
+ // Only the last flag in a cluster can take a value.
217
184
  if (i === arg.length - 1 &&
218
185
  currentIndex + 1 < args.length &&
219
186
  !args[currentIndex + 1].startsWith('-')) {
@@ -221,7 +188,6 @@ export function parseCLIArguments(args, programName, allMeta) {
221
188
  optionArgs[longOption] = parseOptionValue(args[currentIndex], availableOptions[longOption]);
222
189
  }
223
190
  else {
224
- // Boolean flag
225
191
  optionArgs[longOption] = true;
226
192
  }
227
193
  }
@@ -231,21 +197,15 @@ export function parseCLIArguments(args, programName, allMeta) {
231
197
  }
232
198
  }
233
199
  else {
234
- // Positional argument
235
200
  positionalArgs.push(arg);
236
201
  }
237
202
  currentIndex++;
238
203
  }
239
- // Map positional arguments to named parameters
240
204
  mapPositionalArguments(commandMeta.positionals, positionalArgs, result);
241
- // Apply option defaults and validation
242
205
  applyOptionDefaults(availableOptions, optionArgs, result);
243
206
  result.options = optionArgs;
244
207
  return result;
245
208
  }
246
- /**
247
- * Gets the command metadata for a given path
248
- */
249
209
  function getCommandMeta(meta, path) {
250
210
  if (path.length === 0) {
251
211
  return null;
@@ -262,15 +222,11 @@ function getCommandMeta(meta, path) {
262
222
  }
263
223
  return current;
264
224
  }
265
- /**
266
- * Collects all available options through the inheritance chain
267
- */
268
225
  function collectAvailableOptions(meta, path) {
269
226
  let options = { ...meta.options };
270
227
  if (path.length === 0) {
271
228
  return options;
272
229
  }
273
- // Walk through the command path, merging options
274
230
  let current = meta.commands[path[0]];
275
231
  if (current) {
276
232
  options = { ...options, ...current.options };
@@ -283,9 +239,6 @@ function collectAvailableOptions(meta, path) {
283
239
  }
284
240
  return options;
285
241
  }
286
- /**
287
- * Finds the long option name for a short flag
288
- */
289
242
  function findLongOption(shortFlag, options) {
290
243
  for (const [name, option] of Object.entries(options)) {
291
244
  if (option.short === shortFlag) {
@@ -294,12 +247,8 @@ function findLongOption(shortFlag, options) {
294
247
  }
295
248
  return null;
296
249
  }
297
- /**
298
- * Parses an option value based on its definition
299
- */
300
250
  function parseOptionValue(value, optionDef) {
301
251
  if (!optionDef) {
302
- // No definition, try to infer type
303
252
  if (value === 'true')
304
253
  return true;
305
254
  if (value === 'false')
@@ -310,7 +259,6 @@ function parseOptionValue(value, optionDef) {
310
259
  return parseFloat(value);
311
260
  return value;
312
261
  }
313
- // Use default type from option definition
314
262
  const defaultValue = optionDef.default;
315
263
  if (typeof defaultValue === 'boolean') {
316
264
  return value === 'true' || value === '1' || value === 'yes';
@@ -318,21 +266,16 @@ function parseOptionValue(value, optionDef) {
318
266
  if (typeof defaultValue === 'number') {
319
267
  return parseFloat(value);
320
268
  }
321
- // Check choices
322
269
  if (optionDef.choices && !optionDef.choices.includes(value)) {
323
- // Invalid choice, but return anyway (validation will catch it)
270
+ // Deliberately not an error here applyOptionDefaults reports bad choices.
324
271
  return value;
325
272
  }
326
273
  return value;
327
274
  }
328
- /**
329
- * Maps positional arguments to named parameters
330
- */
331
275
  function mapPositionalArguments(positionalDefs, args, result) {
332
276
  let argIndex = 0;
333
277
  for (const def of positionalDefs) {
334
278
  if (def.variadic) {
335
- // Collect all remaining arguments
336
279
  if (argIndex < args.length) {
337
280
  result.positionals[def.name] = args.slice(argIndex);
338
281
  argIndex = args.length;
@@ -345,7 +288,6 @@ function mapPositionalArguments(positionalDefs, args, result) {
345
288
  }
346
289
  }
347
290
  else {
348
- // Single argument
349
291
  if (argIndex < args.length) {
350
292
  result.positionals[def.name] = args[argIndex];
351
293
  argIndex++;
@@ -355,25 +297,18 @@ function mapPositionalArguments(positionalDefs, args, result) {
355
297
  }
356
298
  }
357
299
  }
358
- // Check for extra positional arguments
359
300
  if (argIndex < args.length) {
360
301
  result.errors.push(`Unexpected arguments: ${args.slice(argIndex).join(' ')}`);
361
302
  }
362
303
  }
363
- /**
364
- * Applies option defaults and validates choices
365
- */
366
304
  function applyOptionDefaults(optionDefs, options, result) {
367
305
  for (const [name, def] of Object.entries(optionDefs)) {
368
- // Apply default if not provided
369
306
  if (!(name in options) && def.default !== undefined) {
370
307
  options[name] = def.default;
371
308
  }
372
- // Check required
373
309
  if (def.required && !(name in options)) {
374
310
  result.errors.push(`Missing required option: --${toKebabCase(name)}`);
375
311
  }
376
- // Validate choices
377
312
  if (def.choices && name in options) {
378
313
  const value = options[name];
379
314
  if (Array.isArray(value)) {
@@ -389,9 +324,6 @@ function applyOptionDefaults(optionDefs, options, result) {
389
324
  }
390
325
  }
391
326
  }
392
- /**
393
- * Generates help text for a command in a specific program
394
- */
395
327
  export function generateCommandHelp(programName, allMeta, commandPath = []) {
396
328
  const lines = [];
397
329
  const meta = allMeta.programs[programName];
@@ -399,7 +331,6 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
399
331
  return `Program not found: ${programName}`;
400
332
  }
401
333
  if (commandPath.length === 0) {
402
- // Root help for the program
403
334
  lines.push(`Usage: ${programName} <command> [options]`);
404
335
  lines.push('');
405
336
  lines.push('Commands:');
@@ -415,12 +346,10 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
415
346
  }
416
347
  }
417
348
  else {
418
- // Command-specific help
419
349
  const commandMeta = getCommandMeta(meta, commandPath);
420
350
  if (!commandMeta) {
421
351
  return `Unknown command: ${commandPath.join(' ')}`;
422
352
  }
423
- // Usage line
424
353
  let usage = `${programName} ${commandPath.join(' ')}`;
425
354
  if (commandMeta.parameters) {
426
355
  usage += ' ' + commandMeta.parameters;
@@ -430,7 +359,6 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
430
359
  lines.push('');
431
360
  lines.push(commandMeta.description);
432
361
  }
433
- // Positional arguments
434
362
  if (commandMeta.positionals.length > 0) {
435
363
  lines.push('');
436
364
  lines.push('Arguments:');
@@ -440,7 +368,6 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
440
368
  lines.push(` ${pos.name}${variadic} ${marker}`);
441
369
  }
442
370
  }
443
- // Subcommands
444
371
  if (commandMeta.subcommands &&
445
372
  Object.keys(commandMeta.subcommands).length > 0) {
446
373
  lines.push('');
@@ -450,7 +377,6 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
450
377
  lines.push(` ${name.padEnd(20)} ${desc}`);
451
378
  }
452
379
  }
453
- // Options
454
380
  const availableOptions = collectAvailableOptions(meta, commandPath);
455
381
  if (Object.keys(availableOptions).length > 0) {
456
382
  lines.push('');
@@ -460,9 +386,6 @@ export function generateCommandHelp(programName, allMeta, commandPath = []) {
460
386
  }
461
387
  return lines.join('\n');
462
388
  }
463
- /**
464
- * Formats options for help text
465
- */
466
389
  function formatOptions(options, lines) {
467
390
  for (const [name, opt] of Object.entries(options)) {
468
391
  let line = ' ';
@@ -1,19 +1,3 @@
1
1
  import type { CoreCLICommandConfig } from './cli.types.js';
2
- /**
3
- * Type-safe helper for defining CLI commands that can be composed.
4
- * Returns the commands record as-is (identity function) for use with `wireCLI`.
5
- *
6
- * @example
7
- * ```typescript
8
- * export const chatCommands = defineCLICommands({
9
- * chat: pikkuCLICommand({ func: chatFunc }),
10
- * 'chat:history': pikkuCLICommand({ func: historyFunc }),
11
- * })
12
- *
13
- * wireCLI({
14
- * program: 'my-app',
15
- * commands: { ...chatCommands, other: pikkuCLICommand({ func: otherFunc }) }
16
- * })
17
- * ```
18
- */
2
+ /** Identity at runtime; exists so a commands record can be typed and composed before `wireCLI`. */
19
3
  export declare function defineCLICommands<T extends Record<string, CoreCLICommandConfig<any, any, any, any>>>(commands: T): T;
@@ -1,20 +1,4 @@
1
- /**
2
- * Type-safe helper for defining CLI commands that can be composed.
3
- * Returns the commands record as-is (identity function) for use with `wireCLI`.
4
- *
5
- * @example
6
- * ```typescript
7
- * export const chatCommands = defineCLICommands({
8
- * chat: pikkuCLICommand({ func: chatFunc }),
9
- * 'chat:history': pikkuCLICommand({ func: historyFunc }),
10
- * })
11
- *
12
- * wireCLI({
13
- * program: 'my-app',
14
- * commands: { ...chatCommands, other: pikkuCLICommand({ func: otherFunc }) }
15
- * })
16
- * ```
17
- */
1
+ /** Identity at runtime; exists so a commands record can be typed and composed before `wireCLI`. */
18
2
  export function defineCLICommands(commands) {
19
3
  return commands;
20
4
  }
@@ -5,12 +5,6 @@ export type CoreCredential<T = unknown> = {
5
5
  description?: string;
6
6
  type: 'singleton' | 'wire';
7
7
  schema: T;
8
- /**
9
- * Link to documentation explaining how to obtain this value — a provider's
10
- * API-key page, a setup guide, an internal runbook. Surfaced by consoles and
11
- * deploy UIs so a user facing a missing value has somewhere to go instead of
12
- * an opaque identifier.
13
- */
14
8
  docsUrl?: string;
15
9
  oauth2?: OAuth2CredentialConfig & {
16
10
  appCredentialSecretId: string;
@@ -22,12 +16,6 @@ export type CredentialDefinitionMeta = {
22
16
  description?: string;
23
17
  type: 'singleton' | 'wire';
24
18
  schema?: Record<string, unknown> | string;
25
- /**
26
- * Link to documentation explaining how to obtain this value — a provider's
27
- * API-key page, a setup guide, an internal runbook. Surfaced by consoles and
28
- * deploy UIs so a user facing a missing value has somewhere to go instead of
29
- * an opaque identifier.
30
- */
31
19
  docsUrl?: string;
32
20
  oauth2?: OAuth2CredentialConfig & {
33
21
  appCredentialSecretId: string;
@@ -0,0 +1,48 @@
1
+ import type { CoreCredential } from './credential.types.js';
2
+ /**
3
+ * Declares a credential. The body is a no-op that tree-shakes away — the CLI
4
+ * reads the call by AST, so the declaration must be a top-level literal.
5
+ * `type: 'wire'` is per-user, `type: 'singleton'` is platform-wide.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Per-user API key
10
+ * defineCredential({
11
+ * name: 'stripe',
12
+ * displayName: 'Stripe API Key',
13
+ * type: 'wire',
14
+ * schema: z.object({ apiKey: z.string() }),
15
+ * })
16
+ *
17
+ * // Per-user OAuth
18
+ * defineCredential({
19
+ * name: 'google-sheets',
20
+ * displayName: 'Google Sheets',
21
+ * type: 'wire',
22
+ * schema: z.object({ accessToken: z.string(), refreshToken: z.string() }),
23
+ * oauth2: {
24
+ * appCredentialSecretId: 'GOOGLE_OAUTH_APP',
25
+ * authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
26
+ * tokenUrl: 'https://oauth2.googleapis.com/token',
27
+ * scopes: ['https://www.googleapis.com/auth/spreadsheets'],
28
+ * tokenSecretId: 'GOOGLE_OAUTH_TOKENS',
29
+ * }
30
+ * })
31
+ *
32
+ * // Platform-level OAuth (singleton)
33
+ * defineCredential({
34
+ * name: 'slack',
35
+ * displayName: 'Slack',
36
+ * type: 'singleton',
37
+ * schema: z.object({ accessToken: z.string(), refreshToken: z.string() }),
38
+ * oauth2: {
39
+ * appCredentialSecretId: 'SLACK_OAUTH_APP',
40
+ * authorizationUrl: 'https://slack.com/oauth/v2/authorize',
41
+ * tokenUrl: 'https://slack.com/api/oauth.v2.access',
42
+ * scopes: ['chat:write', 'channels:read'],
43
+ * tokenSecretId: 'SLACK_OAUTH_TOKENS',
44
+ * }
45
+ * })
46
+ * ```
47
+ */
48
+ export declare const defineCredential: <T>(_config: CoreCredential<T>) => void;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Declares a credential. The body is a no-op that tree-shakes away — the CLI
3
+ * reads the call by AST, so the declaration must be a top-level literal.
4
+ * `type: 'wire'` is per-user, `type: 'singleton'` is platform-wide.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Per-user API key
9
+ * defineCredential({
10
+ * name: 'stripe',
11
+ * displayName: 'Stripe API Key',
12
+ * type: 'wire',
13
+ * schema: z.object({ apiKey: z.string() }),
14
+ * })
15
+ *
16
+ * // Per-user OAuth
17
+ * defineCredential({
18
+ * name: 'google-sheets',
19
+ * displayName: 'Google Sheets',
20
+ * type: 'wire',
21
+ * schema: z.object({ accessToken: z.string(), refreshToken: z.string() }),
22
+ * oauth2: {
23
+ * appCredentialSecretId: 'GOOGLE_OAUTH_APP',
24
+ * authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
25
+ * tokenUrl: 'https://oauth2.googleapis.com/token',
26
+ * scopes: ['https://www.googleapis.com/auth/spreadsheets'],
27
+ * tokenSecretId: 'GOOGLE_OAUTH_TOKENS',
28
+ * }
29
+ * })
30
+ *
31
+ * // Platform-level OAuth (singleton)
32
+ * defineCredential({
33
+ * name: 'slack',
34
+ * displayName: 'Slack',
35
+ * type: 'singleton',
36
+ * schema: z.object({ accessToken: z.string(), refreshToken: z.string() }),
37
+ * oauth2: {
38
+ * appCredentialSecretId: 'SLACK_OAUTH_APP',
39
+ * authorizationUrl: 'https://slack.com/oauth/v2/authorize',
40
+ * tokenUrl: 'https://slack.com/api/oauth.v2.access',
41
+ * scopes: ['chat:write', 'channels:read'],
42
+ * tokenSecretId: 'SLACK_OAUTH_TOKENS',
43
+ * }
44
+ * })
45
+ * ```
46
+ */
47
+ export const defineCredential = (_config) => { };
@@ -1,3 +1,3 @@
1
- export { wireCredential } from './wire-credential.js';
1
+ export { defineCredential } from './define-credential.js';
2
2
  export { validateAndBuildCredentialDefinitionsMeta } from './validate-credential-definitions.js';
3
3
  export type { CoreCredential, CredentialDefinitionMeta, CredentialDefinitionsMeta, CredentialDefinitions, } from './credential.types.js';
@@ -1,2 +1,2 @@
1
- export { wireCredential } from './wire-credential.js';
1
+ export { defineCredential } from './define-credential.js';
2
2
  export { validateAndBuildCredentialDefinitionsMeta } from './validate-credential-definitions.js';
@@ -1,6 +1,4 @@
1
1
  import type { CredentialDefinitions, CredentialDefinitionsMeta } from './credential.types.js';
2
- export interface SchemaRefLike {
3
- variableName: string;
4
- sourceFile: string;
5
- }
2
+ import type { SchemaRefLike } from '../../types/core.types.js';
3
+ export type { SchemaRefLike };
6
4
  export declare function validateAndBuildCredentialDefinitionsMeta(definitions: CredentialDefinitions, schemaLookup: Map<string, SchemaRefLike>): CredentialDefinitionsMeta;
@@ -1,25 +1,6 @@
1
1
  import type { CoreGateway, GatewayAdapter } from './gateway.types.js';
2
2
  export declare const resolveGatewayAdapter: (config: CoreGateway, services: CoreSingletonServices) => Promise<GatewayAdapter>;
3
3
  import type { CoreSingletonServices } from '../../types/core.types.js';
4
- /**
5
- * Register a messaging gateway.
6
- *
7
- * `wireGateway` is a meta-wiring that composes existing primitives
8
- * (`wireHTTP`, `wireChannel`) under the hood. It does not replace them;
9
- * it layers on top.
10
- *
11
- * @param config - Gateway configuration (name, type, adapter, func, middleware, etc.)
12
- */
13
4
  export declare const wireGateway: (config: CoreGateway) => void;
14
- /**
15
- * Create the message handler callback for a listener gateway.
16
- *
17
- * Returns a function `(rawData: unknown) => Promise<void>` that can be
18
- * passed to `adapter.init()`. Used by `LocalGatewayService` (and any
19
- * other GatewayService implementation) to wire up listener gateways.
20
- *
21
- * @param name - Gateway name (for wire.gateway metadata)
22
- * @param config - The gateway configuration (adapter, func, middleware)
23
- * @param singletonServices - Singleton services to pass to handler/middleware
24
- */
5
+ /** The returned callback is what a GatewayService passes to `adapter.init()`. */
25
6
  export declare const createListenerMessageHandler: (name: string, config: CoreGateway, singletonServices: CoreSingletonServices) => ((rawData: unknown) => Promise<void>);