@pikku/core 0.12.71 → 0.12.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +848 -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 +40 -30
- 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 -11
- package/dist/handle-error.js +6 -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 +7 -17
- package/dist/schema.js +30 -18
- 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 +1 -100
- package/dist/wirings/http/http-runner.js +12 -166
- package/dist/wirings/http/http.types.d.ts +16 -55
- package/dist/wirings/http/index.d.ts +2 -1
- package/dist/wirings/http/index.js +1 -1
- 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 +6 -36
- package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
- 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 +2 -0
- package/dist/wirings/mcp/mcp-runner.js +6 -16
- 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 -2
- 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 +75 -7
- package/src/function/function-runner.ts +73 -30
- 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/gopass-secrets-removed.test.ts +51 -0
- package/src/handle-error.test.ts +108 -1
- package/src/handle-error.ts +8 -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.test.ts +103 -0
- package/src/schema.ts +35 -18
- 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 +12 -168
- package/src/wirings/http/http.types.ts +17 -62
- package/src/wirings/http/index.ts +5 -1
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
- package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
- 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.test.ts +40 -0
- package/src/wirings/mcp/mcp-runner.ts +9 -15
- 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/services/gopass-secrets.ts +0 -78
- 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
|
@@ -16,7 +16,6 @@ addError(RPCNotFoundError, {
|
|
|
16
16
|
mcpCode: -32601,
|
|
17
17
|
message: 'RPC function not found.',
|
|
18
18
|
});
|
|
19
|
-
/** A `wireRemoteAddon` namespace is missing a usable `serverUrl`. */
|
|
20
19
|
export class RemoteAddonConfigError extends PikkuError {
|
|
21
20
|
constructor(namespace, detail) {
|
|
22
21
|
super(`Remote addon '${namespace}' is misconfigured: ${detail}`);
|
|
@@ -26,7 +25,6 @@ addError(RemoteAddonConfigError, {
|
|
|
26
25
|
status: 500,
|
|
27
26
|
message: 'Remote addon is misconfigured.',
|
|
28
27
|
});
|
|
29
|
-
/** The hosted addon returned a non-2xx response for a remote RPC. */
|
|
30
28
|
export class RemoteAddonRequestError extends PikkuError {
|
|
31
29
|
httpStatus;
|
|
32
30
|
constructor(namespace, fnName, status, detail) {
|
|
@@ -39,12 +37,8 @@ addError(RemoteAddonRequestError, {
|
|
|
39
37
|
message: 'Remote addon request failed.',
|
|
40
38
|
});
|
|
41
39
|
import { runAIAgent, resumeAIAgentSync } from '../ai-agent/ai-agent-runner.js';
|
|
42
|
-
import { streamAIAgent, resumeAIAgent } from '../ai-agent/ai-agent-stream.js';
|
|
40
|
+
import { streamAIAgent, resumeAIAgent, interruptAIAgent, } from '../ai-agent/ai-agent-stream.js';
|
|
43
41
|
import { wrapChannelWithAGUI } from '../ai-agent/ai-agent-agui.js';
|
|
44
|
-
/**
|
|
45
|
-
* Resolve a namespaced function reference to package and function names
|
|
46
|
-
* Uses pikkuState to look up the namespace -> package mapping
|
|
47
|
-
*/
|
|
48
42
|
export const resolveNamespace = (namespacedFunction) => {
|
|
49
43
|
const colonIndex = namespacedFunction.indexOf(':');
|
|
50
44
|
if (colonIndex === -1) {
|
|
@@ -63,15 +57,7 @@ export const resolveNamespace = (namespacedFunction) => {
|
|
|
63
57
|
addonConfig: pkgConfig,
|
|
64
58
|
};
|
|
65
59
|
};
|
|
66
|
-
/**
|
|
67
|
-
* Resolve a bare (non-namespaced) RPC name to its pikkuFuncId, preferring
|
|
68
|
-
* the caller's addon package when provided. Returns the function name plus
|
|
69
|
-
* the package scope that resolved it (null = root), so callers can thread
|
|
70
|
-
* the scope into runPikkuFunc without a second lookup.
|
|
71
|
-
*/
|
|
72
60
|
const resolvePikkuFunction = (rpcName, packageName = null) => {
|
|
73
|
-
// Addon-scoped calls: try the caller's package function meta first.
|
|
74
|
-
// (RPC meta only lives in root; addon functions are registered under their package.)
|
|
75
61
|
if (packageName) {
|
|
76
62
|
const pkgFunctions = pikkuState(packageName, 'function', 'meta');
|
|
77
63
|
const pkgMeta = pkgFunctions?.[rpcName];
|
|
@@ -102,7 +88,12 @@ const resolvePikkuFunction = (rpcName, packageName = null) => {
|
|
|
102
88
|
}
|
|
103
89
|
return { pikkuFuncId: rpcMeta, packageName: null };
|
|
104
90
|
};
|
|
105
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Marks an addon RPC name that could not be resolved. Module-private on purpose:
|
|
93
|
+
* resolution failure must never be conflated with an `RPCNotFoundError` thrown by
|
|
94
|
+
* a function that already started executing, and it must never escape to callers.
|
|
95
|
+
*/
|
|
96
|
+
const NOT_RESOLVED = Symbol('pikku:rpc-not-resolved');
|
|
106
97
|
export class ContextAwareRPCService {
|
|
107
98
|
services;
|
|
108
99
|
wire;
|
|
@@ -138,38 +129,18 @@ export class ContextAwareRPCService {
|
|
|
138
129
|
const updatedWire = {
|
|
139
130
|
...this.wire,
|
|
140
131
|
};
|
|
141
|
-
// Check addon namespace first (e.g. 'stripe:createCharge')
|
|
142
132
|
if (funcName.includes(':')) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
catch (addonErr) {
|
|
147
|
-
if (!(addonErr instanceof RPCNotFoundError))
|
|
148
|
-
throw addonErr;
|
|
149
|
-
// Not an addon — fall through to local lookup
|
|
133
|
+
const addonCall = this.resolveAddonFunction(funcName);
|
|
134
|
+
if (addonCall !== NOT_RESOLVED) {
|
|
135
|
+
return await this.executeAddonFunction(addonCall, data, updatedWire);
|
|
150
136
|
}
|
|
151
137
|
}
|
|
152
|
-
|
|
153
|
-
// Note: intra-addon bare calls do NOT re-apply the addon's external
|
|
154
|
-
// addonConfig.auth/tags — those gates are only applied on the external
|
|
155
|
-
// 'namespace:func' boundary via invokeAddonFunction.
|
|
138
|
+
let resolved;
|
|
156
139
|
try {
|
|
157
|
-
|
|
158
|
-
const addonInstance = resolved.packageName
|
|
159
|
-
? addonInstanceForNamespace(this.wire.addonNamespace, resolved.packageName)
|
|
160
|
-
: undefined;
|
|
161
|
-
return await runPikkuFunc('rpc', funcName, resolved.pikkuFuncId, {
|
|
162
|
-
auth: this.options.requiresAuth,
|
|
163
|
-
singletonServices: this.services,
|
|
164
|
-
data: () => data,
|
|
165
|
-
wire: updatedWire,
|
|
166
|
-
packageName: resolved.packageName,
|
|
167
|
-
addonInstance,
|
|
168
|
-
});
|
|
140
|
+
resolved = resolvePikkuFunction(funcName, this.packageName);
|
|
169
141
|
}
|
|
170
142
|
catch (e) {
|
|
171
143
|
if (e instanceof RPCNotFoundError) {
|
|
172
|
-
// Fall back to deployment service (e.g. CF service binding, Lambda Invoke)
|
|
173
144
|
if (this.services.deploymentService) {
|
|
174
145
|
const session = this.wire.getSession && typeof this.wire.getSession === 'function'
|
|
175
146
|
? await this.wire.getSession()
|
|
@@ -179,72 +150,80 @@ export class ContextAwareRPCService {
|
|
|
179
150
|
}
|
|
180
151
|
throw e;
|
|
181
152
|
}
|
|
153
|
+
const addonInstance = resolved.packageName
|
|
154
|
+
? addonInstanceForNamespace(this.wire.addonNamespace, resolved.packageName)
|
|
155
|
+
: undefined;
|
|
156
|
+
return await runPikkuFunc('rpc', funcName, resolved.pikkuFuncId, {
|
|
157
|
+
auth: this.options.requiresAuth,
|
|
158
|
+
singletonServices: this.services,
|
|
159
|
+
data: () => data,
|
|
160
|
+
wire: updatedWire,
|
|
161
|
+
packageName: resolved.packageName,
|
|
162
|
+
addonInstance,
|
|
163
|
+
});
|
|
182
164
|
}
|
|
183
165
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* @private
|
|
166
|
+
* Resolution half of an addon RPC call: never executes anything, so an
|
|
167
|
+
* `RPCNotFoundError` thrown by the function itself can never be mistaken for
|
|
168
|
+
* an unresolvable name.
|
|
188
169
|
*/
|
|
189
|
-
|
|
190
|
-
// Resolve namespace to package name
|
|
170
|
+
resolveAddonFunction(namespacedFunction) {
|
|
191
171
|
const resolved = resolveNamespace(namespacedFunction);
|
|
192
172
|
if (!resolved) {
|
|
193
|
-
|
|
173
|
+
return NOT_RESOLVED;
|
|
194
174
|
}
|
|
195
175
|
const namespace = namespacedFunction.slice(0, namespacedFunction.indexOf(':'));
|
|
196
|
-
// wireRemoteAddon: the addon ships as a devDependency (types only) and its
|
|
197
|
-
// handlers run on the host — dispatch over HTTP, not through local meta.
|
|
198
176
|
if (resolved.addonConfig?.remote) {
|
|
199
|
-
|
|
177
|
+
const addonConfig = pikkuState(null, 'addons', 'packages').get(namespace);
|
|
178
|
+
if (!addonConfig?.remote) {
|
|
179
|
+
return NOT_RESOLVED;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
kind: 'remote',
|
|
183
|
+
namespace,
|
|
184
|
+
fnName: resolved.function,
|
|
185
|
+
addonConfig,
|
|
186
|
+
};
|
|
200
187
|
}
|
|
201
|
-
// Get the function meta from the addon package
|
|
202
|
-
// Addon packages use function meta, not RPC meta
|
|
203
188
|
const addonFunctionMeta = pikkuState(resolved.package, 'function', 'meta');
|
|
204
189
|
const funcMeta = addonFunctionMeta[resolved.function];
|
|
205
190
|
if (!funcMeta) {
|
|
206
|
-
|
|
191
|
+
return NOT_RESOLVED;
|
|
207
192
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
193
|
+
return {
|
|
194
|
+
kind: 'local',
|
|
195
|
+
namespacedFunction,
|
|
196
|
+
packageName: resolved.package,
|
|
197
|
+
pikkuFuncId: funcMeta.pikkuFuncId || resolved.function,
|
|
198
|
+
auth: resolved.addonConfig?.auth ?? this.options.requiresAuth,
|
|
199
|
+
tags: [...(resolved.addonConfig?.tags ?? []), ...(funcMeta.tags ?? [])],
|
|
200
|
+
addonInstance: {
|
|
201
|
+
namespace,
|
|
202
|
+
secretOverrides: resolved.addonConfig?.secretOverrides,
|
|
203
|
+
variableOverrides: resolved.addonConfig?.variableOverrides,
|
|
204
|
+
credentialOverrides: resolved.addonConfig?.credentialOverrides,
|
|
205
|
+
},
|
|
221
206
|
};
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Execution half of an addon RPC call. Must never be called from inside a
|
|
210
|
+
* `try` that catches `RPCNotFoundError`.
|
|
211
|
+
*/
|
|
212
|
+
async executeAddonFunction(addonCall, data, wire) {
|
|
213
|
+
if (addonCall.kind === 'remote') {
|
|
214
|
+
return this.invokeRemoteAddonFunction(addonCall.namespace, addonCall.fnName, data, addonCall.addonConfig);
|
|
215
|
+
}
|
|
216
|
+
return runPikkuFunc('rpc', addonCall.namespacedFunction, addonCall.pikkuFuncId, {
|
|
217
|
+
auth: addonCall.auth,
|
|
227
218
|
singletonServices: this.services,
|
|
228
219
|
data: () => data,
|
|
229
220
|
wire,
|
|
230
|
-
packageName:
|
|
231
|
-
tags,
|
|
232
|
-
addonInstance,
|
|
221
|
+
packageName: addonCall.packageName,
|
|
222
|
+
tags: addonCall.tags,
|
|
223
|
+
addonInstance: addonCall.addonInstance,
|
|
233
224
|
});
|
|
234
225
|
}
|
|
235
|
-
|
|
236
|
-
* Dispatch a `wireRemoteAddon` RPC over HTTP to the hosting service.
|
|
237
|
-
*
|
|
238
|
-
* The consumer sends the addon's own function name (not the namespaced form)
|
|
239
|
-
* to the host's `/remote/rpc/:rpcName` endpoint, authenticating as a client
|
|
240
|
-
* with the token bound in `wireRemoteAddon({ auth })`. The addon's handlers
|
|
241
|
-
* live on the host, so there is no local function meta to resolve.
|
|
242
|
-
*/
|
|
243
|
-
async invokeRemoteAddonFunction(namespace, fnName, data) {
|
|
244
|
-
const cfg = pikkuState(null, 'addons', 'packages').get(namespace);
|
|
245
|
-
if (!cfg?.remote) {
|
|
246
|
-
throw new RPCNotFoundError(`${namespace}:${fnName}`);
|
|
247
|
-
}
|
|
226
|
+
async invokeRemoteAddonFunction(namespace, fnName, data, cfg) {
|
|
248
227
|
const serverUrl = typeof cfg.serverUrl === 'function'
|
|
249
228
|
? await cfg.serverUrl(this.services)
|
|
250
229
|
: cfg.serverUrl;
|
|
@@ -270,7 +249,6 @@ export class ContextAwareRPCService {
|
|
|
270
249
|
body: JSON.stringify({ rpcName: remoteFn, data }),
|
|
271
250
|
});
|
|
272
251
|
if (!res.ok) {
|
|
273
|
-
// Best-effort body read to enrich the thrown error (mirrors postRpc).
|
|
274
252
|
const detail = (await res.text().catch(() => '')).slice(0, 300);
|
|
275
253
|
throw new RemoteAddonRequestError(namespace, remoteFn, res.status, detail);
|
|
276
254
|
}
|
|
@@ -286,21 +264,15 @@ export class ContextAwareRPCService {
|
|
|
286
264
|
...wire,
|
|
287
265
|
};
|
|
288
266
|
if (rpcName.includes(':')) {
|
|
289
|
-
|
|
267
|
+
const addonCall = this.resolveAddonFunction(rpcName);
|
|
268
|
+
if (addonCall === NOT_RESOLVED) {
|
|
269
|
+
throw new RPCNotFoundError(rpcName);
|
|
270
|
+
}
|
|
271
|
+
return this.executeAddonFunction(addonCall, data, mergedWire);
|
|
290
272
|
}
|
|
273
|
+
let resolved;
|
|
291
274
|
try {
|
|
292
|
-
|
|
293
|
-
const addonInstance = resolved.packageName
|
|
294
|
-
? addonInstanceForNamespace(this.wire.addonNamespace, resolved.packageName)
|
|
295
|
-
: undefined;
|
|
296
|
-
return await runPikkuFunc('rpc', rpcName, resolved.pikkuFuncId, {
|
|
297
|
-
auth: this.options.requiresAuth,
|
|
298
|
-
singletonServices: this.services,
|
|
299
|
-
data: () => data,
|
|
300
|
-
wire: mergedWire,
|
|
301
|
-
packageName: resolved.packageName,
|
|
302
|
-
addonInstance,
|
|
303
|
-
});
|
|
275
|
+
resolved = resolvePikkuFunction(rpcName, this.packageName);
|
|
304
276
|
}
|
|
305
277
|
catch (e) {
|
|
306
278
|
if (e instanceof RPCNotFoundError && this.services.deploymentService) {
|
|
@@ -311,6 +283,17 @@ export class ContextAwareRPCService {
|
|
|
311
283
|
}
|
|
312
284
|
throw e;
|
|
313
285
|
}
|
|
286
|
+
const addonInstance = resolved.packageName
|
|
287
|
+
? addonInstanceForNamespace(this.wire.addonNamespace, resolved.packageName)
|
|
288
|
+
: undefined;
|
|
289
|
+
return await runPikkuFunc('rpc', rpcName, resolved.pikkuFuncId, {
|
|
290
|
+
auth: this.options.requiresAuth,
|
|
291
|
+
singletonServices: this.services,
|
|
292
|
+
data: () => data,
|
|
293
|
+
wire: mergedWire,
|
|
294
|
+
packageName: resolved.packageName,
|
|
295
|
+
addonInstance,
|
|
296
|
+
});
|
|
314
297
|
}
|
|
315
298
|
async startWorkflow(workflowName, input, options) {
|
|
316
299
|
if (!this.services.workflowService) {
|
|
@@ -370,6 +353,9 @@ export class ContextAwareRPCService {
|
|
|
370
353
|
getCredential: this.wire.getCredential?.bind(this.wire),
|
|
371
354
|
}, options);
|
|
372
355
|
},
|
|
356
|
+
interrupt: async (runId, reason) => {
|
|
357
|
+
return interruptAIAgent({ runId, ...(reason ? { reason } : {}) }, { sessionService: this.options.sessionService });
|
|
358
|
+
},
|
|
373
359
|
approve: async (runId, approvals, expectedAgentName) => {
|
|
374
360
|
const result = await resumeAIAgentSync(runId, approvals, {
|
|
375
361
|
sessionService: this.options.sessionService,
|
|
@@ -397,9 +383,7 @@ export class ContextAwareRPCService {
|
|
|
397
383
|
return this.services.deploymentService.invoke(funcName, data, session, this.wire.traceId);
|
|
398
384
|
}
|
|
399
385
|
}
|
|
400
|
-
// RPC Service class for the global interface
|
|
401
386
|
export class PikkuRPCService {
|
|
402
|
-
// Convenience function for initializing
|
|
403
387
|
getContextRPCService(services, wire, requiresAuthOrOptions, depth = 0, packageName = null) {
|
|
404
388
|
const options = typeof requiresAuthOrOptions === 'object' &&
|
|
405
389
|
requiresAuthOrOptions !== null
|
|
@@ -420,5 +404,4 @@ export class PikkuRPCService {
|
|
|
420
404
|
};
|
|
421
405
|
}
|
|
422
406
|
}
|
|
423
|
-
// Create a singleton instance
|
|
424
407
|
export const rpcService = new PikkuRPCService();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentInterruptResult } from '../ai-agent/ai-agent-interrupt.js';
|
|
1
2
|
export type PikkuRPC<Invoke extends (...args: any[]) => any = (...args: any[]) => any, Remote extends (...args: any[]) => any = (...args: any[]) => any, startWorkflow extends (...args: any[]) => any = (...args: any[]) => any, AgentRun extends (...args: any[]) => any = (...args: any[]) => any, AgentStream extends (...args: any[]) => any = (...args: any[]) => any> = {
|
|
2
3
|
depth: number;
|
|
3
4
|
global: boolean;
|
|
@@ -16,6 +17,12 @@ export type PikkuRPC<Invoke extends (...args: any[]) => any = (...args: any[]) =
|
|
|
16
17
|
toolCallId: string;
|
|
17
18
|
approved: boolean;
|
|
18
19
|
}[], expectedAgentName?: string) => Promise<any>;
|
|
20
|
+
/** Stop an in-flight run. Needs no channel — it ends a stream rather than
|
|
21
|
+
* continuing one — so it is reachable over a plain RPC while the stream
|
|
22
|
+
* itself is held open elsewhere. Resolves `stopped: false` when there was
|
|
23
|
+
* nothing left to stop, and names any tools still executing — their side
|
|
24
|
+
* effects have already happened and are not undone by interrupting. */
|
|
25
|
+
interrupt: (runId: string, reason?: 'speech' | 'user' | 'timeout') => Promise<AgentInterruptResult>;
|
|
19
26
|
};
|
|
20
27
|
};
|
|
21
28
|
export type RPCMeta = {
|
|
@@ -23,16 +30,10 @@ export type RPCMeta = {
|
|
|
23
30
|
expose: boolean;
|
|
24
31
|
remote?: boolean;
|
|
25
32
|
};
|
|
26
|
-
/**
|
|
27
|
-
* Type for RPC handlers
|
|
28
|
-
*/
|
|
29
33
|
export interface RPCHandler<Input, Output> {
|
|
30
34
|
input: Input;
|
|
31
35
|
output: Output;
|
|
32
36
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Resolved function reference from namespace
|
|
35
|
-
*/
|
|
36
37
|
export interface ResolvedFunction {
|
|
37
38
|
package: string;
|
|
38
39
|
function: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CorePikkuMiddleware } from '../../types/core.types.js';
|
|
1
2
|
export type WireAddonConfig = {
|
|
2
3
|
name: string;
|
|
3
4
|
package: string;
|
|
@@ -5,8 +6,32 @@ export type WireAddonConfig = {
|
|
|
5
6
|
auth?: boolean;
|
|
6
7
|
mcp?: boolean;
|
|
7
8
|
tags?: string[];
|
|
9
|
+
/** Required of every function in the addon, on top of the function's own. */
|
|
10
|
+
scopes?: string[];
|
|
8
11
|
secretOverrides?: Record<string, string>;
|
|
9
12
|
variableOverrides?: Record<string, string>;
|
|
10
13
|
credentialOverrides?: Record<string, string>;
|
|
11
14
|
};
|
|
12
15
|
export declare const wireAddon: (config: WireAddonConfig) => void;
|
|
16
|
+
/**
|
|
17
|
+
* knowledge: decisions/security/addon-scopes-are-resolved-where-the-function-runs.md
|
|
18
|
+
*/
|
|
19
|
+
export declare const resolveAddonScopes: (packageName: string | null, namespace?: string) => string[];
|
|
20
|
+
/**
|
|
21
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
22
|
+
*/
|
|
23
|
+
export declare const resolveAddonTags: (packageName: string | null, namespace?: string) => string[];
|
|
24
|
+
/**
|
|
25
|
+
* True when any governing instance requires a session. `auth: false` is not
|
|
26
|
+
* honoured here — on a direct wiring it would weaken the wiring's own gate.
|
|
27
|
+
*
|
|
28
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
29
|
+
*/
|
|
30
|
+
export declare const resolveAddonAuth: (packageName: string | null, namespace?: string) => boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Addon tags name middleware the *consuming app* registered, so they resolve
|
|
33
|
+
* against the root tag groups rather than the addon package's own.
|
|
34
|
+
*
|
|
35
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
36
|
+
*/
|
|
37
|
+
export declare const resolveAddonTagMiddleware: (packageName: string | null, namespace?: string) => CorePikkuMiddleware[];
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
+
import { getTagGroups } from '../../utils.js';
|
|
2
3
|
export const wireAddon = (config) => {
|
|
3
4
|
pikkuState(null, 'addons', 'packages').set(config.name, {
|
|
4
5
|
package: config.package,
|
|
5
6
|
rpcEndpoint: config.rpcEndpoint,
|
|
6
7
|
auth: config.auth,
|
|
7
8
|
tags: config.tags,
|
|
9
|
+
...(config.scopes ? { scopes: config.scopes } : {}),
|
|
8
10
|
...(config.secretOverrides
|
|
9
11
|
? { secretOverrides: config.secretOverrides }
|
|
10
12
|
: {}),
|
|
@@ -16,3 +18,63 @@ export const wireAddon = (config) => {
|
|
|
16
18
|
: {}),
|
|
17
19
|
});
|
|
18
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* The addon configs a running function is governed by: the named instance when
|
|
23
|
+
* the caller resolved one, every instance of the package otherwise.
|
|
24
|
+
*
|
|
25
|
+
* knowledge: decisions/security/addon-scopes-are-resolved-where-the-function-runs.md
|
|
26
|
+
*/
|
|
27
|
+
const governingAddonConfigs = (packageName, namespace) => {
|
|
28
|
+
if (!packageName) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const addons = pikkuState(null, 'addons', 'packages');
|
|
32
|
+
if (!addons) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
if (namespace) {
|
|
36
|
+
const config = addons.get(namespace);
|
|
37
|
+
if (config?.package === packageName) {
|
|
38
|
+
return [config];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return [...addons.values()].filter((config) => config?.package === packageName);
|
|
42
|
+
};
|
|
43
|
+
const unionOf = (packageName, namespace, field) => {
|
|
44
|
+
const values = new Set();
|
|
45
|
+
for (const config of governingAddonConfigs(packageName, namespace)) {
|
|
46
|
+
for (const value of config[field] ?? []) {
|
|
47
|
+
values.add(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return [...values];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* knowledge: decisions/security/addon-scopes-are-resolved-where-the-function-runs.md
|
|
54
|
+
*/
|
|
55
|
+
export const resolveAddonScopes = (packageName, namespace) => unionOf(packageName, namespace, 'scopes');
|
|
56
|
+
/**
|
|
57
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
58
|
+
*/
|
|
59
|
+
export const resolveAddonTags = (packageName, namespace) => unionOf(packageName, namespace, 'tags');
|
|
60
|
+
/**
|
|
61
|
+
* True when any governing instance requires a session. `auth: false` is not
|
|
62
|
+
* honoured here — on a direct wiring it would weaken the wiring's own gate.
|
|
63
|
+
*
|
|
64
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
65
|
+
*/
|
|
66
|
+
export const resolveAddonAuth = (packageName, namespace) => governingAddonConfigs(packageName, namespace).some((config) => config.auth === true);
|
|
67
|
+
/**
|
|
68
|
+
* Addon tags name middleware the *consuming app* registered, so they resolve
|
|
69
|
+
* against the root tag groups rather than the addon package's own.
|
|
70
|
+
*
|
|
71
|
+
* knowledge: decisions/security/addon-auth-and-tags-only-tighten.md
|
|
72
|
+
*/
|
|
73
|
+
export const resolveAddonTagMiddleware = (packageName, namespace) => {
|
|
74
|
+
const tags = resolveAddonTags(packageName, namespace);
|
|
75
|
+
if (tags.length === 0) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
const tagGroups = pikkuState(null, 'middleware', 'tagGroup');
|
|
79
|
+
return tags.flatMap((tag) => getTagGroups(tagGroups, tag).flat());
|
|
80
|
+
};
|
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
import type { CoreServices, PikkuWire } from '../../types/core.types.js';
|
|
2
|
-
/**
|
|
3
|
-
* How the consumer supplies the token the hosted addon's auth expects.
|
|
4
|
-
*
|
|
5
|
-
* This is a CLIENT authenticating to a hosted library — NOT pikku's trusted
|
|
6
|
-
* machine-to-machine mesh (which uses `PIKKU_REMOTE_SECRET`). The consumer binds
|
|
7
|
-
* the addon's declared auth requirement to a local source:
|
|
8
|
-
* - `credentialId` — per-user credential, resolved via `wire.getCredential(id)`
|
|
9
|
-
* - `secretId` — platform key, resolved via the secrets service
|
|
10
|
-
* - `resolve` — custom escape hatch
|
|
11
|
-
* Omit entirely when the addon declares its remote surface is public.
|
|
12
|
-
*
|
|
13
|
-
* The value is sent `Authorization: Bearer <token>` by default; a non-default
|
|
14
|
-
* header is declared once by the addon (its meta), never chosen here.
|
|
15
|
-
*/
|
|
2
|
+
/** Sent as `Authorization: Bearer <token>`; a non-default header is declared by the addon. */
|
|
16
3
|
export type RemoteAddonAuth = {
|
|
17
4
|
credentialId: string;
|
|
18
5
|
} | {
|
|
@@ -23,25 +10,13 @@ export type RemoteAddonAuth = {
|
|
|
23
10
|
export type WireRemoteAddonConfig = {
|
|
24
11
|
/** Consumer-facing namespace, e.g. `registry` → `rpc('registry:getOpenApi')` */
|
|
25
12
|
name: string;
|
|
26
|
-
/**
|
|
27
|
-
* The addon package. Installed as a **devDependency** (types only — its
|
|
28
|
-
* handlers run on the host); `pikku verify` enforces this.
|
|
29
|
-
*/
|
|
13
|
+
/** Must be installed as a devDependency — `pikku verify` enforces this. */
|
|
30
14
|
package: string;
|
|
31
|
-
/** Base URL of the host serving the addon's remote surface. */
|
|
32
15
|
serverUrl: string | ((services: CoreServices) => string | Promise<string>);
|
|
33
|
-
/**
|
|
16
|
+
/** Omit when the addon declares its remote surface public. */
|
|
34
17
|
auth?: RemoteAddonAuth;
|
|
35
18
|
/** Map a consumer-facing fn name → the remote fn name, when they differ (rare). */
|
|
36
19
|
remoteName?: (fn: string) => string;
|
|
37
20
|
tags?: string[];
|
|
38
21
|
};
|
|
39
|
-
/**
|
|
40
|
-
* Consume a hosted addon's `remote: true` RPCs transparently over HTTP.
|
|
41
|
-
*
|
|
42
|
-
* Unlike `wireAddon` (which bundles the addon's functions in-process, a
|
|
43
|
-
* production dependency), `wireRemoteAddon` dispatches `rpc('name:fn')` to the
|
|
44
|
-
* host at `serverUrl`, fully typed — the addon ships as a devDependency (types
|
|
45
|
-
* only). See {@link RemoteAddonAuth} for how auth is bound.
|
|
46
|
-
*/
|
|
47
22
|
export declare const wireRemoteAddon: (config: WireRemoteAddonConfig) => void;
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
-
/**
|
|
3
|
-
* Consume a hosted addon's `remote: true` RPCs transparently over HTTP.
|
|
4
|
-
*
|
|
5
|
-
* Unlike `wireAddon` (which bundles the addon's functions in-process, a
|
|
6
|
-
* production dependency), `wireRemoteAddon` dispatches `rpc('name:fn')` to the
|
|
7
|
-
* host at `serverUrl`, fully typed — the addon ships as a devDependency (types
|
|
8
|
-
* only). See {@link RemoteAddonAuth} for how auth is bound.
|
|
9
|
-
*/
|
|
10
2
|
export const wireRemoteAddon = (config) => {
|
|
11
3
|
pikkuState(null, 'addons', 'packages').set(config.name, {
|
|
12
4
|
package: config.package,
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
-
/**
|
|
3
|
-
* Logs all the loaded scheduled tasks.
|
|
4
|
-
* @param logger - A logger for logging information.
|
|
5
|
-
*/
|
|
6
2
|
export const logSchedulers = (logger) => {
|
|
7
3
|
const scheduledTasks = pikkuState(null, 'scheduler', 'tasks');
|
|
8
4
|
if (scheduledTasks.size === 0) {
|
|
@@ -4,7 +4,6 @@ import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../.
|
|
|
4
4
|
export type RunScheduledTasksParams = {
|
|
5
5
|
name: string;
|
|
6
6
|
session?: CoreUserSession;
|
|
7
|
-
/** Pre-resolved trace ID */
|
|
8
7
|
traceId?: string;
|
|
9
8
|
};
|
|
10
9
|
export declare const wireScheduler: <PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>>(scheduledTask: CoreScheduledTask<PikkuFunctionConfig>) => void;
|
|
@@ -51,7 +51,6 @@ export async function runScheduledTask({ name, session, traceId, }) {
|
|
|
51
51
|
if (!meta) {
|
|
52
52
|
throw new ScheduledTaskNotFoundError(`Scheduled task meta not found: ${name}`);
|
|
53
53
|
}
|
|
54
|
-
// Create the scheduled task wire object
|
|
55
54
|
const wire = {
|
|
56
55
|
traceId: resolvedTraceId,
|
|
57
56
|
scheduledTask: {
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import type { CoreUserSession, CorePikkuMiddleware, CommonWireMeta } from '../../types/core.types.js';
|
|
2
2
|
import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Represents metadata for scheduled tasks, including title, schedule, and documentation.
|
|
5
|
-
*/
|
|
6
3
|
export type ScheduledTasksMeta<UserSession extends CoreUserSession = any> = Record<string, CommonWireMeta & {
|
|
7
4
|
name: string;
|
|
8
5
|
schedule: string;
|
|
9
6
|
session?: UserSession;
|
|
10
7
|
}>;
|
|
11
|
-
/**
|
|
12
|
-
* Represents a core scheduled task.
|
|
13
|
-
*/
|
|
14
8
|
export type CoreScheduledTask<PikkuFunctionConfig = CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>, PikkuMiddleware = CorePikkuMiddleware<any>> = {
|
|
15
9
|
name: string;
|
|
16
10
|
schedule: string;
|
|
@@ -18,17 +12,10 @@ export type CoreScheduledTask<PikkuFunctionConfig = CorePikkuFunctionConfig<Core
|
|
|
18
12
|
tags?: string[];
|
|
19
13
|
middleware?: PikkuMiddleware[];
|
|
20
14
|
};
|
|
21
|
-
/**
|
|
22
|
-
* Represents a scheduled task wire object for middleware
|
|
23
|
-
* Provides information about the current scheduled task execution
|
|
24
|
-
*/
|
|
25
15
|
export interface PikkuScheduledTask {
|
|
26
|
-
/** The name of the scheduled task being executed */
|
|
27
16
|
name: string;
|
|
28
|
-
/** The cron schedule expression */
|
|
29
17
|
schedule: string;
|
|
30
|
-
/** Current execution timestamp */
|
|
31
18
|
executionTime: Date;
|
|
32
|
-
/**
|
|
19
|
+
/** Never returns — throws to abort the run. */
|
|
33
20
|
skip: (reason?: string) => void;
|
|
34
21
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CoreScopes } from './scope.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Declares scopes. The body is a no-op that tree-shakes away — the CLI reads
|
|
4
|
+
* the call by AST and generates a `ScopeId` union, so a function referencing an
|
|
5
|
+
* undeclared scope fails the build.
|
|
6
|
+
*
|
|
7
|
+
* Scopes are keyed by segment at every level: a scope is named by its key, and
|
|
8
|
+
* its value describes it. Every node is grantable — the declaration below
|
|
9
|
+
* yields `admin`, `admin:invoices`, `admin:invoices:create`,
|
|
10
|
+
* `admin:invoices:void` and `billing`.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* defineScope({
|
|
15
|
+
* admin: {
|
|
16
|
+
* displayName: 'Administration',
|
|
17
|
+
* description: 'Administrative access',
|
|
18
|
+
* scopes: {
|
|
19
|
+
* invoices: {
|
|
20
|
+
* description: 'Invoice management',
|
|
21
|
+
* scopes: {
|
|
22
|
+
* create: { description: 'Create invoices' },
|
|
23
|
+
* void: { description: 'Void invoices' },
|
|
24
|
+
* },
|
|
25
|
+
* },
|
|
26
|
+
* },
|
|
27
|
+
* },
|
|
28
|
+
* billing: {},
|
|
29
|
+
* })
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const defineScope: (_config: CoreScopes) => void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declares scopes. The body is a no-op that tree-shakes away — the CLI reads
|
|
3
|
+
* the call by AST and generates a `ScopeId` union, so a function referencing an
|
|
4
|
+
* undeclared scope fails the build.
|
|
5
|
+
*
|
|
6
|
+
* Scopes are keyed by segment at every level: a scope is named by its key, and
|
|
7
|
+
* its value describes it. Every node is grantable — the declaration below
|
|
8
|
+
* yields `admin`, `admin:invoices`, `admin:invoices:create`,
|
|
9
|
+
* `admin:invoices:void` and `billing`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* defineScope({
|
|
14
|
+
* admin: {
|
|
15
|
+
* displayName: 'Administration',
|
|
16
|
+
* description: 'Administrative access',
|
|
17
|
+
* scopes: {
|
|
18
|
+
* invoices: {
|
|
19
|
+
* description: 'Invoice management',
|
|
20
|
+
* scopes: {
|
|
21
|
+
* create: { description: 'Create invoices' },
|
|
22
|
+
* void: { description: 'Void invoices' },
|
|
23
|
+
* },
|
|
24
|
+
* },
|
|
25
|
+
* },
|
|
26
|
+
* },
|
|
27
|
+
* billing: {},
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const defineScope = (_config) => { };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { defineScope } from './define-scope.js';
|
|
2
2
|
export { flattenScopeDefinitions, validateAndBuildScopeDefinitionsMeta, } from './validate-scope-definitions.js';
|
|
3
3
|
export type { CoreScopes, CoreScopeNode, FlatScope, ScopeDefinitionMeta, ScopeDefinitionsMeta, ScopeDefinitions, ScopeNodeMeta, } from './scope.types.js';
|