@pikku/core 0.12.84 → 0.12.88
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 +503 -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/dev/hot-reload.d.ts +1 -1
- package/dist/dev/hot-reload.js +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-memory.d.ts +11 -0
- package/dist/wirings/agent/agent-memory.js +17 -2
- 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 +117 -93
- 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 +12 -10
- 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 +15 -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 +15 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +44 -16
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +22 -7
- package/dist/wirings/workflow/pikku-workflow-service.js +28 -29
- 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-step-claim.d.ts +16 -0
- package/dist/wirings/workflow/workflow-step-claim.js +27 -0
- 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-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md +47 -0
- 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 +4 -1
- 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 +8 -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/hot-reload.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 +25 -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-memory.test.ts +73 -0
- package/src/wirings/agent/agent-memory.ts +16 -2
- package/src/wirings/agent/agent-middleware.types.test.ts +41 -0
- package/src/wirings/agent/agent-prepare.ts +8 -5
- package/src/wirings/agent/agent-runner.ts +2 -3
- package/src/wirings/agent/agent-stream-delegate.test.ts +381 -0
- package/src/wirings/agent/agent-stream.ts +160 -81
- package/src/wirings/agent/agent-utils.ts +19 -0
- package/src/wirings/agent/agent.types.ts +12 -11
- 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 +24 -0
- package/src/wirings/variable/validate-variable-definitions.ts +2 -0
- package/src/wirings/variable/variable.types.ts +15 -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 +83 -20
- package/src/wirings/workflow/pikku-workflow-service.ts +37 -35
- 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-step-claim.ts +46 -0
- 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 +4 -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
package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md
CHANGED
|
@@ -7,7 +7,7 @@ tags: workflow
|
|
|
7
7
|
|
|
8
8
|
# The workflow run timeline is a pure fold over durable history, with the row's status as the authority
|
|
9
9
|
|
|
10
|
-
`run-timeline.ts` turns `getRunHistory` — one row per step
|
|
10
|
+
`run-timeline.ts` turns `getRunHistory` — one row per step _attempt_, each with
|
|
11
11
|
lifecycle timestamps — into a flat, chronologically ordered event stream, and
|
|
12
12
|
folds that stream up to any point to recover what the run "knew" then: the same
|
|
13
13
|
step cache a replay would hold, plus the walked path. Both functions are pure,
|
|
@@ -30,11 +30,15 @@ caller, who is the only one who knows what was being waited for. Its own
|
|
|
30
30
|
defaults are shorter than the assertion wrappers': `within` 15s, `interval`
|
|
31
31
|
250ms.
|
|
32
32
|
|
|
33
|
-
`
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
`requireScenarioEnv` (`scenario-step-guards.ts`) exists for the mirror-image
|
|
34
|
+
reason: `env` is optional on the step wire because most steps need nothing from
|
|
35
|
+
it, so the narrowing happens in one place with a message that says what to do,
|
|
36
|
+
instead of every step file writing its own guard. The actor is not narrowed at
|
|
37
|
+
all — a step that runs as somebody declares `actor: true` (or a `browser`
|
|
38
|
+
binding, which cannot be provisioned without a window to open), and the runner
|
|
39
|
+
injects `wire.actor` non-optionally into every binding and refuses to dispatch
|
|
40
|
+
the step without one. A wire member can be required per binding; a property of
|
|
41
|
+
one cannot, which is why it is not on `scenarioStep`. `scenarioStep`'s `verifyStepName` call doubles as the guard for `then`
|
|
38
42
|
being a wire member — an accidental `await scenario` calls it with a resolve
|
|
39
43
|
function, which lands as a loud named error instead of a silent hang.
|
|
40
44
|
|
package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md
CHANGED
|
@@ -25,7 +25,7 @@ saying which phase it happened in.
|
|
|
25
25
|
suspended or waiting and teardown would fire mid-flight. When the scenario has
|
|
26
26
|
already failed for its own reason, an `after`-hook failure is attached as
|
|
27
27
|
`cause` and logged rather than replacing the headline; only a teardown failure
|
|
28
|
-
after a
|
|
28
|
+
after a _passing_ scenario fails the run.
|
|
29
29
|
|
|
30
30
|
At the feature level (`workflow.types.ts`, `CoreFeature`), hooks run once around
|
|
31
31
|
the whole group — `before → a → b → c → after` — not per scenario. That is the
|
|
@@ -15,7 +15,7 @@ ran it.
|
|
|
15
15
|
|
|
16
16
|
It earns its keep when the durable step name was built at runtime. A scenario
|
|
17
17
|
step called in a loop reaches the run as, say, `sees @pikku/addon-todos` while
|
|
18
|
-
it was declared as
|
|
18
|
+
it was declared as `sees ${packageName}`; the recorded step-function name is
|
|
19
19
|
then the only way to join that row back to its declaration. `inlineStep` also
|
|
20
20
|
records the `data` the step was called with for the same reason: a reporter
|
|
21
21
|
renders each step's prose from it, so two calls to one step stay
|
|
@@ -23,7 +23,7 @@ distinguishable by what they were asked to check.
|
|
|
23
23
|
|
|
24
24
|
Step lineage is recorded alongside it. `fromStepName` is the predecessor that
|
|
25
25
|
scheduled a step — the walked transition — captured by `rpcStep`/`inlineStep`
|
|
26
|
-
|
|
26
|
+
_before_ `nextStepKey` advances the lineage, and surfaced to a step as
|
|
27
27
|
`fromInvocationId`. In a cyclic graph `a → b → a → c`, the second `a` therefore
|
|
28
28
|
carries `b`'s id, which is what lets the walked path be reconstructed from the
|
|
29
29
|
chain alone.
|
|
@@ -28,7 +28,7 @@ one key per gate means two gates resolving concurrently cannot clobber each
|
|
|
28
28
|
other through a read-modify-write.
|
|
29
29
|
|
|
30
30
|
One consequence to know about: `approveStep`'s optional `reason` argument
|
|
31
|
-
addresses the
|
|
31
|
+
addresses the _first_ reach of a gate only. If a gate is reached again on a
|
|
32
32
|
later loop iteration, `nextStepKey` gives that row a `#N` suffix, and there is
|
|
33
33
|
currently no way for a caller to name it.
|
|
34
34
|
|
|
@@ -24,7 +24,7 @@ impossible rather than merely reported: secrets are resolved where things are
|
|
|
24
24
|
constructed — `pikkuServices`, `pikkuWireServices`, addon service factories,
|
|
25
25
|
middleware — and the function is handed the configured client.
|
|
26
26
|
|
|
27
|
-
The cost is that a function which needs to
|
|
27
|
+
The cost is that a function which needs to _ask about_ a secret rather than read
|
|
28
28
|
one — "is this key set?", for a readiness or provisioning check — cannot do it
|
|
29
29
|
directly either. It goes through a service that holds `secrets` and exposes only
|
|
30
30
|
that question, which is how `@pikku/addon-console` checks whether an installed
|
package/knowledge/decisions/security/a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: decision
|
|
3
|
+
title: A scaffold flag says a surface exists, not who may call it
|
|
4
|
+
description: scaffold.<feature> is boolean | { path } — the auth field is gone, because the function runner already enforces each generated function's own auth, wiring, scopes and addon
|
|
5
|
+
tags: config, authorization, codegen, scaffold
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# A scaffold flag says a surface exists, not who may call it
|
|
9
|
+
|
|
10
|
+
`scaffold.<feature>` carried an `auth` field, defaulting closed — see
|
|
11
|
+
[[scaffold-features-are-authenticated-unless-opted-out]], which this supersedes.
|
|
12
|
+
The field is gone. `PikkuScaffoldFeature` is now `boolean | { path?: string }`:
|
|
13
|
+
whether the surface is generated, and where the file goes.
|
|
14
|
+
|
|
15
|
+
The field was a second gate in front of one that already runs. `resolveSession`
|
|
16
|
+
in `packages/core/src/function/function-runner.ts` throws `ForbiddenError` for a
|
|
17
|
+
`pikkuFunc` with no session, unconditionally; a `pikkuSessionlessFunc` requires
|
|
18
|
+
one when its own `auth: true` says so, when its wiring says so, or when
|
|
19
|
+
`resolveAddonAuth` does. That is where authentication is decided, per function,
|
|
20
|
+
by whoever wrote it. A config flag three directories away could only be coarser
|
|
21
|
+
than that, and being coarser was the whole problem the earlier decision was
|
|
22
|
+
trying to work around by defaulting it closed.
|
|
23
|
+
|
|
24
|
+
So the generated dispatchers — public RPC, public agent, workflow routes and the
|
|
25
|
+
events channel — emit a fixed `auth: false` on every function and wiring they
|
|
26
|
+
write. That is not the scaffold declaring the surface public. It is the
|
|
27
|
+
dispatcher declining to gate, because it does not know what it is forwarding to:
|
|
28
|
+
`rpcCaller` hands whatever name it was given to `rpc.exposed`, and the function
|
|
29
|
+
that resolves there is the one that answers for itself. Omitting the field would
|
|
30
|
+
not have been neutral — a wiring with no `auth` requires a session — so the
|
|
31
|
+
wrapper would reject the call before the gate that decides ever ran, which is a
|
|
32
|
+
harder gate than the config field it replaced, applied by the layer least
|
|
33
|
+
qualified to apply it.
|
|
34
|
+
|
|
35
|
+
The scoped admin surfaces do not emit it. `userAdmin` and `virtualUser` generate
|
|
36
|
+
`pikkuFunc` with `scopes: ['admin:users:...']` — session-required by
|
|
37
|
+
construction, and the function that decides rather than a wrapper in front of
|
|
38
|
+
one. `auth: false` there is refused by `runPikkuFunc` with a warning telling you
|
|
39
|
+
to use `pikkuSessionlessFunc` instead, and `auth: true` would only restate the
|
|
40
|
+
type.
|
|
41
|
+
|
|
42
|
+
`pikku enable <feature>` lost its `--noAuth` flag with the field it wrote.
|
|
43
|
+
|
|
44
|
+
**What this rules out:** reading a scaffold flag as an authorization decision;
|
|
45
|
+
gating a surface in the config instead of on the function that answers it; and
|
|
46
|
+
letting a generated dispatcher inherit the default `auth: true`, which reads as
|
|
47
|
+
"undecided" and behaves as "denied".
|
package/knowledge/decisions/security/a-step-runs-the-function-the-workflow-dispatched-it-with.md
CHANGED
|
@@ -11,7 +11,7 @@ tags: workflow
|
|
|
11
11
|
off the queue message and hands it to `executeWorkflowStep`. That call runs as
|
|
12
12
|
the run's owner — `invokeStepRpc` copies `run.wire.pikkuUserId` onto the wire —
|
|
13
13
|
and `rpcWithWire` does not apply the `expose` gate that the public `/rpc` route
|
|
14
|
-
applies. So the message decided both
|
|
14
|
+
applies. So the message decided both _what_ ran and _as whom_.
|
|
15
15
|
|
|
16
16
|
The claim in `executeWorkflowStepInner` read the step's status and nothing else;
|
|
17
17
|
there was no stored function name to compare against. `StepState` now carries
|
|
@@ -11,11 +11,10 @@ tags: core, virtual-user
|
|
|
11
11
|
platform and addon steps, from what a virtual user may call.
|
|
12
12
|
|
|
13
13
|
For scenario bodies the argument is only efficiency: they are held out of every
|
|
14
|
-
deployed unit and are not network-callable, so offering one wastes a turn on a
|
|
15
|
-
404.
|
|
14
|
+
deployed unit and are not network-callable, so offering one wastes a turn on a 404.
|
|
16
15
|
|
|
17
16
|
For a platform or addon step the argument is the oracle itself. A virtual user's
|
|
18
|
-
findings are worth something
|
|
17
|
+
findings are worth something _because_ it cannot manufacture the outcomes it is
|
|
19
18
|
meant to discover. A user that could invoke "Stripe's webhook arrives" forges its
|
|
20
19
|
own payment success, and every finding downstream of that forgery is worthless —
|
|
21
20
|
not merely unreliable, but actively misleading, because it looks like evidence.
|
package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md
CHANGED
|
@@ -15,7 +15,7 @@ header even though the response was a 2xx.
|
|
|
15
15
|
A cookie jar cannot answer "did sign-in happen". A target app may set a cookie on
|
|
16
16
|
any request — a CSRF token, an anonymous session, a locale — so a non-empty jar
|
|
17
17
|
after a failed or skipped sign-in looks exactly like a successful one. What
|
|
18
|
-
actually proves a session was established is
|
|
18
|
+
actually proves a session was established is _this_ response setting a cookie. A
|
|
19
19
|
2xx alone is not enough either: an endpoint that returns 200 while quietly
|
|
20
20
|
declining to issue a session would leave the actor running every subsequent
|
|
21
21
|
request unauthenticated, and the scenario would report the resulting refusals as
|
|
@@ -18,7 +18,7 @@ it is closed the same way: `runPikkuFunc` resolves both from the addon config.
|
|
|
18
18
|
`auth` merges as an OR and `auth: false` is ignored. The RPC path treats it as a
|
|
19
19
|
default (`addonConfig?.auth ?? options.requiresAuth`) because there the addon
|
|
20
20
|
config is the only statement of intent. On a direct wiring the route already
|
|
21
|
-
carries its own `auth`, so honouring `false` would let an addon
|
|
21
|
+
carries its own `auth`, so honouring `false` would let an addon _weaken_ a gate
|
|
22
22
|
the app wrote — the inverse of what a wiring-level declaration should be able to
|
|
23
23
|
do. An addon may require a session the wiring did not; it may never waive one
|
|
24
24
|
the wiring did.
|
package/knowledge/decisions/security/agent-gate-requires-a-session-only-when-auth-is-true.md
CHANGED
|
@@ -13,7 +13,7 @@ session presence (only when `CoreAgent.auth === true`), then `scopes`, then
|
|
|
13
13
|
`permissions`. The ordering mirrors the function runner — scopes AND together so
|
|
14
14
|
they can only narrow access, and a missing scope short-circuits before any
|
|
15
15
|
permission function does I/O. Declared `scopes` are narrowed to the generated
|
|
16
|
-
`ScopeId` union in a project's
|
|
16
|
+
`ScopeId` union in a project's `#pikku/scopes`, so an undeclared scope is a
|
|
17
17
|
compile error.
|
|
18
18
|
|
|
19
19
|
`auth` defaults to `false` (i.e. `pikkuSessionlessFunc`, not `pikkuFunc`) because
|
|
@@ -11,7 +11,7 @@ An approval gate is asked for so it can be answered for afterwards. "Who
|
|
|
11
11
|
released the funds" is the entire point of four-eyes sign-off, and until this
|
|
12
12
|
change none of it was kept.
|
|
13
13
|
|
|
14
|
-
Run state is where a decision
|
|
14
|
+
Run state is where a decision _waits_, not where it is kept. The record under
|
|
15
15
|
`workflowRuns.state.__approval_<hex>` is overwritten by the next write to that
|
|
16
16
|
key, and cleared outright — `decidedBy: undefined` included — whenever a
|
|
17
17
|
decision is refused on replay. A trail that erases exactly the events worth
|
|
@@ -31,7 +31,7 @@ shape it had before there was anything to record.
|
|
|
31
31
|
|
|
32
32
|
`deleteRun` cascades: `workflowStep` is `onDelete('cascade')` from
|
|
33
33
|
`workflowRuns`, and `workflowStepHistory` from `workflowStep`. Deleting a run
|
|
34
|
-
therefore deletes the sign-off with it — and a
|
|
34
|
+
therefore deletes the sign-off with it — and a _refused_ attempt never reaches a
|
|
35
35
|
step at all, so it was never in that trail to begin with.
|
|
36
36
|
|
|
37
37
|
Every answer — accepted, refused at submission, or cleared on replay — is
|
|
@@ -55,5 +55,5 @@ in `pikkuSchemas`.
|
|
|
55
55
|
**What this rules out:** a dedicated `workflowApprovals` table. It would have to
|
|
56
56
|
be implemented in all seven backends and would still be deleted with the run
|
|
57
57
|
unless it deliberately broke the cascade — at which point it is the audit table
|
|
58
|
-
with extra steps. If approvals later need to be
|
|
58
|
+
with extra steps. If approvals later need to be _queried_ as a first-class
|
|
59
59
|
entity rather than read back from the trail, that is when to revisit.
|
|
@@ -62,9 +62,10 @@ checked whether or not the host registered a global permission — an app that
|
|
|
62
62
|
hand-wires `wireAddon({ name: 'console', package: '@pikku/addon-console' })`
|
|
63
63
|
still cannot reach `execFileSync` unauthenticated.
|
|
64
64
|
|
|
65
|
-
The scopes are spelled as literals here because they are scope ids in
|
|
66
|
-
addon's own `wireScope` tree
|
|
67
|
-
|
|
65
|
+
The scopes are spelled as literals here because they are scope ids in this
|
|
66
|
+
addon's own `wireScope` tree. The `admin:scopes:*` gates on the scope-admin
|
|
67
|
+
functions come from a different tree — those functions now live in
|
|
68
|
+
`@pikku/addon-admin`, which declares its own. The generated secret and variable
|
|
68
69
|
brokers live in the app's own scaffold rather than the addon, so the addon
|
|
69
70
|
boundary never covered them; they carry `pikku:console:secrets:*` and
|
|
70
71
|
`pikku:console:variables:*` themselves.
|
|
@@ -10,7 +10,7 @@ tags: core
|
|
|
10
10
|
`packages/core/src/utils/safe-fetch.ts` guards every outbound fetch that core
|
|
11
11
|
makes on a caller-supplied URL. `@pikku/core` runs in edge runtimes (Cloudflare
|
|
12
12
|
Workers) that have no Node `dns` module, so the guard cannot resolve a hostname
|
|
13
|
-
and inspect the resulting address. It instead rejects address
|
|
13
|
+
and inspect the resulting address. It instead rejects address _literals_ that are
|
|
14
14
|
obviously internal — loopback, `10/8`, `172.16/12`, `192.168/16`, `0.0.0.0/8`,
|
|
15
15
|
link-local `169.254/16` (the cloud metadata endpoint), IPv6 `::`, `::1`,
|
|
16
16
|
`fe80::/10` and `fc00::/7` — plus the alias forms that reach the same targets:
|
package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md
CHANGED
|
@@ -13,8 +13,8 @@ every `runPikkuFunc` call in the gateway runner, copying `await wire.getSession(
|
|
|
13
13
|
onto `wire.session` when the latter is unset. Gateway middleware is the only
|
|
14
14
|
place a webhook can acquire a session at all — typically by mapping a verified
|
|
15
15
|
platform sender id to a user. Middleware that assigns `wire.session` directly
|
|
16
|
-
needs no help, but the idiomatic `wire.setSession()` writes into the
|
|
17
|
-
wiring'
|
|
16
|
+
needs no help, but the idiomatic `wire.setSession()` writes into the _enclosing
|
|
17
|
+
wiring's_ session service, and the handler's own invocation does not read that
|
|
18
18
|
service.
|
|
19
19
|
|
|
20
20
|
Without the bridge, the failure mode is silent and it fails open in the way that
|
|
@@ -23,7 +23,7 @@ satisfy an admin-only function's requirements, because the two gates are
|
|
|
23
23
|
evaluated independently against separate inputs. An empty or absent group passes,
|
|
24
24
|
so declaring no permissions means "globals only", not "deny".
|
|
25
25
|
|
|
26
|
-
Globals are bucketed per package, and a function reads
|
|
26
|
+
Globals are bucketed per package, and a function reads _both_ the root bucket and
|
|
27
27
|
its own package's — root first. The generated `addGlobalPermission` wrapper takes
|
|
28
28
|
no package argument, so an application's rules only ever land in the root bucket;
|
|
29
29
|
resolving the package bucket alone meant a host rule like "every request needs a
|
package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md
CHANGED
|
@@ -26,11 +26,11 @@ they divide into two kinds, and the difference is what can actually be
|
|
|
26
26
|
prevented rather than merely reported:
|
|
27
27
|
|
|
28
28
|
- **Prevention.** uWebSockets drives `res.onData` itself, so it counts bytes and
|
|
29
|
-
|
|
29
|
+
_drops_ chunks past the limit rather than concatenating, replying 413 before
|
|
30
30
|
routing — the only point at which the buffering can be stopped, which is why
|
|
31
31
|
it deviates from the fetch adapter's 404-an-unmatched-route order. Fastify
|
|
32
32
|
delegates to native `bodyLimit`, set only when `maxBodySize` is configured so
|
|
33
|
-
the default never
|
|
33
|
+
the default never _loosens_ fastify's stricter 1 MB. `PikkuExpressServer`
|
|
34
34
|
feeds the limit into `express.json`/`text`/`urlencoded`.
|
|
35
35
|
- **Rejection only.** `express-middleware` is handed an already-parsed body, so
|
|
36
36
|
its guard makes the rejection uniform but cannot reclaim the memory; a
|
|
@@ -9,6 +9,7 @@ description: Who may do what in core — gates, defaults, and the failures they
|
|
|
9
9
|
A rule about who may do what, and which way it fails when it is unsure.
|
|
10
10
|
|
|
11
11
|
<!-- pikku:knowledge-index -->
|
|
12
|
+
|
|
12
13
|
- [A dropped audit write is always logged](a-dropped-audit-write-is-always-logged.md) — The no-op audit service falls back to the singleton logger when the wire carries none, so an unconfigured audit call is never silent
|
|
13
14
|
- [A function never receives the secret service](a-function-never-receives-the-secret-service.md) — Every function-, permission- and auth-facing services type is bounded by SecretlessServices, so reaching for `secrets` in a function body is a type error rather than a lint
|
|
14
15
|
- [A graph run starts at an entry node the graph declared](a-graph-run-starts-at-an-entry-node-the-graph-declared.md) — startNode may only name a node in meta.entryNodeIds, and no generated route offers it, because otherwise a caller picks which half of the graph to skip
|
|
@@ -49,7 +50,8 @@ A rule about who may do what, and which way it fails when it is unsure.
|
|
|
49
50
|
- [Queue job identities are signed at enqueue](queue-job-identities-are-signed-at-enqueue.md) — A job's pikkuUserId is an HMAC claim bound to the queue and payload; an unverifiable claim is dropped, never trusted
|
|
50
51
|
- [Queue jobs carry the producer's pikku user id](queue-jobs-carry-the-producers-pikku-user-id.md) — A job's pikkuUserId is trusted as identity by the worker, so enqueue rights are effectively act-as-user rights
|
|
51
52
|
- [Remote addon tokens are client credentials, not mesh trust](remote-addon-tokens-are-client-credentials-not-mesh-trust.md) — wireRemoteAddon authenticates as a client to a hosted library and fails closed on an empty token; it never uses PIKKU_REMOTE_SECRET
|
|
52
|
-
- [A
|
|
53
|
+
- [A scaffold flag says a surface exists, not who may call it](a-scaffold-flag-says-a-surface-exists-not-who-may-call-it.md) — scaffold.<feature> is boolean | { path }; the auth field is gone because the function runner already enforces each generated function's own auth, wiring, scopes and addon
|
|
54
|
+
- [A scaffolded surface is authenticated unless the config opts out in writing](scaffold-features-are-authenticated-unless-opted-out.md) — SUPERSEDED; retains why the legacy 'auth' | 'no-auth' strings are refused rather than coerced
|
|
53
55
|
- [Scenario-step functions are never externally invocable over RPC](scenario-step-functions-are-never-externally-invocable.md) — rpcExposed requires expose and rejects scenarioStep, so test steps stay reachable only from inside a scenario run
|
|
54
56
|
- [Scope resolution happens at the session boundary and scope sync never deletes](scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md) — ScopeService is called when a session is built, never by the function runner, and syncScopes only ever adds — revoking is an explicit operation
|
|
55
57
|
- [Self-authentication is declared, not detected](self-authentication-is-declared-not-detected.md) — A function that authorizes callers in its own body says so with selfAuthenticated; codegen never tries to infer it
|
|
@@ -60,4 +62,5 @@ A rule about who may do what, and which way it fails when it is unsure.
|
|
|
60
62
|
- [A queued workflow step rehydrates its session from the persisted run wire](workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md) — The queue job payload is just `{ runId }`, so without threading `pikkuUserId` an authed step sees no session and throws
|
|
61
63
|
- [Scenario sessions are isolated per actor and reset between scenarios](workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md) — One jar per actor keeps two personas from sharing a session; a browser reset keeps one scenario from leaving the next signed in as somebody else
|
|
62
64
|
- [A scenario step is never registered as a callable RPC and never dispatched on the queue](workflow-scenario-steps-are-never-network-invocable.md) — A step drives a browser and holds an actor's session, so exposing it as an RPC would put that reach on the network
|
|
65
|
+
|
|
63
66
|
<!-- /pikku:knowledge-index -->
|
package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md
CHANGED
|
@@ -9,7 +9,7 @@ tags: mcp
|
|
|
9
9
|
|
|
10
10
|
`RunMCPEndpointParams.exposeErrors` in
|
|
11
11
|
`packages/core/src/wirings/mcp/mcp-runner.ts` defaults to `!isProduction()`, and
|
|
12
|
-
`runMCPPikkuFunc` checks `exposeErrors && !isProduction()`
|
|
12
|
+
`runMCPPikkuFunc` checks `exposeErrors && !isProduction()` _again_ when building
|
|
13
13
|
the `-32603` internal-error response that carries `{ message, stack }`. The
|
|
14
14
|
second check looks redundant against the default — it is not. The default only
|
|
15
15
|
applies when the caller omits the option; a caller that passes
|
|
@@ -19,10 +19,10 @@ set by whoever enqueues the job. The adapter surfaces it as
|
|
|
19
19
|
The claim is now HMAC-signed at enqueue and verified in `runQueueJob` — see
|
|
20
20
|
[[queue-job-identities-are-signed-at-enqueue]], which supersedes the "any
|
|
21
21
|
producer may name any user" reading below. Everything here still holds for the
|
|
22
|
-
|
|
22
|
+
_authorization_ question: signing proves the producer held the deployment
|
|
23
23
|
secret, not that it was entitled to name that user.
|
|
24
24
|
|
|
25
|
-
There is no re-authentication at the worker boundary — the queue payload
|
|
25
|
+
There is no re-authentication at the worker boundary — the queue payload _is_ the
|
|
26
26
|
credential. Workers run with `auth: false`, so nothing downstream re-checks that
|
|
27
27
|
the producer was entitled to name that user. This is deliberate: the whole point
|
|
28
28
|
is to let a background job resolve the same per-user credentials the original
|
|
@@ -35,5 +35,5 @@ client-supplied field flow into `JobOptions.pikkuUserId` without an authorizatio
|
|
|
35
35
|
check first. It also rules out treating the queue as an authorization boundary —
|
|
36
36
|
do not add a "the worker validated the producer's rights" assumption anywhere
|
|
37
37
|
downstream, and do not drop the id from the wire on the theory that workers are
|
|
38
|
-
unauthenticated anyway. Dropping an id that fails
|
|
38
|
+
unauthenticated anyway. Dropping an id that fails _signature_ verification is a
|
|
39
39
|
different matter and is what the worker now does.
|
package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md
CHANGED
|
@@ -23,7 +23,7 @@ logged or traced. Binding a `credentialId` without a wire that supports
|
|
|
23
23
|
credentials throws rather than falling back to a shared secret.
|
|
24
24
|
|
|
25
25
|
Resolution fails closed. `null` is returned only when no auth is bound at all,
|
|
26
|
-
which is the addon declaring its remote surface public. Once auth
|
|
26
|
+
which is the addon declaring its remote surface public. Once auth _is_ bound, a
|
|
27
27
|
resolved value of `null`, `undefined` or `''` raises `RemoteAddonAuthError` (401)
|
|
28
28
|
instead of dispatching an unauthenticated request that the host might accept as
|
|
29
29
|
anonymous.
|
package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md
CHANGED
|
@@ -7,6 +7,12 @@ tags: config, authorization, codegen, scaffold
|
|
|
7
7
|
|
|
8
8
|
# A scaffolded surface is authenticated unless the config opts out in writing
|
|
9
9
|
|
|
10
|
+
**Superseded by
|
|
11
|
+
[[a-scaffold-flag-says-a-surface-exists-not-who-may-call-it]]**: the `auth`
|
|
12
|
+
field is gone entirely, because the function runner already enforces each
|
|
13
|
+
generated function's own auth. The reasoning below still explains why the
|
|
14
|
+
legacy `'auth' | 'no-auth'` strings are refused rather than coerced.
|
|
15
|
+
|
|
10
16
|
`scaffold.<feature>` was `'auth' | 'no-auth' | false`. Two things were wrong
|
|
11
17
|
with it, and they compounded.
|
|
12
18
|
|
|
@@ -16,7 +22,7 @@ dispatcher that cannot know what it dispatches to — wrong the moment one
|
|
|
16
22
|
legitimately public sessionless function exists. For `userAdmin` it was
|
|
17
23
|
redundant: the generated functions are `pikkuFunc` with `scopes:
|
|
18
24
|
['admin:users:list']`, gated twice over already. But for `agent`, `workflow`,
|
|
19
|
-
`events` and `scenarios` it was the
|
|
25
|
+
`events` and `scenarios` it was the _only_ gate, because those generate real
|
|
20
26
|
endpoints the app never authors and has nowhere else to declare a gate for.
|
|
21
27
|
A uniform collapse to boolean would have silently opened four surfaces.
|
|
22
28
|
|
|
@@ -33,7 +39,7 @@ it.
|
|
|
33
39
|
|
|
34
40
|
The object form is also what makes the legacy strings safe to remove. An
|
|
35
41
|
earlier design used `string` for the output path, under which `"no-auth"` would
|
|
36
|
-
have parsed as
|
|
42
|
+
have parsed as _a file named `no-auth`_ — every unmigrated config silently
|
|
37
43
|
producing nonsense instead of failing. With `boolean | object`, a string is
|
|
38
44
|
never valid, so `resolveScaffoldFeature` refuses `'auth'` and `'no-auth'` by
|
|
39
45
|
name and prints the replacement. Coercing them was rejected outright: the value
|
|
@@ -17,7 +17,7 @@ them on every build.
|
|
|
17
17
|
The fix is a declaration — `selfAuthenticated: true` on the function config —
|
|
18
18
|
not analysis of the body. Detection would have to recognise an open-ended set of
|
|
19
19
|
authorization idioms, and it fails in the expensive direction: a body that
|
|
20
|
-
|
|
20
|
+
_looks_ like it checks something silences the warning for a function that
|
|
21
21
|
checks nothing. A declaration cannot be wrong by accident. Someone typed it,
|
|
22
22
|
it is greppable, and it survives into meta where an audit reads it as what it
|
|
23
23
|
is — a claim by a named author, not an inference.
|
|
@@ -13,8 +13,8 @@ requested. `LocalContent` requires a `JWTService` and throws without one; a
|
|
|
13
13
|
verifier with no key available rejects with 403 rather than allowing the
|
|
14
14
|
request, logging once per process so an attacker-triggerable path cannot flood.
|
|
15
15
|
|
|
16
|
-
A signature over `{signedAt, expiresAt, notBefore}` alone proves only
|
|
17
|
-
URL was issued, never
|
|
16
|
+
A signature over `{signedAt, expiresAt, notBefore}` alone proves only _when_ a
|
|
17
|
+
URL was issued, never _what_ it was issued for. Any valid token was a skeleton
|
|
18
18
|
key: swap the pathname from a public thumbnail to a private document and the
|
|
19
19
|
signature still verifies. Timestamps bound the window; only the path binds the
|
|
20
20
|
asset.
|
package/knowledge/index.md
CHANGED
|
@@ -6,7 +6,7 @@ description: Why @pikku/core is built the way it is — the reasoning that used
|
|
|
6
6
|
|
|
7
7
|
# Knowledge
|
|
8
8
|
|
|
9
|
-
Pikku's source says
|
|
9
|
+
Pikku's source says _what_ it does. These notes say _why_, for the handful of
|
|
10
10
|
choices where the code alone reads as arbitrary or, worse, reads as a mistake.
|
|
11
11
|
|
|
12
12
|
The rule that produced this directory: **reasoning never lives in code.** A
|
|
@@ -19,6 +19,8 @@ meta files, the export surface. A note that repeats them is a copy that will
|
|
|
19
19
|
drift.
|
|
20
20
|
|
|
21
21
|
<!-- pikku:knowledge-index -->
|
|
22
|
+
|
|
22
23
|
- [decisions](decisions/index.md) — a rule that was chosen, and what it rules out
|
|
23
24
|
- [questions](questions/index.md) — something asked and not yet answered
|
|
25
|
+
|
|
24
26
|
<!-- /pikku:knowledge-index -->
|
package/knowledge/questions/channel-middleware-accepts-bare-factories-that-nothing-resolves.md
CHANGED
|
@@ -14,7 +14,7 @@ tags: core, channel
|
|
|
14
14
|
`channel-common.ts` and `channel-handler.ts` — assert across the gap.
|
|
15
15
|
|
|
16
16
|
A factory is `(input: In) => CorePikkuChannelMiddleware`: the author is meant to
|
|
17
|
-
|
|
17
|
+
_call_ it at wiring time and put the result in the array.
|
|
18
18
|
`combineChannelMiddleware` contains no factory-resolution branch, and neither
|
|
19
19
|
does `combineMiddleware` for ordinary middleware — that is consistent and
|
|
20
20
|
deliberate. So a bare, uncalled factory in `channelMiddleware` would be pushed
|
|
@@ -11,6 +11,8 @@ currently makes a choice that nobody has defended — the choice stays, the doub
|
|
|
11
11
|
gets recorded.
|
|
12
12
|
|
|
13
13
|
<!-- pikku:knowledge-index -->
|
|
14
|
+
|
|
14
15
|
- [A channel's middleware list accepts bare factories that nothing ever resolves](channel-middleware-accepts-bare-factories-that-nothing-resolves.md) — CoreChannel.channelMiddleware admits CorePikkuChannelMiddlewareFactory, but no runner calls one, so a bare factory would stall the chain
|
|
15
16
|
- [An unauthorized channel reply is sent outside the channel's declared Out type](unauthorized-channel-replies-escape-the-declared-out-type.md) — processMessageHandlers sends a bare string on auth failure, which no generated client type admits — nobody has decided what the typed shape should be
|
|
17
|
+
|
|
16
18
|
<!-- /pikku:knowledge-index -->
|
package/package.json
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/core",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.88",
|
|
4
4
|
"description": "The Pikku runtime — functions, wirings, services, middleware and types",
|
|
5
5
|
"author": "yasser.fadl@gmail.com",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"module": "dist/index.js",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
7
|
"type": "module",
|
|
10
8
|
"scripts": {
|
|
11
9
|
"tsc": "tsc && tsc -p tsconfig.type-tests.json",
|
|
@@ -21,14 +19,15 @@
|
|
|
21
19
|
"sideEffects": [
|
|
22
20
|
"./dist/errors/errors.js",
|
|
23
21
|
"./dist/wirings/rpc/rpc-runner.js",
|
|
24
|
-
"./dist/wirings/
|
|
22
|
+
"./dist/wirings/addon/remote-addon-auth.js",
|
|
25
23
|
"./dist/wirings/workflow/workflow-approval-policy.js",
|
|
26
24
|
"./dist/wirings/workflow/workflow-errors.js",
|
|
27
25
|
"./dist/wirings/workflow/workflow-run-ownership.js",
|
|
28
26
|
"./dist/wirings/workflow/pikku-scenario-service.js"
|
|
29
27
|
],
|
|
30
28
|
"exports": {
|
|
31
|
-
".": "./dist/
|
|
29
|
+
".": "./dist/bootstrap-compat/root.js",
|
|
30
|
+
"./types": "./dist/types/index.js",
|
|
32
31
|
"./middleware": "./dist/middleware/index.js",
|
|
33
32
|
"./function": "./dist/function/index.js",
|
|
34
33
|
"./channel": "./dist/wirings/channel/index.js",
|
|
@@ -46,6 +45,7 @@
|
|
|
46
45
|
"./scheduler": "./dist/wirings/scheduler/index.js",
|
|
47
46
|
"./trigger": "./dist/wirings/trigger/index.js",
|
|
48
47
|
"./rpc": "./dist/wirings/rpc/index.js",
|
|
48
|
+
"./addon": "./dist/wirings/addon/index.js",
|
|
49
49
|
"./safe-fetch": "./dist/utils/safe-fetch.js",
|
|
50
50
|
"./node-host-resolver": "./dist/utils/node-host-resolver.js",
|
|
51
51
|
"./mcp": "./dist/wirings/mcp/index.js",
|
|
@@ -73,8 +73,9 @@
|
|
|
73
73
|
"./services/temporary-file-service": "./dist/services/temporary-file-service.js",
|
|
74
74
|
"./crypto-utils": "./dist/crypto-utils.js",
|
|
75
75
|
"./hmac": "./dist/utils/hmac.js",
|
|
76
|
-
"./
|
|
77
|
-
"./
|
|
76
|
+
"./state": "./dist/pikku-state.js",
|
|
77
|
+
"./classification": "./dist/classification/index.js",
|
|
78
|
+
"./utils": "./dist/utils.js",
|
|
78
79
|
"./schema": "./dist/schema.js",
|
|
79
80
|
"./testing": "./dist/testing/index.js",
|
|
80
81
|
"./dev": "./dist/dev/hot-reload.js"
|
|
@@ -82,19 +83,19 @@
|
|
|
82
83
|
"dependencies": {
|
|
83
84
|
"@standard-schema/spec": "^1.1.0",
|
|
84
85
|
"@types/json-schema": "^7.0.15",
|
|
85
|
-
"cookie": "^
|
|
86
|
+
"cookie": "^2.0.1",
|
|
86
87
|
"json-schema": "^0.4.0",
|
|
87
|
-
"path-to-regexp": "^8.
|
|
88
|
+
"path-to-regexp": "^8.4.2",
|
|
88
89
|
"picoquery": "^2.5.0"
|
|
89
90
|
},
|
|
90
91
|
"devDependencies": {
|
|
91
92
|
"@ag-ui/core": "0.0.57",
|
|
92
|
-
"@types/node": "^24.
|
|
93
|
-
"esbuild": "~0.
|
|
94
|
-
"tsx": "^4.
|
|
93
|
+
"@types/node": "^24.13.3",
|
|
94
|
+
"esbuild": "~0.28.2",
|
|
95
|
+
"tsx": "^4.23.12",
|
|
95
96
|
"typescript": "^6.0.3"
|
|
96
97
|
},
|
|
97
98
|
"engines": {
|
|
98
99
|
"node": ">=24"
|
|
99
100
|
}
|
|
100
|
-
}
|
|
101
|
+
}
|
package/run-tests.sh
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {}
|
|
1
|
+
export {}
|