@pikku/core 0.12.84 → 0.12.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +424 -0
- package/dist/bootstrap-compat/root.d.ts +20 -0
- package/dist/classification/column-form.d.ts +32 -0
- package/dist/classification/column-form.js +42 -0
- package/dist/classification/data-classification.d.ts +64 -0
- package/dist/classification/index.d.ts +13 -0
- package/dist/classification/index.js +2 -0
- package/dist/classification/secret-value.d.ts +56 -0
- package/dist/classification/secret-value.js +46 -0
- package/dist/crypto-utils.d.ts +1 -1
- package/dist/ecosystem/agent-scorer.d.ts +1 -1
- package/dist/ecosystem/agent.d.ts +4 -1
- package/dist/ecosystem/channel/local.d.ts +2 -0
- package/dist/ecosystem/channel/local.js +2 -0
- package/dist/ecosystem/channel/serverless.d.ts +9 -0
- package/dist/ecosystem/channel/serverless.js +1 -0
- package/dist/ecosystem/channel.d.ts +3 -0
- package/dist/ecosystem/channel.js +1 -0
- package/dist/ecosystem/cli.d.ts +1 -1
- package/dist/ecosystem/cli.js +1 -1
- package/dist/ecosystem/credential.d.ts +1 -0
- package/dist/ecosystem/crypto-utils.d.ts +8 -0
- package/dist/ecosystem/crypto-utils.js +1 -0
- package/dist/ecosystem/dev.d.ts +1 -0
- package/dist/ecosystem/dev.js +1 -0
- package/{src/ecosystem/testing.ts → dist/ecosystem/errors.d.ts} +3 -3
- package/dist/ecosystem/errors.js +2 -0
- package/dist/ecosystem/function.d.ts +1 -1
- package/dist/ecosystem/function.js +1 -1
- package/dist/ecosystem/http.d.ts +3 -1
- package/dist/ecosystem/http.js +3 -1
- package/dist/ecosystem/mcp.d.ts +1 -1
- package/dist/ecosystem/mcp.js +1 -1
- package/dist/ecosystem/middleware.d.ts +2 -1
- package/dist/ecosystem/middleware.js +2 -1
- package/dist/ecosystem/persona.d.ts +4 -2
- package/dist/ecosystem/persona.js +2 -1
- package/dist/ecosystem/queue.d.ts +4 -2
- package/dist/ecosystem/queue.js +3 -1
- package/dist/ecosystem/role.d.ts +1 -0
- package/dist/ecosystem/rpc.d.ts +2 -0
- package/dist/ecosystem/rpc.js +1 -0
- package/dist/ecosystem/scenario.d.ts +8 -2
- package/dist/ecosystem/scenario.js +5 -1
- package/dist/ecosystem/scheduler.d.ts +2 -1
- package/dist/ecosystem/scheduler.js +2 -1
- package/dist/ecosystem/schema.d.ts +2 -1
- package/dist/ecosystem/schema.js +1 -1
- package/dist/ecosystem/scope.d.ts +2 -0
- package/dist/ecosystem/scope.js +1 -0
- package/dist/ecosystem/secret.d.ts +2 -0
- package/dist/ecosystem/secret.js +1 -0
- package/dist/ecosystem/services/local-content.d.ts +2 -1
- package/dist/ecosystem/services/local-content.js +1 -1
- package/dist/ecosystem/services/local-meta.d.ts +1 -0
- package/dist/ecosystem/services/local-meta.js +1 -0
- package/dist/ecosystem/services.d.ts +11 -3
- package/dist/ecosystem/services.js +7 -1
- package/dist/ecosystem/trigger.d.ts +1 -0
- package/dist/ecosystem/trigger.js +1 -1
- package/dist/ecosystem/types.d.ts +6 -3
- package/dist/ecosystem/types.js +3 -2
- package/dist/ecosystem/variable.d.ts +1 -0
- package/dist/ecosystem/virtual-user.d.ts +3 -0
- package/dist/ecosystem/virtual-user.js +3 -0
- package/dist/ecosystem/workflow.d.ts +2 -0
- package/dist/ecosystem/workflow.js +2 -0
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/serialized-error.d.ts +7 -0
- package/dist/function/function-meta.types.d.ts +139 -0
- package/dist/function/function-runner.d.ts +3 -2
- package/dist/function/function-runner.js +31 -11
- package/dist/function/functions.types.d.ts +10 -2
- package/dist/function/index.d.ts +8 -2
- package/dist/function/index.js +4 -1
- package/dist/function/pikku-request.d.ts +8 -0
- package/dist/function/pikku-request.js +15 -0
- package/dist/middleware/auth-apikey.d.ts +2 -10
- package/dist/middleware/auth-apikey.js +1 -1
- package/dist/middleware/auth-bearer.d.ts +2 -10
- package/dist/middleware/auth-bearer.js +1 -1
- package/dist/middleware/auth-cookie.d.ts +2 -10
- package/dist/middleware/auth-cookie.js +1 -1
- package/dist/middleware/cors.d.ts +5 -11
- package/dist/middleware/cors.js +13 -6
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/middleware-factories.d.ts +9 -0
- package/dist/middleware/middleware-factories.js +19 -0
- package/dist/middleware/middleware.types.d.ts +27 -0
- package/dist/middleware/middleware.types.js +1 -0
- package/dist/middleware/remote-auth.d.ts +2 -2
- package/dist/middleware/remote-auth.js +1 -1
- package/dist/middleware/telemetry.d.ts +4 -20
- package/dist/middleware/telemetry.js +1 -1
- package/dist/middleware-runner.d.ts +2 -1
- package/dist/pikku-state.d.ts +2 -1
- package/dist/services/audit-service.d.ts +1 -1
- package/dist/services/credential-wire-service.js +1 -1
- package/dist/services/email-service.d.ts +1 -1
- package/dist/services/file-scenario-run-store.d.ts +58 -0
- package/dist/services/file-scenario-run-store.js +214 -0
- package/dist/services/in-memory-workflow-service.d.ts +1 -1
- package/dist/services/index.d.ts +5 -1
- package/dist/services/index.js +3 -0
- package/dist/services/local-secrets.d.ts +1 -1
- package/dist/services/local-secrets.js +1 -1
- package/dist/services/logger.d.ts +7 -7
- package/dist/services/meta-service.d.ts +2 -1
- package/dist/services/scoped-secret-service.d.ts +1 -1
- package/dist/services/secret-service.d.ts +1 -1
- package/dist/services/typed-secret-service.d.ts +16 -2
- package/dist/services/typed-secret-service.js +5 -0
- package/dist/services/webhook-service.d.ts +1 -1
- package/dist/services/workflow-service.d.ts +2 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/types/core.types.d.ts +30 -180
- package/dist/types/core.types.js +1 -19
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/types/state.types.d.ts +3 -1
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +2 -0
- package/dist/wirings/addon/addon-runner.d.ts +17 -0
- package/dist/wirings/addon/addon-runner.js +150 -0
- package/dist/wirings/addon/index.d.ts +6 -0
- package/dist/wirings/addon/index.js +3 -0
- package/dist/wirings/addon/remote-addon-auth.d.ts +16 -0
- package/dist/wirings/addon/remote-addon-auth.js +39 -0
- package/dist/wirings/addon/wire-addon.d.ts +80 -0
- package/dist/wirings/addon/wire-addon.js +120 -0
- package/dist/wirings/addon/wire-remote-addon.d.ts +22 -0
- package/dist/wirings/addon/wire-remote-addon.js +11 -0
- package/dist/wirings/agent/agent-prepare.d.ts +3 -3
- package/dist/wirings/agent/agent-prepare.js +1 -1
- package/dist/wirings/agent/agent-runner.js +2 -3
- package/dist/wirings/agent/agent-stream.js +2 -2
- package/dist/wirings/agent/agent-utils.d.ts +13 -0
- package/dist/wirings/agent/agent-utils.js +16 -0
- package/dist/wirings/agent/agent.types.d.ts +3 -2
- package/dist/wirings/agent/index.d.ts +1 -1
- package/dist/wirings/agent/voice-input.js +1 -1
- package/dist/wirings/agent/voice-output.js +1 -1
- package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +13 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.js +52 -0
- package/dist/wirings/agent-scorer/agent-scorer.d.ts +7 -1
- package/dist/wirings/agent-scorer/agent-scorer.js +1 -0
- package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +20 -0
- package/dist/wirings/agent-scorer/index.d.ts +1 -1
- package/dist/wirings/channel/channel-common.d.ts +2 -1
- package/dist/wirings/channel/channel-middleware-runner.d.ts +2 -1
- package/dist/wirings/channel/channel.types.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.d.ts +1 -0
- package/dist/wirings/cli/channel/index.d.ts +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +2 -1
- package/dist/wirings/cli/cli-runner.js +4 -1
- package/dist/wirings/cli/cli.types.d.ts +21 -2
- package/dist/wirings/cli/command-parser.js +157 -23
- package/dist/wirings/gateway/gateway.types.d.ts +2 -1
- package/dist/wirings/http/http-runner.d.ts +1 -1
- package/dist/wirings/http/http-runner.js +1 -1
- package/dist/wirings/http/http.types.d.ts +2 -2
- package/dist/wirings/http/index.d.ts +1 -0
- package/dist/wirings/http/index.js +1 -0
- package/dist/wirings/http/pikku-fetch-http-request.js +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.js +2 -2
- package/dist/wirings/mcp/mcp.types.d.ts +1 -1
- package/dist/wirings/persona/index.d.ts +1 -1
- package/dist/wirings/persona/index.js +1 -1
- package/dist/wirings/persona/persona.types.d.ts +14 -0
- package/dist/wirings/queue/queue.types.d.ts +1 -1
- package/dist/wirings/queue/signed-queue-service.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +0 -6
- package/dist/wirings/rpc/index.js +0 -3
- package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -1
- package/dist/wirings/rpc/remote-addon-auth.js +1 -1
- package/dist/wirings/rpc/rpc-runner.js +2 -2
- package/dist/wirings/rpc/wire-addon.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -1
- package/dist/wirings/scope/index.d.ts +1 -0
- package/dist/wirings/scope/index.js +1 -0
- package/dist/wirings/secret/secret.types.d.ts +10 -0
- package/dist/wirings/secret/validate-secret-definitions.js +2 -0
- package/dist/wirings/variable/validate-variable-definitions.js +2 -0
- package/dist/wirings/variable/variable.types.d.ts +9 -0
- package/dist/wirings/virtual-user/index.d.ts +1 -1
- package/dist/wirings/virtual-user/index.js +1 -1
- package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +1 -1
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +1 -1
- package/dist/wirings/workflow/graph/graph-node.d.ts +9 -2
- package/dist/wirings/workflow/graph/graph-node.js +2 -0
- package/dist/wirings/workflow/graph/graph-runner.d.ts +1 -0
- package/dist/wirings/workflow/graph/graph-runner.js +283 -31
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +16 -1
- package/dist/wirings/workflow/index.d.ts +2 -0
- package/dist/wirings/workflow/index.js +1 -0
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +14 -4
- package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -1
- package/dist/wirings/workflow/pikku-workflow-service.js +3 -4
- package/dist/wirings/workflow/run-timeline.d.ts +1 -1
- package/dist/wirings/workflow/scenario-run.types.d.ts +171 -0
- package/dist/wirings/workflow/scenario-run.types.js +1 -0
- package/dist/wirings/workflow/scenario-step-guards.d.ts +1 -2
- package/dist/wirings/workflow/scenario-step-guards.js +0 -8
- package/dist/wirings/workflow/scenario-step.types.d.ts +27 -12
- package/dist/wirings/workflow/workflow-approval.js +2 -1
- package/dist/wirings/workflow/workflow-run-engine.types.d.ts +2 -1
- package/dist/wirings/workflow/workflow.types.d.ts +2 -1
- package/knowledge/decisions/index.md +2 -0
- package/knowledge/decisions/internals/a-scenario-step-template-is-offered-unfilled.md +1 -1
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +1 -1
- package/knowledge/decisions/internals/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +2 -2
- package/knowledge/decisions/internals/a-wall-clock-threshold-is-a-load-test-in-disguise.md +6 -6
- package/knowledge/decisions/internals/a-workflow-wire-is-built-from-the-run-not-from-the-rpc-service.md +1 -1
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +1 -1
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +1 -1
- package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +1 -1
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +1 -1
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +1 -1
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +1 -1
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +1 -1
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +1 -1
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +1 -1
- package/knowledge/decisions/internals/core-column-form-is-an-axis-of-its-own.md +4 -4
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +1 -1
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +3 -3
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +2 -2
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +2 -2
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +1 -1
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +1 -1
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +3 -3
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +1 -1
- package/knowledge/decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md +4 -4
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +1 -1
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +1 -1
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +1 -1
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +1 -1
- package/knowledge/decisions/internals/index.md +4 -2
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +1 -1
- package/knowledge/decisions/internals/one-project-shape-check-two-validators.md +1 -1
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +1 -1
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +1 -1
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +1 -1
- package/knowledge/decisions/internals/scenario-given-and-when-are-sugar-but-then-is-not.md +2 -2
- package/knowledge/decisions/internals/scenarios-live-in-files-named-for-them.md +5 -5
- package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +1 -1
- package/knowledge/decisions/internals/the-api-report-pins-members-not-just-names.md +1 -1
- package/knowledge/decisions/internals/the-ecosystem-entry-point-carries-the-adapter-surface.md +43 -19
- package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +1 -1
- package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +1 -1
- package/knowledge/decisions/internals/validate-runs-checks-by-precondition.md +3 -3
- package/knowledge/decisions/internals/virtual-user-step-order-comes-from-insertion-order.md +1 -1
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +1 -1
- package/knowledge/decisions/internals/wiring-registries-erase-the-generics-their-wire-functions-capture.md +1 -1
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +1 -1
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +1 -1
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +1 -1
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +1 -1
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +1 -1
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +1 -1
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +9 -5
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +1 -1
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +2 -2
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +1 -1
- package/knowledge/decisions/security/a-function-never-receives-the-secret-service.md +1 -1
- package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md +1 -1
- package/knowledge/decisions/security/a-virtual-user-is-never-offered-a-step-that-would-forge-its-own-oracle.md +2 -3
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +1 -1
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +1 -1
- package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md +1 -1
- package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +3 -3
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +4 -3
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +1 -1
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +2 -2
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +1 -1
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +2 -2
- package/knowledge/decisions/security/index.md +2 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +1 -1
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +3 -3
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +1 -1
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +2 -2
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +1 -1
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +2 -2
- package/knowledge/index.md +3 -1
- package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md +1 -1
- package/knowledge/questions/index.md +2 -0
- package/package.json +14 -13
- package/run-tests.sh +0 -0
- package/scripts/generate-api-report.d.mts +1 -1
- package/scripts/generate-api-report.mjs +67 -60
- package/scripts/generate-api-report.mts +11 -45
- package/src/api-report.test.ts +70 -1
- package/src/app-alias-surface.test.ts +179 -0
- package/src/app-leaf-surface.test.ts +217 -0
- package/src/bootstrap-compat/root.ts +20 -0
- package/src/{column-form.test.ts → classification/column-form.test.ts} +2 -2
- package/src/{data-classification.ts → classification/data-classification.ts} +1 -5
- package/src/classification/index.ts +38 -0
- package/src/{secret-value.test.ts → classification/secret-value.test.ts} +2 -2
- package/src/{secret-value.ts → classification/secret-value.ts} +1 -6
- package/src/crypto-utils.ts +1 -1
- package/src/dev/reload-meta.test.ts +1 -1
- package/src/errors/index.ts +9 -0
- package/src/errors/serialized-error.ts +9 -0
- package/src/factory-functions.test.ts +4 -2
- package/src/function/function-meta.types.ts +151 -0
- package/src/function/function-runner.test.ts +4 -2
- package/src/function/function-runner.ts +47 -14
- package/src/function/functions.types.ts +11 -7
- package/src/function/index.ts +24 -5
- package/src/function/list.types.ts +1 -3
- package/src/middleware/auth-apikey.ts +4 -2
- package/src/middleware/auth-bearer.test.ts +1 -1
- package/src/middleware/auth-bearer.ts +4 -2
- package/src/middleware/auth-cookie.ts +4 -1
- package/src/middleware/cors.test.ts +126 -5
- package/src/middleware/cors.ts +19 -8
- package/src/middleware/index.ts +16 -0
- package/src/middleware/middleware-factories.ts +62 -0
- package/src/middleware/middleware.types.ts +61 -0
- package/src/middleware/remote-auth.test.ts +1 -1
- package/src/middleware/remote-auth.ts +1 -1
- package/src/middleware/telemetry.ts +4 -2
- package/src/middleware-runner.test.ts +2 -3
- package/src/middleware-runner.ts +2 -2
- package/src/no-root-barrel.test.ts +114 -0
- package/src/permissions.ts +2 -4
- package/src/pikku-state.ts +3 -1
- package/src/public-surface.json +56 -241
- package/src/public-surface.json.README +3 -3
- package/src/public-surface.test.ts +5 -5
- package/src/remote.test.ts +1 -1
- package/src/removed-legacy-exports.test.ts +5 -1
- package/src/services/audit-service.ts +1 -1
- package/src/services/credential-wire-service.ts +1 -1
- package/src/services/email-service.ts +2 -4
- package/src/services/file-scenario-run-store.test.ts +349 -0
- package/src/services/file-scenario-run-store.ts +282 -0
- package/src/services/in-memory-workflow-service.ts +1 -1
- package/src/services/index.ts +13 -1
- package/src/services/local-content-request-handler.ts +1 -2
- package/src/services/local-secrets.ts +1 -1
- package/src/services/logger.ts +7 -7
- package/src/services/meta-service.ts +2 -2
- package/src/services/queue-webhook-service.test.ts +1 -1
- package/src/services/scoped-secret-service.ts +1 -1
- package/src/services/secret-service.ts +1 -1
- package/src/services/typed-secret-service.test.ts +52 -0
- package/src/services/typed-secret-service.ts +26 -2
- package/src/services/webhook-service.ts +1 -1
- package/src/services/workflow-service.ts +2 -1
- package/src/template-alias-surface.test.ts +240 -0
- package/src/testing/index.ts +1 -0
- package/src/types/core.types.ts +33 -285
- package/src/types/index.ts +2 -0
- package/src/types/state.types.ts +6 -5
- package/src/types/typed-credentials.test.ts +72 -0
- package/src/utils.ts +34 -0
- package/src/wirings/{rpc → addon}/addon-scopes.test.ts +1 -1
- package/src/wirings/addon/index.ts +12 -0
- package/src/wirings/{rpc → addon}/remote-addon-auth.ts +4 -1
- package/src/wirings/{rpc → addon}/wire-addon.ts +37 -2
- package/src/wirings/agent/agent-prepare.ts +8 -5
- package/src/wirings/agent/agent-runner.ts +2 -3
- package/src/wirings/agent/agent-stream.ts +2 -3
- package/src/wirings/agent/agent-utils.ts +19 -0
- package/src/wirings/agent/agent.types.ts +3 -3
- package/src/wirings/agent/index.ts +1 -0
- package/src/wirings/agent/voice-input.ts +1 -1
- package/src/wirings/agent/voice-output.test.ts +2 -4
- package/src/wirings/agent/voice-output.ts +1 -1
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +145 -0
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +60 -0
- package/src/wirings/agent-scorer/agent-scorer.ts +8 -0
- package/src/wirings/agent-scorer/agent-scorer.types.ts +21 -0
- package/src/wirings/agent-scorer/index.ts +1 -0
- package/src/wirings/channel/channel-common.ts +4 -2
- package/src/wirings/channel/channel-handler.ts +2 -5
- package/src/wirings/channel/channel-middleware-runner.ts +1 -1
- package/src/wirings/channel/channel-rpc.types.ts +1 -5
- package/src/wirings/channel/channel.types.ts +1 -2
- package/src/wirings/channel/local/local-channel-runner.test.ts +1 -2
- package/src/wirings/channel/serverless/index.ts +1 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +2 -2
- package/src/wirings/cli/channel/index.ts +1 -3
- package/src/wirings/cli/cli-runner.test.ts +1 -1
- package/src/wirings/cli/cli-runner.ts +11 -7
- package/src/wirings/cli/cli.types.ts +24 -3
- package/src/wirings/cli/command-parser.test.ts +388 -1
- package/src/wirings/cli/command-parser.ts +189 -29
- package/src/wirings/gateway/gateway-runner.test.ts +1 -2
- package/src/wirings/gateway/gateway-runner.ts +3 -6
- package/src/wirings/gateway/gateway.types.ts +5 -4
- package/src/wirings/http/http-routes.test.ts +1 -2
- package/src/wirings/http/http-runner-addon-ref.test.ts +238 -0
- package/src/wirings/http/http-runner.test.ts +3 -8
- package/src/wirings/http/http-runner.ts +9 -3
- package/src/wirings/http/http.types.ts +3 -12
- package/src/wirings/http/index.ts +1 -0
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +3 -2
- package/src/wirings/mcp/mcp-runner.test.ts +1 -1
- package/src/wirings/mcp/mcp.types.ts +1 -2
- package/src/wirings/persona/index.ts +1 -4
- package/src/wirings/persona/persona.types.ts +14 -0
- package/src/wirings/queue/queue-identity.test.ts +1 -1
- package/src/wirings/queue/queue.types.ts +2 -6
- package/src/wirings/queue/signed-queue-service.ts +1 -1
- package/src/wirings/rpc/index.ts +0 -12
- package/src/wirings/rpc/rpc-runner.test.ts +4 -4
- package/src/wirings/rpc/rpc-runner.ts +3 -3
- package/src/wirings/scheduler/scheduler.types.ts +2 -5
- package/src/wirings/scope/index.ts +1 -0
- package/src/wirings/secret/secret.types.ts +10 -0
- package/src/wirings/secret/validate-secret-definitions.test.ts +23 -0
- package/src/wirings/secret/validate-secret-definitions.ts +2 -0
- package/src/wirings/variable/validate-variable-definitions.test.ts +23 -0
- package/src/wirings/variable/validate-variable-definitions.ts +2 -0
- package/src/wirings/variable/variable.types.ts +9 -0
- package/src/wirings/virtual-user/index.ts +1 -4
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +1 -1
- package/src/wirings/virtual-user/virtual-user-derive.ts +1 -1
- package/src/wirings/virtual-user/virtual-user.types.ts +1 -5
- package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +569 -0
- package/src/wirings/workflow/graph/graph-foreach.test.ts +626 -0
- package/src/wirings/workflow/graph/graph-node.ts +16 -1
- package/src/wirings/workflow/graph/graph-runner.ts +387 -61
- package/src/wirings/workflow/graph/workflow-graph.types.ts +28 -3
- package/src/wirings/workflow/index.ts +8 -0
- package/src/wirings/workflow/pikku-scenario-service.ts +59 -19
- package/src/wirings/workflow/pikku-workflow-service.ts +6 -8
- package/src/wirings/workflow/run-timeline.ts +1 -1
- package/src/wirings/workflow/scenario-expectations.test.ts +28 -13
- package/src/wirings/workflow/scenario-run.types.ts +186 -0
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +32 -7
- package/src/wirings/workflow/scenario-step.types.ts +27 -12
- package/src/wirings/workflow/workflow-approval-policy.test.ts +117 -47
- package/src/wirings/workflow/workflow-approval.ts +2 -1
- package/src/wirings/workflow/workflow-run-engine.types.ts +2 -1
- package/src/wirings/workflow/workflow.types.ts +4 -12
- package/src/wirings-stay-decoupled.test.ts +6 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.type-tests.json +3 -2
- package/dist/ecosystem/ai-agent.d.ts +0 -18
- package/dist/ecosystem/ai-agent.js +0 -6
- package/dist/ecosystem/ai-scorer.d.ts +0 -12
- package/dist/ecosystem/ai-scorer.js +0 -5
- package/dist/services/ai-agent-runner-service.d.ts +0 -220
- package/dist/services/ai-run-state-service.d.ts +0 -29
- package/dist/services/ai-storage-service.d.ts +0 -18
- package/dist/services/in-memory-ai-run-state-service.d.ts +0 -19
- package/dist/services/in-memory-ai-run-state-service.js +0 -54
- package/dist/testing/service-tests/ai-storage-service-tests.d.ts +0 -3
- package/dist/testing/service-tests/ai-storage-service-tests.js +0 -302
- package/dist/wirings/ai-agent/agent-rpc.d.ts +0 -15
- package/dist/wirings/ai-agent/agent-rpc.js +0 -53
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -79
- package/dist/wirings/ai-agent/ai-agent-agui.js +0 -327
- package/dist/wirings/ai-agent/ai-agent-finalize.d.ts +0 -58
- package/dist/wirings/ai-agent/ai-agent-finalize.js +0 -138
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +0 -35
- package/dist/wirings/ai-agent/ai-agent-helpers.js +0 -47
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +0 -153
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +0 -257
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +0 -42
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -333
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -16
- package/dist/wirings/ai-agent/ai-agent-model-config.js +0 -51
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +0 -117
- package/dist/wirings/ai-agent/ai-agent-prepare.js +0 -728
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +0 -16
- package/dist/wirings/ai-agent/ai-agent-registry.js +0 -51
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +0 -7
- package/dist/wirings/ai-agent/ai-agent-runner.js +0 -580
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +0 -41
- package/dist/wirings/ai-agent/ai-agent-stream.js +0 -1029
- package/dist/wirings/ai-agent/ai-agent-turn.d.ts +0 -57
- package/dist/wirings/ai-agent/ai-agent-turn.js +0 -82
- package/dist/wirings/ai-agent/ai-agent-utils.d.ts +0 -1
- package/dist/wirings/ai-agent/ai-agent-utils.js +0 -1
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +0 -625
- package/dist/wirings/ai-agent/index.d.ts +0 -12
- package/dist/wirings/ai-agent/index.js +0 -10
- package/dist/wirings/ai-agent/voice-input.d.ts +0 -69
- package/dist/wirings/ai-agent/voice-input.js +0 -150
- package/dist/wirings/ai-agent/voice-output.d.ts +0 -85
- package/dist/wirings/ai-agent/voice-output.js +0 -196
- package/dist/wirings/ai-scorer/ai-scorer-grade.d.ts +0 -26
- package/dist/wirings/ai-scorer/ai-scorer-grade.js +0 -33
- package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +0 -17
- package/dist/wirings/ai-scorer/ai-scorer-judge.js +0 -92
- package/dist/wirings/ai-scorer/ai-scorer-live.d.ts +0 -15
- package/dist/wirings/ai-scorer/ai-scorer-live.js +0 -38
- package/dist/wirings/ai-scorer/ai-scorer-registry.d.ts +0 -18
- package/dist/wirings/ai-scorer/ai-scorer-registry.js +0 -46
- package/dist/wirings/ai-scorer/ai-scorer-sampling.d.ts +0 -8
- package/dist/wirings/ai-scorer/ai-scorer-sampling.js +0 -31
- package/dist/wirings/ai-scorer/ai-scorer-snapshots.d.ts +0 -10
- package/dist/wirings/ai-scorer/ai-scorer-snapshots.js +0 -40
- package/dist/wirings/ai-scorer/ai-scorer-worker.d.ts +0 -15
- package/dist/wirings/ai-scorer/ai-scorer-worker.js +0 -58
- package/dist/wirings/ai-scorer/ai-scorer.d.ts +0 -39
- package/dist/wirings/ai-scorer/ai-scorer.js +0 -40
- package/dist/wirings/ai-scorer/ai-scorer.types.d.ts +0 -90
- package/dist/wirings/ai-scorer/ai-scorer.types.js +0 -4
- package/dist/wirings/ai-scorer/index.d.ts +0 -6
- package/dist/wirings/ai-scorer/index.js +0 -5
- package/src/ecosystem/agent-scorer.ts +0 -24
- package/src/ecosystem/agent.ts +0 -42
- package/src/ecosystem/channel/local.ts +0 -1
- package/src/ecosystem/channel.ts +0 -22
- package/src/ecosystem/cli/channel.ts +0 -25
- package/src/ecosystem/cli.ts +0 -21
- package/src/ecosystem/credential.ts +0 -10
- package/src/ecosystem/dev.ts +0 -12
- package/src/ecosystem/function.ts +0 -28
- package/src/ecosystem/gateway.ts +0 -4
- package/src/ecosystem/hmac.ts +0 -1
- package/src/ecosystem/http.ts +0 -22
- package/src/ecosystem/mcp.ts +0 -17
- package/src/ecosystem/middleware.ts +0 -27
- package/src/ecosystem/node-host-resolver.ts +0 -1
- package/src/ecosystem/node.ts +0 -5
- package/src/ecosystem/oauth2.ts +0 -4
- package/src/ecosystem/persona.ts +0 -30
- package/src/ecosystem/queue.ts +0 -23
- package/src/ecosystem/remote.ts +0 -9
- package/src/ecosystem/role.ts +0 -13
- package/src/ecosystem/rpc.ts +0 -7
- package/src/ecosystem/safe-fetch.ts +0 -8
- package/src/ecosystem/scenario.ts +0 -32
- package/src/ecosystem/scheduler.ts +0 -5
- package/src/ecosystem/schema.ts +0 -1
- package/src/ecosystem/scope.ts +0 -14
- package/src/ecosystem/secret.ts +0 -15
- package/src/ecosystem/services/istanbul-coverage.ts +0 -1
- package/src/ecosystem/services/local-content-request-handler.ts +0 -16
- package/src/ecosystem/services/local-content.ts +0 -1
- package/src/ecosystem/services/v8-coverage.ts +0 -1
- package/src/ecosystem/services.ts +0 -82
- package/src/ecosystem/trigger.ts +0 -7
- package/src/ecosystem/types.ts +0 -34
- package/src/ecosystem/variable.ts +0 -14
- package/src/ecosystem/virtual-user.ts +0 -48
- package/src/ecosystem/workflow.ts +0 -68
- package/src/ecosystem.ts +0 -40
- package/src/index.ts +0 -244
- /package/dist/{services/ai-agent-runner-service.js → bootstrap-compat/root.js} +0 -0
- /package/dist/{services/ai-run-state-service.js → classification/data-classification.js} +0 -0
- /package/dist/{services/ai-storage-service.js → errors/serialized-error.js} +0 -0
- /package/dist/{wirings/ai-agent/ai-agent.types.js → function/function-meta.types.js} +0 -0
- /package/src/{column-form.ts → classification/column-form.ts} +0 -0
- /package/src/{pikku-request.test.ts → function/pikku-request.test.ts} +0 -0
- /package/src/{pikku-request.ts → function/pikku-request.ts} +0 -0
- /package/src/wirings/{rpc → addon}/addon-auth-tags.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/addon-runner.ts +0 -0
- /package/src/wirings/{rpc → addon}/addon-secrets.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/wire-addon.test.ts +0 -0
- /package/src/wirings/{rpc → addon}/wire-remote-addon.ts +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pikkuState } from '../../pikku-state.js';
|
|
1
2
|
/** "from-plan" → "fromPlan"; the parser accepts either spelling. */
|
|
2
3
|
function toCamelCase(str) {
|
|
3
4
|
return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
@@ -57,6 +58,114 @@ function warnUnknownOption(typed, availableOptions, result) {
|
|
|
57
58
|
* one error per character.
|
|
58
59
|
*/
|
|
59
60
|
const MAX_SHORT_FLAG_CLUSTER = 64;
|
|
61
|
+
function resolveOptionType(optionDef) {
|
|
62
|
+
if (optionDef.type) {
|
|
63
|
+
return optionDef.type;
|
|
64
|
+
}
|
|
65
|
+
if (typeof optionDef.default === 'boolean') {
|
|
66
|
+
return 'boolean';
|
|
67
|
+
}
|
|
68
|
+
if (typeof optionDef.default === 'number') {
|
|
69
|
+
return 'number';
|
|
70
|
+
}
|
|
71
|
+
return 'string';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* A command's options are keys of its function's input, so the input schema
|
|
75
|
+
* already records what each one is. Reading it here means a declaration never
|
|
76
|
+
* has to repeat — or contradict — the type the function is validated against.
|
|
77
|
+
* An explicit `type` still wins, and an option the schema says nothing about
|
|
78
|
+
* (a program-level option belonging to no function input) is left untouched.
|
|
79
|
+
*/
|
|
80
|
+
function applySchemaOptionTypes(options, commandMeta) {
|
|
81
|
+
const properties = commandInputProperties(commandMeta);
|
|
82
|
+
if (!properties) {
|
|
83
|
+
return options;
|
|
84
|
+
}
|
|
85
|
+
const typed = { ...options };
|
|
86
|
+
for (const [name, option] of Object.entries(typed)) {
|
|
87
|
+
if (option.type) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const schemaType = optionTypeFromSchema(properties[name]);
|
|
91
|
+
if (schemaType) {
|
|
92
|
+
typed[name] = { ...option, type: schemaType };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return typed;
|
|
96
|
+
}
|
|
97
|
+
function commandInputProperties(commandMeta) {
|
|
98
|
+
const funcMeta = pikkuState(null, 'function', 'meta')[commandMeta.pikkuFuncId];
|
|
99
|
+
const schemaName = funcMeta?.inputSchemaName;
|
|
100
|
+
if (!schemaName) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const schema = pikkuState(funcMeta.packageName ?? null, 'misc', 'schemas').get(schemaName);
|
|
104
|
+
const properties = schema?.properties;
|
|
105
|
+
return properties && typeof properties === 'object' ? properties : null;
|
|
106
|
+
}
|
|
107
|
+
function optionTypeFromSchema(property) {
|
|
108
|
+
if (!property || typeof property !== 'object') {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
// An optional field can arrive as a union with null, which is not a shape the
|
|
112
|
+
// parser can read a value into.
|
|
113
|
+
const declared = Array.isArray(property.type)
|
|
114
|
+
? property.type.filter((entry) => entry !== 'null')[0]
|
|
115
|
+
: property.type;
|
|
116
|
+
switch (declared) {
|
|
117
|
+
case 'array':
|
|
118
|
+
return 'string[]';
|
|
119
|
+
case 'number':
|
|
120
|
+
case 'integer':
|
|
121
|
+
return 'number';
|
|
122
|
+
case 'boolean':
|
|
123
|
+
return 'boolean';
|
|
124
|
+
case 'string':
|
|
125
|
+
return 'string';
|
|
126
|
+
default:
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const BOOLEAN_LITERALS = new Map([
|
|
131
|
+
['true', true],
|
|
132
|
+
['false', false],
|
|
133
|
+
['1', true],
|
|
134
|
+
['0', false],
|
|
135
|
+
['yes', true],
|
|
136
|
+
['no', false],
|
|
137
|
+
]);
|
|
138
|
+
/**
|
|
139
|
+
* A boolean option is a flag, but `--watch false` is how scripts and CI turn a
|
|
140
|
+
* default-on flag off, so an explicit literal directly after the flag is taken
|
|
141
|
+
* as its value rather than left behind as a positional.
|
|
142
|
+
*/
|
|
143
|
+
function readBooleanLiteral(raw) {
|
|
144
|
+
if (raw === undefined) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
return BOOLEAN_LITERALS.get(raw.toLowerCase());
|
|
148
|
+
}
|
|
149
|
+
function readOptionValue(raw, optionDef) {
|
|
150
|
+
if (resolveOptionType(optionDef) !== 'string[]') {
|
|
151
|
+
return parseOptionValue(raw, optionDef);
|
|
152
|
+
}
|
|
153
|
+
return raw
|
|
154
|
+
.split(',')
|
|
155
|
+
.map((item) => item.trim())
|
|
156
|
+
.filter((item) => item.length > 0)
|
|
157
|
+
.map((item) => parseOptionValue(item, optionDef));
|
|
158
|
+
}
|
|
159
|
+
/** A repeated array option accumulates rather than replacing. */
|
|
160
|
+
function assignOptionValue(optionArgs, key, value) {
|
|
161
|
+
const existing = optionArgs[key];
|
|
162
|
+
if (Array.isArray(existing) && Array.isArray(value)) {
|
|
163
|
+
optionArgs[key] = [...existing, ...value];
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
optionArgs[key] = value;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
60
169
|
export function parseCLIArguments(args, programName, allMeta) {
|
|
61
170
|
const result = {
|
|
62
171
|
program: programName,
|
|
@@ -131,7 +240,7 @@ export function parseCLIArguments(args, programName, allMeta) {
|
|
|
131
240
|
result.errors.push(`Missing subcommand: ${result.commandPath.join(' ')}`);
|
|
132
241
|
return result;
|
|
133
242
|
}
|
|
134
|
-
const availableOptions = collectAvailableOptions(meta, result.commandPath);
|
|
243
|
+
const availableOptions = applySchemaOptionTypes(collectAvailableOptions(meta, result.commandPath), commandMeta);
|
|
135
244
|
const positionalArgs = [];
|
|
136
245
|
const optionArgs = {};
|
|
137
246
|
while (currentIndex < args.length) {
|
|
@@ -142,8 +251,9 @@ export function parseCLIArguments(args, programName, allMeta) {
|
|
|
142
251
|
: undefined;
|
|
143
252
|
const equalIndex = arg.indexOf('=');
|
|
144
253
|
if (negatedKey &&
|
|
145
|
-
|
|
146
|
-
|
|
254
|
+
availableOptions[negatedKey] &&
|
|
255
|
+
resolveOptionType(availableOptions[negatedKey]) === 'boolean') {
|
|
256
|
+
// Requiring a boolean type keeps a literal `--no-something` option
|
|
147
257
|
// name parsing as itself rather than as a negation.
|
|
148
258
|
optionArgs[negatedKey] = false;
|
|
149
259
|
}
|
|
@@ -154,7 +264,12 @@ export function parseCLIArguments(args, programName, allMeta) {
|
|
|
154
264
|
warnUnknownOption(arg.slice(2, equalIndex), availableOptions, result);
|
|
155
265
|
}
|
|
156
266
|
const value = arg.slice(equalIndex + 1);
|
|
157
|
-
|
|
267
|
+
if (optionDef) {
|
|
268
|
+
assignOptionValue(optionArgs, key, readOptionValue(value, optionDef));
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
optionArgs[key] = parseOptionValue(value, optionDef);
|
|
272
|
+
}
|
|
158
273
|
}
|
|
159
274
|
else {
|
|
160
275
|
const key = toCamelCase(arg.slice(2));
|
|
@@ -162,21 +277,31 @@ export function parseCLIArguments(args, programName, allMeta) {
|
|
|
162
277
|
if (!optionDef) {
|
|
163
278
|
warnUnknownOption(arg.slice(2), availableOptions, result);
|
|
164
279
|
}
|
|
165
|
-
if (optionDef
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
!args[currentIndex].startsWith('-')) {
|
|
170
|
-
values.push(parseOptionValue(args[currentIndex], optionDef));
|
|
280
|
+
if (!optionDef) {
|
|
281
|
+
// With no spec there is nothing to consult, so the lookahead
|
|
282
|
+
// heuristic is all that is left.
|
|
283
|
+
if (currentIndex + 1 < args.length &&
|
|
284
|
+
!args[currentIndex + 1].startsWith('-')) {
|
|
171
285
|
currentIndex++;
|
|
286
|
+
optionArgs[key] = parseOptionValue(args[currentIndex], optionDef);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
optionArgs[key] = true;
|
|
172
290
|
}
|
|
173
|
-
currentIndex--; // Back up one since we'll increment at loop end
|
|
174
|
-
optionArgs[key] = values;
|
|
175
291
|
}
|
|
176
|
-
else if (
|
|
177
|
-
|
|
292
|
+
else if (resolveOptionType(optionDef) === 'boolean') {
|
|
293
|
+
const literal = readBooleanLiteral(args[currentIndex + 1]);
|
|
294
|
+
if (literal === undefined) {
|
|
295
|
+
optionArgs[key] = true;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
currentIndex++;
|
|
299
|
+
optionArgs[key] = literal;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else if (currentIndex + 1 < args.length) {
|
|
178
303
|
currentIndex++;
|
|
179
|
-
optionArgs
|
|
304
|
+
assignOptionValue(optionArgs, key, readOptionValue(args[currentIndex], optionDef));
|
|
180
305
|
}
|
|
181
306
|
else {
|
|
182
307
|
optionArgs[key] = true;
|
|
@@ -193,12 +318,21 @@ export function parseCLIArguments(args, programName, allMeta) {
|
|
|
193
318
|
const shortFlag = arg[i];
|
|
194
319
|
const longOption = findLongOption(shortFlag, availableOptions);
|
|
195
320
|
if (longOption) {
|
|
321
|
+
const optionDef = availableOptions[longOption];
|
|
196
322
|
// Only the last flag in a cluster can take a value.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
323
|
+
const isLast = i === arg.length - 1;
|
|
324
|
+
const literal = isLast && resolveOptionType(optionDef) === 'boolean'
|
|
325
|
+
? readBooleanLiteral(args[currentIndex + 1])
|
|
326
|
+
: undefined;
|
|
327
|
+
if (literal !== undefined) {
|
|
328
|
+
currentIndex++;
|
|
329
|
+
optionArgs[longOption] = literal;
|
|
330
|
+
}
|
|
331
|
+
else if (isLast &&
|
|
332
|
+
resolveOptionType(optionDef) !== 'boolean' &&
|
|
333
|
+
currentIndex + 1 < args.length) {
|
|
200
334
|
currentIndex++;
|
|
201
|
-
optionArgs
|
|
335
|
+
assignOptionValue(optionArgs, longOption, readOptionValue(args[currentIndex], optionDef));
|
|
202
336
|
}
|
|
203
337
|
else {
|
|
204
338
|
optionArgs[longOption] = true;
|
|
@@ -272,11 +406,11 @@ function parseOptionValue(value, optionDef) {
|
|
|
272
406
|
return parseFloat(value);
|
|
273
407
|
return value;
|
|
274
408
|
}
|
|
275
|
-
const
|
|
276
|
-
if (
|
|
277
|
-
return value
|
|
409
|
+
const optionType = resolveOptionType(optionDef);
|
|
410
|
+
if (optionType === 'boolean') {
|
|
411
|
+
return readBooleanLiteral(value) ?? false;
|
|
278
412
|
}
|
|
279
|
-
if (
|
|
413
|
+
if (optionType === 'number') {
|
|
280
414
|
return parseFloat(value);
|
|
281
415
|
}
|
|
282
416
|
if (optionDef.choices && !optionDef.choices.includes(value)) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { CommonWireMeta,
|
|
1
|
+
import type { CommonWireMeta, CoreSingletonServices } from '../../types/core.types.js';
|
|
2
|
+
import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup } from '../../middleware/middleware.types.js';
|
|
2
3
|
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js';
|
|
3
4
|
import type { PikkuHTTPRequest } from '../http/http.types.js';
|
|
4
5
|
export interface GatewayAttachment {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CoreHTTPFunctionWiring, RunHTTPWiringOptions, PikkuHTTP, PikkuHTTPRequest, PikkuHTTPResponse } from './http.types.js';
|
|
2
2
|
import type { CorePikkuFunction, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
3
|
-
import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup } from '../../
|
|
3
|
+
import type { CorePikkuMiddleware, CorePikkuMiddlewareGroup } from '../../middleware/middleware.types.js';
|
|
4
4
|
import { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js';
|
|
5
5
|
export declare const addHTTPMiddleware: <PikkuMiddleware extends CorePikkuMiddleware>(pattern: string, middleware: CorePikkuMiddlewareGroup, packageName?: string | null) => CorePikkuMiddlewareGroup;
|
|
6
6
|
export declare const wireHTTP: <In, Out, Route extends string, PikkuFunction extends CorePikkuFunction<In, Out> = CorePikkuFunction<In, Out>, PikkuFunctionSessionless extends CorePikkuFunctionSessionless<In, Out> = CorePikkuFunctionSessionless<In, Out>, PikkuPermissionGroup extends CorePikkuPermission<In> = CorePikkuPermission<In>, PikkuMiddleware extends CorePikkuMiddleware = CorePikkuMiddleware>(httpWiring: CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction, PikkuFunctionSessionless, PikkuPermissionGroup, PikkuMiddleware>) => void;
|
|
@@ -42,7 +42,7 @@ export const wireHTTP = (httpWiring) => {
|
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
if (httpWiring.func) {
|
|
45
|
-
addFunction(routeMeta.pikkuFuncId, httpWiring.func);
|
|
45
|
+
addFunction(routeMeta.pikkuFuncId, httpWiring.func, routeMeta.packageName ?? null);
|
|
46
46
|
}
|
|
47
47
|
const routes = pikkuState(null, 'http', 'routes');
|
|
48
48
|
if (!routes.has(httpWiring.method)) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SerializeOptions } from 'cookie';
|
|
2
2
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
3
|
-
import type {
|
|
3
|
+
import type { CommonWireMeta } from '../../types/core.types.js';
|
|
4
|
+
import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js';
|
|
4
5
|
import type { CorePikkuFunction, CorePikkuFunctionSessionless, CorePikkuPermission, CorePikkuFunctionConfig } from '../../function/functions.types.js';
|
|
5
6
|
type ExtractHTTPWiringParams<S extends string> = S extends `${string}:${infer Param}/${infer Rest}` ? Param | ExtractHTTPWiringParams<`/${Rest}`> : S extends `${string}:${infer Param}` ? Param : never;
|
|
6
7
|
export type AssertHTTPWiringParams<In, HTTPWiring extends string> = ExtractHTTPWiringParams<HTTPWiring> extends keyof In ? unknown : [
|
|
@@ -104,7 +105,6 @@ export type HTTPWiringMeta = CommonWireMeta & {
|
|
|
104
105
|
* join wrong reads an open route as a closed one.
|
|
105
106
|
*/
|
|
106
107
|
requiresSession?: boolean;
|
|
107
|
-
refTarget?: string;
|
|
108
108
|
params?: string[];
|
|
109
109
|
query?: string[];
|
|
110
110
|
inputTypes?: HTTPFunctionMetaInputTypes;
|
|
@@ -4,4 +4,5 @@ export { logRoutes } from './log-http-routes.js';
|
|
|
4
4
|
export { fetch, fetchData, wireHTTP, addHTTPMiddleware } from './http-runner.js';
|
|
5
5
|
export { wireHTTPRoutes, defineHTTPRoutes } from './http-routes.js';
|
|
6
6
|
export { toWebRequest, applyWebResponse } from './web-request.js';
|
|
7
|
+
export { httpRouter } from './routers/http-router.js';
|
|
7
8
|
export type { AssertHTTPWiringParams, CoreHTTPFunctionWiring, HTTPMethod, HTTPRouteBaseConfig, HTTPRouteContract, HTTPRouteMap, HTTPWiringsMeta, PikkuHTTP, PikkuHTTPRequest, PikkuHTTPResponse, PikkuQuery, RunHTTPWiringOptions, } from './http.types.js';
|
|
@@ -4,3 +4,4 @@ export { logRoutes } from './log-http-routes.js';
|
|
|
4
4
|
export { fetch, fetchData, wireHTTP, addHTTPMiddleware } from './http-runner.js';
|
|
5
5
|
export { wireHTTPRoutes, defineHTTPRoutes } from './http-routes.js';
|
|
6
6
|
export { toWebRequest, applyWebResponse } from './web-request.js';
|
|
7
|
+
export { httpRouter } from './routers/http-router.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parse as parseQuery } from 'picoquery';
|
|
2
|
-
import {
|
|
2
|
+
import { parseCookie } from 'cookie';
|
|
3
3
|
import { PayloadTooLargeError, UnprocessableContentError, } from '../../errors/errors.js';
|
|
4
4
|
export const DEFAULT_MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
5
5
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stringifySetCookie } from 'cookie';
|
|
2
2
|
export class PikkuFetchHTTPResponse {
|
|
3
3
|
#statusCode = 200;
|
|
4
4
|
#headers = new Headers();
|
|
@@ -95,7 +95,7 @@ export class PikkuFetchHTTPResponse {
|
|
|
95
95
|
return this;
|
|
96
96
|
}
|
|
97
97
|
toResponse(args) {
|
|
98
|
-
const cookieHeader = Array.from(this.#cookies.entries()).map(([name, { value, flags }]) =>
|
|
98
|
+
const cookieHeader = Array.from(this.#cookies.entries()).map(([name, { value, flags }]) => stringifySetCookie({ name, value, ...flags }, flags));
|
|
99
99
|
cookieHeader.forEach((cookie) => this.#headers.append('Set-Cookie', cookie));
|
|
100
100
|
return new Response(this.#body, {
|
|
101
101
|
...args,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission } from '../../function/functions.types.js';
|
|
2
|
-
import type { CorePikkuMiddleware, MiddlewareMetadata } from '../../
|
|
2
|
+
import type { CorePikkuMiddleware, MiddlewareMetadata } from '../../middleware/middleware.types.js';
|
|
3
3
|
/** "user/{userId}/post/{postId}" => "userId" | "postId" */
|
|
4
4
|
type ExtractMCPURIParams<S extends string> = S extends `${string}{${infer Param}}/${infer Rest}` ? Param | ExtractMCPURIParams<Rest> : S extends `${string}{${infer Param}}` ? Param : never;
|
|
5
5
|
/** Resolves to a tuple of error strings, not `never`, so the mismatch surfaces in the type error. */
|
|
@@ -3,7 +3,7 @@ export { isRunnablePersona, roleMismatchMessage, runnablePersonas, validateAndBu
|
|
|
3
3
|
export type { RoleVerification } from './validate-personas.js';
|
|
4
4
|
export { personaEnvironmentErrors, personaEnvironmentRefusal, } from './persona-environments.js';
|
|
5
5
|
export type { PersonaEnvironment, PersonaEnvironmentSubject, } from './persona-environments.js';
|
|
6
|
-
export { personaEmail, personaEmails
|
|
6
|
+
export { personaEmail, personaEmails } from './persona-email.js';
|
|
7
7
|
export type { MailboxAllowlist, PersonaMailbox, ReceivedEmail, } from './persona-mailbox.js';
|
|
8
8
|
export type { CorePersona, CorePersonas, PersonaAccountMeta, PersonaDefinitions, PersonaMeta, PersonasMeta, } from './persona.types.js';
|
|
9
9
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { definePersonas } from './define-personas.js';
|
|
2
2
|
export { isRunnablePersona, roleMismatchMessage, runnablePersonas, validateAndBuildPersonasMeta, verifyPersonaRoles, } from './validate-personas.js';
|
|
3
3
|
export { personaEnvironmentErrors, personaEnvironmentRefusal, } from './persona-environments.js';
|
|
4
|
-
export { personaEmail, personaEmails
|
|
4
|
+
export { personaEmail, personaEmails } from './persona-email.js';
|
|
5
5
|
/**
|
|
6
6
|
* Signing in as a persona and talking to a stage over HTTP.
|
|
7
7
|
*
|
|
@@ -105,6 +105,18 @@ export type CorePersona = {
|
|
|
105
105
|
* into a flaky suite.
|
|
106
106
|
*/
|
|
107
107
|
runnable?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* The app this person signs into, when the product is more than one frontend.
|
|
110
|
+
*
|
|
111
|
+
* A person uses one of them — staff their app, customers theirs — and that is
|
|
112
|
+
* what decides where a browser step navigates: `/dashboard` is a different
|
|
113
|
+
* page in each, so the actor settles which one without the scenario saying.
|
|
114
|
+
* The runner takes the base url per app (`--app-url <app>=<url>`, or
|
|
115
|
+
* `appUrls` on the environment) and each actor browses against its own.
|
|
116
|
+
*
|
|
117
|
+
* Omitted is the normal case: one app, one url, nothing to say.
|
|
118
|
+
*/
|
|
119
|
+
app?: string;
|
|
108
120
|
};
|
|
109
121
|
/** Personas to declare, keyed by id. */
|
|
110
122
|
export type CorePersonas = Record<string, CorePersona>;
|
|
@@ -130,6 +142,8 @@ export type PersonaMeta = {
|
|
|
130
142
|
/** Absent means "everywhere but production", which is resolved, not stored. */
|
|
131
143
|
environments?: string[];
|
|
132
144
|
runnable: boolean;
|
|
145
|
+
/** The app this person signs into; picks their base url on a browser run. */
|
|
146
|
+
app?: string;
|
|
133
147
|
sourceFile?: string;
|
|
134
148
|
};
|
|
135
149
|
export type PersonaDefinitions = PersonaMeta[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
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
|
-
import type { Safe } from '../../secret-value.js';
|
|
4
|
+
import type { Safe } from '../../classification/secret-value.js';
|
|
5
5
|
export interface PikkuWorkerConfig {
|
|
6
6
|
name?: string;
|
|
7
7
|
/** Total worker concurrency. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Safe } from '../../secret-value.js';
|
|
1
|
+
import type { Safe } from '../../classification/secret-value.js';
|
|
2
2
|
import type { Logger } from '../../services/logger.js';
|
|
3
3
|
import type { SecretService } from '../../services/secret-service.js';
|
|
4
4
|
import type { JobOptions, QueueJob, QueueService } from './queue.types.js';
|
|
@@ -1,8 +1,2 @@
|
|
|
1
1
|
export { PikkuRPCService, rpcService, RPCNotFoundError, RemoteAddonConfigError, RemoteAddonRequestError, } from './rpc-runner.js';
|
|
2
|
-
export { resolveRemoteAddonToken, RemoteAddonAuthError, } from './remote-addon-auth.js';
|
|
3
|
-
export type { RemoteAddonAuthBinding } from './remote-addon-auth.js';
|
|
4
2
|
export type { PikkuRPC, RPCMeta } from './rpc-types.js';
|
|
5
|
-
export { wireAddon } from './wire-addon.js';
|
|
6
|
-
export type { WireAddonConfig } from './wire-addon.js';
|
|
7
|
-
export { wireRemoteAddon } from './wire-remote-addon.js';
|
|
8
|
-
export type { WireRemoteAddonConfig, RemoteAddonAuth, } from './wire-remote-addon.js';
|
|
@@ -1,4 +1 @@
|
|
|
1
1
|
export { PikkuRPCService, rpcService, RPCNotFoundError, RemoteAddonConfigError, RemoteAddonRequestError, } from './rpc-runner.js';
|
|
2
|
-
export { resolveRemoteAddonToken, RemoteAddonAuthError, } from './remote-addon-auth.js';
|
|
3
|
-
export { wireAddon } from './wire-addon.js';
|
|
4
|
-
export { wireRemoteAddon } from './wire-remote-addon.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CoreServices, PikkuRawWire } from '../../types/core.types.js';
|
|
2
2
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
3
|
-
import { type SecretValue } from '../../secret-value.js';
|
|
3
|
+
import { type SecretValue } from '../../classification/secret-value.js';
|
|
4
4
|
export type RemoteAddonAuthBinding = {
|
|
5
5
|
credentialId: string;
|
|
6
6
|
} | {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PikkuError, addError } from '../../errors/error-handler.js';
|
|
2
|
-
import { isSecretValue } from '../../secret-value.js';
|
|
2
|
+
import { isSecretValue, } from '../../classification/secret-value.js';
|
|
3
3
|
export class RemoteAddonAuthError extends PikkuError {
|
|
4
4
|
namespace;
|
|
5
5
|
constructor(namespace, detail) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { runPikkuFunc } from '../../function/function-runner.js';
|
|
2
|
-
import { addonInstanceForNamespace } from '
|
|
2
|
+
import { addonInstanceForNamespace } from '../addon/addon-runner.js';
|
|
3
3
|
import { pikkuState } from '../../pikku-state.js';
|
|
4
4
|
import { PikkuError, addError } from '../../errors/error-handler.js';
|
|
5
5
|
import { parseVersionedId } from '../../version.js';
|
|
6
|
-
import { resolveRemoteAddonToken } from '
|
|
6
|
+
import { resolveRemoteAddonToken } from '../addon/remote-addon-auth.js';
|
|
7
7
|
import { createAgentRPC } from '../agent/agent-rpc.js';
|
|
8
8
|
/**
|
|
9
9
|
* The session for a wire: read through `getSession` when a runner attached one,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { CoreUserSession,
|
|
1
|
+
import type { CoreUserSession, CommonWireMeta } from '../../types/core.types.js';
|
|
2
|
+
import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js';
|
|
2
3
|
import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
|
|
3
4
|
export type ScheduledTasksMeta<UserSession extends CoreUserSession = any> = Record<string, CommonWireMeta & {
|
|
4
5
|
name: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { defineScope } from './define-scope.js';
|
|
2
2
|
export { flattenScopeDefinitions, validateAndBuildScopeDefinitionsMeta, } from './validate-scope-definitions.js';
|
|
3
3
|
export type { CoreScopes, CoreScopeNode, FlatScope, ScopeDefinitionMeta, ScopeDefinitionsMeta, ScopeDefinitions, ScopeNodeMeta, } from './scope.types.js';
|
|
4
|
+
export { hasScopes, verifyScopes } from '../../scopes.js';
|
|
@@ -4,6 +4,15 @@ export type CoreSecret<T = unknown> = {
|
|
|
4
4
|
description?: string;
|
|
5
5
|
secretId: string;
|
|
6
6
|
schema: T;
|
|
7
|
+
/**
|
|
8
|
+
* A secret is REQUIRED by default because `getSecret` throws when the value is
|
|
9
|
+
* missing — a deploy without it is a runtime failure waiting to happen, so the
|
|
10
|
+
* deploy gate refuses it. Mark a secret `optional` when absence is a supported
|
|
11
|
+
* state the app handles (a feature that simply stays off): the generated map
|
|
12
|
+
* emits it as an optional property and `getSecret` resolves `undefined`
|
|
13
|
+
* instead of throwing.
|
|
14
|
+
*/
|
|
15
|
+
optional?: boolean;
|
|
7
16
|
/**
|
|
8
17
|
* Where a user goes to obtain this value — a provider's API-key page, a setup
|
|
9
18
|
* guide, an internal runbook. Consoles and deploy UIs surface it beside a
|
|
@@ -36,6 +45,7 @@ export type SecretDefinitionMeta = {
|
|
|
36
45
|
description?: string;
|
|
37
46
|
secretId: string;
|
|
38
47
|
schema?: Record<string, unknown> | string;
|
|
48
|
+
optional?: boolean;
|
|
39
49
|
docsUrl?: string;
|
|
40
50
|
oauth2?: OAuth2CredentialConfig;
|
|
41
51
|
rotationPeriod?: string;
|
|
@@ -32,6 +32,7 @@ export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup)
|
|
|
32
32
|
description: def.description,
|
|
33
33
|
secretId: def.secretId,
|
|
34
34
|
schema: def.schema,
|
|
35
|
+
optional: def.optional,
|
|
35
36
|
oauth2: def.oauth2,
|
|
36
37
|
rotationPeriod: def.rotationPeriod,
|
|
37
38
|
allowedHosts: def.allowedHosts,
|
|
@@ -49,6 +50,7 @@ export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup)
|
|
|
49
50
|
description: def.description,
|
|
50
51
|
secretId: def.secretId,
|
|
51
52
|
schema: def.schema,
|
|
53
|
+
optional: def.optional,
|
|
52
54
|
oauth2: def.oauth2,
|
|
53
55
|
rotationPeriod: def.rotationPeriod,
|
|
54
56
|
allowedHosts: def.allowedHosts,
|
|
@@ -24,6 +24,7 @@ export function validateAndBuildVariableDefinitionsMeta(definitions, schemaLooku
|
|
|
24
24
|
description: def.description,
|
|
25
25
|
variableId: def.variableId,
|
|
26
26
|
schema: def.schema,
|
|
27
|
+
required: def.required,
|
|
27
28
|
docsUrl: def.docsUrl,
|
|
28
29
|
sourceFile: def.sourceFile,
|
|
29
30
|
};
|
|
@@ -38,6 +39,7 @@ export function validateAndBuildVariableDefinitionsMeta(definitions, schemaLooku
|
|
|
38
39
|
description: def.description,
|
|
39
40
|
variableId: def.variableId,
|
|
40
41
|
schema: def.schema,
|
|
42
|
+
required: def.required,
|
|
41
43
|
docsUrl: def.docsUrl,
|
|
42
44
|
sourceFile: def.sourceFile,
|
|
43
45
|
};
|
|
@@ -4,6 +4,14 @@ export type CoreVariable<T = unknown> = {
|
|
|
4
4
|
description?: string;
|
|
5
5
|
variableId: string;
|
|
6
6
|
schema: T;
|
|
7
|
+
/**
|
|
8
|
+
* A variable is OPTIONAL by default because `variables.get` returns
|
|
9
|
+
* `T | undefined` and never throws — every caller already handles absence, so
|
|
10
|
+
* a deploy gate that blocks on one contradicts the API. Mark a variable
|
|
11
|
+
* `required` for the few whose absence genuinely breaks the app; only those
|
|
12
|
+
* block a deploy.
|
|
13
|
+
*/
|
|
14
|
+
required?: boolean;
|
|
7
15
|
docsUrl?: string;
|
|
8
16
|
};
|
|
9
17
|
export type VariableDefinitionMeta = {
|
|
@@ -12,6 +20,7 @@ export type VariableDefinitionMeta = {
|
|
|
12
20
|
description?: string;
|
|
13
21
|
variableId: string;
|
|
14
22
|
schema?: Record<string, unknown> | string;
|
|
23
|
+
required?: boolean;
|
|
15
24
|
docsUrl?: string;
|
|
16
25
|
sourceFile?: string;
|
|
17
26
|
};
|
|
@@ -24,6 +24,6 @@ export type { VirtualUserRunOutcome, VirtualUserRunRecord, VirtualUserRunStart,
|
|
|
24
24
|
export { DISPOSITIONS, dispositionProfile, type DispositionProfile, type VirtualUserTuning, } from './virtual-user-dispositions.js';
|
|
25
25
|
export { catalogueClassification, catalogueLookup, isReadOnly, reachableCatalogue, unreachableCatalogue, } from './virtual-user-catalogue.js';
|
|
26
26
|
export { type AgentReachability, type ReachableAgent, } from './virtual-user-agents.js';
|
|
27
|
-
export { IntentStack, intentsForPersona
|
|
27
|
+
export { IntentStack, intentsForPersona } from './virtual-user-intents.js';
|
|
28
28
|
export { deriveCatalogue, deriveIntents, type SchemaMap, } from './virtual-user-derive.js';
|
|
29
29
|
export { personaVirtualUserTarget, type PersonaTargetOptions, } from './virtual-user-target.js';
|
|
@@ -3,6 +3,6 @@ export { runVirtualUser, } from './run-virtual-user.js';
|
|
|
3
3
|
export { personaScopes, prepareVirtualUserRun, } from './prepare-virtual-user-run.js';
|
|
4
4
|
export { DISPOSITIONS, dispositionProfile, } from './virtual-user-dispositions.js';
|
|
5
5
|
export { catalogueClassification, catalogueLookup, isReadOnly, reachableCatalogue, unreachableCatalogue, } from './virtual-user-catalogue.js';
|
|
6
|
-
export { IntentStack, intentsForPersona
|
|
6
|
+
export { IntentStack, intentsForPersona } from './virtual-user-intents.js';
|
|
7
7
|
export { deriveCatalogue, deriveIntents, } from './virtual-user-derive.js';
|
|
8
8
|
export { personaVirtualUserTarget, } from './virtual-user-target.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FunctionsMeta } from '../../
|
|
1
|
+
import type { FunctionsMeta } from '../../function/function-meta.types.js';
|
|
2
2
|
import type { WorkflowsMeta } from '../workflow/workflow.types.js';
|
|
3
3
|
import type { SystemRoleDefinitions, SystemRoleDefinitionsMeta } from '../role/role.types.js';
|
|
4
4
|
import { type SchemaMap } from './virtual-user-derive.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FunctionsMeta } from '../../
|
|
1
|
+
import type { FunctionsMeta } from '../../function/function-meta.types.js';
|
|
2
2
|
import type { WorkflowsMeta } from '../workflow/workflow.types.js';
|
|
3
3
|
import type { ApiCatalogueEntry, IntentSource } from './virtual-user.types.js';
|
|
4
4
|
/** A generated JSON schema, keyed by the name the function meta refers to. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GraphNodeConfig, NextConfig, RefValue } from './workflow-graph.types.js';
|
|
1
|
+
import type { ForEachConfig, ForEachMode, GraphNodeConfig, ItemFn, NextConfig, RefValue, TemplateFn } from './workflow-graph.types.js';
|
|
2
2
|
export interface RPCHandler<I = any, O = any> {
|
|
3
3
|
input: I;
|
|
4
4
|
output: O;
|
|
@@ -19,7 +19,14 @@ export declare function createGraph<RPCMap extends Record<string, RPCHandler>>()
|
|
|
19
19
|
type GraphNodeConfigMap<FuncMap extends Record<string, string>, RPCMap extends Record<string, RPCHandler>> = {
|
|
20
20
|
[K in Extract<keyof FuncMap, string>]?: {
|
|
21
21
|
next?: NextConfig<Extract<keyof FuncMap, string>>;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Run this node once per element of an upstream array. The node's own
|
|
24
|
+
* result becomes the ordered array of per-item results.
|
|
25
|
+
*/
|
|
26
|
+
forEach?: ForEachConfig<Extract<keyof FuncMap, string>>;
|
|
27
|
+
/** How the per-item instances run. Defaults to 'parallel'. */
|
|
28
|
+
mode?: ForEachMode;
|
|
29
|
+
input?: (ref: <N extends Extract<keyof FuncMap, string>, P extends keyof ComputeNodeOutputs<FuncMap, RPCMap>[N] & string>(nodeId: N, path: P) => TypedRef<ComputeNodeOutputs<FuncMap, RPCMap>[N][P]>, template: TemplateFn, $item: ItemFn) => InputWithRefs<ComputeNodeInputs<FuncMap, RPCMap>[K]>;
|
|
23
30
|
onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[];
|
|
24
31
|
retries?: number;
|
|
25
32
|
retryDelay?: string | number;
|
|
@@ -7,6 +7,7 @@ export declare class ChildWorkflowStartedException extends Error {
|
|
|
7
7
|
name: string;
|
|
8
8
|
constructor(parentRunId: string, stepId: string, childRunId: string);
|
|
9
9
|
}
|
|
10
|
+
export declare function stripInstanceOrdinal(name: string): string;
|
|
10
11
|
export declare function continueGraph(workflowService: PikkuWorkflowService, runId: string, graphName: string, overrideMeta?: WorkflowRuntimeMeta): Promise<void>;
|
|
11
12
|
export declare function executeGraphStep(workflowService: PikkuWorkflowService, rpcService: any, runId: string, stepId: string, nodeId: string, rpcName: string, data: any, graphName: string): Promise<any>;
|
|
12
13
|
export declare function runFromMeta(workflowService: PikkuWorkflowService, runId: string, meta: WorkflowRuntimeMeta, _rpcService: any): Promise<void>;
|