@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
|
@@ -1,28 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validates worker configuration using a mapping table
|
|
3
|
-
* This provides a flexible, maintainable way to validate configurations
|
|
4
|
-
* across different queue implementations
|
|
5
|
-
*
|
|
6
|
-
* @param config - The worker configuration to validate
|
|
7
|
-
* @param configMapping - The mapping table defining supported/unsupported configurations
|
|
8
|
-
* @returns Validation result with applied, ignored, warnings, and fallbacks
|
|
9
|
-
*/
|
|
10
1
|
export function validateWorkerConfig(configMapping, config = {}) {
|
|
11
2
|
const applied = {};
|
|
12
3
|
const ignored = {};
|
|
13
4
|
const warnings = [];
|
|
14
5
|
const fallbacks = {};
|
|
15
|
-
// Process each configuration property
|
|
16
6
|
for (const [key, value] of Object.entries(config)) {
|
|
17
7
|
if (value === undefined)
|
|
18
8
|
continue;
|
|
19
9
|
const configKey = key;
|
|
20
|
-
// Check if it's a supported configuration
|
|
21
10
|
if (configKey in configMapping.supported) {
|
|
22
11
|
applied[configKey] = value;
|
|
23
12
|
continue;
|
|
24
13
|
}
|
|
25
|
-
// Check if it's a fallback configuration
|
|
26
14
|
if (configKey in configMapping.fallbacks) {
|
|
27
15
|
const fallbackMapping = configMapping.fallbacks[configKey];
|
|
28
16
|
applied[configKey] = value;
|
|
@@ -30,14 +18,12 @@ export function validateWorkerConfig(configMapping, config = {}) {
|
|
|
30
18
|
warnings.push(`${key}: ${fallbackMapping.reason}. ${fallbackMapping.explanation}`);
|
|
31
19
|
continue;
|
|
32
20
|
}
|
|
33
|
-
// Check if it's an unsupported configuration
|
|
34
21
|
if (configKey in configMapping.unsupported) {
|
|
35
22
|
ignored[configKey] = value;
|
|
36
23
|
const mapping = configMapping.unsupported[configKey];
|
|
37
24
|
warnings.push(`${key}: ${mapping.reason}. ${mapping.explanation}`);
|
|
38
25
|
continue;
|
|
39
26
|
}
|
|
40
|
-
// Unknown configuration
|
|
41
27
|
ignored[configKey] = value;
|
|
42
28
|
warnings.push(`${key}: Unknown configuration option for this queue implementation`);
|
|
43
29
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CoreSystemRoles } from './role.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* No-op function for declaring system roles.
|
|
4
|
+
* This exists purely for TypeScript type checking and will be tree-shaken.
|
|
5
|
+
* The CLI extracts metadata via AST parsing and generates a `SystemRoleName`
|
|
6
|
+
* union, so a persona naming an undeclared role fails the build.
|
|
7
|
+
*
|
|
8
|
+
* A system role is a role that ships with the product: the console may grant
|
|
9
|
+
* it, but cannot rename, re-scope or delete it. Roles an admin composes in the
|
|
10
|
+
* console are unaffected and are not declared here.
|
|
11
|
+
*
|
|
12
|
+
* Removal is deliberately not destructive. Deleting a declaration leaves the
|
|
13
|
+
* row in the store, marked undeclared and inert, until `pikku roles prune` —
|
|
14
|
+
* the same additive contract `defineScope` has, and for the same reason: a
|
|
15
|
+
* mid-deploy revocation is not something a code edit should be able to cause.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* defineSystemRole({
|
|
20
|
+
* buyer: {
|
|
21
|
+
* displayName: 'Buyer',
|
|
22
|
+
* description: 'Can browse the catalogue and place orders',
|
|
23
|
+
* scopes: ['catalogue:read', 'orders:create'],
|
|
24
|
+
* },
|
|
25
|
+
* admin: {
|
|
26
|
+
* description: 'Everything',
|
|
27
|
+
* scopes: ['admin'],
|
|
28
|
+
* },
|
|
29
|
+
* })
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const defineSystemRole: (_config: CoreSystemRoles) => void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No-op function for declaring system roles.
|
|
3
|
+
* This exists purely for TypeScript type checking and will be tree-shaken.
|
|
4
|
+
* The CLI extracts metadata via AST parsing and generates a `SystemRoleName`
|
|
5
|
+
* union, so a persona naming an undeclared role fails the build.
|
|
6
|
+
*
|
|
7
|
+
* A system role is a role that ships with the product: the console may grant
|
|
8
|
+
* it, but cannot rename, re-scope or delete it. Roles an admin composes in the
|
|
9
|
+
* console are unaffected and are not declared here.
|
|
10
|
+
*
|
|
11
|
+
* Removal is deliberately not destructive. Deleting a declaration leaves the
|
|
12
|
+
* row in the store, marked undeclared and inert, until `pikku roles prune` —
|
|
13
|
+
* the same additive contract `defineScope` has, and for the same reason: a
|
|
14
|
+
* mid-deploy revocation is not something a code edit should be able to cause.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* defineSystemRole({
|
|
19
|
+
* buyer: {
|
|
20
|
+
* displayName: 'Buyer',
|
|
21
|
+
* description: 'Can browse the catalogue and place orders',
|
|
22
|
+
* scopes: ['catalogue:read', 'orders:create'],
|
|
23
|
+
* },
|
|
24
|
+
* admin: {
|
|
25
|
+
* description: 'Everything',
|
|
26
|
+
* scopes: ['admin'],
|
|
27
|
+
* },
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const defineSystemRole = (_config) => { };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { defineSystemRole } from './define-system-role.js';
|
|
2
|
+
export { flattenSystemRoleDefinitions, validateAndBuildSystemRoleDefinitionsMeta, } from './validate-role-definitions.js';
|
|
3
|
+
export type { CoreSystemRole, CoreSystemRoles, SystemRole, SystemRoleDefinitionMeta, SystemRoleDefinitions, SystemRoleDefinitionsMeta, } from './role.types.js';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A system role: a named set of scopes that ships with the product.
|
|
3
|
+
*
|
|
4
|
+
* System roles are declared in code, which is what separates them from the
|
|
5
|
+
* roles an admin composes in the console. The distinction is the one AWS draws
|
|
6
|
+
* between managed and customer-managed policies — a system role is part of the
|
|
7
|
+
* application's surface, so the console may show and grant it but must not
|
|
8
|
+
* rename, re-scope or delete it.
|
|
9
|
+
*/
|
|
10
|
+
export type CoreSystemRole = {
|
|
11
|
+
/** Short human-readable name, e.g. "Buyer". */
|
|
12
|
+
displayName?: string;
|
|
13
|
+
/** Longer-form description, surfaced in the console when granting. */
|
|
14
|
+
description?: string;
|
|
15
|
+
/**
|
|
16
|
+
* The scopes this role grants. Every id must be declared with
|
|
17
|
+
* `defineScope` — the inspector fails the build otherwise, so a role cannot
|
|
18
|
+
* quietly grant a scope that no function checks.
|
|
19
|
+
*/
|
|
20
|
+
scopes: string[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* System roles to declare, keyed by name. A key must be non-empty and must not
|
|
24
|
+
* contain `:` — that separator belongs to scopes, and a role that looks like a
|
|
25
|
+
* scope id is a role nobody reads correctly.
|
|
26
|
+
*/
|
|
27
|
+
export type CoreSystemRoles = Record<string, CoreSystemRole>;
|
|
28
|
+
export type SystemRoleDefinitionMeta = {
|
|
29
|
+
name: string;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
scopes: string[];
|
|
33
|
+
sourceFile?: string;
|
|
34
|
+
};
|
|
35
|
+
export type SystemRoleDefinitions = SystemRoleDefinitionMeta[];
|
|
36
|
+
export type SystemRoleDefinitionsMeta = Record<string, SystemRoleDefinitionMeta>;
|
|
37
|
+
/** A declared system role, ready to sync into a scope store. */
|
|
38
|
+
export type SystemRole = {
|
|
39
|
+
name: string;
|
|
40
|
+
displayName?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
scopes: string[];
|
|
43
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SystemRole, SystemRoleDefinitions, SystemRoleDefinitionsMeta } from './role.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The declared roles as a flat list, deduplicated by name.
|
|
4
|
+
*
|
|
5
|
+
* A role may legitimately be declared more than once — an addon and its host
|
|
6
|
+
* app both contributing `admin`, say — and
|
|
7
|
+
* {@link validateAndBuildSystemRoleDefinitionsMeta} has already guaranteed
|
|
8
|
+
* those declarations are identical, so the second is redundant rather than
|
|
9
|
+
* conflicting. Collapsing here keeps codegen (which emits an object literal
|
|
10
|
+
* keyed by name) and a ScopeService (which syncs one row per role) honest.
|
|
11
|
+
*/
|
|
12
|
+
export declare const flattenSystemRoleDefinitions: (definitions: SystemRoleDefinitions) => SystemRole[];
|
|
13
|
+
/**
|
|
14
|
+
* Validates declared system roles and keys them by name.
|
|
15
|
+
*
|
|
16
|
+
* Definitions sharing a name must grant the same scope set; a conflicting
|
|
17
|
+
* redeclaration is a hard error naming both source files. Order within
|
|
18
|
+
* `scopes` is not significant — two declarations listing the same scopes
|
|
19
|
+
* differently are the same role.
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateAndBuildSystemRoleDefinitionsMeta(definitions: SystemRoleDefinitions): SystemRoleDefinitionsMeta;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const SEPARATOR = ':';
|
|
2
|
+
const assertRoleName = (name) => {
|
|
3
|
+
if (name.length === 0) {
|
|
4
|
+
throw new Error('A system role is declared with an empty name.');
|
|
5
|
+
}
|
|
6
|
+
if (name.includes(SEPARATOR)) {
|
|
7
|
+
throw new Error(`System role '${name}' contains the '${SEPARATOR}' separator. ` +
|
|
8
|
+
`'${SEPARATOR}' delimits scope ids; a role named like a scope reads as one.`);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The declared roles as a flat list, deduplicated by name.
|
|
13
|
+
*
|
|
14
|
+
* A role may legitimately be declared more than once — an addon and its host
|
|
15
|
+
* app both contributing `admin`, say — and
|
|
16
|
+
* {@link validateAndBuildSystemRoleDefinitionsMeta} has already guaranteed
|
|
17
|
+
* those declarations are identical, so the second is redundant rather than
|
|
18
|
+
* conflicting. Collapsing here keeps codegen (which emits an object literal
|
|
19
|
+
* keyed by name) and a ScopeService (which syncs one row per role) honest.
|
|
20
|
+
*/
|
|
21
|
+
export const flattenSystemRoleDefinitions = (definitions) => {
|
|
22
|
+
const seen = new Set();
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const def of definitions) {
|
|
25
|
+
if (seen.has(def.name)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
seen.add(def.name);
|
|
29
|
+
out.push({
|
|
30
|
+
name: def.name,
|
|
31
|
+
displayName: def.displayName,
|
|
32
|
+
description: def.description,
|
|
33
|
+
scopes: [...def.scopes],
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Validates declared system roles and keys them by name.
|
|
40
|
+
*
|
|
41
|
+
* Definitions sharing a name must grant the same scope set; a conflicting
|
|
42
|
+
* redeclaration is a hard error naming both source files. Order within
|
|
43
|
+
* `scopes` is not significant — two declarations listing the same scopes
|
|
44
|
+
* differently are the same role.
|
|
45
|
+
*/
|
|
46
|
+
export function validateAndBuildSystemRoleDefinitionsMeta(definitions) {
|
|
47
|
+
const meta = {};
|
|
48
|
+
for (const def of definitions) {
|
|
49
|
+
assertRoleName(def.name);
|
|
50
|
+
const existing = meta[def.name];
|
|
51
|
+
if (existing) {
|
|
52
|
+
const sameScopes = JSON.stringify([...existing.scopes].sort()) ===
|
|
53
|
+
JSON.stringify([...def.scopes].sort());
|
|
54
|
+
if (!sameScopes) {
|
|
55
|
+
throw new Error(`System role '${def.name}' is declared with different scopes.\n` +
|
|
56
|
+
` First declaration: ${existing.sourceFile ?? 'unknown'}\n` +
|
|
57
|
+
` Second declaration: ${def.sourceFile ?? 'unknown'}\n` +
|
|
58
|
+
`Roles sharing a name must grant the same scopes.`);
|
|
59
|
+
}
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
meta[def.name] = {
|
|
63
|
+
name: def.name,
|
|
64
|
+
displayName: def.displayName,
|
|
65
|
+
description: def.description,
|
|
66
|
+
scopes: [...def.scopes],
|
|
67
|
+
sourceFile: def.sourceFile,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return meta;
|
|
71
|
+
}
|
|
@@ -1,28 +1,9 @@
|
|
|
1
1
|
import type { CoreSingletonServices } from '../../types/core.types.js';
|
|
2
|
-
/**
|
|
3
|
-
* A single wired addon instance: a namespace (wireAddon `name`) plus the
|
|
4
|
-
* per-instance name-aliases that remap the logical names the addon reads to
|
|
5
|
-
* the actual project secret/variable/credential names.
|
|
6
|
-
*/
|
|
7
2
|
export type AddonInstance = {
|
|
8
3
|
namespace: string;
|
|
9
4
|
secretOverrides?: Record<string, string>;
|
|
10
5
|
variableOverrides?: Record<string, string>;
|
|
11
6
|
credentialOverrides?: Record<string, string>;
|
|
12
7
|
};
|
|
13
|
-
/**
|
|
14
|
-
* Get or create singleton services for an addon instance.
|
|
15
|
-
* Services are cached in pikkuState to avoid recreation on each call.
|
|
16
|
-
*
|
|
17
|
-
* @param packageName - The addon package name
|
|
18
|
-
* @param parentServices - The parent/caller's singleton services (used as base)
|
|
19
|
-
* @param addonInstance - The wired instance whose overrides shape the services
|
|
20
|
-
* @returns The instance's singleton services
|
|
21
|
-
*/
|
|
22
8
|
export declare const getOrCreatePackageSingletonServices: (packageName: string, parentServices: CoreSingletonServices, addonInstance?: AddonInstance) => Promise<CoreSingletonServices>;
|
|
23
|
-
/**
|
|
24
|
-
* Build the addon instance descriptor (namespace + per-instance overrides) for
|
|
25
|
-
* a bare intra-addon call, using the namespace currently executing on the wire.
|
|
26
|
-
* Returns undefined unless that namespace maps to the resolved package.
|
|
27
|
-
*/
|
|
28
9
|
export declare const addonInstanceForNamespace: (namespace: string | undefined, expectedPackage: string) => AddonInstance | undefined;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
-
/**
|
|
3
|
-
* Wrap a SecretService so that the logical secret names an addon reads are
|
|
4
|
-
* remapped to the actual project secret names via the instance's overrides.
|
|
5
|
-
*/
|
|
6
2
|
const aliasSecretService = (secrets, overrides) => {
|
|
7
3
|
const map = (key) => overrides[key] ?? key;
|
|
8
4
|
return {
|
|
@@ -22,10 +18,6 @@ const aliasSecretService = (secrets, overrides) => {
|
|
|
22
18
|
},
|
|
23
19
|
};
|
|
24
20
|
};
|
|
25
|
-
/**
|
|
26
|
-
* Wrap a VariablesService so that the logical variable names an addon reads
|
|
27
|
-
* are remapped to the actual project variable names via the instance's overrides.
|
|
28
|
-
*/
|
|
29
21
|
const aliasVariablesService = (variables, overrides) => {
|
|
30
22
|
const map = (name) => overrides[name] ?? name;
|
|
31
23
|
return {
|
|
@@ -51,10 +43,6 @@ const aliasVariablesService = (variables, overrides) => {
|
|
|
51
43
|
delete: (name) => variables.delete(map(name)),
|
|
52
44
|
};
|
|
53
45
|
};
|
|
54
|
-
/**
|
|
55
|
-
* Find the consumer-defined namespace (from wireAddon) for a given addon package.
|
|
56
|
-
* Returns null if the package isn't registered as an addon.
|
|
57
|
-
*/
|
|
58
46
|
const findAddonNamespaceForPackage = (packageName) => {
|
|
59
47
|
const addons = pikkuState(null, 'addons', 'packages');
|
|
60
48
|
if (!addons)
|
|
@@ -65,18 +53,6 @@ const findAddonNamespaceForPackage = (packageName) => {
|
|
|
65
53
|
}
|
|
66
54
|
return null;
|
|
67
55
|
};
|
|
68
|
-
/**
|
|
69
|
-
* Wrap a workflow service so that bare workflow names passed from inside an
|
|
70
|
-
* addon function are auto-prefixed with the addon's consumer-facing namespace.
|
|
71
|
-
* Without this, `runToCompletion('myWorkflow')` from inside an addon misses
|
|
72
|
-
* the workflow registered under the addon's package scope and throws
|
|
73
|
-
* WorkflowNotFoundError — forcing addons to hardcode their consumer-defined
|
|
74
|
-
* namespace, which couples the addon to its caller.
|
|
75
|
-
*
|
|
76
|
-
* Explicit `'ns:name'` and bare names that already exist in root meta are
|
|
77
|
-
* unaffected; only bare names that would otherwise miss resolution get
|
|
78
|
-
* prefixed.
|
|
79
|
-
*/
|
|
80
56
|
const wrapWorkflowServiceForPackage = (service, packageName, namespace) => {
|
|
81
57
|
return new Proxy(service, {
|
|
82
58
|
get(target, prop, receiver) {
|
|
@@ -84,8 +60,6 @@ const wrapWorkflowServiceForPackage = (service, packageName, namespace) => {
|
|
|
84
60
|
const original = Reflect.get(target, prop, receiver);
|
|
85
61
|
return function (name, ...rest) {
|
|
86
62
|
if (typeof name === 'string' && !name.includes(':')) {
|
|
87
|
-
// Prefer the known instance namespace; fall back to the
|
|
88
|
-
// package's sole namespace when invoked without an instance.
|
|
89
63
|
const ns = namespace ?? findAddonNamespaceForPackage(packageName);
|
|
90
64
|
if (ns) {
|
|
91
65
|
name = `${ns}:${name}`;
|
|
@@ -98,19 +72,7 @@ const wrapWorkflowServiceForPackage = (service, packageName, namespace) => {
|
|
|
98
72
|
},
|
|
99
73
|
});
|
|
100
74
|
};
|
|
101
|
-
/**
|
|
102
|
-
* Get or create singleton services for an addon instance.
|
|
103
|
-
* Services are cached in pikkuState to avoid recreation on each call.
|
|
104
|
-
*
|
|
105
|
-
* @param packageName - The addon package name
|
|
106
|
-
* @param parentServices - The parent/caller's singleton services (used as base)
|
|
107
|
-
* @param addonInstance - The wired instance whose overrides shape the services
|
|
108
|
-
* @returns The instance's singleton services
|
|
109
|
-
*/
|
|
110
75
|
export const getOrCreatePackageSingletonServices = async (packageName, parentServices, addonInstance) => {
|
|
111
|
-
// Cache per instance (namespace), not per package, so two instances of one
|
|
112
|
-
// package get separate services built with their own overrides. A bare
|
|
113
|
-
// package-scoped call (no instance) falls back to per-package caching.
|
|
114
76
|
const cacheKey = addonInstance?.namespace ?? packageName;
|
|
115
77
|
const cachedServices = pikkuState(cacheKey, 'package', 'singletonServices');
|
|
116
78
|
if (cachedServices) {
|
|
@@ -118,12 +80,8 @@ export const getOrCreatePackageSingletonServices = async (packageName, parentSer
|
|
|
118
80
|
}
|
|
119
81
|
const factories = pikkuState(packageName, 'package', 'factories');
|
|
120
82
|
if (!factories || !factories.createSingletonServices) {
|
|
121
|
-
// No factories registered, use parent services
|
|
122
83
|
return parentServices;
|
|
123
84
|
}
|
|
124
|
-
// Apply this instance's secret/variable overrides by aliasing the resolver
|
|
125
|
-
// services the addon reads from, so its createSingletonServices resolves
|
|
126
|
-
// instance-specific secrets/variables.
|
|
127
85
|
let existingServices = parentServices;
|
|
128
86
|
if (addonInstance?.secretOverrides && parentServices.secrets) {
|
|
129
87
|
existingServices = {
|
|
@@ -137,15 +95,11 @@ export const getOrCreatePackageSingletonServices = async (packageName, parentSer
|
|
|
137
95
|
variables: aliasVariablesService(parentServices.variables, addonInstance.variableOverrides),
|
|
138
96
|
};
|
|
139
97
|
}
|
|
140
|
-
// Create config for the package (use parent config if no factory)
|
|
141
98
|
let config = existingServices.config;
|
|
142
99
|
if (factories.createConfig) {
|
|
143
100
|
config = await factories.createConfig(existingServices.variables);
|
|
144
101
|
}
|
|
145
|
-
// Create singleton services for the package, passing parent services as existing
|
|
146
102
|
const packageServices = await factories.createSingletonServices(config, existingServices);
|
|
147
|
-
// Wrap workflowService so that bare names used inside the addon's functions
|
|
148
|
-
// resolve to workflows registered under the addon's package scope.
|
|
149
103
|
if (packageServices.workflowService &&
|
|
150
104
|
typeof packageServices.workflowService === 'object') {
|
|
151
105
|
packageServices.workflowService = wrapWorkflowServiceForPackage(packageServices.workflowService, packageName, addonInstance?.namespace ?? null);
|
|
@@ -153,11 +107,6 @@ export const getOrCreatePackageSingletonServices = async (packageName, parentSer
|
|
|
153
107
|
pikkuState(cacheKey, 'package', 'singletonServices', packageServices);
|
|
154
108
|
return packageServices;
|
|
155
109
|
};
|
|
156
|
-
/**
|
|
157
|
-
* Build the addon instance descriptor (namespace + per-instance overrides) for
|
|
158
|
-
* a bare intra-addon call, using the namespace currently executing on the wire.
|
|
159
|
-
* Returns undefined unless that namespace maps to the resolved package.
|
|
160
|
-
*/
|
|
161
110
|
export const addonInstanceForNamespace = (namespace, expectedPackage) => {
|
|
162
111
|
if (!namespace)
|
|
163
112
|
return undefined;
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import type { CoreServices, PikkuRawWire } from '../../types/core.types.js';
|
|
2
2
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
3
|
-
/**
|
|
4
|
-
* How a `wireRemoteAddon` consumer supplies the token the hosted addon expects.
|
|
5
|
-
* This is a CLIENT authenticating to a hosted library — not the trusted mesh.
|
|
6
|
-
*/
|
|
7
3
|
export type RemoteAddonAuthBinding = {
|
|
8
4
|
credentialId: string;
|
|
9
5
|
} | {
|
|
@@ -11,16 +7,9 @@ export type RemoteAddonAuthBinding = {
|
|
|
11
7
|
} | {
|
|
12
8
|
resolve: (services: CoreServices, wire: PikkuRawWire) => string | Promise<string>;
|
|
13
9
|
};
|
|
14
|
-
/** The addon's auth was bound but the source produced no token — fail closed. */
|
|
15
10
|
export declare class RemoteAddonAuthError extends PikkuError {
|
|
16
11
|
readonly namespace: string;
|
|
17
12
|
constructor(namespace: string, detail: string);
|
|
18
13
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Resolve the bearer token for a remote addon call from the consumer's bound
|
|
21
|
-
* source. Returns `null` only when no auth is bound (a public surface).
|
|
22
|
-
*
|
|
23
|
-
* Security: the resolved token is never logged or traced; per-user credentials
|
|
24
|
-
* are read via the wire (scoped to `pikkuUserId`); an empty result fails closed.
|
|
25
|
-
*/
|
|
14
|
+
/** Returns `null` only when no auth is bound; an empty resolved token throws. */
|
|
26
15
|
export declare function resolveRemoteAddonToken(auth: RemoteAddonAuthBinding | undefined, services: CoreServices, wire: PikkuRawWire, namespace: string): Promise<string | null>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PikkuError, addError } from '../../errors/error-handler.js';
|
|
2
|
-
/** The addon's auth was bound but the source produced no token — fail closed. */
|
|
3
2
|
export class RemoteAddonAuthError extends PikkuError {
|
|
4
3
|
namespace;
|
|
5
4
|
constructor(namespace, detail) {
|
|
@@ -11,16 +10,9 @@ addError(RemoteAddonAuthError, {
|
|
|
11
10
|
status: 401,
|
|
12
11
|
message: 'Remote addon authentication could not be resolved.',
|
|
13
12
|
});
|
|
14
|
-
/**
|
|
15
|
-
* Resolve the bearer token for a remote addon call from the consumer's bound
|
|
16
|
-
* source. Returns `null` only when no auth is bound (a public surface).
|
|
17
|
-
*
|
|
18
|
-
* Security: the resolved token is never logged or traced; per-user credentials
|
|
19
|
-
* are read via the wire (scoped to `pikkuUserId`); an empty result fails closed.
|
|
20
|
-
*/
|
|
13
|
+
/** Returns `null` only when no auth is bound; an empty resolved token throws. */
|
|
21
14
|
export async function resolveRemoteAddonToken(auth, services, wire, namespace) {
|
|
22
15
|
if (!auth) {
|
|
23
|
-
// No auth bound → the addon declares its remote surface public.
|
|
24
16
|
return null;
|
|
25
17
|
}
|
|
26
18
|
let token;
|
|
@@ -7,21 +7,15 @@ export declare class RPCNotFoundError extends PikkuError {
|
|
|
7
7
|
readonly rpcName: string;
|
|
8
8
|
constructor(rpcName: string);
|
|
9
9
|
}
|
|
10
|
-
/** A `wireRemoteAddon` namespace is missing a usable `serverUrl`. */
|
|
11
10
|
export declare class RemoteAddonConfigError extends PikkuError {
|
|
12
11
|
constructor(namespace: string, detail: string);
|
|
13
12
|
}
|
|
14
|
-
/** The hosted addon returned a non-2xx response for a remote RPC. */
|
|
15
13
|
export declare class RemoteAddonRequestError extends PikkuError {
|
|
16
14
|
readonly httpStatus: number;
|
|
17
15
|
constructor(namespace: string, fnName: string, status: number, detail: string);
|
|
18
16
|
}
|
|
19
17
|
import type { AIAgentInput } from '../ai-agent/ai-agent.types.js';
|
|
20
18
|
import type { StreamAIAgentOptions } from '../ai-agent/ai-agent-prepare.js';
|
|
21
|
-
/**
|
|
22
|
-
* Resolve a namespaced function reference to package and function names
|
|
23
|
-
* Uses pikkuState to look up the namespace -> package mapping
|
|
24
|
-
*/
|
|
25
19
|
export declare const resolveNamespace: (namespacedFunction: string) => ResolvedFunction | null;
|
|
26
20
|
export declare class ContextAwareRPCService {
|
|
27
21
|
private services;
|
|
@@ -35,20 +29,16 @@ export declare class ContextAwareRPCService {
|
|
|
35
29
|
rpcExposed(funcName: string, data: any): Promise<any>;
|
|
36
30
|
rpc<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
|
|
37
31
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* @private
|
|
32
|
+
* Resolution half of an addon RPC call: never executes anything, so an
|
|
33
|
+
* `RPCNotFoundError` thrown by the function itself can never be mistaken for
|
|
34
|
+
* an unresolvable name.
|
|
42
35
|
*/
|
|
43
|
-
private
|
|
36
|
+
private resolveAddonFunction;
|
|
44
37
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* The consumer sends the addon's own function name (not the namespaced form)
|
|
48
|
-
* to the host's `/remote/rpc/:rpcName` endpoint, authenticating as a client
|
|
49
|
-
* with the token bound in `wireRemoteAddon({ auth })`. The addon's handlers
|
|
50
|
-
* live on the host, so there is no local function meta to resolve.
|
|
38
|
+
* Execution half of an addon RPC call. Must never be called from inside a
|
|
39
|
+
* `try` that catches `RPCNotFoundError`.
|
|
51
40
|
*/
|
|
41
|
+
private executeAddonFunction;
|
|
52
42
|
private invokeRemoteAddonFunction;
|
|
53
43
|
rpcWithWire<In = any, Out = any>(rpcName: string, data: In, wire: PikkuRawWire): Promise<Out>;
|
|
54
44
|
startWorkflow<In = any>(workflowName: string, input: In, options?: {
|
|
@@ -89,6 +79,7 @@ export declare class ContextAwareRPCService {
|
|
|
89
79
|
toolCallId: string;
|
|
90
80
|
approved: boolean;
|
|
91
81
|
}, options?: StreamAIAgentOptions) => Promise<void>;
|
|
82
|
+
interrupt: (runId: string, reason?: "speech" | "user" | "timeout") => Promise<import("../ai-agent/ai-agent-interrupt.js").AgentInterruptResult>;
|
|
92
83
|
approve: (runId: string, approvals: {
|
|
93
84
|
toolCallId: string;
|
|
94
85
|
approved: boolean;
|
|
@@ -119,7 +110,9 @@ export declare class PikkuRPCService<Services extends CoreServices, TypedRPC = P
|
|
|
119
110
|
}
|
|
120
111
|
export declare const rpcService: PikkuRPCService<import("../../types/core.types.js").CoreSingletonServices<{
|
|
121
112
|
logLevel?: import("../../services/logger.js").LogLevel;
|
|
122
|
-
secrets?: {
|
|
113
|
+
secrets?: {
|
|
114
|
+
requireAllowedHosts?: boolean;
|
|
115
|
+
};
|
|
123
116
|
workflow?: import("../workflow/workflow.types.js").WorkflowServiceConfig;
|
|
124
117
|
webhook?: import("../../services/webhook-service.js").WebhookServiceConfig;
|
|
125
118
|
postgres?: import("../../types/core.types.js").PostgresConfig;
|