@pikku/core 0.12.72 → 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.
- package/CHANGELOG.md +793 -0
- package/dist/crypto-utils.d.ts +30 -5
- package/dist/crypto-utils.js +146 -41
- package/dist/dev/hot-reload.js +11 -30
- package/dist/dev/module-runner.d.ts +3 -7
- package/dist/dev/module-runner.js +4 -10
- package/dist/dev/reload-meta.d.ts +8 -20
- package/dist/dev/reload-meta.js +9 -29
- package/dist/errors/error-handler.d.ts +5 -30
- package/dist/errors/error-handler.js +16 -32
- package/dist/errors/errors.d.ts +32 -151
- package/dist/errors/errors.js +55 -157
- package/dist/function/abort-scope.d.ts +47 -0
- package/dist/function/abort-scope.js +63 -0
- package/dist/function/function-runner.js +37 -32
- package/dist/function/functions.types.d.ts +44 -136
- package/dist/function/functions.types.js +0 -58
- package/dist/function/list.types.d.ts +12 -62
- package/dist/function/list.types.js +4 -25
- package/dist/handle-error.d.ts +0 -13
- package/dist/handle-error.js +0 -18
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/middleware/auth-apikey.d.ts +3 -18
- package/dist/middleware/auth-apikey.js +0 -17
- package/dist/middleware/auth-bearer.d.ts +6 -41
- package/dist/middleware/auth-bearer.js +3 -40
- package/dist/middleware/auth-cookie.d.ts +5 -27
- package/dist/middleware/auth-cookie.js +2 -26
- package/dist/middleware/cors.d.ts +7 -34
- package/dist/middleware/cors.js +7 -34
- package/dist/middleware/remote-auth.d.ts +3 -1
- package/dist/middleware/remote-auth.js +3 -2
- package/dist/middleware/telemetry.d.ts +8 -33
- package/dist/middleware/telemetry.js +2 -31
- package/dist/middleware-runner.d.ts +4 -55
- package/dist/middleware-runner.js +5 -74
- package/dist/permissions.d.ts +3 -44
- package/dist/permissions.js +19 -71
- package/dist/pikku-request.d.ts +0 -6
- package/dist/pikku-request.js +0 -6
- package/dist/pikku-state.d.ts +0 -26
- package/dist/pikku-state.js +2 -30
- package/dist/remote.d.ts +3 -5
- package/dist/remote.js +8 -7
- package/dist/schema.d.ts +5 -39
- package/dist/schema.js +5 -39
- package/dist/scopes.d.ts +4 -23
- package/dist/scopes.js +7 -48
- package/dist/services/ai-agent-runner-service.d.ts +20 -0
- package/dist/services/ai-embedding-service.d.ts +2 -25
- package/dist/services/audit-service.js +1 -2
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/deployment-service.d.ts +3 -9
- package/dist/services/gateway-service.d.ts +0 -15
- package/dist/services/http-personas.d.ts +80 -0
- package/dist/services/http-personas.js +233 -0
- package/dist/services/in-memory-queue-service.d.ts +0 -14
- package/dist/services/in-memory-queue-service.js +1 -15
- package/dist/services/in-memory-trigger-service.d.ts +0 -18
- package/dist/services/in-memory-trigger-service.js +1 -18
- package/dist/services/in-memory-workflow-service.d.ts +0 -16
- package/dist/services/in-memory-workflow-service.js +4 -33
- package/dist/services/index.d.ts +5 -6
- package/dist/services/index.js +2 -5
- package/dist/services/istanbul-coverage-service.d.ts +1 -5
- package/dist/services/istanbul-coverage-service.js +2 -8
- package/dist/services/jwt-service.d.ts +1 -16
- package/dist/services/local-content.d.ts +13 -2
- package/dist/services/local-content.js +40 -13
- package/dist/services/local-gateway-service.d.ts +0 -16
- package/dist/services/local-gateway-service.js +2 -17
- package/dist/services/local-secrets.d.ts +0 -4
- package/dist/services/local-secrets.js +0 -4
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +2 -37
- package/dist/services/meta-service.d.ts +23 -26
- package/dist/services/meta-service.js +22 -36
- package/dist/services/personas-service.d.ts +134 -0
- package/dist/services/personas-service.js +40 -0
- package/dist/services/pikku-user-id.js +0 -4
- package/dist/services/queue-webhook-service.d.ts +2 -36
- package/dist/services/queue-webhook-service.js +9 -41
- package/dist/services/scheduler-service.d.ts +1 -50
- package/dist/services/scheduler-service.js +0 -10
- package/dist/services/schema-service.d.ts +1 -24
- package/dist/services/scope-service.d.ts +49 -34
- package/dist/services/scoped-secret-service.d.ts +0 -4
- package/dist/services/scoped-secret-service.js +0 -4
- package/dist/services/secret-host-binding.d.ts +8 -0
- package/dist/services/secret-host-binding.js +36 -0
- package/dist/services/secret-service.d.ts +5 -33
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +21 -0
- package/dist/services/stub-tracker.d.ts +7 -18
- package/dist/services/stub-tracker.js +8 -18
- package/dist/services/system-role-guard.d.ts +33 -0
- package/dist/services/system-role-guard.js +38 -0
- package/dist/services/trigger-service.d.ts +0 -12
- package/dist/services/typed-secret-service.d.ts +0 -7
- package/dist/services/typed-secret-service.js +1 -7
- package/dist/services/v8-coverage-service.d.ts +2 -3
- package/dist/services/v8-coverage-service.js +1 -2
- package/dist/services/variables-service.d.ts +1 -8
- package/dist/services/webhook-service.d.ts +19 -63
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +0 -17
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +99 -219
- package/dist/types/core.types.js +0 -42
- package/dist/types/state.types.d.ts +4 -9
- package/dist/utils/hmac.d.ts +4 -10
- package/dist/utils/hmac.js +4 -10
- package/dist/utils/safe-fetch.d.ts +7 -35
- package/dist/utils/safe-fetch.js +13 -53
- package/dist/utils.d.ts +1 -6
- package/dist/utils.js +6 -15
- package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
- package/dist/wirings/actor-flow/index.d.ts +0 -9
- package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
- package/dist/wirings/actor-flow/run-conversation.js +14 -7
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
- package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
- package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
- package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
- package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
- package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
- package/dist/wirings/ai-agent/index.d.ts +6 -4
- package/dist/wirings/ai-agent/index.js +5 -4
- package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
- package/dist/wirings/ai-agent/voice-input.js +46 -3
- package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
- package/dist/wirings/ai-agent/voice-output.js +153 -50
- package/dist/wirings/channel/channel-common.d.ts +7 -20
- package/dist/wirings/channel/channel-common.js +7 -21
- package/dist/wirings/channel/channel-handler.js +25 -6
- package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
- package/dist/wirings/channel/channel-host-rpc.js +38 -0
- package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
- package/dist/wirings/channel/channel-middleware-runner.js +0 -12
- package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
- package/dist/wirings/channel/channel-rpc-registry.js +89 -0
- package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
- package/dist/wirings/channel/channel-rpc-responder.js +71 -0
- package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
- package/dist/wirings/channel/channel-rpc-service.js +106 -0
- package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
- package/dist/wirings/channel/channel-rpc-validators.js +30 -0
- package/dist/wirings/channel/channel-rpc.d.ts +5 -0
- package/dist/wirings/channel/channel-rpc.js +5 -0
- package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
- package/dist/wirings/channel/channel-rpc.types.js +50 -0
- package/dist/wirings/channel/channel-runner.d.ts +0 -4
- package/dist/wirings/channel/channel-runner.js +0 -14
- package/dist/wirings/channel/channel-store.d.ts +0 -10
- package/dist/wirings/channel/channel.types.d.ts +12 -1
- package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
- package/dist/wirings/channel/define-channel-routes.js +0 -20
- package/dist/wirings/channel/eventhub-service.d.ts +0 -18
- package/dist/wirings/channel/index.d.ts +4 -1
- package/dist/wirings/channel/index.js +2 -0
- package/dist/wirings/channel/local/local-channel-runner.js +3 -1
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
- package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
- package/dist/wirings/channel/log-channels.d.ts +0 -4
- package/dist/wirings/channel/log-channels.js +0 -4
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
- package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
- package/dist/wirings/cli/channel/cli-approval.js +81 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
- package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
- package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
- package/dist/wirings/cli/channel/index.d.ts +4 -0
- package/dist/wirings/cli/channel/index.js +2 -0
- package/dist/wirings/cli/cli-runner.d.ts +20 -20
- package/dist/wirings/cli/cli-runner.js +28 -89
- package/dist/wirings/cli/cli.types.d.ts +14 -3
- package/dist/wirings/cli/command-parser.d.ts +1 -10
- package/dist/wirings/cli/command-parser.js +10 -87
- package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
- package/dist/wirings/cli/define-cli-commands.js +1 -17
- package/dist/wirings/credential/credential.types.d.ts +0 -12
- package/dist/wirings/credential/define-credential.d.ts +48 -0
- package/dist/wirings/credential/define-credential.js +47 -0
- package/dist/wirings/credential/index.d.ts +1 -1
- package/dist/wirings/credential/index.js +1 -1
- package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
- package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
- package/dist/wirings/gateway/gateway-runner.js +8 -105
- package/dist/wirings/gateway/gateway.types.d.ts +7 -80
- package/dist/wirings/http/http-routes.d.ts +0 -63
- package/dist/wirings/http/http-routes.js +0 -63
- package/dist/wirings/http/http-runner.d.ts +0 -99
- package/dist/wirings/http/http-runner.js +9 -165
- package/dist/wirings/http/http.types.d.ts +14 -55
- package/dist/wirings/http/log-http-routes.d.ts +0 -4
- package/dist/wirings/http/log-http-routes.js +0 -4
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +0 -40
- package/dist/wirings/http/pikku-fetch-http-request.js +0 -58
- package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
- package/dist/wirings/http/routers/path-to-regex.js +2 -13
- package/dist/wirings/http/web-request.d.ts +0 -8
- package/dist/wirings/http/web-request.js +25 -17
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -4
- package/dist/wirings/mcp/mcp-runner.js +1 -14
- package/dist/wirings/mcp/mcp.types.d.ts +2 -35
- package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
- package/dist/wirings/oauth2/oauth2.types.js +0 -3
- package/dist/wirings/persona/define-personas.d.ts +28 -0
- package/dist/wirings/persona/define-personas.js +27 -0
- package/dist/wirings/persona/index.d.ts +21 -0
- package/dist/wirings/persona/index.js +17 -0
- package/dist/wirings/persona/persona-email.d.ts +37 -0
- package/dist/wirings/persona/persona-email.js +69 -0
- package/dist/wirings/persona/persona-environments.d.ts +45 -0
- package/dist/wirings/persona/persona-environments.js +81 -0
- package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
- package/dist/wirings/persona/persona-mailbox.js +53 -0
- package/dist/wirings/persona/persona.types.d.ts +125 -0
- package/dist/wirings/persona/persona.types.js +1 -0
- package/dist/wirings/persona/validate-personas.d.ts +53 -0
- package/dist/wirings/persona/validate-personas.js +94 -0
- package/dist/wirings/queue/index.d.ts +3 -0
- package/dist/wirings/queue/index.js +2 -3
- package/dist/wirings/queue/queue-identity.d.ts +28 -0
- package/dist/wirings/queue/queue-identity.js +102 -0
- package/dist/wirings/queue/queue-runner.d.ts +0 -19
- package/dist/wirings/queue/queue-runner.js +9 -30
- package/dist/wirings/queue/queue.types.d.ts +18 -89
- package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
- package/dist/wirings/queue/register-queue-helper.js +0 -11
- package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
- package/dist/wirings/queue/signed-queue-service.js +42 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
- package/dist/wirings/queue/validate-worker-config.js +0 -14
- package/dist/wirings/role/define-system-role.d.ts +32 -0
- package/dist/wirings/role/define-system-role.js +31 -0
- package/dist/wirings/role/index.d.ts +3 -0
- package/dist/wirings/role/index.js +2 -0
- package/dist/wirings/role/role.types.d.ts +43 -0
- package/dist/wirings/role/role.types.js +1 -0
- package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
- package/dist/wirings/role/validate-role-definitions.js +71 -0
- package/dist/wirings/rpc/addon-runner.d.ts +0 -19
- package/dist/wirings/rpc/addon-runner.js +0 -51
- package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
- package/dist/wirings/rpc/remote-addon-auth.js +1 -9
- package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
- package/dist/wirings/rpc/rpc-runner.js +88 -105
- package/dist/wirings/rpc/rpc-types.d.ts +7 -6
- package/dist/wirings/rpc/wire-addon.d.ts +25 -0
- package/dist/wirings/rpc/wire-addon.js +62 -0
- package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
- package/dist/wirings/rpc/wire-remote-addon.js +0 -8
- package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
- package/dist/wirings/scheduler/log-schedulers.js +0 -4
- package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
- package/dist/wirings/scheduler/scheduler-runner.js +0 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
- package/dist/wirings/scope/define-scope.d.ts +32 -0
- package/dist/wirings/scope/define-scope.js +31 -0
- package/dist/wirings/scope/index.d.ts +1 -1
- package/dist/wirings/scope/index.js +1 -1
- package/dist/wirings/scope/scope.types.d.ts +7 -9
- package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
- package/dist/wirings/scope/validate-scope-definitions.js +3 -21
- package/dist/wirings/secret/index.d.ts +1 -1
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +19 -15
- package/dist/wirings/secret/secret.types.js +1 -1
- package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
- package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
- package/dist/wirings/trigger/trigger-runner.js +1 -24
- package/dist/wirings/trigger/trigger.types.d.ts +1 -82
- package/dist/wirings/trigger/trigger.types.js +0 -34
- package/dist/wirings/variable/index.d.ts +1 -1
- package/dist/wirings/variable/index.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
- package/dist/wirings/variable/variable.types.d.ts +1 -13
- package/dist/wirings/variable/variable.types.js +1 -1
- package/dist/wirings/virtual-user/index.d.ts +27 -0
- package/dist/wirings/virtual-user/index.js +8 -0
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
- package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
- package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
- package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
- package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
- package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
- package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
- package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
- package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
- package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
- package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
- package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
- package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
- package/dist/wirings/workflow/feature.d.ts +0 -19
- package/dist/wirings/workflow/feature.js +0 -19
- package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
- package/dist/wirings/workflow/graph/graph-node.js +0 -34
- package/dist/wirings/workflow/graph/graph-runner.js +6 -41
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
- package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
- package/dist/wirings/workflow/index.d.ts +5 -7
- package/dist/wirings/workflow/index.js +3 -17
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
- package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
- package/dist/wirings/workflow/run-timeline.d.ts +0 -47
- package/dist/wirings/workflow/run-timeline.js +0 -22
- package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
- package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
- package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
- package/dist/wirings/workflow/scenario-poll.js +0 -12
- package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
- package/dist/wirings/workflow/scenario-prose.js +0 -18
- package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
- package/dist/wirings/workflow/scenario-step-guards.js +1 -14
- package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
- package/dist/wirings/workflow/scenario-step.types.js +5 -1
- package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
- package/dist/wirings/workflow/scenario-surface.js +56 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
- package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
- package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
- package/dist/wirings/workflow/workflow.types.d.ts +0 -197
- package/knowledge/decisions/index.md +19 -0
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
- package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
- package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
- package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
- package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
- package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
- package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
- package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
- package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
- package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
- package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
- package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
- package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
- package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
- package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
- package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
- package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
- package/knowledge/decisions/internals/index.md +113 -0
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
- package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
- package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
- package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
- package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
- package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
- package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
- package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
- package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
- package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
- package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
- package/knowledge/decisions/security/index.md +55 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
- package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
- package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
- package/knowledge/index.md +24 -0
- package/knowledge/questions/index.md +15 -0
- package/package.json +4 -1
- package/run-tests.sh +0 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +283 -55
- package/src/data-classification.ts +1 -7
- package/src/dev/hot-reload.test.ts +0 -4
- package/src/dev/hot-reload.ts +11 -30
- package/src/dev/module-runner.ts +7 -32
- package/src/dev/reload-meta.ts +9 -29
- package/src/errors/error-handler.ts +20 -35
- package/src/errors/error.test.ts +30 -1
- package/src/errors/errors.ts +73 -157
- package/src/function/abort-scope.test.ts +97 -0
- package/src/function/abort-scope.ts +80 -0
- package/src/function/function-runner.test.ts +0 -7
- package/src/function/function-runner.ts +62 -32
- package/src/function/functions.types.ts +56 -136
- package/src/function/list.types.test.ts +3 -25
- package/src/function/list.types.ts +12 -62
- package/src/handle-error.ts +0 -18
- package/src/index.ts +60 -1
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +0 -3
- package/src/middleware/auth-bearer.ts +3 -40
- package/src/middleware/auth-cookie.test.ts +0 -6
- package/src/middleware/auth-cookie.ts +2 -26
- package/src/middleware/cors.test.ts +34 -0
- package/src/middleware/cors.ts +12 -33
- package/src/middleware/remote-auth.test.ts +24 -9
- package/src/middleware/remote-auth.ts +10 -2
- package/src/middleware/telemetry.ts +2 -31
- package/src/middleware-runner.test.ts +0 -2
- package/src/middleware-runner.ts +5 -74
- package/src/permissions.test.ts +30 -0
- package/src/permissions.ts +24 -74
- package/src/pikku-request.ts +0 -6
- package/src/pikku-state.ts +2 -30
- package/src/production-barrels-stay-lean.test.ts +110 -0
- package/src/remote.test.ts +172 -0
- package/src/remote.ts +17 -7
- package/src/schema.ts +5 -39
- package/src/scopes.ts +7 -48
- package/src/services/ai-agent-runner-service.ts +20 -0
- package/src/services/ai-embedding-service.ts +3 -25
- package/src/services/audit-service.ts +1 -2
- package/src/services/content-service.ts +1 -46
- package/src/services/credential-service.ts +3 -40
- package/src/services/credential-wire-service.test.ts +0 -2
- package/src/services/deployment-service.ts +3 -9
- package/src/services/gateway-service.ts +0 -15
- package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
- package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
- package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
- package/src/services/in-memory-queue-service.ts +1 -15
- package/src/services/in-memory-trigger-service.ts +1 -18
- package/src/services/in-memory-workflow-service.test.ts +0 -13
- package/src/services/in-memory-workflow-service.ts +4 -38
- package/src/services/index.ts +20 -15
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- package/src/services/local-content.test.ts +159 -27
- package/src/services/local-content.ts +55 -23
- package/src/services/local-gateway-service.ts +2 -17
- package/src/services/local-secrets.ts +0 -4
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +2 -37
- package/src/services/meta-service.test.ts +1 -5
- package/src/services/meta-service.ts +41 -61
- package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
- package/src/services/pikku-user-id.ts +0 -4
- package/src/services/queue-webhook-service.ts +9 -41
- package/src/services/scheduler-service.ts +1 -50
- package/src/services/schema-service.ts +1 -24
- package/src/services/scope-service.ts +50 -34
- package/src/services/scoped-secret-service.ts +0 -4
- package/src/services/secret-host-binding.test.ts +138 -0
- package/src/services/secret-host-binding.ts +51 -0
- package/src/services/secret-service.ts +5 -33
- package/src/services/secretless.test.ts +54 -0
- package/src/services/secretless.ts +29 -0
- package/src/services/stub-tracker.ts +8 -18
- package/src/services/system-role-guard.test.ts +93 -0
- package/src/services/system-role-guard.ts +71 -0
- package/src/services/trigger-service.ts +0 -12
- package/src/services/typed-secret-service.ts +1 -7
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +19 -63
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +0 -26
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +116 -229
- package/src/types/state.types.ts +7 -9
- package/src/utils/hmac.ts +4 -10
- package/src/utils/safe-fetch.ts +13 -54
- package/src/utils.test.ts +11 -2
- package/src/utils.ts +6 -15
- package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
- package/src/wirings/actor-flow/index.ts +0 -9
- package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
- package/src/wirings/actor-flow/run-conversation.ts +19 -12
- package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
- package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
- package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
- package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
- package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
- package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
- package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
- package/src/wirings/ai-agent/index.ts +35 -3
- package/src/wirings/ai-agent/voice-input.test.ts +72 -7
- package/src/wirings/ai-agent/voice-input.ts +48 -3
- package/src/wirings/ai-agent/voice-output.test.ts +422 -0
- package/src/wirings/ai-agent/voice-output.ts +216 -56
- package/src/wirings/channel/channel-common.ts +15 -20
- package/src/wirings/channel/channel-handler.test.ts +50 -0
- package/src/wirings/channel/channel-handler.ts +32 -11
- package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
- package/src/wirings/channel/channel-host-rpc.ts +69 -0
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
- package/src/wirings/channel/channel-middleware-runner.ts +0 -12
- package/src/wirings/channel/channel-rpc-registry.ts +116 -0
- package/src/wirings/channel/channel-rpc-responder.ts +117 -0
- package/src/wirings/channel/channel-rpc-service.ts +146 -0
- package/src/wirings/channel/channel-rpc-validators.ts +65 -0
- package/src/wirings/channel/channel-rpc.test.ts +820 -0
- package/src/wirings/channel/channel-rpc.ts +5 -0
- package/src/wirings/channel/channel-rpc.types.ts +150 -0
- package/src/wirings/channel/channel-runner.ts +0 -14
- package/src/wirings/channel/channel-store.ts +0 -10
- package/src/wirings/channel/channel.types.ts +19 -8
- package/src/wirings/channel/define-channel-routes.ts +0 -20
- package/src/wirings/channel/eventhub-service.ts +0 -18
- package/src/wirings/channel/index.ts +35 -0
- package/src/wirings/channel/local/local-channel-handler.ts +3 -1
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
- package/src/wirings/channel/local/local-channel-runner.ts +3 -1
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
- package/src/wirings/channel/log-channels.ts +0 -4
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
- package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
- package/src/wirings/cli/channel/cli-approval.ts +135 -0
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
- package/src/wirings/cli/channel/index.ts +9 -0
- package/src/wirings/cli/cli-runner.test.ts +0 -1
- package/src/wirings/cli/cli-runner.ts +46 -88
- package/src/wirings/cli/cli.types.ts +14 -3
- package/src/wirings/cli/command-parser.test.ts +0 -4
- package/src/wirings/cli/command-parser.ts +11 -91
- package/src/wirings/cli/define-cli-commands.ts +1 -17
- package/src/wirings/credential/credential.types.ts +0 -12
- package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
- package/src/wirings/credential/index.ts +1 -1
- package/src/wirings/credential/validate-credential-definitions.ts +2 -4
- package/src/wirings/gateway/gateway-runner.test.ts +1 -21
- package/src/wirings/gateway/gateway-runner.ts +8 -110
- package/src/wirings/gateway/gateway.types.ts +7 -80
- package/src/wirings/http/http-routes.test.ts +0 -3
- package/src/wirings/http/http-routes.ts +0 -86
- package/src/wirings/http/http-runner.test.ts +0 -1
- package/src/wirings/http/http-runner.ts +8 -167
- package/src/wirings/http/http.types.ts +15 -62
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +2 -10
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -58
- package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
- package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
- package/src/wirings/http/routers/path-to-regex.ts +2 -13
- package/src/wirings/http/web-request.test.ts +33 -2
- package/src/wirings/http/web-request.ts +30 -17
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
- package/src/wirings/mcp/mcp-runner.ts +2 -17
- package/src/wirings/mcp/mcp.types.ts +7 -42
- package/src/wirings/oauth2/oauth2.types.ts +0 -30
- package/src/wirings/persona/define-personas.ts +29 -0
- package/src/wirings/persona/index.ts +62 -0
- package/src/wirings/persona/persona-email.ts +87 -0
- package/src/wirings/persona/persona-environments.test.ts +183 -0
- package/src/wirings/persona/persona-environments.ts +138 -0
- package/src/wirings/persona/persona-mailbox.ts +156 -0
- package/src/wirings/persona/persona.test.ts +220 -0
- package/src/wirings/persona/persona.types.ts +131 -0
- package/src/wirings/persona/validate-personas.ts +133 -0
- package/src/wirings/queue/index.ts +13 -3
- package/src/wirings/queue/queue-identity.test.ts +453 -0
- package/src/wirings/queue/queue-identity.ts +173 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +19 -89
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +59 -0
- package/src/wirings/queue/validate-worker-config.ts +2 -28
- package/src/wirings/role/define-system-role.ts +33 -0
- package/src/wirings/role/index.ts +13 -0
- package/src/wirings/role/role.test.ts +104 -0
- package/src/wirings/role/role.types.ts +47 -0
- package/src/wirings/role/validate-role-definitions.ts +93 -0
- package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
- package/src/wirings/rpc/addon-runner.ts +0 -56
- package/src/wirings/rpc/addon-scopes.test.ts +225 -0
- package/src/wirings/rpc/remote-addon-auth.ts +1 -13
- package/src/wirings/rpc/rpc-runner.test.ts +186 -2
- package/src/wirings/rpc/rpc-runner.ts +145 -127
- package/src/wirings/rpc/rpc-types.ts +11 -6
- package/src/wirings/rpc/wire-addon.test.ts +43 -1
- package/src/wirings/rpc/wire-addon.ts +99 -0
- package/src/wirings/rpc/wire-remote-addon.ts +9 -29
- package/src/wirings/scheduler/log-schedulers.ts +0 -4
- package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
- package/src/wirings/scheduler/scheduler-runner.ts +0 -2
- package/src/wirings/scheduler/scheduler.types.ts +1 -14
- package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
- package/src/wirings/scope/index.ts +1 -1
- package/src/wirings/scope/scope.test.ts +1 -2
- package/src/wirings/scope/scope.types.ts +7 -9
- package/src/wirings/scope/validate-scope-definitions.ts +3 -21
- package/src/wirings/secret/index.ts +1 -1
- package/src/wirings/secret/secret.types.ts +19 -15
- package/src/wirings/secret/validate-secret-definitions.ts +2 -4
- package/src/wirings/trigger/trigger-runner.ts +1 -27
- package/src/wirings/trigger/trigger.types.ts +1 -82
- package/src/wirings/variable/index.ts +1 -1
- package/src/wirings/variable/validate-variable-definitions.ts +2 -4
- package/src/wirings/variable/variable.types.ts +1 -13
- package/src/wirings/virtual-user/index.ts +76 -0
- package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
- package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
- package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
- package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
- package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
- package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
- package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
- package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
- package/src/wirings/workflow/feature.ts +0 -19
- package/src/wirings/workflow/graph/graph-node.ts +0 -136
- package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
- package/src/wirings/workflow/graph/graph-runner.ts +6 -41
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
- package/src/wirings/workflow/index.ts +10 -44
- package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
- package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
- package/src/wirings/workflow/run-timeline.test.ts +7 -19
- package/src/wirings/workflow/run-timeline.ts +0 -56
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
- package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
- package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
- package/src/wirings/workflow/scenario-poll.test.ts +0 -2
- package/src/wirings/workflow/scenario-poll.ts +0 -15
- package/src/wirings/workflow/scenario-prose.ts +0 -28
- package/src/wirings/workflow/scenario-service.test.ts +2 -9
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +159 -14
- package/src/wirings/workflow/scenario-step.types.ts +82 -6
- package/src/wirings/workflow/scenario-surface.test.ts +145 -0
- package/src/wirings/workflow/scenario-surface.ts +71 -0
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
- package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
- package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
- package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
- package/src/wirings/workflow/workflow.types.ts +0 -203
- package/tsconfig.tsbuildinfo +1 -1
- package/src/middleware/timeout.ts +0 -22
- package/src/pikku-response.ts +0 -5
- package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
- package/src/wirings/workflow/dsl/index.ts +0 -36
- package/src/wirings/workflow/graph/index.ts +0 -15
package/dist/schema.js
CHANGED
|
@@ -1,31 +1,13 @@
|
|
|
1
1
|
import { MissingSchemaError, UnprocessableContentError, } from './errors/errors.js';
|
|
2
2
|
import { pikkuState, getAllPackageStates } from './pikku-state.js';
|
|
3
3
|
const schemaKey = (name, packageName) => packageName ? `${packageName}:${name}` : name;
|
|
4
|
-
/**
|
|
5
|
-
* Adds a schema to the schemas map for a specific package.
|
|
6
|
-
* @param name - The name of the schema.
|
|
7
|
-
* @param value - The schema value.
|
|
8
|
-
* @param packageName - The package name (null for main package, '@scope/package' for addon packages).
|
|
9
|
-
* @ignore
|
|
10
|
-
*/
|
|
11
4
|
export const addSchema = (name, value, packageName = null) => {
|
|
12
5
|
const schema = value?.default ?? value;
|
|
13
6
|
pikkuState(packageName, 'misc', 'schemas').set(name, schema);
|
|
14
7
|
};
|
|
15
|
-
/**
|
|
16
|
-
* Retrieves a schema from the schemas map for a specific package.
|
|
17
|
-
* @param name - The name of the schema.
|
|
18
|
-
* @param packageName - The package name (null for main package, '@scope/package' for addon packages).
|
|
19
|
-
* @returns The schema value or undefined if not found.
|
|
20
|
-
* @ignore
|
|
21
|
-
*/
|
|
22
8
|
export const getSchema = (name, packageName = null) => {
|
|
23
9
|
return pikkuState(packageName, 'misc', 'schemas').get(name);
|
|
24
10
|
};
|
|
25
|
-
/**
|
|
26
|
-
* Loads a schema and compiles it into a validator.
|
|
27
|
-
* @param logger - A logger for logging information.
|
|
28
|
-
*/
|
|
29
11
|
export const compileAllSchemas = (logger, schemaService) => {
|
|
30
12
|
if (!schemaService) {
|
|
31
13
|
schemaService = pikkuState(null, 'package', 'singletonServices')?.schema;
|
|
@@ -66,27 +48,11 @@ const validateAllSchemasLoaded = (logger, schemaService) => {
|
|
|
66
48
|
}
|
|
67
49
|
};
|
|
68
50
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* ships with (`@cfworker/json-schema`, and Ajv unless `useDefaults` is set)
|
|
75
|
-
* annotate the instance, so the function received `undefined` for a property
|
|
76
|
-
* its generated type declares as present. That is the worst shape a mismatch
|
|
77
|
-
* can take: validation permits the omission, the type says the value is there,
|
|
78
|
-
* and the body reads `undefined`.
|
|
79
|
-
*
|
|
80
|
-
* Applied unconditionally rather than alongside `coerceTopLevelDataFromSchema`,
|
|
81
|
-
* whose `coerceDataFromSchema` flag is about decoding transport-encoded values
|
|
82
|
-
* (a query string's `"1,2"` into an array). Defaults are a property of the
|
|
83
|
-
* schema, not of how the call arrived, so gating them on that flag would apply
|
|
84
|
-
* them over HTTP and skip them on a direct RPC invocation.
|
|
85
|
-
*
|
|
86
|
-
* Returns the data to use, which is a new object only when defaults had to be
|
|
87
|
-
* added to a nullish input — a call made with no arguments at all still gets
|
|
88
|
-
* them. Values are cloned so an object or array default (`[]`, `{}`) is never
|
|
89
|
-
* shared as one mutable instance across every request.
|
|
51
|
+
* Fills in absent top-level properties from their schema `default`. Applied
|
|
52
|
+
* unconditionally: a default belongs to the schema, not to the transport the
|
|
53
|
+
* call arrived on, and runs before coercion so a defaulted and a supplied
|
|
54
|
+
* value are treated identically from here on. Values are cloned so an object
|
|
55
|
+
* or array default is never shared as one mutable instance across requests.
|
|
90
56
|
*/
|
|
91
57
|
export const applyDefaultsFromSchema = (schemaName, data, packageName = null) => {
|
|
92
58
|
const schema = pikkuState(packageName, 'misc', 'schemas').get(schemaName);
|
package/dist/scopes.d.ts
CHANGED
|
@@ -1,31 +1,12 @@
|
|
|
1
1
|
import type { CoreUserSession } from './types/core.types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Whether a set of held grants satisfies every required scope.
|
|
4
|
-
*
|
|
5
3
|
* The non-throwing counterpart to {@link verifyScopes}, for deciding rather
|
|
6
|
-
* than enforcing
|
|
7
|
-
* it is not satisfied, rather than rejecting the request outright.
|
|
8
|
-
*
|
|
9
|
-
* Fails closed: an absent or empty `held` satisfies nothing. An empty
|
|
10
|
-
* `required` is satisfied by anything.
|
|
11
|
-
*
|
|
12
|
-
* @param required - Scopes to check for. Empty means no gate.
|
|
13
|
-
* @param held - The grants held, e.g. `session.scopes`. May be undefined.
|
|
4
|
+
* than enforcing. Fails closed; an empty `required` is satisfied by anything.
|
|
14
5
|
*/
|
|
15
6
|
export declare const hasScopes: (required: readonly string[] | undefined, held: Iterable<string> | undefined) => boolean;
|
|
16
7
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* Scopes are an AND gate: every entry in `required` must be satisfied. This is
|
|
21
|
-
* deliberately distinct from `permissions`, which OR together — a scope can
|
|
22
|
-
* only ever narrow access, so adding one to a function can never widen it.
|
|
23
|
-
*
|
|
24
|
-
* Fails closed: a session without a `scopes` field, or no session at all,
|
|
25
|
-
* satisfies nothing.
|
|
26
|
-
*
|
|
27
|
-
* @param required - Scopes the function declares. Empty means no gate.
|
|
28
|
-
* @param session - The session to check. May be undefined.
|
|
29
|
-
* @throws {MissingScopeError} Naming the first unsatisfied scope.
|
|
8
|
+
* Throws {@link MissingScopeError} naming the first scope the session does not
|
|
9
|
+
* hold. Fails closed: no session, or a session without `scopes`, satisfies
|
|
10
|
+
* nothing.
|
|
30
11
|
*/
|
|
31
12
|
export declare const verifyScopes: (required: readonly string[] | undefined, session: CoreUserSession | undefined) => void;
|
package/dist/scopes.js
CHANGED
|
@@ -2,13 +2,9 @@ import { MissingScopeError } from './errors/errors.js';
|
|
|
2
2
|
const SEPARATOR = ':';
|
|
3
3
|
const WILDCARD = '*';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Every grant that would satisfy `scope`: the scope itself, a wildcard
|
|
6
6
|
* directly beneath it, a wildcard at each ancestor level, and each plain
|
|
7
|
-
* ancestor id
|
|
8
|
-
*
|
|
9
|
-
* For `admin:invoices:create` that is:
|
|
10
|
-
* admin:invoices:create, admin:invoices:create:*, *, admin:*, admin:invoices:*,
|
|
11
|
-
* admin, admin:invoices
|
|
7
|
+
* ancestor id.
|
|
12
8
|
*/
|
|
13
9
|
const satisfyingGrants = (scope) => {
|
|
14
10
|
const segments = scope.split(SEPARATOR);
|
|
@@ -21,26 +17,8 @@ const satisfyingGrants = (scope) => {
|
|
|
21
17
|
}
|
|
22
18
|
return grants;
|
|
23
19
|
};
|
|
24
|
-
/**
|
|
25
|
-
* Checks whether `held` satisfies a single required scope.
|
|
26
|
-
*
|
|
27
|
-
* A grant satisfies a requirement when it is the scope itself, a plain ancestor
|
|
28
|
-
* (`admin` covers `admin:invoices:create`), a wildcard at or above it (`admin:*`
|
|
29
|
-
* covers `admin` and `admin:invoices:create`), or the bare `*`. A narrower grant
|
|
30
|
-
* never satisfies a broader requirement — `admin:invoices` does not grant
|
|
31
|
-
* `admin`.
|
|
32
|
-
*/
|
|
33
20
|
const holds = (held, scope) => satisfyingGrants(scope).some((grant) => held.has(grant));
|
|
34
|
-
/**
|
|
35
|
-
* The first required scope a set of held grants does not satisfy, or `null`
|
|
36
|
-
* when every one is satisfied.
|
|
37
|
-
*
|
|
38
|
-
* Scopes are an AND gate: every entry in `required` must be satisfied. This is
|
|
39
|
-
* deliberately distinct from `permissions`, which OR together — a scope can
|
|
40
|
-
* only ever narrow access, so adding one to a function can never widen it.
|
|
41
|
-
*
|
|
42
|
-
* Fails closed: an absent `held` satisfies nothing.
|
|
43
|
-
*/
|
|
21
|
+
/** The first required scope `held` does not satisfy, or `null`. Fails closed. */
|
|
44
22
|
const firstUnsatisfied = (required, held) => {
|
|
45
23
|
if (!required || required.length === 0) {
|
|
46
24
|
return null;
|
|
@@ -54,33 +32,14 @@ const firstUnsatisfied = (required, held) => {
|
|
|
54
32
|
return null;
|
|
55
33
|
};
|
|
56
34
|
/**
|
|
57
|
-
* Whether a set of held grants satisfies every required scope.
|
|
58
|
-
*
|
|
59
35
|
* The non-throwing counterpart to {@link verifyScopes}, for deciding rather
|
|
60
|
-
* than enforcing
|
|
61
|
-
* it is not satisfied, rather than rejecting the request outright.
|
|
62
|
-
*
|
|
63
|
-
* Fails closed: an absent or empty `held` satisfies nothing. An empty
|
|
64
|
-
* `required` is satisfied by anything.
|
|
65
|
-
*
|
|
66
|
-
* @param required - Scopes to check for. Empty means no gate.
|
|
67
|
-
* @param held - The grants held, e.g. `session.scopes`. May be undefined.
|
|
36
|
+
* than enforcing. Fails closed; an empty `required` is satisfied by anything.
|
|
68
37
|
*/
|
|
69
38
|
export const hasScopes = (required, held) => firstUnsatisfied(required, held) === null;
|
|
70
39
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* Scopes are an AND gate: every entry in `required` must be satisfied. This is
|
|
75
|
-
* deliberately distinct from `permissions`, which OR together — a scope can
|
|
76
|
-
* only ever narrow access, so adding one to a function can never widen it.
|
|
77
|
-
*
|
|
78
|
-
* Fails closed: a session without a `scopes` field, or no session at all,
|
|
79
|
-
* satisfies nothing.
|
|
80
|
-
*
|
|
81
|
-
* @param required - Scopes the function declares. Empty means no gate.
|
|
82
|
-
* @param session - The session to check. May be undefined.
|
|
83
|
-
* @throws {MissingScopeError} Naming the first unsatisfied scope.
|
|
40
|
+
* Throws {@link MissingScopeError} naming the first scope the session does not
|
|
41
|
+
* hold. Fails closed: no session, or a session without `scopes`, satisfies
|
|
42
|
+
* nothing.
|
|
84
43
|
*/
|
|
85
44
|
export const verifyScopes = (required, session) => {
|
|
86
45
|
const missing = firstUnsatisfied(required, session?.scopes);
|
|
@@ -12,6 +12,26 @@ export type AIAgentRunnerParams = {
|
|
|
12
12
|
/** Pikku agent function name — forwarded to the LLM proxy (LiteLLM) as
|
|
13
13
|
* request-level metadata so usage can be broken down per agent. */
|
|
14
14
|
agentId?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Cancels the model call itself, not just delivery of its output. Set by
|
|
17
|
+
* `streamAIAgent` from the run's interrupt handle so a voice barge-in stops
|
|
18
|
+
* generation upstream rather than leaving tokens being billed into a stream
|
|
19
|
+
* nobody reads. A runner that ignores it degrades to "the caller stops
|
|
20
|
+
* listening", which is the behaviour before this field existed.
|
|
21
|
+
*/
|
|
22
|
+
abortSignal?: AbortSignal;
|
|
23
|
+
/**
|
|
24
|
+
* Per-provider settings passed to the model untouched — the escape hatch for
|
|
25
|
+
* anything the shared params above cannot express because only one vendor
|
|
26
|
+
* has it.
|
|
27
|
+
*
|
|
28
|
+
* The setting that motivated it is `reasoningEffort`. A voice turn is heard
|
|
29
|
+
* rather than read, so the wait before the first word is most of the
|
|
30
|
+
* experience: `{ openai: { reasoningEffort: 'minimal' } }` on gpt-5-mini
|
|
31
|
+
* measured 0.9s to first token against 2.5s at the default, and 1.6s of
|
|
32
|
+
* silence is a long time to sit through having just finished speaking.
|
|
33
|
+
*/
|
|
34
|
+
providerOptions?: AIProviderOptions;
|
|
15
35
|
};
|
|
16
36
|
export type AIAgentRunnerResult = {
|
|
17
37
|
text: string;
|
|
@@ -1,31 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A narrow, dedicated embedding service.
|
|
3
|
-
*
|
|
4
|
-
* Vector stores (Qdrant, Pinecone, Supabase/pgvector, …) depend on this to turn
|
|
5
|
-
* text into vectors, at BOTH index time (ingest) and query time (search). The
|
|
6
|
-
* embedding model is fixed at construction so those two moments cannot drift
|
|
7
|
-
* into different vector spaces — a mismatch would silently break similarity
|
|
8
|
-
* search. Provider addons (e.g. `@pikku/addon-openai`) implement it; the app
|
|
9
|
-
* wires a single instance into `singletonServices.aiEmbedding`.
|
|
10
|
-
*
|
|
11
|
-
* This is deliberately smaller than {@link AIAgentRunnerService} (whose optional
|
|
12
|
-
* `embed`/`embedMany` take a per-call model): a vector store should not have to
|
|
13
|
-
* pull in the whole agent-runner tool loop just to embed, and pinning the model
|
|
14
|
-
* to the service is what guarantees index/query consistency.
|
|
15
|
-
*
|
|
16
|
-
* Documents (ingested corpus) and queries (search text) are embedded through
|
|
17
|
-
* separate methods because some models are asymmetric — Cohere's `input_type`,
|
|
18
|
-
* E5's `query:`/`passage:` prefixes, BGE's query instruction — and must know
|
|
19
|
-
* which side they are embedding to produce comparable vectors. Symmetric
|
|
20
|
-
* providers (e.g. OpenAI) point both methods at the same call.
|
|
21
|
-
*/
|
|
22
1
|
export interface AIEmbeddingService {
|
|
23
|
-
/** The embedding model backing this service. Index and query share it. */
|
|
24
2
|
readonly model: string;
|
|
25
|
-
/** The vector dimensionality this model produces, when known. */
|
|
26
3
|
readonly dimensions?: number;
|
|
27
|
-
/**
|
|
4
|
+
/** Index time. Preserves input order. */
|
|
28
5
|
embedDocuments(values: string[]): Promise<number[][]>;
|
|
29
|
-
/**
|
|
6
|
+
/** Query time. */
|
|
30
7
|
embedQuery(value: string): Promise<number[]>;
|
|
31
8
|
}
|
|
@@ -14,8 +14,7 @@ class DisabledInvocationAudit {
|
|
|
14
14
|
async write(_event) {
|
|
15
15
|
if (!this.warned) {
|
|
16
16
|
this.warned = true;
|
|
17
|
-
//
|
|
18
|
-
// a dropped audit write must never be invisible.
|
|
17
|
+
// knowledge: decisions/security/a-dropped-audit-write-is-always-logged.md
|
|
19
18
|
const logger = this.wire.logger ?? this.logger;
|
|
20
19
|
logger?.warn?.(`audit.write() dropped for '${this.wire.functionId ?? 'unknown function'}' — the function has no audit config (set audit: true on it)`);
|
|
21
20
|
}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Arguments for signing a content key into a time-limited URL.
|
|
3
|
-
*/
|
|
4
1
|
export interface SignContentKeyArgs<TBucket extends string = string> {
|
|
5
2
|
bucket: TBucket;
|
|
6
3
|
contentKey: string;
|
|
7
4
|
dateLessThan: Date;
|
|
8
5
|
dateGreaterThan?: Date;
|
|
9
6
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Arguments for signing an arbitrary URL.
|
|
12
|
-
*/
|
|
13
7
|
export interface SignURLArgs {
|
|
14
8
|
url: string;
|
|
15
9
|
dateLessThan: Date;
|
|
16
10
|
dateGreaterThan?: Date;
|
|
17
11
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Arguments for minting a presigned upload URL.
|
|
20
|
-
*/
|
|
21
12
|
export interface GetUploadURLArgs<TBucket extends string = string> {
|
|
22
13
|
bucket: TBucket;
|
|
23
14
|
fileKey: string;
|
|
@@ -25,66 +16,30 @@ export interface GetUploadURLArgs<TBucket extends string = string> {
|
|
|
25
16
|
size?: number;
|
|
26
17
|
visibility?: 'private' | 'public';
|
|
27
18
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Result of minting a presigned upload URL.
|
|
30
|
-
*/
|
|
31
19
|
export interface UploadURLResult {
|
|
32
20
|
uploadUrl: string;
|
|
33
21
|
assetKey: string;
|
|
34
22
|
uploadHeaders?: Record<string, string>;
|
|
35
23
|
uploadMethod?: 'PUT' | 'POST';
|
|
36
24
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Arguments for an operation that targets a single object by key.
|
|
39
|
-
*/
|
|
40
25
|
export interface BucketKeyArgs<TBucket extends string = string> {
|
|
41
26
|
bucket: TBucket;
|
|
42
27
|
key: string;
|
|
43
28
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Arguments for writing a stream to storage.
|
|
46
|
-
*/
|
|
47
29
|
export interface WriteFileArgs<TBucket extends string = string> extends BucketKeyArgs<TBucket> {
|
|
48
30
|
stream: ReadableStream | NodeJS.ReadableStream;
|
|
49
31
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Arguments for copying a local file into storage.
|
|
52
|
-
*/
|
|
53
32
|
export interface CopyFileArgs<TBucket extends string = string> extends BucketKeyArgs<TBucket> {
|
|
54
33
|
fromAbsolutePath: string;
|
|
55
34
|
}
|
|
56
35
|
export interface ContentService<TBucket extends string = string> {
|
|
57
|
-
/**
|
|
58
|
-
* Signs a content key to generate a secure, time-limited access URL.
|
|
59
|
-
*/
|
|
60
36
|
signContentKey(args: SignContentKeyArgs<TBucket>): Promise<string>;
|
|
61
|
-
/**
|
|
62
|
-
* Signs an arbitrary URL to generate a secure, time-limited access URL.
|
|
63
|
-
*/
|
|
64
37
|
signURL(args: SignURLArgs): Promise<string>;
|
|
65
|
-
/**
|
|
66
|
-
* Generates a signed URL for uploading a file directly to storage.
|
|
67
|
-
* Bucket policy (size limits, MIME allowlist) is enforced by the implementation.
|
|
68
|
-
*/
|
|
38
|
+
/** Bucket policy (size limits, MIME allowlist) is enforced by the implementation, not the caller. */
|
|
69
39
|
getUploadURL(args: GetUploadURLArgs<TBucket>): Promise<UploadURLResult>;
|
|
70
|
-
/**
|
|
71
|
-
* Deletes a file from the storage backend.
|
|
72
|
-
*/
|
|
73
40
|
deleteFile(args: BucketKeyArgs<TBucket>): Promise<boolean>;
|
|
74
|
-
/**
|
|
75
|
-
* Uploads a file stream to storage under the specified bucket + key.
|
|
76
|
-
*/
|
|
77
41
|
writeFile(args: WriteFileArgs<TBucket>): Promise<boolean>;
|
|
78
|
-
/**
|
|
79
|
-
* Copies a file from a local absolute path into storage.
|
|
80
|
-
*/
|
|
81
42
|
copyFile(args: CopyFileArgs<TBucket>): Promise<boolean>;
|
|
82
|
-
/**
|
|
83
|
-
* Reads a file from storage as a readable stream.
|
|
84
|
-
*/
|
|
85
43
|
readFile(args: BucketKeyArgs<TBucket>): Promise<ReadableStream | NodeJS.ReadableStream>;
|
|
86
|
-
/**
|
|
87
|
-
* Reads an entire file from storage into a Buffer.
|
|
88
|
-
*/
|
|
89
44
|
readFileAsBuffer(args: BucketKeyArgs<TBucket>): Promise<Buffer>;
|
|
90
45
|
}
|
|
@@ -1,51 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* static, developer-configured values).
|
|
2
|
+
* Dynamic credentials — OAuth tokens, per-user API keys — that change at
|
|
3
|
+
* runtime, as opposed to `SecretService`'s static developer-configured values.
|
|
4
|
+
* Throughout, an omitted `userId` means the platform-level credential.
|
|
6
5
|
*/
|
|
7
6
|
export interface CredentialService {
|
|
8
|
-
/**
|
|
9
|
-
* Retrieves a credential by name and optional user ID.
|
|
10
|
-
* @param name - The credential name (e.g. 'stripe', 'google-sheets').
|
|
11
|
-
* @param userId - Optional user ID for per-user credentials. Omit for platform-level.
|
|
12
|
-
* @returns The credential value, or null if not found.
|
|
13
|
-
*/
|
|
14
7
|
get<T = unknown>(name: string, userId?: string): Promise<T | null>;
|
|
15
|
-
/**
|
|
16
|
-
* Stores a credential.
|
|
17
|
-
* @param name - The credential name.
|
|
18
|
-
* @param value - The credential value to store.
|
|
19
|
-
* @param userId - Optional user ID for per-user credentials. Omit for platform-level.
|
|
20
|
-
*/
|
|
21
8
|
set(name: string, value: unknown, userId?: string): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Deletes a credential.
|
|
24
|
-
* @param name - The credential name.
|
|
25
|
-
* @param userId - Optional user ID for per-user credentials. Omit for platform-level.
|
|
26
|
-
*/
|
|
27
9
|
delete(name: string, userId?: string): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* Checks if a credential exists.
|
|
30
|
-
* @param name - The credential name.
|
|
31
|
-
* @param userId - Optional user ID for per-user credentials. Omit for platform-level.
|
|
32
|
-
*/
|
|
33
10
|
has(name: string, userId?: string): Promise<boolean>;
|
|
34
|
-
/**
|
|
35
|
-
* Retrieves all credentials for a user.
|
|
36
|
-
* @param userId - The user ID.
|
|
37
|
-
* @returns A record of credential name to value.
|
|
38
|
-
*/
|
|
39
11
|
getAll(userId: string): Promise<Record<string, unknown>>;
|
|
40
|
-
/**
|
|
41
|
-
* Lists all user IDs that have a specific credential configured.
|
|
42
|
-
* @param name - The credential name.
|
|
43
|
-
* @returns Array of user IDs.
|
|
44
|
-
*/
|
|
45
12
|
getUsersWithCredential(name: string): Promise<string[]>;
|
|
46
|
-
/**
|
|
47
|
-
* Lists all unique user IDs that have any credential configured.
|
|
48
|
-
* @returns Array of user IDs.
|
|
49
|
-
*/
|
|
50
13
|
getAllUsers(): Promise<string[]>;
|
|
51
14
|
}
|
|
@@ -16,15 +16,9 @@ export interface DeploymentService {
|
|
|
16
16
|
start(config: DeploymentConfig): Promise<void>;
|
|
17
17
|
stop(): Promise<void>;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* - Session propagation (JWT signing, headers)
|
|
23
|
-
* - The actual network call
|
|
24
|
-
*
|
|
25
|
-
* @param funcName - The function to invoke
|
|
26
|
-
* @param data - Input data for the function
|
|
27
|
-
* @param session - User session to propagate (optional)
|
|
19
|
+
* The implementation owns the whole transport: resolving the target
|
|
20
|
+
* (endpoint, service binding), propagating the session (JWT signing,
|
|
21
|
+
* headers) and making the call. Callers supply no transport detail.
|
|
28
22
|
*/
|
|
29
23
|
invoke(funcName: string, data: unknown, session?: unknown, traceId?: string): Promise<unknown>;
|
|
30
24
|
}
|
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abstract GatewayService interface.
|
|
3
|
-
*
|
|
4
|
-
* Implementations manage listener gateway lifecycle — initializing adapters
|
|
5
|
-
* and delivering messages to handler functions.
|
|
6
|
-
*
|
|
7
|
-
* A `LocalGatewayService` starts all listeners unconditionally;
|
|
8
|
-
* a distributed implementation could check leader election first.
|
|
9
|
-
*/
|
|
10
1
|
export interface GatewayService {
|
|
11
|
-
/**
|
|
12
|
-
* Start all listener gateways
|
|
13
|
-
*/
|
|
14
2
|
start(): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Stop all listener gateways
|
|
17
|
-
*/
|
|
18
3
|
stop(): Promise<void>;
|
|
19
4
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ScenarioPersona, ResolvedPersona, ScenarioPersonas, ScenarioInvokeOptions, ScenarioHttpResponse } from './personas-service.js';
|
|
2
|
+
import type { ConverseOptions, ActorFlowVerdict } from '../wirings/actor-flow/actor-flow.types.js';
|
|
3
|
+
export interface HttpPersonasConfig {
|
|
4
|
+
/**
|
|
5
|
+
* Base API URL of the target app, INCLUDING the HTTP prefix — e.g.
|
|
6
|
+
* `https://app.example.com/api` or `http://localhost:4000/api`. Sign-in is
|
|
7
|
+
* reached at `${apiUrl}${signInPath}` and exposed RPCs at
|
|
8
|
+
* `${apiUrl}${rpcPath}/:rpcName`.
|
|
9
|
+
*/
|
|
10
|
+
apiUrl: string;
|
|
11
|
+
/**
|
|
12
|
+
* The impersonation secret. Sign-in only ever works for user rows flagged
|
|
13
|
+
* `actor: true` — knowing the secret never impersonates real users.
|
|
14
|
+
*/
|
|
15
|
+
secret: string;
|
|
16
|
+
/** Persona id → the declaration with its address filled in. */
|
|
17
|
+
personas: Record<string, ResolvedPersona>;
|
|
18
|
+
/** Sign-in path under apiUrl. Default: the actor plugin's `/auth/sign-in/actor`. */
|
|
19
|
+
signInPath?: string;
|
|
20
|
+
/** Where the session (and its roles) is read back. Default `/auth/get-session`. */
|
|
21
|
+
sessionPath?: string;
|
|
22
|
+
/** Exposed-RPC path prefix under apiUrl. Default `/rpc`. */
|
|
23
|
+
rpcPath?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Default model a persona thinks with when `converse(...)` is called without
|
|
26
|
+
* an explicit `model`. Its own turns/approvals/evaluation run in-process via
|
|
27
|
+
* the configured `aiAgentRunner`.
|
|
28
|
+
*/
|
|
29
|
+
model?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Default HTTP-backed persona. Signs in lazily on first invoke via the Better
|
|
33
|
+
* Auth actor plugin (`POST /auth/sign-in/actor` with `{ email, secret }` —
|
|
34
|
+
* the plugin upserts the actor-flagged user row and mints a session whose
|
|
35
|
+
* `actor` flag flows into audits/analytics). Holds the session cookies for
|
|
36
|
+
* its lifetime; a 401 mid-run re-logs-in once (long health-check runs can
|
|
37
|
+
* outlive a session).
|
|
38
|
+
*/
|
|
39
|
+
export declare class HttpPersona implements ScenarioPersona {
|
|
40
|
+
readonly name: string;
|
|
41
|
+
private persona;
|
|
42
|
+
private config;
|
|
43
|
+
private jar;
|
|
44
|
+
/**
|
|
45
|
+
* Whether `login()` has succeeded since the last time the session was
|
|
46
|
+
* dropped. The jar cannot answer this — a target may set a cookie before
|
|
47
|
+
* anyone signs in, and it would then look like a session that was never
|
|
48
|
+
* established.
|
|
49
|
+
*/
|
|
50
|
+
private signedIn;
|
|
51
|
+
constructor(name: string, persona: ResolvedPersona, config: HttpPersonasConfig);
|
|
52
|
+
get email(): string;
|
|
53
|
+
invoke(rpcName: string, data: unknown): Promise<unknown>;
|
|
54
|
+
invokeRaw(rpcName: string, data: unknown, options?: ScenarioInvokeOptions): Promise<ScenarioHttpResponse>;
|
|
55
|
+
converse(options: ConverseOptions): Promise<ActorFlowVerdict>;
|
|
56
|
+
/**
|
|
57
|
+
* The roles the stage says this session holds.
|
|
58
|
+
*
|
|
59
|
+
* Read from better-auth's `get-session`, which is what most pikku apps are
|
|
60
|
+
* running and where its admin plugin puts `role` — on the user, as a
|
|
61
|
+
* comma-separated list. A target that answers something else returns `null`
|
|
62
|
+
* rather than an empty list, because "this stage does not report roles" and
|
|
63
|
+
* "this person has none" call for opposite responses from the caller.
|
|
64
|
+
*/
|
|
65
|
+
sessionRoles(): Promise<string[] | null>;
|
|
66
|
+
/** Start/continue the target agent's run over HTTP as this persona. */
|
|
67
|
+
private agentRun;
|
|
68
|
+
/** Answer the target agent's pending approvals over HTTP and continue. */
|
|
69
|
+
private agentApprove;
|
|
70
|
+
private postAgent;
|
|
71
|
+
private postRpc;
|
|
72
|
+
/** Drop the session, so the next call signs in again before it goes out. */
|
|
73
|
+
private signOut;
|
|
74
|
+
private login;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build the injected `personas` service from the declared personas: id → lazy
|
|
78
|
+
* HTTP persona. Wire the result as the `personas` singleton service.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createHttpPersonas(config: HttpPersonasConfig): ScenarioPersonas;
|