@pikku/core 0.12.143 → 0.12.144
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/dist/analytics/analytics.d.ts +14 -0
- package/dist/analytics/analytics.js +14 -0
- package/dist/analytics/analytics.types.d.ts +1 -0
- package/dist/analytics/anonymous-analytics-identity.d.ts +1 -0
- package/dist/analytics/cookie-analytics-identity.d.ts +1 -0
- package/dist/analytics/mint-cookie.d.ts +1 -0
- package/dist/{wirings/channel/channel-middleware-runner.d.ts → channel-middleware-runner.d.ts} +17 -3
- package/dist/{wirings/channel/channel-middleware-runner.js → channel-middleware-runner.js} +24 -8
- package/dist/classification/data-classification.d.ts +13 -0
- package/dist/classification/secret-value.d.ts +7 -0
- package/dist/classification/secret-value.js +7 -0
- package/dist/crypto-utils.d.ts +93 -0
- package/dist/crypto-utils.js +92 -0
- package/dist/dev/hot-reload.d.ts +16 -0
- package/dist/dev/hot-reload.js +16 -1
- package/dist/dev/module-runner.js +7 -3
- package/dist/dev/reload-meta.js +1 -1
- package/dist/errors/error-handler.d.ts +9 -0
- package/dist/errors/error-handler.js +8 -0
- package/dist/errors/errors.d.ts +219 -0
- package/dist/errors/errors.js +227 -0
- package/dist/errors/serialized-error.d.ts +4 -0
- package/dist/function/abort-scope.d.ts +5 -0
- package/dist/function/function-meta.types.d.ts +20 -0
- package/dist/function/function-runner.d.ts +41 -0
- package/dist/function/function-runner.js +57 -11
- package/dist/function/functions.types.d.ts +59 -0
- package/dist/function/functions.types.js +23 -0
- package/dist/function/list.types.d.ts +4 -0
- package/dist/lifecycle.d.ts +12 -1
- package/dist/lifecycle.js +12 -1
- package/dist/middleware/addon-scope-cap.d.ts +4 -0
- package/dist/middleware/addon-scope-cap.js +7 -3
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.js +5 -13
- package/dist/middleware/auth-cookie.js +3 -3
- package/dist/middleware/middleware-factories.d.ts +17 -0
- package/dist/middleware/middleware-factories.js +17 -0
- package/dist/middleware/middleware.types.d.ts +23 -0
- package/dist/middleware/remote-auth.d.ts +15 -0
- package/dist/middleware/remote-auth.js +18 -3
- package/dist/middleware/remote-jobs-secret.js +2 -10
- package/dist/middleware-runner.d.ts +7 -0
- package/dist/middleware-runner.js +23 -7
- package/dist/permissions.d.ts +13 -0
- package/dist/permissions.js +13 -0
- package/dist/pikku-state.d.ts +49 -0
- package/dist/pikku-state.js +49 -0
- package/dist/remote.js +20 -5
- package/dist/schema.d.ts +36 -0
- package/dist/schema.js +36 -0
- package/dist/services/agent-run-state-service.d.ts +8 -0
- package/dist/services/agent-runner-service.d.ts +24 -0
- package/dist/services/agent-storage-service.d.ts +8 -0
- package/dist/services/ai-embedding-service.d.ts +4 -0
- package/dist/services/audit-service.d.ts +48 -0
- package/dist/services/audit-service.js +22 -0
- package/dist/services/content-service.d.ts +34 -0
- package/dist/services/credential-wire-service.d.ts +9 -0
- package/dist/services/credential-wire-service.js +9 -0
- package/dist/services/deployment-service.d.ts +14 -0
- package/dist/services/email-service.d.ts +20 -0
- package/dist/services/email-template.d.ts +24 -0
- package/dist/services/email-template.js +12 -0
- package/dist/services/file-scenario-run-store.d.ts +5 -0
- package/dist/services/file-scenario-run-store.js +4 -0
- package/dist/services/gateway-service.d.ts +5 -0
- package/dist/services/in-memory-agent-run-state-service.d.ts +5 -0
- package/dist/services/in-memory-agent-run-state-service.js +5 -0
- package/dist/services/in-memory-lease-service.d.ts +5 -0
- package/dist/services/in-memory-lease-service.js +5 -0
- package/dist/services/in-memory-session-store.d.ts +4 -0
- package/dist/services/in-memory-session-store.js +4 -0
- package/dist/services/incoming-webhook-queue.d.ts +2 -0
- package/dist/services/incoming-webhook-queue.js +2 -0
- package/dist/services/incoming-webhook-service.d.ts +9 -1
- package/dist/services/incoming-webhook-service.js +1 -1
- package/dist/services/index.d.ts +1 -5
- package/dist/services/index.js +1 -5
- package/dist/services/jwt-service.d.ts +8 -0
- package/dist/services/lease-service.d.ts +5 -0
- package/dist/services/lease-service.js +1 -0
- package/dist/services/local-content-request-handler.d.ts +20 -0
- package/dist/services/local-content-request-handler.js +11 -0
- package/dist/services/local-content.d.ts +45 -0
- package/dist/services/local-content.js +35 -0
- package/dist/services/local-credential-service.d.ts +5 -0
- package/dist/services/local-credential-service.js +5 -0
- package/dist/services/local-email-service.d.ts +7 -0
- package/dist/services/local-email-service.js +7 -0
- package/dist/services/local-secrets.d.ts +8 -0
- package/dist/services/local-secrets.js +8 -0
- package/dist/services/local-variables.d.ts +6 -0
- package/dist/services/local-variables.js +6 -0
- package/dist/services/logger.d.ts +4 -0
- package/dist/services/logger.js +4 -0
- package/dist/services/meta-service.d.ts +38 -0
- package/dist/services/meta-service.js +6 -0
- package/dist/services/queue-webhook-service.d.ts +19 -0
- package/dist/services/queue-webhook-service.js +19 -0
- package/dist/services/remote-jobs.d.ts +8 -13
- package/dist/services/remote-jobs.js +3 -54
- package/dist/services/scenario-cookie-jar.d.ts +4 -0
- package/dist/services/scheduler-service.d.ts +13 -0
- package/dist/services/scheduler-service.js +8 -0
- package/dist/services/schema-service.d.ts +9 -0
- package/dist/services/scope-service.d.ts +10 -0
- package/dist/services/scoped-secret-service.d.ts +5 -0
- package/dist/services/scoped-secret-service.js +5 -0
- package/dist/services/secret-host-binding.d.ts +5 -0
- package/dist/services/secret-host-binding.js +5 -0
- package/dist/services/secret-service.d.ts +19 -1
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +6 -0
- package/dist/services/session-store.d.ts +5 -0
- package/dist/services/stub-tracker.d.ts +1 -0
- package/dist/services/temporary-file-service.d.ts +9 -0
- package/dist/services/temporary-file-service.js +9 -0
- package/dist/services/trigger-service.d.ts +4 -0
- package/dist/services/trigger-source-store.d.ts +13 -0
- package/dist/services/trigger-source-store.js +7 -0
- package/dist/services/typed-credential-service.d.ts +6 -0
- package/dist/services/typed-credential-service.js +5 -0
- package/dist/services/typed-secret-service.d.ts +12 -0
- package/dist/services/typed-secret-service.js +11 -0
- package/dist/services/typed-variables-service.d.ts +1 -0
- package/dist/services/user-session-service.d.ts +31 -1
- package/dist/services/user-session-service.js +29 -3
- package/dist/services/v8-coverage-service.d.ts +27 -0
- package/dist/services/v8-coverage-service.js +5 -0
- package/dist/services/variables-service.d.ts +8 -0
- package/dist/services/virtual-user-sign-in.d.ts +1 -0
- package/dist/services/virtual-user-statement.d.ts +8 -0
- package/dist/services/virtual-user-statement.js +4 -0
- package/dist/services/webhook-service.d.ts +25 -0
- package/dist/services/webhook-service.js +15 -0
- package/dist/services/workflow-service.d.ts +6 -0
- package/dist/test-utils.js +1 -1
- package/dist/testing/service-tests.d.ts +4 -0
- package/dist/time-utils.d.ts +15 -0
- package/dist/time-utils.js +14 -0
- package/dist/types/core.types.d.ts +80 -0
- package/dist/types/state.types.d.ts +4 -0
- package/dist/utils/hmac.d.ts +3 -0
- package/dist/utils/safe-fetch.d.ts +14 -0
- package/dist/utils/safe-fetch.js +13 -0
- package/dist/utils/stable-stringify.d.ts +11 -0
- package/dist/utils/stable-stringify.js +33 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.js +22 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.js +7 -0
- package/dist/wirings/addon/define-screens.d.ts +2 -0
- package/dist/wirings/addon/remote-addon-auth.d.ts +9 -0
- package/dist/wirings/addon/remote-addon-auth.js +5 -0
- package/dist/wirings/addon/wire-addon.d.ts +4 -0
- package/dist/wirings/addon/wire-remote-addon.d.ts +1 -0
- package/dist/wirings/agent/agent-agui.d.ts +14 -5
- package/dist/wirings/agent/agent-agui.js +17 -6
- package/dist/wirings/agent/agent-helpers.d.ts +61 -1
- package/dist/wirings/agent/agent-helpers.js +62 -2
- package/dist/wirings/agent/agent-interrupt.d.ts +5 -0
- package/dist/wirings/agent/agent-output.d.ts +20 -0
- package/dist/wirings/agent/agent-output.js +69 -0
- package/dist/wirings/agent/agent-prepare.d.ts +41 -0
- package/dist/wirings/agent/agent-prepare.js +38 -2
- package/dist/wirings/agent/agent-registry.d.ts +8 -0
- package/dist/wirings/agent/agent-registry.js +10 -4
- package/dist/wirings/agent/agent-runner.d.ts +33 -0
- package/dist/wirings/agent/agent-runner.js +40 -7
- package/dist/wirings/agent/agent-stream.d.ts +30 -0
- package/dist/wirings/agent/agent-stream.js +33 -11
- package/dist/wirings/agent/agent.types.d.ts +43 -0
- package/dist/wirings/agent/voice-input.d.ts +12 -0
- package/dist/wirings/agent/voice-input.js +12 -0
- package/dist/wirings/agent/voice-output.d.ts +14 -0
- package/dist/wirings/agent/voice-output.js +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.js +1 -2
- package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-registry.js +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +1 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +1 -0
- package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +7 -0
- package/dist/wirings/channel/channel-common.js +1 -1
- package/dist/wirings/channel/channel-rpc.types.d.ts +5 -0
- package/dist/wirings/channel/channel-runner.d.ts +22 -0
- package/dist/wirings/channel/channel-runner.js +22 -0
- package/dist/wirings/channel/channel-store.d.ts +8 -0
- package/dist/wirings/channel/channel-store.js +7 -0
- package/dist/wirings/channel/channel.types.d.ts +18 -0
- package/dist/wirings/channel/define-channel-routes.d.ts +5 -0
- package/dist/wirings/channel/define-channel-routes.js +5 -0
- package/dist/wirings/channel/eventhub-service.d.ts +9 -0
- package/dist/wirings/channel/eventhub-store.d.ts +1 -0
- package/dist/wirings/channel/eventhub-store.js +1 -0
- package/dist/wirings/channel/index.d.ts +1 -1
- package/dist/wirings/channel/index.js +1 -1
- package/dist/wirings/channel/local/local-channel-handler.d.ts +1 -0
- package/dist/wirings/channel/local/local-channel-handler.js +1 -0
- package/dist/wirings/channel/local/local-channel-runner.d.ts +13 -0
- package/dist/wirings/channel/local/local-channel-runner.js +13 -0
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +1 -0
- package/dist/wirings/channel/local/local-eventhub-service.js +1 -0
- package/dist/wirings/channel/log-channels.d.ts +1 -0
- package/dist/wirings/channel/log-channels.js +1 -0
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +5 -0
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +5 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +32 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +31 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +8 -0
- package/dist/wirings/cli/channel/cli-channel-runner.js +8 -0
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +1 -0
- package/dist/wirings/cli/cli-runner.d.ts +43 -0
- package/dist/wirings/cli/cli-runner.js +43 -0
- package/dist/wirings/cli/command-parser.d.ts +13 -0
- package/dist/wirings/cli/command-parser.js +12 -0
- package/dist/wirings/credential/credential-overrides.d.ts +1 -0
- package/dist/wirings/credential/credential.types.d.ts +7 -0
- package/dist/wirings/credential/validate-credential-definitions.d.ts +7 -0
- package/dist/wirings/credential/validate-credential-definitions.js +7 -0
- package/dist/wirings/flag/cached-flag-source.d.ts +1 -0
- package/dist/wirings/flag/flag.types.d.ts +3 -0
- package/dist/wirings/gateway/gateway-runner.d.ts +23 -0
- package/dist/wirings/gateway/gateway-runner.js +23 -0
- package/dist/wirings/gateway/gateway.types.d.ts +3 -0
- package/dist/wirings/gateway/local-gateway-service.d.ts +10 -0
- package/dist/{services → wirings/gateway}/local-gateway-service.js +6 -2
- package/dist/wirings/http/http-routes.d.ts +21 -0
- package/dist/wirings/http/http-routes.js +11 -0
- package/dist/wirings/http/http-runner.d.ts +71 -0
- package/dist/wirings/http/http-runner.js +73 -5
- package/dist/wirings/http/http.types.d.ts +27 -0
- package/dist/wirings/http/index.d.ts +1 -0
- package/dist/wirings/http/index.js +1 -0
- package/dist/wirings/http/log-http-routes.d.ts +1 -0
- package/dist/wirings/http/log-http-routes.js +1 -0
- package/dist/wirings/http/merge-request-data.d.ts +12 -0
- package/dist/wirings/http/merge-request-data.js +42 -0
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.js +3 -32
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
- package/dist/wirings/http/pikku-fetch-http-response.js +1 -0
- package/dist/wirings/http/routers/http-router.d.ts +6 -0
- package/dist/wirings/http/routers/http-router.js +6 -0
- package/dist/wirings/http/web-request.d.ts +17 -0
- package/dist/wirings/http/web-request.js +17 -0
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +7 -0
- package/dist/wirings/mcp/mcp-endpoint-registry.js +7 -0
- package/dist/wirings/mcp/mcp-runner.d.ts +63 -0
- package/dist/wirings/mcp/mcp-runner.js +62 -0
- package/dist/wirings/mcp/mcp.types.d.ts +12 -0
- package/dist/wirings/node/node.types.d.ts +4 -0
- package/dist/wirings/oauth2/oauth2.types.d.ts +2 -0
- package/dist/{services → wirings/queue}/in-memory-queue-service.d.ts +9 -1
- package/dist/{services → wirings/queue}/in-memory-queue-service.js +9 -1
- package/dist/wirings/queue/index.d.ts +1 -0
- package/dist/wirings/queue/index.js +1 -0
- package/dist/wirings/queue/queue-identity.js +2 -14
- package/dist/wirings/queue/queue-runner.d.ts +37 -0
- package/dist/wirings/queue/queue-runner.js +37 -0
- package/dist/wirings/queue/queue.types.d.ts +35 -0
- package/dist/wirings/queue/register-queue-helper.d.ts +12 -0
- package/dist/wirings/queue/register-queue-helper.js +11 -0
- package/dist/wirings/queue/remote-queue-job.d.ts +11 -0
- package/dist/wirings/queue/remote-queue-job.js +41 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -0
- package/dist/wirings/role/role.types.d.ts +3 -0
- package/dist/wirings/rpc/rpc-runner.d.ts +24 -0
- package/dist/wirings/rpc/rpc-runner.js +37 -2
- package/dist/wirings/rpc/rpc-types.d.ts +2 -0
- package/dist/wirings/scheduler/index.d.ts +1 -0
- package/dist/wirings/scheduler/index.js +1 -0
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -0
- package/dist/wirings/scheduler/log-schedulers.js +1 -0
- package/dist/wirings/scheduler/remote-scheduled-job.d.ts +11 -0
- package/dist/wirings/scheduler/remote-scheduled-job.js +20 -0
- package/dist/wirings/scheduler/scheduler-runner.d.ts +29 -0
- package/dist/wirings/scheduler/scheduler-runner.js +28 -0
- package/dist/wirings/scheduler/scheduler.types.d.ts +3 -0
- package/dist/wirings/scope/scope.types.d.ts +5 -0
- package/dist/wirings/secret/index.d.ts +2 -2
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +26 -1
- package/dist/wirings/secret/secret.types.js +1 -0
- package/dist/wirings/secret/validate-secret-definitions.d.ts +8 -0
- package/dist/wirings/secret/validate-secret-definitions.js +15 -0
- package/dist/wirings/trigger/in-memory-trigger-service.d.ts +11 -0
- package/dist/{services → wirings/trigger}/in-memory-trigger-service.js +10 -3
- package/dist/wirings/trigger/index.d.ts +1 -1
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +8 -3
- package/dist/wirings/trigger/pikku-trigger-service.js +14 -3
- package/dist/wirings/trigger/trigger-runner.d.ts +27 -2
- package/dist/wirings/trigger/trigger-runner.js +35 -2
- package/dist/wirings/trigger/trigger.types.d.ts +26 -4
- package/dist/wirings/trigger/webhook-source-runner.d.ts +24 -0
- package/dist/wirings/trigger/webhook-source-runner.js +19 -0
- package/dist/wirings/trigger/webhook-source.types.d.ts +12 -2
- package/dist/wirings/trigger/webhook-source.types.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +7 -0
- package/dist/wirings/variable/validate-variable-definitions.js +7 -0
- package/dist/wirings/variable/variable.types.d.ts +7 -0
- package/dist/wirings/virtual-user/conversation/conversation.types.d.ts +5 -0
- package/dist/wirings/virtual-user/conversation/run-conversation.d.ts +6 -0
- package/dist/wirings/virtual-user/conversation/run-conversation.js +1 -1
- package/dist/{services → wirings/virtual-user}/http-virtual-users.d.ts +4 -3
- package/dist/{services → wirings/virtual-user}/http-virtual-users.js +6 -6
- package/dist/wirings/virtual-user/index.d.ts +1 -1
- package/dist/wirings/virtual-user/index.js +1 -1
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +2 -1
- package/dist/wirings/virtual-user/run-virtual-user.js +1 -14
- package/dist/wirings/virtual-user/virtual-user-declaration.types.d.ts +4 -0
- package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +10 -1
- package/dist/wirings/virtual-user/virtual-user-scaffold.js +5 -0
- package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +5 -0
- package/dist/wirings/virtual-user/virtual-user-schedule.js +1 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +1 -0
- package/dist/wirings/webhook/define-outgoing-webhook.d.ts +20 -0
- package/dist/wirings/webhook/define-outgoing-webhook.js +9 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +8 -4
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +7 -0
- package/dist/wirings/workflow/dsl/workflow-runner.js +7 -0
- package/dist/wirings/workflow/feature.d.ts +12 -0
- package/dist/wirings/workflow/feature.js +12 -0
- package/dist/wirings/workflow/graph/graph-node.d.ts +5 -0
- package/dist/wirings/workflow/graph/graph-node.js +5 -0
- package/dist/wirings/workflow/graph/template.d.ts +6 -0
- package/dist/wirings/workflow/graph/template.js +5 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +12 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.js +10 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +11 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.js +1 -0
- package/dist/{services → wirings/workflow}/in-memory-workflow-service.d.ts +8 -3
- package/dist/{services → wirings/workflow}/in-memory-workflow-service.js +9 -4
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +1 -1
- package/dist/wirings/workflow/pikku-scenario-service.js +2 -2
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +1 -0
- package/dist/wirings/workflow/pikku-workflow-service.js +1 -0
- package/dist/wirings/workflow/run-timeline.d.ts +21 -0
- package/dist/wirings/workflow/run-timeline.js +15 -7
- package/dist/wirings/workflow/scenario-coverage.d.ts +1 -0
- package/dist/wirings/workflow/scenario-poll.d.ts +1 -0
- package/dist/wirings/workflow/scenario-prose.d.ts +6 -0
- package/dist/wirings/workflow/scenario-prose.js +6 -0
- package/dist/wirings/workflow/scenario-run.types.d.ts +3 -0
- package/dist/wirings/workflow/scenario-step.types.d.ts +1 -0
- package/dist/wirings/workflow/scenario-step.types.js +1 -0
- package/dist/wirings/workflow/scenario-surface.js +1 -13
- package/dist/wirings/workflow/scenario.types.d.ts +6 -0
- package/dist/wirings/workflow/workflow-approval-policy.d.ts +6 -0
- package/dist/wirings/workflow/workflow-approval-policy.js +6 -0
- package/dist/wirings/workflow/workflow-constants.d.ts +7 -1
- package/dist/wirings/workflow/workflow-constants.js +10 -1
- package/dist/wirings/workflow/workflow-errors.d.ts +13 -0
- package/dist/wirings/workflow/workflow-errors.js +13 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +4 -0
- package/dist/wirings/workflow/workflow-invocation-id.js +4 -0
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +3 -0
- package/dist/wirings/workflow/workflow-run-ownership.d.ts +1 -0
- package/dist/wirings/workflow/workflow-run-ownership.js +1 -0
- package/dist/wirings/workflow/workflow-status-stream.d.ts +1 -0
- package/dist/wirings/workflow/workflow-unwind-plan.js +2 -7
- package/dist/wirings/workflow/workflow.types.d.ts +40 -0
- package/package.json +26 -9
- package/CHANGELOG.md +0 -6978
- package/dist/services/in-memory-trigger-service.d.ts +0 -4
- package/dist/services/local-gateway-service.d.ts +0 -6
- package/dist/utils/hash.d.ts +0 -2
- package/dist/utils/hash.js +0 -23
- package/knowledge/decisions/index.md +0 -19
- package/knowledge/decisions/internals/a-credential-name-declared-twice-must-agree-on-schema-and-type.md +0 -29
- package/knowledge/decisions/internals/a-grant-can-name-a-scope-declared-without-its-addon.md +0 -29
- package/knowledge/decisions/internals/a-held-run-is-woken-later-not-retried.md +0 -28
- package/knowledge/decisions/internals/a-latency-budget-is-asserted-by-its-cause.md +0 -32
- package/knowledge/decisions/internals/a-non-streaming-agent-run-registers-with-agentrunstate-too.md +0 -22
- package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +0 -50
- package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +0 -20
- package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +0 -21
- package/knowledge/decisions/internals/a-scheduled-task-writes-its-caller-session-before-it-runs.md +0 -22
- package/knowledge/decisions/internals/a-secret-set-in-memory-shadows-the-variable-of-the-same-name.md +0 -28
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +0 -49
- package/knowledge/decisions/internals/a-virtual-user-acts-through-invokeraw-so-a-refusal-is-data.md +0 -32
- package/knowledge/decisions/internals/a-virtual-user-cadence-is-a-row-not-a-timer.md +0 -66
- package/knowledge/decisions/internals/a-virtual-user-converse-signs-in-before-its-first-turn.md +0 -24
- package/knowledge/decisions/internals/a-virtual-user-decides-whether-to-trust-memory-once-per-turn.md +0 -21
- package/knowledge/decisions/internals/a-virtual-user-email-is-computed-with-the-run-id-as-a-sub-address.md +0 -34
- package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-but-it-needs-a-trigger.md +0 -65
- package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +0 -49
- package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +0 -45
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +0 -26
- package/knowledge/decisions/internals/addon-pikku-meta-ships-at-the-package-root-or-under-dist.md +0 -32
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +0 -33
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +0 -28
- package/knowledge/decisions/internals/agent-agui-bridge-obeys-the-client-ordering-contract.md +0 -29
- package/knowledge/decisions/internals/agent-audio-chunks-carry-the-format-the-provider-returned.md +0 -20
- package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +0 -21
- package/knowledge/decisions/internals/agent-credential-suspensions-hide-the-tool-result.md +0 -26
- package/knowledge/decisions/internals/agent-delegate-and-supervise-hide-different-text.md +0 -26
- package/knowledge/decisions/internals/agent-llm-tool-arguments-have-nulls-stripped.md +0 -23
- package/knowledge/decisions/internals/agent-model-config-stays-a-single-resolution-seam.md +0 -25
- package/knowledge/decisions/internals/agent-onerror-hooks-cannot-change-the-failure.md +0 -22
- package/knowledge/decisions/internals/agent-runner-methods-must-keep-their-receiver.md +0 -22
- package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +0 -22
- package/knowledge/decisions/internals/agent-stream-persistence-is-best-effort.md +0 -27
- package/knowledge/decisions/internals/agent-sub-agents-inherit-the-parent-context-block.md +0 -26
- package/knowledge/decisions/internals/agent-tool-execute-failures-are-logged-unconditionally.md +0 -25
- package/knowledge/decisions/internals/agent-voice-input-transcribes-audio-parts-in-place.md +0 -22
- package/knowledge/decisions/internals/agent-working-memory-is-persisted-only-when-valid.md +0 -25
- package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +0 -39
- package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +0 -23
- package/knowledge/decisions/internals/an-agent-is-offered-under-its-registry-key-and-only-within-the-virtual-users-scopes.md +0 -27
- package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +0 -25
- package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +0 -22
- package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +0 -20
- package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.md +0 -22
- package/knowledge/decisions/internals/an-oauth2-credential-implies-an-optional-app-secret.md +0 -26
- package/knowledge/decisions/internals/an-unref-d-timer-cannot-be-awaited-under-node-test.md +0 -66
- package/knowledge/decisions/internals/analytics-identity-resolvers-run-in-declared-order.md +0 -22
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +0 -30
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +0 -31
- package/knowledge/decisions/internals/channel-state-accessors-are-unsound-generics-that-every-implementation-asserts.md +0 -33
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +0 -29
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +0 -28
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +0 -27
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +0 -28
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +0 -34
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +0 -29
- package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +0 -84
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +0 -41
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +0 -44
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +0 -39
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +0 -42
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +0 -39
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +0 -43
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +0 -38
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +0 -44
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +0 -27
- package/knowledge/decisions/internals/feature-flag-declarations-refuse-an-empty-anyof-and-conflicting-scopes.md +0 -22
- package/knowledge/decisions/internals/feature-flags-fail-open-and-never-enforce-access.md +0 -28
- package/knowledge/decisions/internals/flag-sync-rewrites-only-the-declared-text.md +0 -24
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +0 -32
- package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +0 -43
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +0 -28
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +0 -31
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +0 -26
- package/knowledge/decisions/internals/global-middleware-resolves-from-the-root-namespace-too.md +0 -32
- package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +0 -38
- package/knowledge/decisions/internals/hot-reload-writes-into-the-function-map-captured-at-startup.md +0 -26
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +0 -32
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +0 -28
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +0 -30
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +0 -26
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +0 -28
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +0 -32
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +0 -26
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +0 -25
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +0 -26
- package/knowledge/decisions/internals/index.md +0 -182
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +0 -25
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +0 -26
- package/knowledge/decisions/internals/mcp-wire-names-are-assigned-over-the-whole-registry.md +0 -39
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +0 -24
- package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +0 -53
- package/knowledge/decisions/internals/only-exposed-functions-enter-a-virtual-user-catalogue.md +0 -21
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +0 -28
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +0 -27
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +0 -31
- package/knowledge/decisions/internals/role-names-cannot-contain-the-scope-separator.md +0 -30
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +0 -32
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +0 -31
- package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +0 -24
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +0 -26
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +0 -27
- package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +0 -48
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +0 -30
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +0 -28
- package/knowledge/decisions/internals/side-effects-are-an-allowlist-not-a-boolean.md +0 -34
- package/knowledge/decisions/internals/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +0 -24
- package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.md +0 -26
- package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +0 -43
- package/knowledge/decisions/internals/the-core-scope-validator-refuses-separator-wildcard-and-empty-segments.md +0 -22
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +0 -30
- package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +0 -83
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +0 -29
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +0 -27
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +0 -40
- package/knowledge/decisions/internals/the-mcp-handshake-is-challenged-only-when-every-target-is-gated.md +0 -29
- package/knowledge/decisions/internals/the-middleware-resolution-cache-is-deliberately-unbounded.md +0 -40
- package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +0 -40
- package/knowledge/decisions/internals/the-pikku-user-id-resolves-in-a-fixed-order.md +0 -24
- package/knowledge/decisions/internals/the-runner-resolves-wire-services-itself.md +0 -31
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +0 -26
- package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +0 -25
- package/knowledge/decisions/internals/the-virtual-user-catalogue-is-the-only-gate-on-what-may-be-called.md +0 -21
- package/knowledge/decisions/internals/the-virtual-user-prompt-says-json-because-of-json-object-mode.md +0 -22
- package/knowledge/decisions/internals/the-virtual-user-runtime-is-exported-from-the-virtual-user-entry-point.md +0 -28
- package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +0 -22
- package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +0 -25
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +0 -33
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +0 -26
- package/knowledge/decisions/internals/validate-checks-virtual-users-through-a-shared-module.md +0 -43
- package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +0 -115
- package/knowledge/decisions/internals/virtual-user-conversation-drives-the-target-through-a-transport-seam.md +0 -24
- package/knowledge/decisions/internals/virtual-user-conversation-verdicts-are-llm-self-evaluations.md +0 -25
- package/knowledge/decisions/internals/virtual-user-conversations-seed-a-hidden-kickoff-message.md +0 -23
- package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +0 -21
- package/knowledge/decisions/internals/virtual-users-are-declared-in-one-definevirtualusers-call-per-codebase.md +0 -30
- package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.md +0 -24
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +0 -26
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +0 -25
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +0 -58
- package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +0 -35
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +0 -34
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +0 -42
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +0 -38
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +0 -29
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +0 -42
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +0 -25
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +0 -29
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +0 -43
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +0 -29
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +0 -42
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +0 -33
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +0 -32
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +0 -31
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +0 -39
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +0 -29
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +0 -33
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +0 -37
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +0 -54
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +0 -43
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +0 -32
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +0 -18
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +0 -34
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +0 -29
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +0 -33
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +0 -34
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +0 -34
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +0 -38
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +0 -30
- package/knowledge/decisions/security/a-bearer-token-checked-against-a-secret-reads-it-per-request.md +0 -26
- package/knowledge/decisions/security/a-call-without-a-session-raises-missing-session-not-forbidden.md +0 -20
- package/knowledge/decisions/security/a-caller-cookie-wins-over-the-jar-for-the-same-name.md +0 -23
- package/knowledge/decisions/security/a-channel-lifecycle-acts-as-the-socket-upgrade-session.md +0 -16
- package/knowledge/decisions/security/a-channel-requires-a-session-unless-it-says-auth-false.md +0 -26
- package/knowledge/decisions/security/a-credential-read-path-follows-its-declared-type-not-absence.md +0 -32
- package/knowledge/decisions/security/a-credential-type-is-a-literal-the-inspector-checks-at-declaration.md +0 -27
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +0 -28
- package/knowledge/decisions/security/a-first-party-cookie-is-written-only-after-its-purposes-consent.md +0 -33
- package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +0 -37
- package/knowledge/decisions/security/a-graph-run-starts-at-an-entry-node-the-graph-declared.md +0 -33
- package/knowledge/decisions/security/a-permission-gets-a-wire-it-cannot-reply-on.md +0 -33
- package/knowledge/decisions/security/a-public-function-says-so-with-auth-false.md +0 -34
- package/knowledge/decisions/security/a-readonly-session-reaches-only-readonly-functions.md +0 -25
- package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +0 -52
- package/knowledge/decisions/security/a-scheduled-virtual-user-run-needs-no-admin-at-run-time.md +0 -27
- package/knowledge/decisions/security/a-scoped-credential-view-is-limited-to-declared-names.md +0 -26
- package/knowledge/decisions/security/a-scoped-secret-view-reads-only-declared-keys-and-never-writes.md +0 -25
- package/knowledge/decisions/security/a-secret-is-sent-only-to-the-hosts-it-declares.md +0 -29
- package/knowledge/decisions/security/a-step-can-name-an-identity-no-virtual-user-holds-through-per-call-headers.md +0 -25
- package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +0 -37
- package/knowledge/decisions/security/a-stopped-run-by-id-skips-the-ownership-check.md +0 -24
- package/knowledge/decisions/security/a-vault-secret-redacts-on-serialization-and-throws-on-coercion.md +0 -29
- package/knowledge/decisions/security/a-virtual-user-catalogue-entry-is-filtered-by-scope-and-approval-is-denied-by-default.md +0 -30
- package/knowledge/decisions/security/a-virtual-user-environment-fails-closed.md +0 -38
- package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +0 -27
- package/knowledge/decisions/security/a-virtual-user-never-runs-against-production.md +0 -23
- package/knowledge/decisions/security/a-virtual-user-reads-its-roles-from-the-apps-own-rpc-before-better-auth.md +0 -27
- package/knowledge/decisions/security/a-virtual-user-run-treats-an-unresolved-environment-as-production.md +0 -41
- package/knowledge/decisions/security/a-virtual-user-scopes-are-expanded-from-its-roles-once-at-run-preparation.md +0 -25
- package/knowledge/decisions/security/a-virtual-user-whose-roles-drift-from-the-declaration-refuses-to-run.md +0 -32
- package/knowledge/decisions/security/a-workflow-run-is-read-and-approved-by-its-owner.md +0 -50
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +0 -43
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +0 -52
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +0 -46
- package/knowledge/decisions/security/addon-screen-scopes-hide-and-do-not-enforce.md +0 -20
- package/knowledge/decisions/security/agent-approval-forwarding-requires-a-symbol-brand.md +0 -27
- package/knowledge/decisions/security/agent-credential-requests-are-symbol-branded.md +0 -37
- package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +0 -31
- package/knowledge/decisions/security/agent-ownership-failures-never-echo-the-resource.md +0 -23
- package/knowledge/decisions/security/agent-resume-re-runs-the-authorization-gate.md +0 -22
- package/knowledge/decisions/security/agent-sessionless-deployments-have-no-thread-ownership.md +0 -39
- package/knowledge/decisions/security/agent-thread-ownership-composes-the-session-principal.md +0 -30
- package/knowledge/decisions/security/agent-tool-filtering-reads-the-live-function-config.md +0 -24
- package/knowledge/decisions/security/an-addon-header-can-only-narrow-the-session.md +0 -26
- package/knowledge/decisions/security/an-addon-instance-reads-only-the-secrets-and-credentials-it-is-named.md +0 -33
- package/knowledge/decisions/security/an-addon-may-reach-only-itself-and-the-addons-it-uses.md +0 -16
- package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +0 -33
- package/knowledge/decisions/security/an-api-key-is-jwt-decoded-into-the-session.md +0 -26
- package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +0 -59
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +0 -30
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +0 -52
- package/knowledge/decisions/security/an-external-virtual-user-caller-presents-one-signed-statement.md +0 -38
- package/knowledge/decisions/security/an-inbound-webhook-source-dispatches-only-verified-requests.md +0 -31
- package/knowledge/decisions/security/an-mcp-call-with-no-http-request-stays-anonymous.md +0 -18
- package/knowledge/decisions/security/an-mcp-refusal-is-decided-before-dispatch.md +0 -48
- package/knowledge/decisions/security/an-oauth2-credential-is-read-by-its-account-row.md +0 -40
- package/knowledge/decisions/security/an-omitted-user-id-addresses-the-platform-credential.md +0 -32
- package/knowledge/decisions/security/an-upload-is-counted-as-it-arrives-not-buffered-then-measured.md +0 -24
- package/knowledge/decisions/security/analytics-identity-is-stamped-from-the-session-not-the-event.md +0 -24
- package/knowledge/decisions/security/app-access-is-a-scope-tree-synthesised-from-virtual-users.md +0 -26
- package/knowledge/decisions/security/approval-policy-decides-who-answers-a-tool-call.md +0 -27
- package/knowledge/decisions/security/auth-false-on-a-session-function-warns-and-still-requires-one.md +0 -25
- package/knowledge/decisions/security/bearer-token-hashes-are-unpeppered-sha256.md +0 -18
- package/knowledge/decisions/security/consent-is-read-from-a-cookie-and-a-recognised-denial-counts-as-refusal.md +0 -29
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +0 -84
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +0 -39
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +0 -37
- package/knowledge/decisions/security/cors-defaults-to-any-origin-and-refuses-the-wildcard-with-credentials.md +0 -22
- package/knowledge/decisions/security/credential-backends-share-one-conformance-suite-for-per-user-isolation.md +0 -29
- package/knowledge/decisions/security/each-stage-has-one-virtual-user-key-pair.md +0 -27
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +0 -41
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +0 -30
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +0 -40
- package/knowledge/decisions/security/hmac-verification-fails-closed-on-empty-inputs.md +0 -25
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +0 -33
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +0 -46
- package/knowledge/decisions/security/index.md +0 -135
- package/knowledge/decisions/security/local-content-refuses-private-buckets-under-the-public-segment.md +0 -21
- package/knowledge/decisions/security/mail-is-allowlisted-before-a-virtual-user-run-sees-it.md +0 -38
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +0 -27
- package/knowledge/decisions/security/mcp-resources-tools-and-prompts-take-sessionless-functions.md +0 -18
- package/knowledge/decisions/security/origin-locked-routes-match-the-origin-exactly.md +0 -22
- package/knowledge/decisions/security/oss-auth-works-without-pikku-studio-cloud.md +0 -26
- package/knowledge/decisions/security/outbound-webhooks-use-an-allowlist-when-configured.md +0 -24
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +0 -40
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +0 -31
- package/knowledge/decisions/security/pikku-carries-virtual-user-scopes-as-data-and-the-app-grants-them.md +0 -35
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +0 -69
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +0 -39
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +0 -34
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +0 -55
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +0 -30
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +0 -28
- package/knowledge/decisions/security/scoped-content-access-is-a-root-folder-with-longest-prefix-grants.md +0 -31
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +0 -34
- package/knowledge/decisions/security/services-without-secrets-get-a-throwing-secrets-accessor.md +0 -22
- package/knowledge/decisions/security/shared-guards-refuse-to-mutate-or-shadow-a-system-role.md +0 -34
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +0 -37
- package/knowledge/decisions/security/signed-uploads-are-verified-by-the-same-check-as-signed-reads.md +0 -26
- package/knowledge/decisions/security/system-role-scopes-must-be-declared-with-define-scope.md +0 -24
- package/knowledge/decisions/security/system-roles-are-additive-and-immutable.md +0 -16
- package/knowledge/decisions/security/the-channel-rpc-does-not-send-the-callers-session.md +0 -21
- package/knowledge/decisions/security/the-remote-jobs-inbox-fails-closed-without-a-secret.md +0 -24
- package/knowledge/decisions/security/the-remote-rpc-gate-fails-closed-and-binds-the-token-to-its-function.md +0 -34
- package/knowledge/decisions/security/the-workflow-status-stream-rechecks-ownership-on-every-poll.md +0 -16
- package/knowledge/decisions/security/two-credentials-on-one-key-must-share-a-read-mode.md +0 -29
- package/knowledge/decisions/security/verified-bearer-claims-are-pass-through-data-that-core-never-fills.md +0 -23
- package/knowledge/decisions/security/virtual-user-catalogue-excludes-the-machinery-that-runs-virtual-users.md +0 -25
- package/knowledge/decisions/security/virtual-user-conversation-missing-approval-decisions-default-to-denied.md +0 -22
- package/knowledge/decisions/security/virtual-user-run-records-are-gated-behind-a-read-scope.md +0 -18
- package/knowledge/decisions/security/virtual-user-sign-in-does-not-exist-in-production.md +0 -25
- package/knowledge/decisions/security/virtual-user-sign-in-has-one-door.md +0 -42
- package/knowledge/decisions/security/virtual-user-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +0 -29
- package/knowledge/decisions/security/virtual-user-sign-in-only-works-for-virtual-user-flagged-users.md +0 -29
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +0 -25
- package/knowledge/decisions/security/wire-addon-expose-selects-the-rpc-surface.md +0 -51
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +0 -40
- package/knowledge/decisions/security/workflow-helper-functions-are-sessionless-by-declaration.md +0 -18
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +0 -32
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-virtual-user-and-per-scenario.md +0 -32
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +0 -31
- package/knowledge/decisions/security/workflow-virtual-user-steps-always-use-the-real-transport.md +0 -34
- package/knowledge/decisions/security/writing-a-virtual-user-schedule-is-gated-by-its-own-scope.md +0 -18
- package/knowledge/index.md +0 -24
- package/knowledge/questions/a-bearer-jwt-with-no-identity-becomes-a-session.md +0 -24
- package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +0 -35
- package/knowledge/questions/dev-quick-login-as-impersonation.md +0 -25
- package/knowledge/questions/does-a-delayed-rpc-run-as-the-session-it-was-scheduled-with.md +0 -26
- package/knowledge/questions/does-a-user-id-with-a-colon-read-another-users-credentials.md +0 -27
- package/knowledge/questions/does-a-wirecli-command-need-a-session-by-default.md +0 -26
- package/knowledge/questions/does-an-adversarial-in-scope-success-count-as-a-finding.md +0 -26
- package/knowledge/questions/does-approve-step-need-the-run-owners-session-or-the-gates-approvers.md +0 -34
- package/knowledge/questions/does-cors-origin-true-reflect-any-origin-with-credentials.md +0 -20
- package/knowledge/questions/does-skip-user-session-do-anything-on-a-channel.md +0 -24
- package/knowledge/questions/does-the-store-session-match-the-other-two.md +0 -19
- package/knowledge/questions/index.md +0 -41
- package/knowledge/questions/is-the-agent-score-worker-reachable-without-a-session.md +0 -21
- package/knowledge/questions/live-scheduled-tests-may-write.md +0 -19
- package/knowledge/questions/provision-virtual-users-has-no-caller-in-this-repo.md +0 -23
- package/knowledge/questions/remote-secret-refuses-requests-without-a-remote-token-on-every-path.md +0 -32
- package/knowledge/questions/should-a-middleware-set-session-persist-to-the-store.md +0 -25
- package/knowledge/questions/should-a-scoped-secret-view-throw-from-has-secret-for-a-disallowed-key.md +0 -23
- package/knowledge/questions/should-a-wrong-bearer-token-be-anonymous-or-refused.md +0 -35
- package/knowledge/questions/should-an-empty-webhook-signing-secret-send-unsigned.md +0 -23
- package/knowledge/questions/should-http-virtual-user-sessions-reset-between-scenarios-in-one-run.md +0 -27
- package/knowledge/questions/should-the-cookie-jar-scope-cookies-to-the-api-origin.md +0 -26
- package/knowledge/questions/should-voice-input-fetch-audio-urls-without-a-host-allowlist.md +0 -20
- package/knowledge/questions/staging-impersonation-rules.md +0 -27
- package/knowledge/questions/unauthorized-channel-replies-escape-the-declared-out-type.md +0 -44
- package/knowledge/questions/virtual-user-keys-on-cloud-stages-are-pikku-studios-to-build.md +0 -33
- package/knowledge/questions/virtual-user-statement-replay-is-per-process.md +0 -20
- package/knowledge/questions/what-an-impersonated-session-carries.md +0 -22
- package/run-tests.sh +0 -68
- package/scripts/generate-api-report.d.mts +0 -1
- package/scripts/generate-api-report.mjs +0 -96
- package/scripts/generate-api-report.mts +0 -333
- package/src/public-surface.json +0 -637
- package/src/public-surface.json.README +0 -43
- /package/dist/{function/compensation-name.d.ts → compensation-name.d.ts} +0 -0
- /package/dist/{function/compensation-name.js → compensation-name.js} +0 -0
|
@@ -2,6 +2,7 @@ import type { CommonWireMeta } from '../../types/core.types.js';
|
|
|
2
2
|
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js';
|
|
3
3
|
import type { QueueConfigMapping } from './validate-worker-config.js';
|
|
4
4
|
import type { Safe } from '../../classification/secret-value.js';
|
|
5
|
+
/** Worker settings a queue adapter maps onto its backend. Each adapter supports a subset, reported through its {@link QueueConfigMapping}; the rest are ignored with a warning. */
|
|
5
6
|
export interface PikkuWorkerConfig {
|
|
6
7
|
name?: string;
|
|
7
8
|
/** Total worker concurrency. */
|
|
@@ -24,16 +25,19 @@ export interface PikkuWorkerConfig {
|
|
|
24
25
|
/** Must not exceed {@link batchSize}. */
|
|
25
26
|
groupConcurrency?: number | GroupConcurrencyConfig;
|
|
26
27
|
}
|
|
28
|
+
/** Per-group concurrency limits for a worker, with optional tiers that override the default. */
|
|
27
29
|
export interface GroupConcurrencyConfig {
|
|
28
30
|
/** Limit applied to any group without a matching tier. */
|
|
29
31
|
default: number;
|
|
30
32
|
/** Keyed by {@link JobGroup.tier}. */
|
|
31
33
|
tiers?: Record<string, number>;
|
|
32
34
|
}
|
|
35
|
+
/** The group a job counts against for {@link PikkuWorkerConfig.groupConcurrency}, such as a tenant. */
|
|
33
36
|
export interface JobGroup {
|
|
34
37
|
id: string;
|
|
35
38
|
tier?: string;
|
|
36
39
|
}
|
|
40
|
+
/** Per-job delivery settings: retries, backoff, dead-lettering, priority and timing. */
|
|
37
41
|
export interface PikkuJobConfig {
|
|
38
42
|
retryAttempts?: number;
|
|
39
43
|
/** Milliseconds. */
|
|
@@ -50,6 +54,7 @@ export interface PikkuJobConfig {
|
|
|
50
54
|
/** Milliseconds. */
|
|
51
55
|
delay?: number;
|
|
52
56
|
}
|
|
57
|
+
/** What {@link validateWorkerConfig} did with a worker's config: the settings the adapter applied, those it ignored, and why. */
|
|
53
58
|
export interface ConfigValidationResult {
|
|
54
59
|
applied: Partial<PikkuWorkerConfig>;
|
|
55
60
|
ignored: Partial<PikkuWorkerConfig>;
|
|
@@ -58,7 +63,9 @@ export interface ConfigValidationResult {
|
|
|
58
63
|
[key: string]: any;
|
|
59
64
|
};
|
|
60
65
|
}
|
|
66
|
+
/** The lifecycle state of a queue job. */
|
|
61
67
|
export type QueueJobStatus = 'waiting' | 'active' | 'completed' | 'failed' | 'delayed';
|
|
68
|
+
/** Bookkeeping a backend keeps about a job: progress, attempts and timestamps. */
|
|
62
69
|
export type QueueJobMetadata = {
|
|
63
70
|
progress?: number | string | object | undefined | boolean;
|
|
64
71
|
attemptsMade?: number;
|
|
@@ -69,6 +76,12 @@ export type QueueJobMetadata = {
|
|
|
69
76
|
error?: string;
|
|
70
77
|
createdAt: Date;
|
|
71
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* A job as handed to {@link runQueueJob}, or returned by {@link QueueService.getJob}.
|
|
81
|
+
*
|
|
82
|
+
* `pikkuUserId` here is the producer's signed claim, not a verified id;
|
|
83
|
+
* {@link runQueueJob} verifies it before the worker sees it.
|
|
84
|
+
*/
|
|
72
85
|
export interface QueueJob<T = any, R = any> {
|
|
73
86
|
id: string;
|
|
74
87
|
queueName: string;
|
|
@@ -79,6 +92,14 @@ export interface QueueJob<T = any, R = any> {
|
|
|
79
92
|
metadata?: () => Promise<QueueJobMetadata> | QueueJobMetadata;
|
|
80
93
|
pikkuUserId?: string;
|
|
81
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Options for {@link QueueService.add}.
|
|
97
|
+
*
|
|
98
|
+
* `pikkuUserId` names the user the job runs on behalf of. It only reaches the
|
|
99
|
+
* worker when the queue service is wrapped in `SignedQueueService`, which
|
|
100
|
+
* signs it with `PIKKU_QUEUE_IDENTITY_SECRET`; an unsigned value is dropped
|
|
101
|
+
* by {@link runQueueJob}.
|
|
102
|
+
*/
|
|
82
103
|
export interface JobOptions {
|
|
83
104
|
priority?: number;
|
|
84
105
|
delay?: number;
|
|
@@ -111,6 +132,16 @@ export type QueueInspection = {
|
|
|
111
132
|
/** Newest first. */
|
|
112
133
|
recent: QueueJobRecord[];
|
|
113
134
|
};
|
|
135
|
+
/**
|
|
136
|
+
* The service functions use to enqueue jobs, available as `queueService` on singleton services.
|
|
137
|
+
*
|
|
138
|
+
* `add` resolves to the job id. `data` must be {@link Safe}: a payload with a
|
|
139
|
+
* `SecretValue` anywhere in it fails to compile, so a secret is not written to
|
|
140
|
+
* the queue by accident. `getJob` returns `null` on backends that do not keep jobs
|
|
141
|
+
* (`supportsResults` is then `false`).
|
|
142
|
+
*
|
|
143
|
+
* @example snippet: queuePublish
|
|
144
|
+
*/
|
|
114
145
|
export interface QueueService {
|
|
115
146
|
readonly supportsResults: boolean;
|
|
116
147
|
/** Live counts and recent jobs for one queue. Absent on a queue service that cannot inspect its backlog. */
|
|
@@ -120,16 +151,19 @@ export interface QueueService {
|
|
|
120
151
|
add<T>(queueName: string, data: Safe<T>, options?: JobOptions): Promise<string>;
|
|
121
152
|
getJob<T, R>(queueName: string, jobId: string): Promise<QueueJob<T, R> | null>;
|
|
122
153
|
}
|
|
154
|
+
/** A queue adapter's worker side: it registers every wired queue worker with its backend and reports how each worker's config was applied. */
|
|
123
155
|
export interface QueueWorkers {
|
|
124
156
|
name: string;
|
|
125
157
|
supportsResults: boolean;
|
|
126
158
|
configMappings: QueueConfigMapping;
|
|
127
159
|
registerQueues(): Promise<Record<string, ConfigValidationResult[]>>;
|
|
128
160
|
}
|
|
161
|
+
/** Generated metadata for every wired queue worker, keyed by queue name. */
|
|
129
162
|
export type QueueWorkersMeta = Record<string, CommonWireMeta & {
|
|
130
163
|
name: string;
|
|
131
164
|
config?: PikkuWorkerConfig;
|
|
132
165
|
}>;
|
|
166
|
+
/** The configuration {@link wireQueueWorker} takes. An app's generated `wireQueueWorker` narrows the function type to its own services. */
|
|
133
167
|
export type CoreQueueWorker<PikkuFunctionConfig extends CorePikkuFunctionConfig<any, any, any> = CorePikkuFunctionConfig<any, any, any>> = {
|
|
134
168
|
/** The queue this worker consumes. Whoever enqueues a job names the same string, so it is the contract between producer and consumer. */
|
|
135
169
|
name: string;
|
|
@@ -144,6 +178,7 @@ export type CoreQueueWorker<PikkuFunctionConfig extends CorePikkuFunctionConfig<
|
|
|
144
178
|
/** Wraps every job. There is no request to read from, so this is for tracing, locking and teardown rather than auth. */
|
|
145
179
|
middleware?: PikkuFunctionConfig['middleware'];
|
|
146
180
|
};
|
|
181
|
+
/** The `queue` part of a worker function's wire: which job is running, the verified `pikkuUserId` of whoever enqueued it (if any), and controls to report progress, fail or discard it. */
|
|
147
182
|
export interface PikkuQueue {
|
|
148
183
|
queueName: string;
|
|
149
184
|
jobId: string;
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import type { ConfigValidationResult, CoreQueueWorker } from './queue.types.js';
|
|
2
2
|
import type { QueueConfigMapping } from './validate-worker-config.js';
|
|
3
3
|
import type { Logger } from '../../services/logger.js';
|
|
4
|
+
/** Called by {@link registerQueueWorkers} once per wired worker, to attach it to the adapter's backend. */
|
|
4
5
|
export type QueueRegistrationCallback<T = any> = (queueName: string, processor: CoreQueueWorker) => Promise<T>;
|
|
6
|
+
/**
|
|
7
|
+
* Validates every wired queue worker's config against an adapter's mapping and registers each one through `registerCallback`.
|
|
8
|
+
*
|
|
9
|
+
* A worker whose registration throws is logged and skipped, so one bad worker
|
|
10
|
+
* does not stop the rest.
|
|
11
|
+
*
|
|
12
|
+
* @param configMappings - Which {@link PikkuWorkerConfig} keys the adapter supports and how they map.
|
|
13
|
+
* @param logger - Receives registration progress, config warnings and failures.
|
|
14
|
+
* @param registerCallback - Attaches one worker to the backend.
|
|
15
|
+
* @returns The config validation result for each queue.
|
|
16
|
+
*/
|
|
5
17
|
export declare function registerQueueWorkers<T = any>(configMappings: QueueConfigMapping, logger: Logger, registerCallback: QueueRegistrationCallback<T>): Promise<Record<string, ConfigValidationResult[]>>;
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { getQueueWorkers } from './queue-runner.js';
|
|
2
2
|
import { validateWorkerConfig } from './validate-worker-config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validates every wired queue worker's config against an adapter's mapping and registers each one through `registerCallback`.
|
|
5
|
+
*
|
|
6
|
+
* A worker whose registration throws is logged and skipped, so one bad worker
|
|
7
|
+
* does not stop the rest.
|
|
8
|
+
*
|
|
9
|
+
* @param configMappings - Which {@link PikkuWorkerConfig} keys the adapter supports and how they map.
|
|
10
|
+
* @param logger - Receives registration progress, config warnings and failures.
|
|
11
|
+
* @param registerCallback - Attaches one worker to the backend.
|
|
12
|
+
* @returns The config validation result for each queue.
|
|
13
|
+
*/
|
|
3
14
|
export async function registerQueueWorkers(configMappings, logger, registerCallback) {
|
|
4
15
|
const configValidation = {};
|
|
5
16
|
const queueWorkers = getQueueWorkers();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '../../services/logger.js';
|
|
2
|
+
import type { RemoteQueueJobData } from '../../services/remote-jobs.js';
|
|
3
|
+
/**
|
|
4
|
+
* A dispatched job is delivered, not owned: the sender retries, so a permanent
|
|
5
|
+
* failure has to read differently from a transient one. An unknown worker or a
|
|
6
|
+
* discarded job answers 4xx so the sender stops; anything else propagates and
|
|
7
|
+
* is delivered again.
|
|
8
|
+
*/
|
|
9
|
+
export declare function pikkuRemoteQueueJobFunc({ logger }: {
|
|
10
|
+
logger: Logger;
|
|
11
|
+
}, { queueName, data, jobId, traceId }: RemoteQueueJobData): Promise<void>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { BadRequestError, PikkuMissingMetaError } from '../../errors/errors.js';
|
|
2
|
+
import { QueueJobDiscardedError, runQueueJob } from './queue-runner.js';
|
|
3
|
+
/**
|
|
4
|
+
* A dispatched job is delivered, not owned: the sender retries, so a permanent
|
|
5
|
+
* failure has to read differently from a transient one. An unknown worker or a
|
|
6
|
+
* discarded job answers 4xx so the sender stops; anything else propagates and
|
|
7
|
+
* is delivered again.
|
|
8
|
+
*/
|
|
9
|
+
export async function pikkuRemoteQueueJobFunc({ logger }, { queueName, data, jobId, traceId }) {
|
|
10
|
+
const job = {
|
|
11
|
+
queueName,
|
|
12
|
+
data,
|
|
13
|
+
id: jobId ?? traceId ?? `remote-${Date.now()}`,
|
|
14
|
+
status: async () => 'active',
|
|
15
|
+
metadata: () => ({
|
|
16
|
+
processedAt: new Date(),
|
|
17
|
+
attemptsMade: 0,
|
|
18
|
+
maxAttempts: undefined,
|
|
19
|
+
result: undefined,
|
|
20
|
+
progress: 0,
|
|
21
|
+
createdAt: new Date(),
|
|
22
|
+
completedAt: undefined,
|
|
23
|
+
failedAt: undefined,
|
|
24
|
+
error: undefined,
|
|
25
|
+
}),
|
|
26
|
+
waitForCompletion: async () => {
|
|
27
|
+
throw new Error('remote jobs do not support waitForCompletion');
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
await runQueueJob({ job, traceId });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof PikkuMissingMetaError ||
|
|
35
|
+
error instanceof QueueJobDiscardedError) {
|
|
36
|
+
throw new BadRequestError(error.message);
|
|
37
|
+
}
|
|
38
|
+
logger.error(`remote-jobs: queue '${queueName}' failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PikkuWorkerConfig, ConfigValidationResult } from './queue.types.js';
|
|
2
|
+
/** How a queue adapter supports {@link PikkuWorkerConfig}: the keys it maps (and to what), the keys it cannot honour, and the fallbacks it uses instead. */
|
|
2
3
|
export interface QueueConfigMapping {
|
|
3
4
|
supported: Partial<Record<keyof PikkuWorkerConfig, {
|
|
4
5
|
queueProperty?: string;
|
|
@@ -25,6 +25,7 @@ export type CoreSystemRole = {
|
|
|
25
25
|
* scope id is a role nobody reads correctly.
|
|
26
26
|
*/
|
|
27
27
|
export type CoreSystemRoles = Record<string, CoreSystemRole>;
|
|
28
|
+
/** A system role declaration as recorded in generated meta. */
|
|
28
29
|
export type SystemRoleDefinitionMeta = {
|
|
29
30
|
name: string;
|
|
30
31
|
displayName?: string;
|
|
@@ -32,7 +33,9 @@ export type SystemRoleDefinitionMeta = {
|
|
|
32
33
|
scopes: string[];
|
|
33
34
|
sourceFile?: string;
|
|
34
35
|
};
|
|
36
|
+
/** System role declarations as the inspector found them. */
|
|
35
37
|
export type SystemRoleDefinitions = SystemRoleDefinitionMeta[];
|
|
38
|
+
/** System role declarations collected by the CLI, keyed by name. */
|
|
36
39
|
export type SystemRoleDefinitionsMeta = Record<string, SystemRoleDefinitionMeta>;
|
|
37
40
|
/** A declared system role, ready to sync into a scope store. */
|
|
38
41
|
export type SystemRole = {
|
|
@@ -3,13 +3,21 @@ import type { SessionService } from '../../services/user-session-service.js';
|
|
|
3
3
|
import type { CoreUserSession } from '../../types/core.types.js';
|
|
4
4
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
5
5
|
import type { PikkuRPC, ResolvedFunction } from './rpc-types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Thrown when an RPC name resolves to no function, or to one that `rpc.exposed` may not call. Maps to HTTP 404 and MCP `-32601`.
|
|
8
|
+
*
|
|
9
|
+
* An unexposed function is reported as not found rather than forbidden, so the
|
|
10
|
+
* response does not reveal whether an internal function by that name exists.
|
|
11
|
+
*/
|
|
6
12
|
export declare class RPCNotFoundError extends PikkuError {
|
|
7
13
|
readonly rpcName: string;
|
|
8
14
|
constructor(rpcName: string);
|
|
9
15
|
}
|
|
16
|
+
/** Thrown when a remote addon's configuration cannot be used, for example when its `serverUrl` resolves empty. Maps to HTTP 500. */
|
|
10
17
|
export declare class RemoteAddonConfigError extends PikkuError {
|
|
11
18
|
constructor(namespace: string, detail: string);
|
|
12
19
|
}
|
|
20
|
+
/** Thrown when a remote addon answers an RPC with a non-2xx status. Maps to HTTP 502; the upstream status is kept on `httpStatus` and the first 300 characters of its body in the message. */
|
|
13
21
|
export declare class RemoteAddonRequestError extends PikkuError {
|
|
14
22
|
readonly httpStatus: number;
|
|
15
23
|
constructor(namespace: string, fnName: string, status: number, detail: string);
|
|
@@ -66,12 +74,28 @@ export declare class ContextAwareRPCService {
|
|
|
66
74
|
get agent(): PikkuRPC['agent'];
|
|
67
75
|
remote<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
|
|
68
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Builds the `rpc` object handed to every function on its wire.
|
|
79
|
+
*
|
|
80
|
+
* `rpc.invoke(name, data)` calls another function in-process, or through the
|
|
81
|
+
* `DeploymentService` when the function lives in another deployment unit.
|
|
82
|
+
* `rpc.exposed` does the same but only reaches functions marked `expose: true`
|
|
83
|
+
* (and, for addons, those the consuming app exposes), which is what the public
|
|
84
|
+
* RPC endpoint uses. `rpc.remote` always goes through the `DeploymentService`.
|
|
85
|
+
* Calls carry the caller's wire, so the session and trace ID propagate. An addon
|
|
86
|
+
* can only call the addons it lists in `uses`.
|
|
87
|
+
*
|
|
88
|
+
* Runtimes create this through {@link rpcService}; apps reach it as `rpc` on the wire.
|
|
89
|
+
*
|
|
90
|
+
* @example snippet: rpcInternalCall
|
|
91
|
+
*/
|
|
69
92
|
export declare class PikkuRPCService<Services extends CoreServices, TypedRPC = PikkuRPC> {
|
|
70
93
|
getContextRPCService(services: Services, wire: PikkuRawWire, requiresAuthOrOptions?: boolean | {
|
|
71
94
|
requiresAuth?: boolean;
|
|
72
95
|
sessionService?: SessionService<CoreUserSession>;
|
|
73
96
|
} | undefined, depth?: number, packageName?: string | null): TypedRPC;
|
|
74
97
|
}
|
|
98
|
+
/** The shared {@link PikkuRPCService}. Function runners call `getContextRPCService` on it to give each invocation its own `rpc`. */
|
|
75
99
|
export declare const rpcService: PikkuRPCService<import("../../types/core.types.js").CoreSingletonServices<{
|
|
76
100
|
logLevel?: import("../../services/logger.js").LogLevel;
|
|
77
101
|
secrets?: {
|
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
import { addonCallerOf, addonMayReach } from '../addon/addon-reach.js';
|
|
2
|
-
import { forwardStepName, isCompensationStepName, } from '../../
|
|
3
|
-
import { runPikkuFunc } from '../../function/function-runner.js';
|
|
2
|
+
import { forwardStepName, isCompensationStepName, } from '../../compensation-name.js';
|
|
4
3
|
import { addonInstanceForNamespace } from '../addon/addon-runner.js';
|
|
5
4
|
import { isAddonFunctionExposed } from '../addon/wire-addon.js';
|
|
6
5
|
import { pikkuState } from '../../pikku-state.js';
|
|
7
6
|
import { PikkuError, addError } from '../../errors/error-handler.js';
|
|
8
7
|
import { parseVersionedId } from '../../version.js';
|
|
9
8
|
import { resolveRemoteAddonToken } from '../addon/remote-addon-auth.js';
|
|
9
|
+
/**
|
|
10
|
+
* The function runner, reached lazily. `function-runner` builds every
|
|
11
|
+
* invocation's `wire.rpc` from this module, so a static import back would be a
|
|
12
|
+
* module cycle. By the time an rpc call runs the runner is loaded, and the
|
|
13
|
+
* import resolves from the module cache once.
|
|
14
|
+
*/
|
|
15
|
+
let functionRunner;
|
|
16
|
+
const runPikkuFunc = async (...args) => {
|
|
17
|
+
functionRunner ??= (await import('../../function/function-runner.js'))
|
|
18
|
+
.runPikkuFunc;
|
|
19
|
+
return functionRunner(...args);
|
|
20
|
+
};
|
|
10
21
|
/**
|
|
11
22
|
* The session for a wire: read through `getSession` when a runner attached one,
|
|
12
23
|
* otherwise whatever was placed on the wire directly.
|
|
13
24
|
*/
|
|
14
25
|
const resolveWireSession = async (wire) => typeof wire.getSession === 'function' ? await wire.getSession() : wire.session;
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when an RPC name resolves to no function, or to one that `rpc.exposed` may not call. Maps to HTTP 404 and MCP `-32601`.
|
|
28
|
+
*
|
|
29
|
+
* An unexposed function is reported as not found rather than forbidden, so the
|
|
30
|
+
* response does not reveal whether an internal function by that name exists.
|
|
31
|
+
*/
|
|
15
32
|
export class RPCNotFoundError extends PikkuError {
|
|
16
33
|
rpcName;
|
|
17
34
|
constructor(rpcName) {
|
|
@@ -24,6 +41,7 @@ addError(RPCNotFoundError, {
|
|
|
24
41
|
mcpCode: -32601,
|
|
25
42
|
message: 'RPC function not found.',
|
|
26
43
|
});
|
|
44
|
+
/** Thrown when a remote addon's configuration cannot be used, for example when its `serverUrl` resolves empty. Maps to HTTP 500. */
|
|
27
45
|
export class RemoteAddonConfigError extends PikkuError {
|
|
28
46
|
constructor(namespace, detail) {
|
|
29
47
|
super(`Remote addon '${namespace}' is misconfigured: ${detail}`);
|
|
@@ -33,6 +51,7 @@ addError(RemoteAddonConfigError, {
|
|
|
33
51
|
status: 500,
|
|
34
52
|
message: 'Remote addon is misconfigured.',
|
|
35
53
|
});
|
|
54
|
+
/** Thrown when a remote addon answers an RPC with a non-2xx status. Maps to HTTP 502; the upstream status is kept on `httpStatus` and the first 300 characters of its body in the message. */
|
|
36
55
|
export class RemoteAddonRequestError extends PikkuError {
|
|
37
56
|
httpStatus;
|
|
38
57
|
constructor(namespace, fnName, status, detail) {
|
|
@@ -411,6 +430,21 @@ export class ContextAwareRPCService {
|
|
|
411
430
|
return this.services.deploymentService.invoke(funcName, data, session, this.wire.traceId);
|
|
412
431
|
}
|
|
413
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Builds the `rpc` object handed to every function on its wire.
|
|
435
|
+
*
|
|
436
|
+
* `rpc.invoke(name, data)` calls another function in-process, or through the
|
|
437
|
+
* `DeploymentService` when the function lives in another deployment unit.
|
|
438
|
+
* `rpc.exposed` does the same but only reaches functions marked `expose: true`
|
|
439
|
+
* (and, for addons, those the consuming app exposes), which is what the public
|
|
440
|
+
* RPC endpoint uses. `rpc.remote` always goes through the `DeploymentService`.
|
|
441
|
+
* Calls carry the caller's wire, so the session and trace ID propagate. An addon
|
|
442
|
+
* can only call the addons it lists in `uses`.
|
|
443
|
+
*
|
|
444
|
+
* Runtimes create this through {@link rpcService}; apps reach it as `rpc` on the wire.
|
|
445
|
+
*
|
|
446
|
+
* @example snippet: rpcInternalCall
|
|
447
|
+
*/
|
|
414
448
|
export class PikkuRPCService {
|
|
415
449
|
getContextRPCService(services, wire, requiresAuthOrOptions, depth = 0, packageName = null) {
|
|
416
450
|
const options = typeof requiresAuthOrOptions === 'object' &&
|
|
@@ -456,4 +490,5 @@ class ContextRPCView {
|
|
|
456
490
|
return this.serviceRPC.agent;
|
|
457
491
|
}
|
|
458
492
|
}
|
|
493
|
+
/** The shared {@link PikkuRPCService}. Function runners call `getContextRPCService` on it to give each invocation its own `rpc`. */
|
|
459
494
|
export const rpcService = new PikkuRPCService();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CredentialOverrides } from '../credential/credential-overrides.js';
|
|
2
2
|
import type { PikkuRawWire } from '../../types/core.types.js';
|
|
3
3
|
import type { AgentInterruptResult } from '../agent/agent-interrupt.js';
|
|
4
|
+
/** The `rpc` object on a function's wire. An app's generated types narrow `invoke`, `remote`, `startWorkflow` and `agent` to its own functions, workflows and agents; see {@link PikkuRPCService} for how each call is routed. */
|
|
4
5
|
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> = {
|
|
5
6
|
depth: number;
|
|
6
7
|
global: boolean;
|
|
@@ -29,6 +30,7 @@ export type PikkuRPC<Invoke extends (...args: any[]) => any = (...args: any[]) =
|
|
|
29
30
|
interrupt: (runId: string, reason?: 'speech' | 'user' | 'timeout') => Promise<AgentInterruptResult>;
|
|
30
31
|
};
|
|
31
32
|
};
|
|
33
|
+
/** Generated metadata for one RPC name: the function it resolves to, whether `rpc.exposed` may call it, and whether it is reachable remotely. */
|
|
32
34
|
export type RPCMeta = {
|
|
33
35
|
pikkuFuncId: string;
|
|
34
36
|
expose: boolean;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { ScheduledTaskNotFoundError, runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
|
|
2
2
|
export { logSchedulers } from './log-schedulers.js';
|
|
3
3
|
export type { CoreScheduledTask, ScheduledTasksMeta, ScheduledTaskRun, ScheduledTaskRuns, } from './scheduler.types.js';
|
|
4
|
+
export { pikkuRemoteScheduledJobFunc } from './remote-scheduled-job.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
+
/** Logs every wired scheduled task and its schedule at info level, typically once at startup. */
|
|
2
3
|
export const logSchedulers = (logger) => {
|
|
3
4
|
const scheduledTasks = pikkuState(null, 'scheduler', 'tasks');
|
|
4
5
|
if (scheduledTasks.size === 0) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '../../services/logger.js';
|
|
2
|
+
import type { RemoteScheduledJobData } from '../../services/remote-jobs.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runs a scheduled task on behalf of a remote job runner, so a task can be triggered in a deployment unit other than the one that scheduled it.
|
|
5
|
+
* Generated remote-job wiring calls this; apps do not call it directly.
|
|
6
|
+
*
|
|
7
|
+
* @throws {BadRequestError} When the named task is not wired in this unit.
|
|
8
|
+
*/
|
|
9
|
+
export declare function pikkuRemoteScheduledJobFunc({ logger }: {
|
|
10
|
+
logger: Logger;
|
|
11
|
+
}, { taskName }: RemoteScheduledJobData): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BadRequestError } from '../../errors/errors.js';
|
|
2
|
+
import { ScheduledTaskNotFoundError, runScheduledTask, } from './scheduler-runner.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runs a scheduled task on behalf of a remote job runner, so a task can be triggered in a deployment unit other than the one that scheduled it.
|
|
5
|
+
* Generated remote-job wiring calls this; apps do not call it directly.
|
|
6
|
+
*
|
|
7
|
+
* @throws {BadRequestError} When the named task is not wired in this unit.
|
|
8
|
+
*/
|
|
9
|
+
export async function pikkuRemoteScheduledJobFunc({ logger }, { taskName }) {
|
|
10
|
+
try {
|
|
11
|
+
await runScheduledTask({ name: taskName, traceId: `cron-${taskName}` });
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error instanceof ScheduledTaskNotFoundError) {
|
|
15
|
+
throw new BadRequestError(error.message);
|
|
16
|
+
}
|
|
17
|
+
logger.error(`remote-jobs: task '${taskName}' failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -2,14 +2,43 @@ import type { CoreUserSession } from '../../types/core.types.js';
|
|
|
2
2
|
import type { CoreScheduledTask } from './scheduler.types.js';
|
|
3
3
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
4
4
|
import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
5
|
+
/** Parameters for {@link runScheduledTask}: the task's name, an optional session to run it with, and an optional trace ID. */
|
|
5
6
|
export type RunScheduledTasksParams = {
|
|
6
7
|
name: string;
|
|
7
8
|
session?: CoreUserSession;
|
|
8
9
|
traceId?: string;
|
|
9
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Registers a sessionless function to run on a cron schedule.
|
|
13
|
+
*
|
|
14
|
+
* The task only runs once a scheduler service (or a platform cron trigger
|
|
15
|
+
* calling {@link runScheduledTask}) drives it; wiring alone schedules nothing.
|
|
16
|
+
* The function receives no input, and can call `scheduledTask.skip()` on its
|
|
17
|
+
* wire to end the run early.
|
|
18
|
+
*
|
|
19
|
+
* Registration needs the metadata `pikku` generates for the task. When none is
|
|
20
|
+
* found the wiring is skipped with a warning rather than throwing.
|
|
21
|
+
*
|
|
22
|
+
* @param scheduledTask - The task's unique name, cron `schedule`, function, and optional middleware.
|
|
23
|
+
* @throws {Error} When a task with the same name is already wired.
|
|
24
|
+
*
|
|
25
|
+
* @example snippet: wireScheduler
|
|
26
|
+
*/
|
|
10
27
|
export declare const wireScheduler: <PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>>(scheduledTask: CoreScheduledTask<PikkuFunctionConfig>) => void;
|
|
28
|
+
/** Thrown by {@link runScheduledTask} when no task, or no generated metadata, exists for the requested name. */
|
|
11
29
|
export declare class ScheduledTaskNotFoundError extends PikkuError {
|
|
12
30
|
constructor(title: string);
|
|
13
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Runs one wired scheduled task now. Scheduler services and platform cron handlers call this on each tick.
|
|
34
|
+
*
|
|
35
|
+
* When `session` is given it is placed on the wire, so the function and its
|
|
36
|
+
* middleware see that user; otherwise the task runs without one.
|
|
37
|
+
*
|
|
38
|
+
* @param params - See {@link RunScheduledTasksParams}. `traceId` defaults to `cron-<name>-<timestamp>`.
|
|
39
|
+
* @throws {ScheduledTaskNotFoundError} When the task or its metadata is missing.
|
|
40
|
+
* @throws The error the function threw, including the one `scheduledTask.skip()` raises, so the caller can tell a skip from a failure.
|
|
41
|
+
*/
|
|
14
42
|
export declare function runScheduledTask({ name, session, traceId, }: RunScheduledTasksParams): Promise<void>;
|
|
43
|
+
/** Every wired scheduled task, keyed by name. Scheduler services read this to know what to schedule. */
|
|
15
44
|
export declare const getScheduledTasks: () => Map<string, CoreScheduledTask>;
|
|
@@ -2,6 +2,22 @@ import { getErrorResponse, PikkuError } from '../../errors/error-handler.js';
|
|
|
2
2
|
import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../pikku-state.js';
|
|
3
3
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
|
|
4
4
|
import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../services/user-session-service.js';
|
|
5
|
+
/**
|
|
6
|
+
* Registers a sessionless function to run on a cron schedule.
|
|
7
|
+
*
|
|
8
|
+
* The task only runs once a scheduler service (or a platform cron trigger
|
|
9
|
+
* calling {@link runScheduledTask}) drives it; wiring alone schedules nothing.
|
|
10
|
+
* The function receives no input, and can call `scheduledTask.skip()` on its
|
|
11
|
+
* wire to end the run early.
|
|
12
|
+
*
|
|
13
|
+
* Registration needs the metadata `pikku` generates for the task. When none is
|
|
14
|
+
* found the wiring is skipped with a warning rather than throwing.
|
|
15
|
+
*
|
|
16
|
+
* @param scheduledTask - The task's unique name, cron `schedule`, function, and optional middleware.
|
|
17
|
+
* @throws {Error} When a task with the same name is already wired.
|
|
18
|
+
*
|
|
19
|
+
* @example snippet: wireScheduler
|
|
20
|
+
*/
|
|
5
21
|
export const wireScheduler = (scheduledTask) => {
|
|
6
22
|
const meta = pikkuState(null, 'scheduler', 'meta');
|
|
7
23
|
const taskMeta = meta[scheduledTask.name];
|
|
@@ -22,6 +38,7 @@ export const wireScheduler = (scheduledTask) => {
|
|
|
22
38
|
}
|
|
23
39
|
tasks.set(scheduledTask.name, scheduledTask);
|
|
24
40
|
};
|
|
41
|
+
/** Thrown by {@link runScheduledTask} when no task, or no generated metadata, exists for the requested name. */
|
|
25
42
|
export class ScheduledTaskNotFoundError extends PikkuError {
|
|
26
43
|
constructor(title) {
|
|
27
44
|
super(`Scheduled task not found: ${title}`);
|
|
@@ -33,6 +50,16 @@ class ScheduledTaskSkippedError extends PikkuError {
|
|
|
33
50
|
this.name = 'ScheduledTaskSkippedError';
|
|
34
51
|
}
|
|
35
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Runs one wired scheduled task now. Scheduler services and platform cron handlers call this on each tick.
|
|
55
|
+
*
|
|
56
|
+
* When `session` is given it is placed on the wire, so the function and its
|
|
57
|
+
* middleware see that user; otherwise the task runs without one.
|
|
58
|
+
*
|
|
59
|
+
* @param params - See {@link RunScheduledTasksParams}. `traceId` defaults to `cron-<name>-<timestamp>`.
|
|
60
|
+
* @throws {ScheduledTaskNotFoundError} When the task or its metadata is missing.
|
|
61
|
+
* @throws The error the function threw, including the one `scheduledTask.skip()` raises, so the caller can tell a skip from a failure.
|
|
62
|
+
*/
|
|
36
63
|
export async function runScheduledTask({ name, session, traceId, }) {
|
|
37
64
|
const singletonServices = getSingletonServices();
|
|
38
65
|
const createWireServices = getCreateWireServices();
|
|
@@ -85,6 +112,7 @@ export async function runScheduledTask({ name, session, traceId, }) {
|
|
|
85
112
|
throw e;
|
|
86
113
|
}
|
|
87
114
|
}
|
|
115
|
+
/** Every wired scheduled task, keyed by name. Scheduler services read this to know what to schedule. */
|
|
88
116
|
export const getScheduledTasks = () => {
|
|
89
117
|
return pikkuState(null, 'scheduler', 'tasks');
|
|
90
118
|
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { CoreUserSession, CommonWireMeta } from '../../types/core.types.js';
|
|
2
2
|
import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js';
|
|
3
3
|
import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
4
|
+
/** Generated metadata for every wired scheduled task, keyed by name. */
|
|
4
5
|
export type ScheduledTasksMeta<UserSession extends CoreUserSession = any> = Record<string, CommonWireMeta & {
|
|
5
6
|
name: string;
|
|
6
7
|
schedule: string;
|
|
7
8
|
session?: UserSession;
|
|
8
9
|
}>;
|
|
10
|
+
/** The configuration {@link wireScheduler} takes. An app's generated `wireScheduler` narrows the function and middleware types to its own. */
|
|
9
11
|
export type CoreScheduledTask<PikkuFunctionConfig = CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>, PikkuMiddleware = CorePikkuMiddleware<any>> = {
|
|
10
12
|
/** Unique across the project. It is how the task is addressed in logs, in `pikku meta`, and by a scheduler service asked to run it now. */
|
|
11
13
|
name: string;
|
|
@@ -18,6 +20,7 @@ export type CoreScheduledTask<PikkuFunctionConfig = CorePikkuFunctionConfig<Core
|
|
|
18
20
|
/** Wraps every execution. There is no request to read from, so this is for tracing, locking and teardown rather than auth. */
|
|
19
21
|
middleware?: PikkuMiddleware[];
|
|
20
22
|
};
|
|
23
|
+
/** The `scheduledTask` part of a scheduled function's wire: which task is running, when, and a `skip` to end the run without treating it as a failure. */
|
|
21
24
|
export interface PikkuScheduledTask {
|
|
22
25
|
name: string;
|
|
23
26
|
schedule: string;
|
|
@@ -16,6 +16,7 @@ export type CoreScopeNode = {
|
|
|
16
16
|
* enforces that at runtime, only the build.
|
|
17
17
|
*/
|
|
18
18
|
export type CoreScopes = Record<string, CoreScopeNode>;
|
|
19
|
+
/** A node of a scope tree as recorded in generated meta. */
|
|
19
20
|
export type ScopeNodeMeta = {
|
|
20
21
|
displayName?: string;
|
|
21
22
|
description?: string;
|
|
@@ -34,6 +35,7 @@ export type ScopeOrigin = {
|
|
|
34
35
|
package: string;
|
|
35
36
|
displayName?: string;
|
|
36
37
|
};
|
|
38
|
+
/** A root scope tree as recorded in generated meta, with where it came from. */
|
|
37
39
|
export type ScopeDefinitionMeta = {
|
|
38
40
|
name: string;
|
|
39
41
|
displayName?: string;
|
|
@@ -42,8 +44,11 @@ export type ScopeDefinitionMeta = {
|
|
|
42
44
|
sourceFile?: string;
|
|
43
45
|
origin?: ScopeOrigin;
|
|
44
46
|
};
|
|
47
|
+
/** Scope trees as the inspector found them. */
|
|
45
48
|
export type ScopeDefinitions = ScopeDefinitionMeta[];
|
|
49
|
+
/** Scope trees collected by the CLI, keyed by root segment. */
|
|
46
50
|
export type ScopeDefinitionsMeta = Record<string, ScopeDefinitionMeta>;
|
|
51
|
+
/** One grantable scope from a flattened scope tree; every node, not just the leaves, appears. */
|
|
47
52
|
export type FlatScope = {
|
|
48
53
|
/** Colon-delimited id, e.g. `admin:invoices:create`. */
|
|
49
54
|
id: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { defineSecret } from './secret.types.js';
|
|
2
|
-
export type { CoreSecret, OAuth2CredentialConfig, SecretDefinitionMeta, SecretDefinitionsMeta, SecretDefinitions, } from './secret.types.js';
|
|
1
|
+
export { defineSecret, SECRET_GENERATE_MIN_SIZE } from './secret.types.js';
|
|
2
|
+
export type { CoreSecret, OAuth2CredentialConfig, SecretGenerate, SecretDefinitionMeta, SecretDefinitionsMeta, SecretDefinitions, } from './secret.types.js';
|
|
3
3
|
export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js';
|
|
4
4
|
export { deriveOAuth2AppSecrets } from './derive-oauth2-app-secrets.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { defineSecret } from './secret.types.js';
|
|
1
|
+
export { defineSecret, SECRET_GENERATE_MIN_SIZE } from './secret.types.js';
|
|
2
2
|
export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js';
|
|
3
3
|
export { deriveOAuth2AppSecrets } from './derive-oauth2-app-secrets.js';
|