@pikku/core 0.12.143 → 0.12.145
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/cli.types.d.ts +4 -0
- package/dist/wirings/cli/command-parser.d.ts +13 -0
- package/dist/wirings/cli/command-parser.js +16 -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
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ScenarioVirtualUser, ResolvedVirtualUser, ScenarioVirtualUsers, ScenarioInvokeOptions, ScenarioHttpResponse } from '
|
|
2
|
-
import type { ConverseOptions, ConversationVerdict } from '
|
|
3
|
-
import { type VirtualUserSignIn } from '
|
|
1
|
+
import type { ScenarioVirtualUser, ResolvedVirtualUser, ScenarioVirtualUsers, ScenarioInvokeOptions, ScenarioHttpResponse } from '../../services/virtual-users-service.js';
|
|
2
|
+
import type { ConverseOptions, ConversationVerdict } from './conversation/conversation.types.js';
|
|
3
|
+
import { type VirtualUserSignIn } from '../../services/virtual-user-sign-in.js';
|
|
4
|
+
/** How `createHttpVirtualUsers` reaches the target app and signs each virtual user in. */
|
|
4
5
|
export interface HttpVirtualUsersConfig {
|
|
5
6
|
/**
|
|
6
7
|
* Base API URL of the target app, INCLUDING the HTTP prefix — e.g.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { readScenarioHttpResponse } from '
|
|
2
|
-
import { runConversation } from '
|
|
3
|
-
import { createCookieJar, } from '
|
|
4
|
-
import { authMount } from '
|
|
5
|
-
import { getSingletonServices } from '
|
|
6
|
-
import { AIProviderNotConfiguredError } from '
|
|
1
|
+
import { readScenarioHttpResponse } from '../../services/virtual-users-service.js';
|
|
2
|
+
import { runConversation } from './conversation/run-conversation.js';
|
|
3
|
+
import { createCookieJar, } from '../../services/scenario-cookie-jar.js';
|
|
4
|
+
import { authMount, } from '../../services/virtual-user-sign-in.js';
|
|
5
|
+
import { getSingletonServices } from '../../pikku-state.js';
|
|
6
|
+
import { AIProviderNotConfiguredError } from '../../errors/errors.js';
|
|
7
7
|
/**
|
|
8
8
|
* Default HTTP-backed virtual user. Signs in lazily on first invoke, holds the
|
|
9
9
|
* session cookies for its lifetime, and re-logs-in once on a 401 mid-run (long
|
|
@@ -49,7 +49,7 @@ export type { CoreVirtualUser, CoreVirtualUsers, VirtualUserAccountMeta, Virtual
|
|
|
49
49
|
* imports services, which only a bundler could remove and an unbundled Node or
|
|
50
50
|
* Lambda deploy would load outright.
|
|
51
51
|
*/
|
|
52
|
-
export { HttpVirtualUser, createHttpVirtualUsers, type HttpVirtualUsersConfig, } from '
|
|
52
|
+
export { HttpVirtualUser, createHttpVirtualUsers, type HttpVirtualUsersConfig, } from './http-virtual-users.js';
|
|
53
53
|
export { statementSignIn, inProcessSignIn, authMount, type VirtualUserSignIn, type VirtualUserStatementMint, type StatementSignInOptions, type InProcessAuth, } from '../../services/virtual-user-sign-in.js';
|
|
54
54
|
export { createCookieJar, type ScenarioCookieJar, } from '../../services/scenario-cookie-jar.js';
|
|
55
55
|
export { postScenarioJson, readScenarioHttpResponse, } from '../../services/virtual-users-service.js';
|
|
@@ -23,7 +23,7 @@ export { APP_SCOPE_ROOT, appScopeId, buildAppScopeDefinition, } from './virtual-
|
|
|
23
23
|
* imports services, which only a bundler could remove and an unbundled Node or
|
|
24
24
|
* Lambda deploy would load outright.
|
|
25
25
|
*/
|
|
26
|
-
export { HttpVirtualUser, createHttpVirtualUsers, } from '
|
|
26
|
+
export { HttpVirtualUser, createHttpVirtualUsers, } from './http-virtual-users.js';
|
|
27
27
|
export { statementSignIn, inProcessSignIn, authMount, } from '../../services/virtual-user-sign-in.js';
|
|
28
28
|
export { createCookieJar, } from '../../services/scenario-cookie-jar.js';
|
|
29
29
|
export { postScenarioJson, readScenarioHttpResponse, } from '../../services/virtual-users-service.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ResolvedVirtualUser } from '../../services/virtual-users-service.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type VirtualUserLLM } from './conversation/run-conversation.js';
|
|
3
3
|
import { type VirtualUserTuning } from './virtual-user-dispositions.js';
|
|
4
4
|
import type { ApiCatalogueEntry, IntentSource, VirtualUserBudget, VirtualUserDisposition, VirtualUserFinding, VirtualUserRunResult, VirtualUserTally, VirtualUserTarget } from './virtual-user.types.js';
|
|
5
5
|
/** What an app-specific oracle is shown about one call. */
|
|
@@ -13,6 +13,7 @@ export interface VirtualUserCallContext {
|
|
|
13
13
|
step: number;
|
|
14
14
|
disposition: VirtualUserDisposition;
|
|
15
15
|
}
|
|
16
|
+
/** Everything one autonomous virtual-user run is given. */
|
|
16
17
|
export interface RunVirtualUserParams {
|
|
17
18
|
/** The person being run — name, job title, personality, goals. */
|
|
18
19
|
virtualUser: ResolvedVirtualUser;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readObject, } from './conversation/run-conversation.js';
|
|
1
2
|
import { getDurationInMilliseconds } from '../../time-utils.js';
|
|
2
3
|
import { catalogueIndex, catalogueLookup, describeEntry, isReadOnly, reachableCatalogue, renderCatalogue, } from './virtual-user-catalogue.js';
|
|
3
4
|
import { dispositionProfile, } from './virtual-user-dispositions.js';
|
|
@@ -39,20 +40,6 @@ const msg = (role, content) => ({
|
|
|
39
40
|
content,
|
|
40
41
|
createdAt: new Date(),
|
|
41
42
|
});
|
|
42
|
-
/** Read a structured result, falling back to parsing JSON out of the text. */
|
|
43
|
-
const readObject = (result) => {
|
|
44
|
-
if (result.object && typeof result.object === 'object')
|
|
45
|
-
return result.object;
|
|
46
|
-
if (result.text) {
|
|
47
|
-
try {
|
|
48
|
-
return JSON.parse(result.text);
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
};
|
|
56
43
|
/**
|
|
57
44
|
* The arguments for a call, however the model chose to spell them.
|
|
58
45
|
*
|
|
@@ -120,9 +120,11 @@ export type CoreVirtualUser = {
|
|
|
120
120
|
};
|
|
121
121
|
/** Virtual users to declare, keyed by id. */
|
|
122
122
|
export type CoreVirtualUsers = Record<string, CoreVirtualUser>;
|
|
123
|
+
/** Generated metadata for the account a virtual user signs in with. */
|
|
123
124
|
export type VirtualUserAccountMeta = {
|
|
124
125
|
provider?: string;
|
|
125
126
|
};
|
|
127
|
+
/** Generated metadata for one declared virtual user. */
|
|
126
128
|
export type VirtualUserMeta = {
|
|
127
129
|
/** The key it was declared under. */
|
|
128
130
|
id: string;
|
|
@@ -146,5 +148,7 @@ export type VirtualUserMeta = {
|
|
|
146
148
|
app?: string;
|
|
147
149
|
sourceFile?: string;
|
|
148
150
|
};
|
|
151
|
+
/** Every declared virtual user, in declaration order. */
|
|
149
152
|
export type VirtualUserDefinitions = VirtualUserMeta[];
|
|
153
|
+
/** Generated metadata for every declared virtual user, keyed by id. */
|
|
150
154
|
export type VirtualUsersMeta = Record<string, VirtualUserMeta>;
|
|
@@ -3,7 +3,7 @@ import type { Logger } from '../../services/logger.js';
|
|
|
3
3
|
import type { MetaService } from '../../services/meta-service.js';
|
|
4
4
|
import type { VariablesService } from '../../services/variables-service.js';
|
|
5
5
|
import type { AgentRunnerService } from '../../services/agent-runner-service.js';
|
|
6
|
-
import type { HttpVirtualUsersConfig } from '
|
|
6
|
+
import type { HttpVirtualUsersConfig } from './http-virtual-users.js';
|
|
7
7
|
import type { ResolvedVirtualUser, ScenarioVirtualUsers } from '../../services/virtual-users-service.js';
|
|
8
8
|
import type { VirtualUserEnvironment } from '../virtual-user/virtual-user-environments.js';
|
|
9
9
|
import type { StepRecord, VirtualUserDisposition } from './virtual-user.types.js';
|
|
@@ -56,6 +56,11 @@ export declare const VIRTUAL_USER_VARIABLES: {
|
|
|
56
56
|
export declare const runnableVirtualUser: (virtualUsers: ScaffoldVirtualUsers, virtualUserId: string) => ResolvedVirtualUser;
|
|
57
57
|
/** The store, or the error naming the one to wire. */
|
|
58
58
|
export declare const requireVirtualUserRunStore: (store: VirtualUserRunStore | undefined, reading?: boolean) => VirtualUserRunStore;
|
|
59
|
+
/**
|
|
60
|
+
* The schedule store, or an error naming the one to wire.
|
|
61
|
+
*
|
|
62
|
+
* @throws Error when no `virtualUserScheduleStore` is wired.
|
|
63
|
+
*/
|
|
59
64
|
export declare const requireVirtualUserScheduleStore: (store: VirtualUserScheduleStore | undefined) => VirtualUserScheduleStore;
|
|
60
65
|
/** What a caller asked for, before the declaration fills in what it left out. */
|
|
61
66
|
export interface StartVirtualUserRunParams {
|
|
@@ -175,6 +180,9 @@ export declare const serializeVirtualUserSchedule: (schedule: VirtualUserSchedul
|
|
|
175
180
|
goals: string[];
|
|
176
181
|
};
|
|
177
182
|
};
|
|
183
|
+
/**
|
|
184
|
+
* What a request to create or change a virtual user's schedule carries. Omitted fields keep their current value.
|
|
185
|
+
*/
|
|
178
186
|
export interface WriteVirtualUserScheduleParams {
|
|
179
187
|
store: VirtualUserScheduleStore | undefined;
|
|
180
188
|
virtualUsers: ScaffoldVirtualUsers;
|
|
@@ -228,6 +236,7 @@ export declare const virtualUserScheduleRunInput: (schedule: VirtualUserSchedule
|
|
|
228
236
|
* otherwise the only trace that a virtual user is still out there working.
|
|
229
237
|
*/
|
|
230
238
|
export declare const logVirtualUserTick: (logger: Logger, result: VirtualUserTickResult) => void;
|
|
239
|
+
/** What the scaffolded run worker needs to execute one recorded virtual-user run. */
|
|
231
240
|
export interface ExecuteVirtualUserRunParams {
|
|
232
241
|
runStore: VirtualUserRunStore | undefined;
|
|
233
242
|
metaService: MetaService | undefined;
|
|
@@ -53,6 +53,11 @@ export const requireVirtualUserRunStore = (store, reading = false) => {
|
|
|
53
53
|
}
|
|
54
54
|
return store;
|
|
55
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* The schedule store, or an error naming the one to wire.
|
|
58
|
+
*
|
|
59
|
+
* @throws Error when no `virtualUserScheduleStore` is wired.
|
|
60
|
+
*/
|
|
56
61
|
export const requireVirtualUserScheduleStore = (store) => {
|
|
57
62
|
if (!store) {
|
|
58
63
|
throw new Error(MISSING_SCHEDULE_STORE);
|
|
@@ -21,6 +21,7 @@ export declare const STALE_RUN_AFTER_MS: number;
|
|
|
21
21
|
* not the one that finds the most.
|
|
22
22
|
*/
|
|
23
23
|
export declare const DEFAULT_MIN_INTERVAL_MS: number;
|
|
24
|
+
/** The upper bound of the default cadence; see {@link DEFAULT_MIN_INTERVAL_MS}. */
|
|
24
25
|
export declare const DEFAULT_MAX_INTERVAL_MS: number;
|
|
25
26
|
/** Whether a row is the tick's business, for stores that cannot ask in a query. */
|
|
26
27
|
export declare const isDue: (schedule: VirtualUserScheduleRecord, now: Date) => boolean;
|
|
@@ -33,6 +34,9 @@ export declare const isDue: (schedule: VirtualUserScheduleRecord, now: Date) =>
|
|
|
33
34
|
*/
|
|
34
35
|
export declare const nextRunAt: (schedule: Pick<VirtualUserScheduleRecord, 'minIntervalMs' | 'maxIntervalMs'>, now: Date, random: () => number) => Date;
|
|
35
36
|
export type VirtualUserSkipReason = 'in-flight' | 'dispatch-failed' | 'claimed-elsewhere';
|
|
37
|
+
/**
|
|
38
|
+
* What one scheduling tick did: runs started, virtual users skipped and why, and stranded runs reaped.
|
|
39
|
+
*/
|
|
36
40
|
export interface VirtualUserTickResult {
|
|
37
41
|
dispatched: {
|
|
38
42
|
virtualUserId: string;
|
|
@@ -45,6 +49,7 @@ export interface VirtualUserTickResult {
|
|
|
45
49
|
/** Runs found stranded at `running` and marked failed. */
|
|
46
50
|
reaped: string[];
|
|
47
51
|
}
|
|
52
|
+
/** The stores a scheduling tick reads and the callback that starts a run. */
|
|
48
53
|
export interface VirtualUserTickParams {
|
|
49
54
|
schedules: VirtualUserScheduleStore;
|
|
50
55
|
runs: VirtualUserRunStore;
|
|
@@ -19,6 +19,7 @@ export const STALE_RUN_AFTER_MS = 2 * 60 * 60 * 1000;
|
|
|
19
19
|
* not the one that finds the most.
|
|
20
20
|
*/
|
|
21
21
|
export const DEFAULT_MIN_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
22
|
+
/** The upper bound of the default cadence; see {@link DEFAULT_MIN_INTERVAL_MS}. */
|
|
22
23
|
export const DEFAULT_MAX_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
23
24
|
/** Whether a row is the tick's business, for stores that cannot ask in a query. */
|
|
24
25
|
export const isDue = (schedule, now) => schedule.enabled && schedule.nextRunAt.getTime() <= now.getTime();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ScenarioVirtualUser } from '../../services/virtual-users-service.js';
|
|
2
2
|
import type { VirtualUserTarget } from './virtual-user.types.js';
|
|
3
|
+
/** Options for `virtualUserTarget`. */
|
|
3
4
|
export interface VirtualUserTargetOptions {
|
|
4
5
|
/** Model the virtual user uses for its side of a conversation with an agent. */
|
|
5
6
|
model?: string;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
2
|
import type { Safe } from '../../classification/secret-value.js';
|
|
3
3
|
import type { SendWebhookInput, SendWebhookResult, WebhookService } from '../../services/webhook-service.js';
|
|
4
|
+
/** An outgoing webhook event your app sends: its event name, a title and description for docs, and the schema its payload must satisfy. */
|
|
4
5
|
export type CoreOutgoingWebhook<Event extends string = string, Payload extends StandardSchemaV1 = StandardSchemaV1> = {
|
|
5
6
|
event: Event;
|
|
6
7
|
title: string;
|
|
7
8
|
description?: string;
|
|
8
9
|
payload: Payload;
|
|
9
10
|
};
|
|
11
|
+
/** Generated metadata for one outgoing webhook event. */
|
|
10
12
|
export type OutgoingWebhookMeta = {
|
|
11
13
|
event: string;
|
|
12
14
|
title: string;
|
|
@@ -15,14 +17,32 @@ export type OutgoingWebhookMeta = {
|
|
|
15
17
|
exportedName?: string;
|
|
16
18
|
sourceFile?: string;
|
|
17
19
|
};
|
|
20
|
+
/** Generated metadata for every outgoing webhook event, keyed by event name. */
|
|
18
21
|
export type OutgoingWebhooksMeta = Record<string, OutgoingWebhookMeta>;
|
|
22
|
+
/** The payload type of an outgoing webhook, inferred from its schema's input type. */
|
|
19
23
|
export type OutgoingWebhookPayloadOf<W> = W extends CoreOutgoingWebhook<string, infer S> ? StandardSchemaV1.InferInput<S> : never;
|
|
24
|
+
/** Resolves the `data` a {@link TypedWebhookService.send} call must carry for its `event`: the event's payload when it is a known event, unconstrained otherwise. */
|
|
20
25
|
export type OutgoingWebhookDataFor<TMap, Input> = Input extends {
|
|
21
26
|
event: infer Event;
|
|
22
27
|
} ? Event extends keyof TMap ? {
|
|
23
28
|
data: Safe<TMap[Event]>;
|
|
24
29
|
} : unknown : unknown;
|
|
30
|
+
/**
|
|
31
|
+
* A `WebhookService` whose `send` checks `data` against the payload of the named event. An app's generated types supply the event-to-payload map.
|
|
32
|
+
*
|
|
33
|
+
* `data` must be {@link Safe}: a payload with a `SecretValue` anywhere in it
|
|
34
|
+
* fails to compile rather than being sent to a third party.
|
|
35
|
+
*/
|
|
25
36
|
export interface TypedWebhookService<TMap = Record<string, unknown>> extends Omit<WebhookService, 'send'> {
|
|
26
37
|
send<const T extends SendWebhookInput>(input: Safe<T> & OutgoingWebhookDataFor<TMap, T>): Promise<SendWebhookResult>;
|
|
27
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Declares an outgoing webhook event and its payload schema. Returns the definition unchanged.
|
|
41
|
+
*
|
|
42
|
+
* `pikku` collects these into the generated event-to-payload map, which is what
|
|
43
|
+
* makes `webhookService.send({ event, data })` type-check `data` against the
|
|
44
|
+
* schema. Defining an event does not send anything or register a URL.
|
|
45
|
+
*
|
|
46
|
+
* @param webhook - The event name, title, optional description, and payload schema.
|
|
47
|
+
*/
|
|
28
48
|
export declare const defineOutgoingWebhook: <const Event extends string, Payload extends StandardSchemaV1>(webhook: CoreOutgoingWebhook<Event, Payload>) => CoreOutgoingWebhook<Event, Payload>;
|
|
@@ -1 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declares an outgoing webhook event and its payload schema. Returns the definition unchanged.
|
|
3
|
+
*
|
|
4
|
+
* `pikku` collects these into the generated event-to-payload map, which is what
|
|
5
|
+
* makes `webhookService.send({ event, data })` type-check `data` against the
|
|
6
|
+
* schema. Defining an event does not send anything or register a URL.
|
|
7
|
+
*
|
|
8
|
+
* @param webhook - The event name, title, optional description, and payload schema.
|
|
9
|
+
*/
|
|
1
10
|
export const defineOutgoingWebhook = (webhook) => webhook;
|
|
@@ -528,10 +528,7 @@ export interface WorkflowStepWire {
|
|
|
528
528
|
*/
|
|
529
529
|
fromInvocationId?: string;
|
|
530
530
|
}
|
|
531
|
-
/**
|
|
532
|
-
* Workflow wire object for DSL workflows
|
|
533
|
-
* Provides workflow-specific capabilities to function execution
|
|
534
|
-
*/
|
|
531
|
+
/** The outcome of the forward call a `compensate` function is undoing. */
|
|
535
532
|
export type CompensatingFor<Out = unknown> = {
|
|
536
533
|
ok: true;
|
|
537
534
|
output: Out;
|
|
@@ -542,6 +539,10 @@ export type CompensatingFor<Out = unknown> = {
|
|
|
542
539
|
error: SerializedError;
|
|
543
540
|
stepName?: string;
|
|
544
541
|
};
|
|
542
|
+
/**
|
|
543
|
+
* Workflow wire object for DSL workflows
|
|
544
|
+
* Provides workflow-specific capabilities to function execution
|
|
545
|
+
*/
|
|
545
546
|
export interface PikkuWorkflowWire {
|
|
546
547
|
/**
|
|
547
548
|
* Set only while a function's `compensate` is running: the outcome of the
|
|
@@ -583,6 +584,9 @@ export interface PikkuWorkflowWire {
|
|
|
583
584
|
* context would reject every wire whose scenario output differs from it.
|
|
584
585
|
*/
|
|
585
586
|
export type ScenarioContext<Out = unknown> = 0 extends 1 & Out ? any : Out extends object ? Partial<Out> : Record<string, unknown>;
|
|
587
|
+
/**
|
|
588
|
+
* The workflow wire a scenario body receives: every workflow step, plus the expectation steps and the shared `context`.
|
|
589
|
+
*/
|
|
586
590
|
export interface PikkuScenarioWire<Out = unknown> extends PikkuWorkflowWire {
|
|
587
591
|
/**
|
|
588
592
|
* Scratch the body writes and the `before`/`after` hooks read. A hook is a
|
|
@@ -1 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers a workflow under its generated name. Called by generated code; an
|
|
3
|
+
* app declares workflows with `pikkuWorkflowFunc` and its relatives instead.
|
|
4
|
+
* Skipped with a warning when no metadata was generated for the name.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
1
8
|
export declare const addWorkflow: (workflowName: string, workflowFunc: any, packageName?: string | null) => void;
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { pikkuState } from '../../../pikku-state.js';
|
|
2
2
|
import { addFunction } from '../../../function/function-runner.js';
|
|
3
|
+
/**
|
|
4
|
+
* Registers a workflow under its generated name. Called by generated code; an
|
|
5
|
+
* app declares workflows with `pikkuWorkflowFunc` and its relatives instead.
|
|
6
|
+
* Skipped with a warning when no metadata was generated for the name.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
3
10
|
export const addWorkflow = (workflowName, workflowFunc, packageName = null) => {
|
|
4
11
|
const meta = pikkuState(packageName, 'workflows', 'meta');
|
|
5
12
|
const workflowMeta = meta[workflowName];
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { CoreWorkflow } from './workflow.types.js';
|
|
2
2
|
import type { CoreFeature, FeaturePlanEntry } from './scenario.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Registers a scenario feature. Called by generated code for each `pikkuFeature`.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
3
8
|
export declare const addFeature: (featureId: string, feature: CoreFeature, packageName?: string | null) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Matches each feature's scenarios to the workflow names they are registered
|
|
11
|
+
* under, merging feature and scenario tags. Entries that name a scenario no
|
|
12
|
+
* workflow registration holds come back in `unresolved`.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
4
16
|
export declare const resolveFeatureScenarios: (features: Map<string, CoreFeature>, registrations: Map<string, CoreWorkflow>) => {
|
|
5
17
|
entries: FeaturePlanEntry[];
|
|
6
18
|
unresolved: Array<{
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registers a scenario feature. Called by generated code for each `pikkuFeature`.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
2
7
|
export const addFeature = (featureId, feature, packageName = null) => {
|
|
3
8
|
pikkuState(packageName, 'workflows', 'features').set(featureId, feature);
|
|
4
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Matches each feature's scenarios to the workflow names they are registered
|
|
12
|
+
* under, merging feature and scenario tags. Entries that name a scenario no
|
|
13
|
+
* workflow registration holds come back in `unresolved`.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
5
17
|
export const resolveFeatureScenarios = (features, registrations) => {
|
|
6
18
|
const nameByConfig = new Map();
|
|
7
19
|
for (const [name, registration] of registrations) {
|
|
@@ -15,6 +15,11 @@ export type TypedRef<T> = RefValue & {
|
|
|
15
15
|
type InputWithRefs<T> = {
|
|
16
16
|
[K in keyof T]: T[K] | TypedRef<T[K]>;
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Builds a typed graph-node map for a set of RPCs: given a node-id → RPC-name
|
|
20
|
+
* map and per-node settings, returns the {@link GraphNodeConfig} for every node,
|
|
21
|
+
* with refs typed against each RPC's input and output.
|
|
22
|
+
*/
|
|
18
23
|
export declare function createGraph<RPCMap extends Record<string, RPCHandler>>(): <const FuncMap extends Record<string, keyof RPCMap & string>>(funcMap: FuncMap, nodesOrBuilder?: GraphNodeConfigMap<FuncMap, RPCMap> | ((nodes: FuncMap) => GraphNodeConfigMap<FuncMap, RPCMap>)) => Record<Extract<keyof FuncMap, string>, GraphNodeConfig<Extract<keyof FuncMap, string>>>;
|
|
19
24
|
type GraphNodeConfigMap<FuncMap extends Record<string, string>, RPCMap extends Record<string, RPCHandler>> = {
|
|
20
25
|
[K in Extract<keyof FuncMap, string>]?: {
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a typed graph-node map for a set of RPCs: given a node-id → RPC-name
|
|
3
|
+
* map and per-node settings, returns the {@link GraphNodeConfig} for every node,
|
|
4
|
+
* with refs typed against each RPC's input and output.
|
|
5
|
+
*/
|
|
1
6
|
export function createGraph() {
|
|
2
7
|
return (funcMap, nodesOrBuilder) => {
|
|
3
8
|
if (!nodesOrBuilder) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** A string interpolated at run time from other nodes' outputs, as `template` builds it. */
|
|
1
2
|
export type TemplateString = {
|
|
2
3
|
$template: {
|
|
3
4
|
parts: string[];
|
|
@@ -9,6 +10,11 @@ export type TemplateString = {
|
|
|
9
10
|
} & {
|
|
10
11
|
__brand: 'TemplateString';
|
|
11
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Builds a {@link TemplateString} for a graph node's input: each `$0`, `$1`, …
|
|
15
|
+
* in `templateStr` is replaced at run time by the value of the ref at that
|
|
16
|
+
* index. An index with no ref resolves to an unknown ref.
|
|
17
|
+
*/
|
|
12
18
|
export declare function template(templateStr: string, refs: Array<{
|
|
13
19
|
$ref: string;
|
|
14
20
|
path?: string;
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a {@link TemplateString} for a graph node's input: each `$0`, `$1`, …
|
|
3
|
+
* in `templateStr` is replaced at run time by the value of the ref at that
|
|
4
|
+
* index. An index with no ref resolves to an unknown ref.
|
|
5
|
+
*/
|
|
1
6
|
export function template(templateStr, refs) {
|
|
2
7
|
const parts = [];
|
|
3
8
|
const expressions = [];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** What `pikkuWorkflowGraph` takes. */
|
|
1
2
|
export interface PikkuWorkflowGraphConfig<FuncMap extends Record<string, string>, T> {
|
|
2
3
|
/** Keeps the graph in the codebase but out of the build. */
|
|
3
4
|
disabled?: true;
|
|
@@ -14,6 +15,7 @@ export interface PikkuWorkflowGraphConfig<FuncMap extends Record<string, string>
|
|
|
14
15
|
/** Free text carried onto the rendered graph, for a reader who needs the reasoning the shape cannot show. */
|
|
15
16
|
notes?: string[];
|
|
16
17
|
}
|
|
18
|
+
/** The marker `pikkuWorkflowGraph` returns; the graph itself is read from source by `pikku all`. */
|
|
17
19
|
export interface PikkuWorkflowGraphResult {
|
|
18
20
|
__type: 'pikkuWorkflowGraph';
|
|
19
21
|
name?: string;
|
|
@@ -21,4 +23,14 @@ export interface PikkuWorkflowGraphResult {
|
|
|
21
23
|
tags?: string[];
|
|
22
24
|
notes?: string[];
|
|
23
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Declares a workflow as a graph: each node names an RPC, and `config` says what
|
|
28
|
+
* feeds it and which nodes run next. The shape is data, so the console can draw
|
|
29
|
+
* it and a run records which branch it took.
|
|
30
|
+
*
|
|
31
|
+
* The inspector reads the graph from source at build time; at runtime this only
|
|
32
|
+
* returns a marker carrying the descriptive fields.
|
|
33
|
+
*
|
|
34
|
+
* @example snippet: workflowGraph
|
|
35
|
+
*/
|
|
24
36
|
export declare function pikkuWorkflowGraph<const FuncMap extends Record<string, string>>(config: PikkuWorkflowGraphConfig<FuncMap, any>): PikkuWorkflowGraphResult;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declares a workflow as a graph: each node names an RPC, and `config` says what
|
|
3
|
+
* feeds it and which nodes run next. The shape is data, so the console can draw
|
|
4
|
+
* it and a run records which branch it took.
|
|
5
|
+
*
|
|
6
|
+
* The inspector reads the graph from source at build time; at runtime this only
|
|
7
|
+
* returns a marker carrying the descriptive fields.
|
|
8
|
+
*
|
|
9
|
+
* @example snippet: workflowGraph
|
|
10
|
+
*/
|
|
1
11
|
export function pikkuWorkflowGraph(config) {
|
|
2
12
|
return {
|
|
3
13
|
__type: 'pikkuWorkflowGraph',
|
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import type { TemplateString } from './template.js';
|
|
2
|
+
/** A reference to another node's output, or a path inside it, resolved when the node runs. */
|
|
2
3
|
export interface RefValue {
|
|
3
4
|
__isRef: true;
|
|
4
5
|
nodeId: string;
|
|
5
6
|
path?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare const createRef: (nodeId: string, path?: string) => RefValue;
|
|
9
|
+
/** Whether a value is a {@link RefValue}. */
|
|
8
10
|
export declare const isRef: (value: unknown) => value is RefValue;
|
|
9
11
|
export type RefFn<NodeIds extends string = string> = (nodeId: NodeIds, path?: string) => RefValue;
|
|
10
12
|
export type NextConfig<NodeIds extends string = string> = NodeIds | NodeIds[] | Record<string, NodeIds | NodeIds[]>;
|
|
13
|
+
/** The `template` helper as a graph node's `input` builder receives it. */
|
|
11
14
|
export type TemplateFn = (templateStr: string, refs: Array<{
|
|
12
15
|
$ref: string;
|
|
13
16
|
path?: string;
|
|
14
17
|
}>) => TemplateString;
|
|
18
|
+
/** Refers to the current element (or a path inside it) of a `forEach` node. */
|
|
15
19
|
export type ItemFn = (path?: string) => RefValue;
|
|
20
|
+
/**
|
|
21
|
+
* The upstream array a `forEach` node iterates: a node id, a ref, or a function returning a ref.
|
|
22
|
+
*/
|
|
16
23
|
export type ForEachConfig<NodeIds extends string = string> = NodeIds | RefValue | ((ref: RefFn<NodeIds>) => RefValue);
|
|
24
|
+
/** Whether a `forEach` node's per-item instances run in parallel or one after another. */
|
|
17
25
|
export type ForEachMode = 'parallel' | 'sequential';
|
|
26
|
+
/**
|
|
27
|
+
* One node of a workflow graph: the RPC it runs, its input, its outgoing edges and its failure handling.
|
|
28
|
+
*/
|
|
18
29
|
export interface GraphNodeConfig<NodeIds extends string = string> {
|
|
19
30
|
func: string;
|
|
20
31
|
/**
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { PikkuWorkflowService } from '
|
|
2
|
-
import type { SerializedError } from '
|
|
3
|
-
import type { WorkflowPlannedStep, WorkflowQueueOptions, WorkflowRun, WorkflowRunService, WorkflowRunWire, StepState, StepStatus, WorkflowStatus, WorkflowVersionStatus, WorkflowStepOptions } from '
|
|
1
|
+
import { PikkuWorkflowService } from './pikku-workflow-service.js';
|
|
2
|
+
import type { SerializedError } from '../../errors/serialized-error.js';
|
|
3
|
+
import type { WorkflowPlannedStep, WorkflowQueueOptions, WorkflowRun, WorkflowRunService, WorkflowRunWire, StepState, StepStatus, WorkflowStatus, WorkflowVersionStatus, WorkflowStepOptions } from './workflow.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* A workflow service that keeps runs, steps and state in memory and runs every
|
|
6
|
+
* step inline. For tests and local development: nothing survives a restart, and
|
|
7
|
+
* it does not wire workflow queues or coordinate with another process.
|
|
8
|
+
*/
|
|
4
9
|
export declare class InMemoryWorkflowService extends PikkuWorkflowService implements WorkflowRunService {
|
|
5
10
|
constructor(options?: WorkflowQueueOptions);
|
|
6
11
|
private sleepTimers;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { PikkuWorkflowService } from '
|
|
2
|
-
import { isExpectedError } from '
|
|
3
|
-
import { isStepLeaseLive } from '
|
|
4
|
-
import { WorkflowStepSupersededError } from '
|
|
1
|
+
import { PikkuWorkflowService } from './pikku-workflow-service.js';
|
|
2
|
+
import { isExpectedError } from '../../errors/error-handler.js';
|
|
3
|
+
import { isStepLeaseLive } from './workflow-constants.js';
|
|
4
|
+
import { WorkflowStepSupersededError } from './workflow-errors.js';
|
|
5
5
|
// knowledge: decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md
|
|
6
|
+
/**
|
|
7
|
+
* A workflow service that keeps runs, steps and state in memory and runs every
|
|
8
|
+
* step inline. For tests and local development: nothing survives a restart, and
|
|
9
|
+
* it does not wire workflow queues or coordinate with another process.
|
|
10
|
+
*/
|
|
6
11
|
export class InMemoryWorkflowService extends PikkuWorkflowService {
|
|
7
12
|
constructor(options = {}) {
|
|
8
13
|
super({ ...options, wireQueues: false });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
2
|
-
import { InMemoryWorkflowService } from '
|
|
2
|
+
import { InMemoryWorkflowService } from './in-memory-workflow-service.js';
|
|
3
3
|
import type { RunLifecycleContext, WorkflowRunEngine, WorkflowRunExtension } from './workflow-run-engine.types.js';
|
|
4
4
|
import type { PikkuRawWire } from '../../types/core.types.js';
|
|
5
5
|
import type { ScenarioVirtualUsers } from '../../services/virtual-users-service.js';
|
|
@@ -3,7 +3,7 @@ import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../
|
|
|
3
3
|
import { getDurationInMilliseconds } from '../../time-utils.js';
|
|
4
4
|
import { closeWireServices } from '../../utils.js';
|
|
5
5
|
import { PikkuError, addError } from '../../errors/error-handler.js';
|
|
6
|
-
import { InMemoryWorkflowService } from '
|
|
6
|
+
import { InMemoryWorkflowService } from './in-memory-workflow-service.js';
|
|
7
7
|
import { runScheduledTask } from '../scheduler/scheduler-runner.js';
|
|
8
8
|
import { WorkflowStepNameNotString } from './workflow-errors.js';
|
|
9
9
|
import { resolveScenarioSurfaces, witnessesAgree } from './scenario-surface.js';
|
|
@@ -497,7 +497,7 @@ export class PikkuScenarioService {
|
|
|
497
497
|
apiUrl,
|
|
498
498
|
appUrl: (await variables.get('APP_URL')) ?? undefined,
|
|
499
499
|
};
|
|
500
|
-
const { createHttpVirtualUsers } = await import('
|
|
500
|
+
const { createHttpVirtualUsers } = await import('../virtual-user/http-virtual-users.js');
|
|
501
501
|
const { inProcessSignIn } = await import('../../services/virtual-user-sign-in.js');
|
|
502
502
|
return createHttpVirtualUsers({
|
|
503
503
|
apiUrl,
|
|
@@ -8,6 +8,7 @@ import type { PikkuRPC } from '../rpc/rpc-types.js';
|
|
|
8
8
|
import { type RunTimeline, type ReconstructedRunState } from './run-timeline.js';
|
|
9
9
|
import type { WorkflowRunEngine, WorkflowRunExtension } from './workflow-run-engine.types.js';
|
|
10
10
|
import type { LeaseService } from '../../services/lease-service.js';
|
|
11
|
+
/** The workflow engine; subclasses supply storage. Leases serialise runs and step claims over a shared store. */
|
|
11
12
|
export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
12
13
|
private runExtension?;
|
|
13
14
|
private runContexts;
|
|
@@ -26,6 +26,7 @@ import { runDslWorkflowPass } from './workflow-dsl-pass.js';
|
|
|
26
26
|
import { childRunFailure, failRunOrUnwind, isUnwound, compensatingForStep, cancelAndUnwind, createUnwindHost, driveUnwind, recordHasCompensation, isChildWorkflowRecord, } from './workflow-compensation.js';
|
|
27
27
|
import { runVersionMismatchFallback } from './workflow-version-fallback.js';
|
|
28
28
|
import { RedispatchBackoff, sweepStalledRuns, sweepUndispatchedSteps, } from './workflow-recovery.js';
|
|
29
|
+
/** The workflow engine; subclasses supply storage. Leases serialise runs and step claims over a shared store. */
|
|
29
30
|
export class PikkuWorkflowService {
|
|
30
31
|
runExtension;
|
|
31
32
|
runContexts = new Map();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SerializedError } from '../../errors/serialized-error.js';
|
|
2
2
|
import type { StepState, StepStatus } from './workflow.types.js';
|
|
3
|
+
/** One lifecycle transition of one step, in run order. */
|
|
3
4
|
export interface RunTimelineEvent {
|
|
4
5
|
seq: number;
|
|
5
6
|
at: Date;
|
|
@@ -11,11 +12,19 @@ export interface RunTimelineEvent {
|
|
|
11
12
|
result?: unknown;
|
|
12
13
|
error?: SerializedError;
|
|
13
14
|
}
|
|
15
|
+
/** Every step transition in a run, ordered by time. */
|
|
14
16
|
export type RunTimeline = RunTimelineEvent[];
|
|
17
|
+
/** One stored step attempt, with the name of the step it belongs to. */
|
|
15
18
|
export type HistoryEntry = StepState & {
|
|
16
19
|
stepName: string;
|
|
17
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Flattens a run's step history into a {@link RunTimeline}: one event per
|
|
23
|
+
* recorded transition, ordered by timestamp, then lifecycle order, then history
|
|
24
|
+
* order, and numbered with `seq`.
|
|
25
|
+
*/
|
|
18
26
|
export declare function buildRunTimeline(history: HistoryEntry[]): RunTimeline;
|
|
27
|
+
/** A step as it stood at a point in a run's timeline. */
|
|
19
28
|
export interface ReconstructedStep {
|
|
20
29
|
stepName: string;
|
|
21
30
|
compensating: boolean;
|
|
@@ -25,7 +34,11 @@ export interface ReconstructedStep {
|
|
|
25
34
|
result?: unknown;
|
|
26
35
|
error?: SerializedError;
|
|
27
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Where a reconstructed run stood: nothing started, a step in flight, a step failed, or nothing in flight.
|
|
39
|
+
*/
|
|
28
40
|
export type RunPhase = 'pending' | 'running' | 'failed' | 'idle';
|
|
41
|
+
/** A run's steps, results and path as of one point in its timeline. */
|
|
29
42
|
export interface ReconstructedRunState {
|
|
30
43
|
/** seq of the last applied event, or -1 if the point precedes all events. */
|
|
31
44
|
seq: number;
|
|
@@ -35,5 +48,13 @@ export interface ReconstructedRunState {
|
|
|
35
48
|
path: string[];
|
|
36
49
|
phase: RunPhase;
|
|
37
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Replays a timeline up to a point, for stepping through a run after the fact.
|
|
53
|
+
*
|
|
54
|
+
* @param timeline - The run's timeline, from {@link buildRunTimeline}.
|
|
55
|
+
* @param at - The last event to apply, by `seq`, or every event up to a time.
|
|
56
|
+
* @returns The run as it stood at that point.
|
|
57
|
+
*/
|
|
38
58
|
export declare function reconstructStateAt(timeline: RunTimeline, at: number | Date): ReconstructedRunState;
|
|
59
|
+
/** The run as its whole timeline leaves it. */
|
|
39
60
|
export declare function reconstructFinalState(timeline: RunTimeline): ReconstructedRunState;
|