@pikku/core 0.12.83 → 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 +492 -0
- package/README.md +1 -1
- 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 +12 -0
- package/dist/ecosystem/agent-scorer.js +5 -0
- package/dist/ecosystem/agent.d.ts +21 -0
- package/dist/ecosystem/agent.js +6 -0
- package/dist/ecosystem/channel/local.d.ts +3 -0
- package/dist/ecosystem/channel/local.js +3 -0
- package/dist/ecosystem/channel/serverless.d.ts +9 -0
- package/dist/ecosystem/channel/serverless.js +1 -0
- package/dist/ecosystem/channel.d.ts +15 -0
- package/dist/ecosystem/channel.js +5 -0
- package/dist/ecosystem/cli/channel.d.ts +16 -0
- package/dist/ecosystem/cli/channel.js +2 -0
- package/dist/ecosystem/cli.d.ts +9 -0
- package/dist/ecosystem/cli.js +2 -0
- package/dist/ecosystem/credential.d.ts +10 -0
- package/dist/ecosystem/credential.js +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 +9 -0
- package/dist/ecosystem/dev.js +2 -0
- package/dist/ecosystem/errors.d.ts +8 -0
- package/dist/ecosystem/errors.js +2 -0
- package/dist/ecosystem/function.d.ts +13 -0
- package/dist/ecosystem/function.js +2 -0
- package/dist/ecosystem/gateway.d.ts +1 -0
- package/dist/ecosystem/hmac.d.ts +1 -0
- package/dist/ecosystem/hmac.js +1 -0
- package/dist/ecosystem/http.d.ts +13 -0
- package/dist/ecosystem/http.js +5 -0
- package/dist/ecosystem/mcp.d.ts +3 -0
- package/dist/ecosystem/mcp.js +2 -0
- package/dist/ecosystem/middleware.d.ts +18 -0
- package/dist/ecosystem/middleware.js +7 -0
- package/dist/ecosystem/node-host-resolver.d.ts +1 -0
- package/dist/ecosystem/node-host-resolver.js +1 -0
- package/dist/ecosystem/node.d.ts +1 -0
- package/dist/ecosystem/oauth2.d.ts +1 -0
- package/dist/ecosystem/oauth2.js +1 -0
- package/dist/ecosystem/persona.d.ts +17 -0
- package/dist/ecosystem/persona.js +5 -0
- package/dist/ecosystem/queue.d.ts +13 -0
- package/dist/ecosystem/queue.js +4 -0
- package/dist/ecosystem/remote.d.ts +8 -0
- package/dist/ecosystem/remote.js +1 -0
- package/dist/ecosystem/role.d.ts +4 -0
- package/dist/ecosystem/role.js +2 -0
- package/dist/ecosystem/rpc.d.ts +6 -0
- package/dist/ecosystem/rpc.js +3 -0
- package/dist/ecosystem/safe-fetch.d.ts +7 -0
- package/dist/ecosystem/safe-fetch.js +1 -0
- package/dist/ecosystem/scenario.d.ts +21 -0
- package/dist/ecosystem/scenario.js +8 -0
- package/dist/ecosystem/scheduler.d.ts +3 -0
- package/dist/ecosystem/scheduler.js +2 -0
- package/dist/ecosystem/schema.d.ts +2 -0
- package/dist/ecosystem/schema.js +1 -0
- package/dist/ecosystem/scope.d.ts +5 -0
- package/dist/ecosystem/scope.js +3 -0
- package/dist/ecosystem/secret.d.ts +11 -0
- package/dist/ecosystem/secret.js +2 -0
- package/dist/ecosystem/services/istanbul-coverage.d.ts +1 -0
- package/dist/ecosystem/services/istanbul-coverage.js +1 -0
- package/dist/ecosystem/services/local-content-request-handler.d.ts +9 -0
- package/dist/ecosystem/services/local-content-request-handler.js +1 -0
- package/dist/ecosystem/services/local-content.d.ts +2 -0
- package/dist/ecosystem/services/local-content.js +1 -0
- package/dist/ecosystem/services/local-meta.d.ts +1 -0
- package/dist/ecosystem/services/local-meta.js +1 -0
- package/dist/ecosystem/services/v8-coverage.d.ts +1 -0
- package/dist/ecosystem/services/v8-coverage.js +1 -0
- package/dist/ecosystem/services.d.ts +36 -0
- package/dist/ecosystem/services.js +12 -0
- package/dist/ecosystem/testing.d.ts +7 -0
- package/dist/ecosystem/testing.js +1 -0
- package/dist/ecosystem/trigger.d.ts +2 -0
- package/dist/ecosystem/trigger.js +1 -0
- package/dist/ecosystem/types.d.ts +12 -0
- package/dist/ecosystem/types.js +6 -0
- package/dist/ecosystem/variable.d.ts +9 -0
- package/dist/ecosystem/variable.js +1 -0
- package/dist/ecosystem/virtual-user.d.ts +24 -0
- package/dist/ecosystem/virtual-user.js +8 -0
- package/dist/ecosystem/workflow.d.ts +20 -0
- package/dist/ecosystem/workflow.js +6 -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/errors/serialized-error.js +1 -0
- package/dist/function/function-meta.types.d.ts +139 -0
- package/dist/function/function-meta.types.js +1 -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/index.d.ts +8 -8
- package/dist/index.js +3 -3
- 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 +1 -1
- 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/{ai-run-state-service.d.ts → agent-run-state-service.d.ts} +5 -5
- package/dist/services/agent-run-state-service.js +1 -0
- package/dist/services/{ai-agent-runner-service.d.ts → agent-runner-service.d.ts} +12 -12
- package/dist/services/agent-runner-service.js +1 -0
- package/dist/services/{ai-storage-service.d.ts → agent-storage-service.d.ts} +7 -7
- package/dist/services/agent-storage-service.js +1 -0
- 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/http-personas.d.ts +1 -1
- package/dist/services/http-personas.js +3 -3
- package/dist/services/{in-memory-ai-run-state-service.d.ts → in-memory-agent-run-state-service.d.ts} +5 -5
- package/dist/services/{in-memory-ai-run-state-service.js → in-memory-agent-run-state-service.js} +1 -1
- package/dist/services/in-memory-workflow-service.d.ts +1 -1
- package/dist/services/index.d.ts +9 -5
- package/dist/services/index.js +4 -1
- 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 +5 -4
- 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/testing/service-tests/agent-run-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/agent-run-service-tests.js +3 -3
- package/dist/testing/service-tests/agent-storage-service-tests.d.ts +3 -0
- package/dist/testing/service-tests/{ai-storage-service-tests.js → agent-storage-service-tests.js} +4 -4
- package/dist/testing/service-tests.d.ts +4 -4
- package/dist/testing/service-tests.js +4 -4
- package/dist/types/core.types.d.ts +37 -187
- 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 +8 -6
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +2 -0
- package/dist/wirings/actor-flow/run-conversation.d.ts +2 -2
- 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/{ai-agent/ai-agent-agui.d.ts → agent/agent-agui.d.ts} +2 -2
- package/dist/wirings/{ai-agent/ai-agent-agui.js → agent/agent-agui.js} +1 -1
- package/dist/wirings/{ai-agent/ai-agent-finalize.d.ts → agent/agent-finalize.d.ts} +10 -10
- package/dist/wirings/{ai-agent/ai-agent-finalize.js → agent/agent-finalize.js} +7 -7
- package/dist/wirings/{ai-agent/ai-agent-helpers.d.ts → agent/agent-helpers.d.ts} +1 -1
- package/dist/wirings/{ai-agent/ai-agent-interrupt.d.ts → agent/agent-interrupt.d.ts} +4 -4
- package/dist/wirings/{ai-agent/ai-agent-interrupt.js → agent/agent-interrupt.js} +2 -2
- package/dist/wirings/{ai-agent/ai-agent-memory.d.ts → agent/agent-memory.d.ts} +14 -14
- package/dist/wirings/{ai-agent/ai-agent-memory.js → agent/agent-memory.js} +1 -1
- package/dist/wirings/{ai-agent/ai-agent-model-config.js → agent/agent-model-config.js} +1 -1
- package/dist/wirings/{ai-agent/ai-agent-prepare.d.ts → agent/agent-prepare.d.ts} +24 -24
- package/dist/wirings/{ai-agent/ai-agent-prepare.js → agent/agent-prepare.js} +17 -17
- package/dist/wirings/agent/agent-registry.d.ts +16 -0
- package/dist/wirings/{ai-agent/ai-agent-registry.js → agent/agent-registry.js} +9 -9
- package/dist/wirings/{ai-agent → agent}/agent-rpc.js +8 -8
- package/dist/wirings/agent/agent-runner.d.ts +7 -0
- package/dist/wirings/{ai-agent/ai-agent-runner.js → agent/agent-runner.js} +49 -50
- package/dist/wirings/{ai-agent/ai-agent-stream.d.ts → agent/agent-stream.d.ts} +15 -15
- package/dist/wirings/{ai-agent/ai-agent-stream.js → agent/agent-stream.js} +78 -78
- package/dist/wirings/{ai-agent/ai-agent-turn.d.ts → agent/agent-turn.d.ts} +5 -5
- package/dist/wirings/{ai-agent/ai-agent-turn.js → agent/agent-turn.js} +4 -4
- package/dist/wirings/agent/agent-utils.d.ts +14 -0
- package/dist/wirings/agent/agent-utils.js +17 -0
- package/dist/wirings/{ai-agent/ai-agent.types.d.ts → agent/agent.types.d.ts} +47 -46
- package/dist/wirings/agent/agent.types.js +1 -0
- package/dist/wirings/agent/index.d.ts +12 -0
- package/dist/wirings/agent/index.js +10 -0
- package/dist/wirings/{ai-agent → agent}/voice-input.d.ts +1 -1
- package/dist/wirings/{ai-agent → agent}/voice-input.js +5 -5
- package/dist/wirings/{ai-agent → agent}/voice-output.d.ts +2 -3
- package/dist/wirings/{ai-agent → agent}/voice-output.js +8 -8
- package/dist/wirings/{ai-scorer/ai-scorer-grade.d.ts → agent-scorer/agent-scorer-grade.d.ts} +3 -3
- package/dist/wirings/{ai-scorer/ai-scorer-grade.js → agent-scorer/agent-scorer-grade.js} +6 -6
- package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +30 -0
- package/dist/wirings/{ai-scorer/ai-scorer-judge.js → agent-scorer/agent-scorer-judge.js} +57 -5
- package/dist/wirings/{ai-scorer/ai-scorer-live.d.ts → agent-scorer/agent-scorer-live.d.ts} +1 -1
- package/dist/wirings/{ai-scorer/ai-scorer-live.js → agent-scorer/agent-scorer-live.js} +3 -3
- package/dist/wirings/{ai-scorer/ai-scorer-registry.d.ts → agent-scorer/agent-scorer-registry.d.ts} +6 -6
- package/dist/wirings/{ai-scorer/ai-scorer-registry.js → agent-scorer/agent-scorer-registry.js} +4 -4
- package/dist/wirings/{ai-scorer/ai-scorer-snapshots.d.ts → agent-scorer/agent-scorer-snapshots.d.ts} +1 -1
- package/dist/wirings/{ai-scorer/ai-scorer-worker.d.ts → agent-scorer/agent-scorer-worker.d.ts} +3 -3
- package/dist/wirings/{ai-scorer/ai-scorer-worker.js → agent-scorer/agent-scorer-worker.js} +9 -7
- package/dist/wirings/{ai-scorer/ai-scorer.d.ts → agent-scorer/agent-scorer.d.ts} +12 -6
- package/dist/wirings/{ai-scorer/ai-scorer.js → agent-scorer/agent-scorer.js} +4 -3
- package/dist/wirings/{ai-scorer/ai-scorer.types.d.ts → agent-scorer/agent-scorer.types.d.ts} +24 -4
- package/dist/wirings/agent-scorer/agent-scorer.types.js +4 -0
- package/dist/wirings/agent-scorer/index.d.ts +6 -0
- package/dist/wirings/agent-scorer/index.js +5 -0
- 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-rpc.types.d.ts +2 -2
- 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.d.ts +1 -1
- package/dist/wirings/rpc/rpc-runner.js +4 -4
- package/dist/wirings/rpc/rpc-types.d.ts +1 -1
- 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/prepare-virtual-user-run.js +1 -1
- package/dist/wirings/virtual-user/virtual-user-agents.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 +2 -3
- 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-non-streaming-agent-run-registers-with-airunstate-too.md → a-non-streaming-agent-run-registers-with-agentrunstate-too.md} +6 -6
- package/knowledge/decisions/internals/a-resumed-agent-turn-is-as-interruptible-as-the-first.md +1 -1
- 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/actor-flow-drives-the-target-through-a-transport-seam.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/{ai-agent-agui-bridge-obeys-the-client-ordering-contract.md → agent-agui-bridge-obeys-the-client-ordering-contract.md} +5 -5
- package/knowledge/decisions/internals/{ai-agent-audio-chunks-carry-the-format-the-provider-returned.md → agent-audio-chunks-carry-the-format-the-provider-returned.md} +2 -2
- package/knowledge/decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md +1 -1
- package/knowledge/decisions/internals/{ai-agent-credential-suspensions-hide-the-tool-result.md → agent-credential-suspensions-hide-the-tool-result.md} +2 -2
- package/knowledge/decisions/internals/{ai-agent-delegate-and-supervise-hide-different-text.md → agent-delegate-and-supervise-hide-different-text.md} +4 -4
- package/knowledge/decisions/internals/{ai-agent-llm-tool-arguments-have-nulls-stripped.md → agent-llm-tool-arguments-have-nulls-stripped.md} +3 -3
- package/knowledge/decisions/internals/{ai-agent-model-config-stays-a-single-resolution-seam.md → agent-model-config-stays-a-single-resolution-seam.md} +3 -3
- package/knowledge/decisions/internals/{ai-agent-onerror-hooks-cannot-change-the-failure.md → agent-onerror-hooks-cannot-change-the-failure.md} +6 -6
- package/knowledge/decisions/internals/{ai-agent-runner-methods-must-keep-their-receiver.md → agent-runner-methods-must-keep-their-receiver.md} +4 -4
- package/knowledge/decisions/internals/agent-speech-travels-as-a-custom-agui-event.md +1 -1
- package/knowledge/decisions/internals/{ai-agent-stream-persistence-is-best-effort.md → agent-stream-persistence-is-best-effort.md} +4 -4
- package/knowledge/decisions/internals/{ai-agent-sub-agents-inherit-the-parent-context-block.md → agent-sub-agents-inherit-the-parent-context-block.md} +3 -3
- package/knowledge/decisions/internals/{ai-agent-tool-execute-failures-are-logged-unconditionally.md → agent-tool-execute-failures-are-logged-unconditionally.md} +3 -3
- package/knowledge/decisions/internals/{ai-agent-voice-input-transcribes-audio-parts-in-place.md → agent-voice-input-transcribes-audio-parts-in-place.md} +2 -2
- package/knowledge/decisions/internals/{ai-agent-working-memory-is-persisted-only-when-valid.md → agent-working-memory-is-persisted-only-when-valid.md} +2 -2
- package/knowledge/decisions/internals/an-addon-scope-root-loses-to-a-root-the-host-already-declares.md +1 -1
- package/knowledge/decisions/internals/an-agent-interrupt-is-not-a-failure.md +2 -2
- package/knowledge/decisions/internals/an-agent-run-owned-by-another-instance-says-so.md +3 -3
- package/knowledge/decisions/internals/an-agent-stream-send-must-return-the-inner-sends-promise.md +2 -2
- package/knowledge/decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md +1 -1
- package/knowledge/decisions/internals/an-empty-transcript-is-not-recorded.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/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.md +1 -1
- package/knowledge/decisions/internals/the-actor-prompt-says-json-because-of-json-object-mode.md +1 -1
- package/knowledge/decisions/internals/the-agent-done-event-goes-through-the-middleware-and-is-awaited.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-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +1 -1
- package/knowledge/decisions/internals/the-per-invocation-rpc-view-is-a-class.md +5 -5
- package/knowledge/decisions/internals/the-persona-runtime-is-exported-from-the-persona-entry-point.md +1 -1
- package/knowledge/decisions/internals/the-transcript-event-is-sent-ahead-of-the-run.md +2 -2
- package/knowledge/decisions/internals/the-worker-disposition-is-the-one-that-is-not-testing.md +1 -1
- package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
- 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/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.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/{ai-agent-approval-forwarding-requires-a-symbol-brand.md → agent-approval-forwarding-requires-a-symbol-brand.md} +3 -3
- package/knowledge/decisions/security/{ai-agent-credential-requests-are-symbol-branded.md → agent-credential-requests-are-symbol-branded.md} +4 -4
- package/knowledge/decisions/security/{ai-agent-gate-requires-a-session-only-when-auth-is-true.md → agent-gate-requires-a-session-only-when-auth-is-true.md} +4 -4
- package/knowledge/decisions/security/{ai-agent-ownership-failures-never-echo-the-resource.md → agent-ownership-failures-never-echo-the-resource.md} +2 -2
- package/knowledge/decisions/security/{ai-agent-resume-re-runs-the-authorization-gate.md → agent-resume-re-runs-the-authorization-gate.md} +4 -4
- package/knowledge/decisions/security/{ai-agent-sessionless-deployments-have-no-thread-ownership.md → agent-sessionless-deployments-have-no-thread-ownership.md} +5 -5
- package/knowledge/decisions/security/{ai-agent-thread-ownership-composes-the-session-principal.md → agent-thread-ownership-composes-the-session-principal.md} +2 -2
- package/knowledge/decisions/security/{ai-agent-tool-filtering-reads-the-live-function-config.md → agent-tool-filtering-reads-the-live-function-config.md} +2 -2
- package/knowledge/decisions/security/an-agent-approval-is-claimed-before-the-tool-runs.md +3 -3
- package/knowledge/decisions/security/an-approval-answer-outlives-the-run-it-answered.md +3 -3
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +3 -3
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +21 -13
- 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 +3 -2
- 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 +16 -14
- 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 +37 -47
- package/src/agent-naming.test.ts +68 -0
- 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 +6 -4
- package/src/public-surface.json +90 -170
- package/src/public-surface.json.README +20 -2
- package/src/public-surface.test.ts +31 -3
- package/src/remote.test.ts +1 -1
- package/src/removed-legacy-exports.test.ts +5 -1
- package/src/services/{ai-run-state-service.ts → agent-run-state-service.ts} +5 -5
- package/src/services/{ai-agent-runner-service.ts → agent-runner-service.ts} +18 -18
- package/src/services/{ai-storage-service.ts → agent-storage-service.ts} +7 -7
- 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/http-personas-converse.test.ts +3 -3
- package/src/services/http-personas.ts +4 -4
- package/src/services/{in-memory-ai-run-state-service.ts → in-memory-agent-run-state-service.ts} +7 -7
- package/src/services/in-memory-workflow-service.ts +1 -1
- package/src/services/index.ts +22 -10
- 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 +5 -5
- 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/testing/service-tests/agent-run-service-tests.ts +4 -4
- package/src/testing/service-tests/{ai-storage-service-tests.ts → agent-storage-service-tests.ts} +8 -8
- package/src/testing/service-tests.ts +10 -8
- package/src/types/core.types.ts +40 -292
- package/src/types/index.ts +2 -0
- package/src/types/state.types.ts +12 -14
- package/src/types/typed-credentials.test.ts +72 -0
- package/src/utils.ts +34 -0
- package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
- package/src/wirings/actor-flow/run-conversation.ts +7 -9
- 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/{ai-agent/ai-agent-agui.test.ts → agent/agent-agui.test.ts} +126 -105
- package/src/wirings/{ai-agent/ai-agent-agui.ts → agent/agent-agui.ts} +7 -7
- package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts} +6 -6
- package/src/wirings/{ai-agent/ai-agent-finalize.test.ts → agent/agent-finalize.test.ts} +17 -16
- package/src/wirings/{ai-agent/ai-agent-finalize.ts → agent/agent-finalize.ts} +22 -22
- package/src/wirings/{ai-agent/ai-agent-helpers.test.ts → agent/agent-helpers.test.ts} +1 -1
- package/src/wirings/{ai-agent/ai-agent-helpers.ts → agent/agent-helpers.ts} +1 -1
- package/src/wirings/{ai-agent/ai-agent-interrupt.test.ts → agent/agent-interrupt.test.ts} +67 -77
- package/src/wirings/{ai-agent/ai-agent-interrupt.ts → agent/agent-interrupt.ts} +5 -5
- package/src/wirings/{ai-agent/ai-agent-memory.test.ts → agent/agent-memory.test.ts} +12 -12
- package/src/wirings/{ai-agent/ai-agent-memory.ts → agent/agent-memory.ts} +36 -36
- package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts} +2 -5
- package/src/wirings/{ai-agent/ai-agent-model-config.ts → agent/agent-model-config.ts} +1 -1
- package/src/wirings/{ai-agent/ai-agent-prepare.test.ts → agent/agent-prepare.test.ts} +18 -18
- package/src/wirings/{ai-agent/ai-agent-prepare.ts → agent/agent-prepare.ts} +60 -56
- package/src/wirings/{ai-agent/ai-agent-registry.test.ts → agent/agent-registry.test.ts} +49 -43
- package/src/wirings/{ai-agent/ai-agent-registry.ts → agent/agent-registry.ts} +14 -14
- package/src/wirings/{ai-agent/ai-agent-resume-authorization.test.ts → agent/agent-resume-authorization.test.ts} +18 -18
- package/src/wirings/{ai-agent → agent}/agent-rpc.ts +16 -20
- package/src/wirings/{ai-agent/ai-agent-runner.test.ts → agent/agent-runner.test.ts} +105 -106
- package/src/wirings/{ai-agent/ai-agent-runner.ts → agent/agent-runner.ts} +91 -82
- package/src/wirings/{ai-agent/ai-agent-stream-output-hooks.test.ts → agent/agent-stream-output-hooks.test.ts} +25 -25
- package/src/wirings/{ai-agent/ai-agent-stream.test.ts → agent/agent-stream.test.ts} +147 -143
- package/src/wirings/{ai-agent/ai-agent-stream.ts → agent/agent-stream.ts} +148 -148
- package/src/wirings/{ai-agent/ai-agent-thread-ownership.test.ts → agent/agent-thread-ownership.test.ts} +24 -28
- package/src/wirings/{ai-agent/ai-agent-turn.test.ts → agent/agent-turn.test.ts} +3 -5
- package/src/wirings/{ai-agent/ai-agent-turn.ts → agent/agent-turn.ts} +7 -7
- package/src/wirings/agent/agent-utils.ts +20 -0
- package/src/wirings/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +54 -51
- package/src/wirings/agent/index.ts +57 -0
- package/src/wirings/{ai-agent → agent}/voice-input.test.ts +15 -15
- package/src/wirings/{ai-agent → agent}/voice-input.ts +11 -11
- package/src/wirings/{ai-agent → agent}/voice-output.test.ts +25 -27
- package/src/wirings/{ai-agent → agent}/voice-output.ts +11 -11
- package/src/wirings/{ai-scorer/ai-scorer-grade.test.ts → agent-scorer/agent-scorer-grade.test.ts} +8 -8
- package/src/wirings/{ai-scorer/ai-scorer-grade.ts → agent-scorer/agent-scorer-grade.ts} +9 -9
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +285 -0
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +180 -0
- package/src/wirings/{ai-scorer/ai-scorer-live.test.ts → agent-scorer/agent-scorer-live.test.ts} +11 -11
- package/src/wirings/{ai-scorer/ai-scorer-live.ts → agent-scorer/agent-scorer-live.ts} +3 -3
- package/src/wirings/{ai-scorer/ai-scorer-registry.ts → agent-scorer/agent-scorer-registry.ts} +11 -8
- package/src/wirings/{ai-scorer/ai-scorer-sampling.test.ts → agent-scorer/agent-scorer-sampling.test.ts} +1 -1
- package/src/wirings/{ai-scorer/ai-scorer-snapshots.test.ts → agent-scorer/agent-scorer-snapshots.test.ts} +2 -2
- package/src/wirings/{ai-scorer/ai-scorer-snapshots.ts → agent-scorer/agent-scorer-snapshots.ts} +1 -1
- package/src/wirings/{ai-scorer/ai-scorer-worker.test.ts → agent-scorer/agent-scorer-worker.test.ts} +15 -15
- package/src/wirings/{ai-scorer/ai-scorer-worker.ts → agent-scorer/agent-scorer-worker.ts} +9 -7
- package/src/wirings/{ai-scorer/ai-scorer.ts → agent-scorer/agent-scorer.ts} +15 -7
- package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +27 -6
- package/src/wirings/agent-scorer/index.ts +23 -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 +3 -7
- 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 +5 -5
- package/src/wirings/rpc/rpc-types.ts +1 -1
- 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 +2 -2
- package/src/wirings/virtual-user/run-virtual-user.test.ts +2 -2
- package/src/wirings/virtual-user/run-virtual-user.ts +3 -3
- package/src/wirings/virtual-user/virtual-user-agents.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 +2 -2
- 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 +7 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.type-tests.json +3 -2
- package/dist/testing/service-tests/ai-storage-service-tests.d.ts +0 -3
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +0 -16
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +0 -7
- 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/index.d.ts +0 -12
- package/dist/wirings/ai-agent/index.js +0 -10
- package/dist/wirings/ai-scorer/ai-scorer-judge.d.ts +0 -17
- 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.ts +0 -40
- package/src/index.ts +0 -255
- package/src/wirings/ai-agent/ai-agent-utils.ts +0 -1
- package/src/wirings/ai-agent/index.ts +0 -65
- package/src/wirings/ai-scorer/ai-scorer-judge.test.ts +0 -143
- package/src/wirings/ai-scorer/ai-scorer-judge.ts +0 -120
- package/src/wirings/ai-scorer/index.ts +0 -24
- /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 → ecosystem/gateway.js} +0 -0
- /package/dist/{wirings/ai-agent/ai-agent.types.js → ecosystem/node.js} +0 -0
- /package/dist/wirings/{ai-agent/ai-agent-helpers.js → agent/agent-helpers.js} +0 -0
- /package/dist/wirings/{ai-agent/ai-agent-model-config.d.ts → agent/agent-model-config.d.ts} +0 -0
- /package/dist/wirings/{ai-agent → agent}/agent-rpc.d.ts +0 -0
- /package/dist/wirings/{ai-scorer/ai-scorer-sampling.d.ts → agent-scorer/agent-scorer-sampling.d.ts} +0 -0
- /package/dist/wirings/{ai-scorer/ai-scorer-sampling.js → agent-scorer/agent-scorer-sampling.js} +0 -0
- /package/dist/wirings/{ai-scorer/ai-scorer-snapshots.js → agent-scorer/agent-scorer-snapshots.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/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { randomUUID } from 'crypto'
|
|
2
2
|
import type { CoreSingletonServices } from '../../types/core.types.js'
|
|
3
3
|
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} from './
|
|
10
|
-
import type {
|
|
4
|
+
CoreAgent,
|
|
5
|
+
AgentMemoryConfig,
|
|
6
|
+
AgentInput,
|
|
7
|
+
AgentStep,
|
|
8
|
+
AgentMessage,
|
|
9
|
+
} from './agent.types.js'
|
|
10
|
+
import type { AgentStorageService } from '../../services/agent-storage-service.js'
|
|
11
11
|
import type { Logger } from '../../services/logger.js'
|
|
12
12
|
import type { SchemaService } from '../../services/schema-service.js'
|
|
13
|
-
import type {
|
|
13
|
+
import type { PikkuAgentMiddlewareHooks } from './agent.types.js'
|
|
14
14
|
|
|
15
15
|
export function resolveMemoryServices(
|
|
16
|
-
agent:
|
|
16
|
+
agent: CoreAgent,
|
|
17
17
|
singletonServices: CoreSingletonServices
|
|
18
18
|
): {
|
|
19
|
-
storage:
|
|
19
|
+
storage: AgentStorageService | undefined
|
|
20
20
|
} {
|
|
21
21
|
const memoryConfig = agent.memory
|
|
22
22
|
const storage = memoryConfig?.storage
|
|
@@ -25,16 +25,16 @@ export function resolveMemoryServices(
|
|
|
25
25
|
(
|
|
26
26
|
singletonServices as unknown as Record<
|
|
27
27
|
string,
|
|
28
|
-
|
|
28
|
+
AgentStorageService | undefined
|
|
29
29
|
>
|
|
30
30
|
)[memoryConfig.storage]
|
|
31
|
-
: singletonServices.
|
|
31
|
+
: singletonServices.agentStorage
|
|
32
32
|
return { storage }
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export function isWorkingMemoryEnabled(
|
|
36
|
-
memoryConfig:
|
|
37
|
-
storage:
|
|
36
|
+
memoryConfig: AgentMemoryConfig | undefined,
|
|
37
|
+
storage: AgentStorageService | undefined
|
|
38
38
|
): boolean {
|
|
39
39
|
return !!memoryConfig?.workingMemory && !!storage
|
|
40
40
|
}
|
|
@@ -107,12 +107,12 @@ export function buildWorkingMemoryPrompt(
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
export async function loadContextMessages(
|
|
110
|
-
memoryConfig:
|
|
111
|
-
storage:
|
|
112
|
-
input:
|
|
110
|
+
memoryConfig: AgentMemoryConfig | undefined,
|
|
111
|
+
storage: AgentStorageService | undefined,
|
|
112
|
+
input: AgentInput,
|
|
113
113
|
workingMemoryJsonSchema?: Record<string, unknown>
|
|
114
|
-
): Promise<
|
|
115
|
-
const contextMessages:
|
|
114
|
+
): Promise<AgentMessage[]> {
|
|
115
|
+
const contextMessages: AgentMessage[] = []
|
|
116
116
|
|
|
117
117
|
const workingMemoryStorage = isWorkingMemoryEnabled(memoryConfig, storage)
|
|
118
118
|
? storage
|
|
@@ -136,15 +136,15 @@ export async function loadContextMessages(
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
export async function saveMessages(
|
|
139
|
-
storage:
|
|
139
|
+
storage: AgentStorageService | undefined,
|
|
140
140
|
threadId: string,
|
|
141
141
|
resourceId: string,
|
|
142
|
-
memoryConfig:
|
|
143
|
-
userMessage:
|
|
142
|
+
memoryConfig: AgentMemoryConfig | undefined,
|
|
143
|
+
userMessage: AgentMessage | null | undefined,
|
|
144
144
|
result: {
|
|
145
145
|
text: string
|
|
146
146
|
uiSpec?: unknown
|
|
147
|
-
steps: Pick<
|
|
147
|
+
steps: Pick<AgentStep, 'toolCalls'>[]
|
|
148
148
|
}
|
|
149
149
|
): Promise<string> {
|
|
150
150
|
const responseText = memoryConfig?.workingMemory
|
|
@@ -152,7 +152,7 @@ export async function saveMessages(
|
|
|
152
152
|
: result.text
|
|
153
153
|
|
|
154
154
|
if (storage) {
|
|
155
|
-
const newMessages:
|
|
155
|
+
const newMessages: AgentMessage[] = userMessage ? [userMessage] : []
|
|
156
156
|
|
|
157
157
|
for (const step of result.steps) {
|
|
158
158
|
if (step.toolCalls?.length) {
|
|
@@ -205,13 +205,13 @@ export async function saveMessages(
|
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
export function trimMessages(
|
|
208
|
-
messages:
|
|
208
|
+
messages: AgentMessage[],
|
|
209
209
|
maxTokenBudget: number = 100000
|
|
210
|
-
):
|
|
210
|
+
): AgentMessage[] {
|
|
211
211
|
const sanitized = sanitizeToolMessages(messages)
|
|
212
212
|
|
|
213
213
|
let estimatedTokens = 0
|
|
214
|
-
const result:
|
|
214
|
+
const result: AgentMessage[] = []
|
|
215
215
|
|
|
216
216
|
for (let i = sanitized.length - 1; i >= 0; i--) {
|
|
217
217
|
const msg = sanitized[i]
|
|
@@ -239,8 +239,8 @@ export function trimMessages(
|
|
|
239
239
|
return result
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
function sanitizeToolMessages(messages:
|
|
243
|
-
const result:
|
|
242
|
+
function sanitizeToolMessages(messages: AgentMessage[]): AgentMessage[] {
|
|
243
|
+
const result: AgentMessage[] = []
|
|
244
244
|
|
|
245
245
|
for (let i = 0; i < messages.length; i++) {
|
|
246
246
|
const msg = messages[i]
|
|
@@ -281,7 +281,7 @@ function sanitizeToolMessages(messages: AIMessage[]): AIMessage[] {
|
|
|
281
281
|
)
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
function estimateTokens(msg:
|
|
284
|
+
function estimateTokens(msg: AgentMessage): number {
|
|
285
285
|
let chars = 0
|
|
286
286
|
if (msg.content) {
|
|
287
287
|
if (typeof msg.content === 'string') {
|
|
@@ -368,7 +368,7 @@ export function stripWorkingMemoryForStreaming(text: string): string {
|
|
|
368
368
|
|
|
369
369
|
async function persistWorkingMemory(
|
|
370
370
|
options: {
|
|
371
|
-
storage?:
|
|
371
|
+
storage?: AgentStorageService
|
|
372
372
|
threadId: string
|
|
373
373
|
workingMemorySchemaName?: string | null
|
|
374
374
|
logger?: Logger
|
|
@@ -400,12 +400,12 @@ async function persistWorkingMemory(
|
|
|
400
400
|
}
|
|
401
401
|
|
|
402
402
|
export function createWorkingMemoryMiddleware(options: {
|
|
403
|
-
storage?:
|
|
403
|
+
storage?: AgentStorageService
|
|
404
404
|
threadId: string
|
|
405
405
|
workingMemorySchemaName?: string | null
|
|
406
406
|
logger?: Logger
|
|
407
407
|
schemaService?: SchemaService
|
|
408
|
-
}):
|
|
408
|
+
}): PikkuAgentMiddlewareHooks<{
|
|
409
409
|
rawText?: string
|
|
410
410
|
emittedVisibleText?: string
|
|
411
411
|
}> {
|
|
@@ -459,15 +459,15 @@ export function createWorkingMemoryMiddleware(options: {
|
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
export function getWorkingMemoryMiddleware(
|
|
462
|
-
memoryConfig:
|
|
463
|
-
storage:
|
|
462
|
+
memoryConfig: AgentMemoryConfig | undefined,
|
|
463
|
+
storage: AgentStorageService | undefined,
|
|
464
464
|
options: {
|
|
465
465
|
threadId: string
|
|
466
466
|
workingMemorySchemaName?: string | null
|
|
467
467
|
logger?: Logger
|
|
468
468
|
schemaService?: SchemaService
|
|
469
469
|
}
|
|
470
|
-
):
|
|
470
|
+
): PikkuAgentMiddlewareHooks[] {
|
|
471
471
|
if (!isWorkingMemoryEnabled(memoryConfig, storage)) return []
|
|
472
472
|
|
|
473
473
|
return [
|
package/src/wirings/{ai-agent/ai-agent-model-config.test.ts → agent/agent-model-config.test.ts}
RENAMED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { describe, test, beforeEach, afterEach } from 'node:test'
|
|
2
2
|
import assert from 'node:assert'
|
|
3
|
-
import {
|
|
4
|
-
resolveModelAlias,
|
|
5
|
-
resolveModelConfig,
|
|
6
|
-
} from './ai-agent-model-config.js'
|
|
3
|
+
import { resolveModelAlias, resolveModelConfig } from './agent-model-config.js'
|
|
7
4
|
import { pikkuState, resetPikkuState } from '../../pikku-state.js'
|
|
8
5
|
|
|
9
6
|
const setAliases = (aliases: Record<string, string>) =>
|
|
@@ -81,7 +78,7 @@ describe('resolveModelAlias', () => {
|
|
|
81
78
|
test('an env override splits on the first colon only', () => {
|
|
82
79
|
// A model id may itself contain a colon — `ollama/qwen2.5:7b` is the shape
|
|
83
80
|
// the runner's own error message cites. It stays provider-qualified so the
|
|
84
|
-
// resolved value is one `
|
|
81
|
+
// resolved value is one `VercelAgentRunner.parseModel` would accept; a
|
|
85
82
|
// bare `bedrock:nova-lite:1` would pass here and fail the moment anything
|
|
86
83
|
// tried to use it.
|
|
87
84
|
process.env.PIKKU_MODEL_ALIASES = 'cheap:ollama/qwen2.5:7b'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// knowledge: decisions/internals/
|
|
1
|
+
// knowledge: decisions/internals/agent-model-config-stays-a-single-resolution-seam.md
|
|
2
2
|
import { pikkuState } from '../../pikku-state.js'
|
|
3
3
|
|
|
4
4
|
const isProviderQualified = (model: string) => model.includes('/')
|
|
@@ -18,22 +18,22 @@ import {
|
|
|
18
18
|
resolveOwnerResourceId,
|
|
19
19
|
sessionPrincipals,
|
|
20
20
|
threadOwnerConstraint,
|
|
21
|
-
} from './
|
|
21
|
+
} from './agent-prepare.js'
|
|
22
22
|
import { ForbiddenError, MissingCredentialError } from '../../errors/errors.js'
|
|
23
23
|
import { pikkuAuth } from '../../function/functions.types.js'
|
|
24
24
|
import type {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from './
|
|
25
|
+
AgentStreamChannel,
|
|
26
|
+
AgentStreamEvent,
|
|
27
|
+
CoreAgent,
|
|
28
|
+
PikkuAgentMiddlewareHooks,
|
|
29
|
+
} from './agent.types.js'
|
|
30
30
|
|
|
31
31
|
beforeEach(() => {
|
|
32
32
|
resetPikkuState()
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
-
const addAgent = (agentName: string, overrides: Partial<
|
|
36
|
-
const agent:
|
|
35
|
+
const addAgent = (agentName: string, overrides: Partial<CoreAgent> = {}) => {
|
|
36
|
+
const agent: CoreAgent = {
|
|
37
37
|
name: agentName,
|
|
38
38
|
description: `${agentName} description`,
|
|
39
39
|
goal: `${agentName} goal`,
|
|
@@ -51,7 +51,7 @@ const addAgent = (agentName: string, overrides: Partial<CoreAIAgent> = {}) => {
|
|
|
51
51
|
} as any
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
describe('
|
|
54
|
+
describe('agent-prepare', () => {
|
|
55
55
|
test('getAddonCredentialRequirements returns deduplicated wire oauth credentials', () => {
|
|
56
56
|
pikkuState(null, 'addons', 'packages').set('github', {
|
|
57
57
|
package: '@test/github-addon',
|
|
@@ -88,7 +88,7 @@ describe('ai-agent-prepare', () => {
|
|
|
88
88
|
test('resolveAgent resolves root and addon agents and rejects missing names', () => {
|
|
89
89
|
addAgent('root-agent')
|
|
90
90
|
|
|
91
|
-
const addonAgent:
|
|
91
|
+
const addonAgent: CoreAgent = {
|
|
92
92
|
name: 'addon-agent',
|
|
93
93
|
description: 'addon',
|
|
94
94
|
goal: 'addon goal',
|
|
@@ -164,13 +164,13 @@ describe('ai-agent-prepare', () => {
|
|
|
164
164
|
})
|
|
165
165
|
|
|
166
166
|
test('createScopedChannel forwards stream events, captures approvals, and suppresses done', () => {
|
|
167
|
-
const events:
|
|
167
|
+
const events: AgentStreamEvent[] = []
|
|
168
168
|
const channel = createScopedChannel(
|
|
169
169
|
{
|
|
170
170
|
channelId: 'root',
|
|
171
171
|
openingData: undefined,
|
|
172
172
|
state: 'open',
|
|
173
|
-
send: (event:
|
|
173
|
+
send: (event: AgentStreamEvent) => {
|
|
174
174
|
events.push(event)
|
|
175
175
|
},
|
|
176
176
|
sendBinary: () => {},
|
|
@@ -178,12 +178,12 @@ describe('ai-agent-prepare', () => {
|
|
|
178
178
|
setState: () => {},
|
|
179
179
|
getState: () => 'open',
|
|
180
180
|
clearState: () => {},
|
|
181
|
-
} as
|
|
181
|
+
} as AgentStreamChannel,
|
|
182
182
|
'sub-agent',
|
|
183
183
|
'session-1'
|
|
184
184
|
)
|
|
185
185
|
|
|
186
|
-
channel.send({ type: 'text-delta', text: 'hello' } as
|
|
186
|
+
channel.send({ type: 'text-delta', text: 'hello' } as AgentStreamEvent)
|
|
187
187
|
channel.send({
|
|
188
188
|
type: 'approval-request',
|
|
189
189
|
toolCallId: 'tc-1',
|
|
@@ -191,8 +191,8 @@ describe('ai-agent-prepare', () => {
|
|
|
191
191
|
args: { x: 1 },
|
|
192
192
|
reason: 'Delete todo "x"',
|
|
193
193
|
runId: 'run-1',
|
|
194
|
-
} as
|
|
195
|
-
channel.send({ type: 'done' } as
|
|
194
|
+
} as AgentStreamEvent)
|
|
195
|
+
channel.send({ type: 'done' } as AgentStreamEvent)
|
|
196
196
|
|
|
197
197
|
assert.equal(events.length, 1)
|
|
198
198
|
assert.equal(events[0].type, 'text-delta')
|
|
@@ -232,7 +232,7 @@ describe('ai-agent-prepare', () => {
|
|
|
232
232
|
|
|
233
233
|
const beforeCalls: unknown[] = []
|
|
234
234
|
const afterCalls: unknown[] = []
|
|
235
|
-
const middlewares:
|
|
235
|
+
const middlewares: PikkuAgentMiddlewareHooks[] = [
|
|
236
236
|
{
|
|
237
237
|
beforeToolCall: async (_services, ctx) => {
|
|
238
238
|
beforeCalls.push(ctx)
|
|
@@ -333,7 +333,7 @@ describe('ai-agent-prepare', () => {
|
|
|
333
333
|
)
|
|
334
334
|
})
|
|
335
335
|
|
|
336
|
-
test('buildToolDefs logs a tool execute() failure even without
|
|
336
|
+
test('buildToolDefs logs a tool execute() failure even without agentMiddleware hooks, then rethrows', async () => {
|
|
337
337
|
addAgent('ops-agent')
|
|
338
338
|
pikkuState(null, 'agent', 'agentsMeta')['ops-agent'] = {
|
|
339
339
|
...pikkuState(null, 'agent', 'agentsMeta')['ops-agent'],
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import type { PikkuRawWire, CoreUserSession } from '../../types/core.types.js'
|
|
2
1
|
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
PikkuRawWire,
|
|
3
|
+
CoreUserSession,
|
|
4
|
+
GetCredential,
|
|
5
|
+
} from '../../types/core.types.js'
|
|
6
|
+
import type {
|
|
7
|
+
CoreAgent,
|
|
8
|
+
AgentInput,
|
|
9
|
+
AgentToolDef,
|
|
10
|
+
AgentContentPart,
|
|
11
|
+
AgentMessage,
|
|
12
|
+
AgentStreamChannel,
|
|
13
|
+
AgentStreamEvent,
|
|
14
|
+
PikkuAgentMiddlewareHooks,
|
|
11
15
|
SessionScope,
|
|
12
|
-
} from './
|
|
13
|
-
import type {
|
|
16
|
+
} from './agent.types.js'
|
|
17
|
+
import type { AgentRunnerParams } from '../../services/agent-runner-service.js'
|
|
14
18
|
import { PikkuError } from '../../errors/error-handler.js'
|
|
15
19
|
import {
|
|
16
20
|
checkAuthPermissions,
|
|
@@ -23,32 +27,32 @@ import { verifyScopes } from '../../scopes.js'
|
|
|
23
27
|
import { pikkuState, getSingletonServices } from '../../pikku-state.js'
|
|
24
28
|
import { createMiddlewareSessionWireProps } from '../../services/user-session-service.js'
|
|
25
29
|
import type { SessionService } from '../../services/user-session-service.js'
|
|
26
|
-
import { randomUUID } from './
|
|
27
|
-
import { awaitPendingInterruptNote } from './
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
+
import { randomUUID } from './agent-utils.js'
|
|
31
|
+
import { awaitPendingInterruptNote } from './agent-interrupt.js'
|
|
32
|
+
import { streamAgent } from './agent-stream.js'
|
|
33
|
+
import { runAgent } from './agent-runner.js'
|
|
30
34
|
import {
|
|
31
35
|
resolveNamespace,
|
|
32
36
|
ContextAwareRPCService,
|
|
33
37
|
} from '../../wirings/rpc/rpc-runner.js'
|
|
34
|
-
import { getOrCreatePackageSingletonServices } from '../../wirings/
|
|
38
|
+
import { getOrCreatePackageSingletonServices } from '../../wirings/addon/addon-runner.js'
|
|
35
39
|
import {
|
|
36
40
|
resolveMemoryServices,
|
|
37
41
|
loadContextMessages,
|
|
38
42
|
trimMessages,
|
|
39
|
-
} from './
|
|
40
|
-
import { resolveModelConfig } from './
|
|
43
|
+
} from './agent-memory.js'
|
|
44
|
+
import { resolveModelConfig } from './agent-model-config.js'
|
|
41
45
|
|
|
42
|
-
export type
|
|
46
|
+
export type RunAgentParams = {
|
|
43
47
|
sessionService?: SessionService<CoreUserSession>
|
|
44
48
|
/** Credential accessor for the current request — used to read per-user overrides (e.g. AI_API_KEY). */
|
|
45
|
-
getCredential?:
|
|
49
|
+
getCredential?: GetCredential
|
|
46
50
|
/** Ephemeral owner identity minted for a sessionless request; never client-supplied, never reused across requests. */
|
|
47
51
|
anonymousOwnerResourceId?: string
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
export function resolveSessionPrincipal(
|
|
51
|
-
params:
|
|
55
|
+
params: RunAgentParams,
|
|
52
56
|
sessionScope: SessionScope | undefined
|
|
53
57
|
): string | undefined {
|
|
54
58
|
const session = params.sessionService?.get()
|
|
@@ -64,7 +68,7 @@ export function resolveSessionPrincipal(
|
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
export function resolveOwnerResourceId(
|
|
67
|
-
params:
|
|
71
|
+
params: RunAgentParams,
|
|
68
72
|
sessionScope: SessionScope | undefined,
|
|
69
73
|
requestedResourceId: string
|
|
70
74
|
): string {
|
|
@@ -85,7 +89,7 @@ export function resolveOwnerResourceId(
|
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
export function assertResourcePrincipalOwner(
|
|
88
|
-
params:
|
|
92
|
+
params: RunAgentParams,
|
|
89
93
|
sessionScope: SessionScope | undefined,
|
|
90
94
|
storedResourceId: string,
|
|
91
95
|
kind: 'thread' | 'run'
|
|
@@ -145,7 +149,7 @@ export function canAccessThread(
|
|
|
145
149
|
)
|
|
146
150
|
}
|
|
147
151
|
|
|
148
|
-
export type
|
|
152
|
+
export type StreamAgentOptions = {
|
|
149
153
|
requiresToolApproval?: 'all' | 'explicit' | false
|
|
150
154
|
onRunCreated?: (runId: string) => void
|
|
151
155
|
}
|
|
@@ -258,14 +262,14 @@ export function getAddonCredentialRequirements(
|
|
|
258
262
|
}
|
|
259
263
|
|
|
260
264
|
export type StreamContext = {
|
|
261
|
-
channel:
|
|
262
|
-
options?:
|
|
265
|
+
channel: AgentStreamChannel
|
|
266
|
+
options?: StreamAgentOptions
|
|
263
267
|
delegateState?: { delegated: boolean }
|
|
264
268
|
}
|
|
265
269
|
|
|
266
270
|
export const resolveAgent = (
|
|
267
271
|
agentName: string
|
|
268
|
-
): { agent:
|
|
272
|
+
): { agent: CoreAgent; packageName: string | null; resolvedName: string } => {
|
|
269
273
|
if (!agentName) {
|
|
270
274
|
console.error(
|
|
271
275
|
'[resolveAgent] agentName is undefined/null! Stack:',
|
|
@@ -302,8 +306,8 @@ export const resolveAgent = (
|
|
|
302
306
|
}
|
|
303
307
|
|
|
304
308
|
export async function assertAgentAuthorized(
|
|
305
|
-
agent:
|
|
306
|
-
params:
|
|
309
|
+
agent: CoreAgent,
|
|
310
|
+
params: RunAgentParams,
|
|
307
311
|
packageName: string | null
|
|
308
312
|
): Promise<void> {
|
|
309
313
|
const session = params.sessionService
|
|
@@ -363,7 +367,7 @@ export async function buildInstructions(
|
|
|
363
367
|
return instructions
|
|
364
368
|
}
|
|
365
369
|
|
|
366
|
-
export type ScopedChannel =
|
|
370
|
+
export type ScopedChannel = AgentStreamChannel & {
|
|
367
371
|
approvals: Array<{
|
|
368
372
|
toolCallId: string
|
|
369
373
|
toolName: string
|
|
@@ -374,7 +378,7 @@ export type ScopedChannel = AIStreamChannel & {
|
|
|
374
378
|
}
|
|
375
379
|
|
|
376
380
|
export function createScopedChannel(
|
|
377
|
-
parent:
|
|
381
|
+
parent: AgentStreamChannel,
|
|
378
382
|
agentName: string,
|
|
379
383
|
session: string
|
|
380
384
|
): ScopedChannel {
|
|
@@ -391,7 +395,7 @@ export function createScopedChannel(
|
|
|
391
395
|
},
|
|
392
396
|
close: () => {},
|
|
393
397
|
sendBinary: (data) => parent.sendBinary(data),
|
|
394
|
-
send: (event:
|
|
398
|
+
send: (event: AgentStreamEvent) => {
|
|
395
399
|
if (event.type === 'done') return
|
|
396
400
|
if (event.type === 'approval-request') {
|
|
397
401
|
capturedApprovals.push({
|
|
@@ -412,7 +416,7 @@ export function createScopedChannel(
|
|
|
412
416
|
event.type === 'usage' ||
|
|
413
417
|
event.type === 'error'
|
|
414
418
|
) {
|
|
415
|
-
parent.send({ ...event, agent: agentName, session } as
|
|
419
|
+
parent.send({ ...event, agent: agentName, session } as AgentStreamEvent)
|
|
416
420
|
} else {
|
|
417
421
|
parent.send(event)
|
|
418
422
|
}
|
|
@@ -434,18 +438,18 @@ export function buildSubAgentRunInput(
|
|
|
434
438
|
}
|
|
435
439
|
|
|
436
440
|
export async function buildToolDefs(
|
|
437
|
-
params:
|
|
441
|
+
params: RunAgentParams,
|
|
438
442
|
agentSessionMap: Map<string, string>,
|
|
439
443
|
resourceId: string,
|
|
440
444
|
agentName: string,
|
|
441
445
|
packageName: string | null,
|
|
442
446
|
streamContext?: StreamContext,
|
|
443
|
-
|
|
447
|
+
agentMiddlewares?: PikkuAgentMiddlewareHooks[],
|
|
444
448
|
agentMode?: 'delegate' | 'supervise',
|
|
445
449
|
parentContext?: string
|
|
446
|
-
): Promise<{ tools:
|
|
450
|
+
): Promise<{ tools: AgentToolDef[]; missingRpcs: string[] }> {
|
|
447
451
|
const singletonServices = getSingletonServices()
|
|
448
|
-
const tools:
|
|
452
|
+
const tools: AgentToolDef[] = []
|
|
449
453
|
const missingRpcs: string[] = []
|
|
450
454
|
const approvalPolicy =
|
|
451
455
|
streamContext?.options?.requiresToolApproval ?? 'explicit'
|
|
@@ -542,8 +546,7 @@ export async function buildToolDefs(
|
|
|
542
546
|
(approvalPolicy === 'explicit' && fnMeta?.approvalRequired)
|
|
543
547
|
|
|
544
548
|
let approvalDescriptionFn:
|
|
545
|
-
|
|
546
|
-
| undefined
|
|
549
|
+
((input: unknown) => Promise<string>) | undefined
|
|
547
550
|
if (needsApproval && pikkuFuncId) {
|
|
548
551
|
const funcConfig = pikkuState(resolvedPkg, 'function', 'functions').get(
|
|
549
552
|
pikkuFuncId
|
|
@@ -678,7 +681,7 @@ export async function buildToolDefs(
|
|
|
678
681
|
? subChannel
|
|
679
682
|
: {
|
|
680
683
|
...subChannel,
|
|
681
|
-
send: (event:
|
|
684
|
+
send: (event: AgentStreamEvent) => {
|
|
682
685
|
if (
|
|
683
686
|
event.type === 'text-delta' ||
|
|
684
687
|
event.type === 'reasoning-delta'
|
|
@@ -687,7 +690,7 @@ export async function buildToolDefs(
|
|
|
687
690
|
subChannel.send(event)
|
|
688
691
|
},
|
|
689
692
|
}
|
|
690
|
-
const resultText = await
|
|
693
|
+
const resultText = await streamAgent(
|
|
691
694
|
subAgentName,
|
|
692
695
|
buildSubAgentRunInput(
|
|
693
696
|
message,
|
|
@@ -719,7 +722,7 @@ export async function buildToolDefs(
|
|
|
719
722
|
return resultText
|
|
720
723
|
}
|
|
721
724
|
|
|
722
|
-
const result = await
|
|
725
|
+
const result = await runAgent(
|
|
723
726
|
subAgentName,
|
|
724
727
|
buildSubAgentRunInput(message, threadId, resourceId, parentContext),
|
|
725
728
|
params,
|
|
@@ -830,7 +833,7 @@ export async function buildToolDefs(
|
|
|
830
833
|
}
|
|
831
834
|
}
|
|
832
835
|
|
|
833
|
-
const hasToolHooks =
|
|
836
|
+
const hasToolHooks = agentMiddlewares?.some(
|
|
834
837
|
(mw) => mw.beforeToolCall || mw.afterToolCall
|
|
835
838
|
)
|
|
836
839
|
if (hasToolHooks) {
|
|
@@ -840,7 +843,7 @@ export async function buildToolDefs(
|
|
|
840
843
|
const toolCallId = randomUUID()
|
|
841
844
|
let args = (toolInput ?? {}) as Record<string, unknown>
|
|
842
845
|
|
|
843
|
-
for (const mw of
|
|
846
|
+
for (const mw of agentMiddlewares!) {
|
|
844
847
|
if (mw.beforeToolCall) {
|
|
845
848
|
const beforeResult = await mw.beforeToolCall(singletonServices, {
|
|
846
849
|
toolName: tool.name,
|
|
@@ -865,8 +868,8 @@ export async function buildToolDefs(
|
|
|
865
868
|
}
|
|
866
869
|
const durationMs = Date.now() - startTime
|
|
867
870
|
|
|
868
|
-
for (let i =
|
|
869
|
-
const mw =
|
|
871
|
+
for (let i = agentMiddlewares!.length - 1; i >= 0; i--) {
|
|
872
|
+
const mw = agentMiddlewares![i]
|
|
870
873
|
if (mw.afterToolCall) {
|
|
871
874
|
const afterResult = await mw.afterToolCall(singletonServices, {
|
|
872
875
|
toolName: tool.name,
|
|
@@ -892,8 +895,8 @@ export async function buildToolDefs(
|
|
|
892
895
|
|
|
893
896
|
export async function prepareAgentRun(
|
|
894
897
|
agentName: string,
|
|
895
|
-
input:
|
|
896
|
-
params:
|
|
898
|
+
input: AgentInput,
|
|
899
|
+
params: RunAgentParams,
|
|
897
900
|
agentSessionMap: Map<string, string>,
|
|
898
901
|
streamContext?: StreamContext
|
|
899
902
|
) {
|
|
@@ -902,7 +905,7 @@ export async function prepareAgentRun(
|
|
|
902
905
|
|
|
903
906
|
await assertAgentAuthorized(agent, params, packageName)
|
|
904
907
|
|
|
905
|
-
let agentRunner = singletonServices.
|
|
908
|
+
let agentRunner = singletonServices.agentRunner
|
|
906
909
|
if (!agentRunner) {
|
|
907
910
|
throw new AIProviderNotConfiguredError()
|
|
908
911
|
}
|
|
@@ -946,7 +949,7 @@ export async function prepareAgentRun(
|
|
|
946
949
|
}
|
|
947
950
|
}
|
|
948
951
|
|
|
949
|
-
let messages:
|
|
952
|
+
let messages: AgentMessage[] = []
|
|
950
953
|
if (storage) {
|
|
951
954
|
// knowledge: decisions/internals/agent-context-waits-for-a-tool-result-still-being-written.md
|
|
952
955
|
await awaitPendingInterruptNote(threadId)
|
|
@@ -962,7 +965,7 @@ export async function prepareAgentRun(
|
|
|
962
965
|
workingMemoryJsonSchema
|
|
963
966
|
)
|
|
964
967
|
|
|
965
|
-
const userContent:
|
|
968
|
+
const userContent: AgentMessage['content'] = input.attachments?.length
|
|
966
969
|
? [
|
|
967
970
|
// knowledge: decisions/internals/an-empty-text-part-is-omitted-from-an-agent-message.md
|
|
968
971
|
...(input.message
|
|
@@ -976,12 +979,12 @@ export async function prepareAgentRun(
|
|
|
976
979
|
url: a.url,
|
|
977
980
|
mediaType: a.mediaType,
|
|
978
981
|
...(a.filename ? { filename: a.filename } : {}),
|
|
979
|
-
}) as
|
|
982
|
+
}) as AgentContentPart
|
|
980
983
|
),
|
|
981
984
|
]
|
|
982
985
|
: input.message
|
|
983
986
|
|
|
984
|
-
const userMessage:
|
|
987
|
+
const userMessage: AgentMessage = {
|
|
985
988
|
id: randomUUID(),
|
|
986
989
|
role: 'user',
|
|
987
990
|
content: userContent,
|
|
@@ -991,7 +994,8 @@ export async function prepareAgentRun(
|
|
|
991
994
|
const allMessages = [...contextMessages, ...messages, userMessage]
|
|
992
995
|
const trimmedMessages = trimMessages(allMessages)
|
|
993
996
|
|
|
994
|
-
const
|
|
997
|
+
const agentMiddlewares: PikkuAgentMiddlewareHooks[] =
|
|
998
|
+
agent.agentMiddleware ?? []
|
|
995
999
|
|
|
996
1000
|
const { tools, missingRpcs } = await buildToolDefs(
|
|
997
1001
|
params,
|
|
@@ -1000,7 +1004,7 @@ export async function prepareAgentRun(
|
|
|
1000
1004
|
resolvedName,
|
|
1001
1005
|
packageName,
|
|
1002
1006
|
streamContext,
|
|
1003
|
-
|
|
1007
|
+
agentMiddlewares,
|
|
1004
1008
|
agent.agentMode,
|
|
1005
1009
|
input.context
|
|
1006
1010
|
)
|
|
@@ -1024,7 +1028,7 @@ export async function prepareAgentRun(
|
|
|
1024
1028
|
|
|
1025
1029
|
const maxSteps = resolved.maxSteps ?? 10
|
|
1026
1030
|
|
|
1027
|
-
const runnerParams:
|
|
1031
|
+
const runnerParams: AgentRunnerParams = {
|
|
1028
1032
|
model: resolved.model,
|
|
1029
1033
|
temperature: resolved.temperature,
|
|
1030
1034
|
instructions,
|