@pikku/core 0.12.82 → 0.12.84
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 +101 -0
- package/README.md +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 +18 -0
- package/dist/ecosystem/agent.js +6 -0
- package/dist/ecosystem/ai-agent.d.ts +18 -0
- package/dist/ecosystem/ai-agent.js +6 -0
- package/dist/ecosystem/ai-scorer.d.ts +12 -0
- package/dist/ecosystem/ai-scorer.js +5 -0
- package/dist/ecosystem/channel/local.d.ts +1 -0
- package/dist/ecosystem/channel/local.js +1 -0
- package/dist/ecosystem/channel.d.ts +12 -0
- package/dist/ecosystem/channel.js +4 -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 +9 -0
- package/dist/ecosystem/credential.js +1 -0
- package/dist/ecosystem/dev.d.ts +8 -0
- package/dist/ecosystem/dev.js +1 -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/gateway.js +1 -0
- package/dist/ecosystem/hmac.d.ts +1 -0
- package/dist/ecosystem/hmac.js +1 -0
- package/dist/ecosystem/http.d.ts +11 -0
- package/dist/ecosystem/http.js +3 -0
- package/dist/ecosystem/mcp.d.ts +3 -0
- package/dist/ecosystem/mcp.js +2 -0
- package/dist/ecosystem/middleware.d.ts +17 -0
- package/dist/ecosystem/middleware.js +6 -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/node.js +1 -0
- package/dist/ecosystem/oauth2.d.ts +1 -0
- package/dist/ecosystem/oauth2.js +1 -0
- package/dist/ecosystem/persona.d.ts +15 -0
- package/dist/ecosystem/persona.js +4 -0
- package/dist/ecosystem/queue.d.ts +11 -0
- package/dist/ecosystem/queue.js +2 -0
- package/dist/ecosystem/remote.d.ts +8 -0
- package/dist/ecosystem/remote.js +1 -0
- package/dist/ecosystem/role.d.ts +3 -0
- package/dist/ecosystem/role.js +2 -0
- package/dist/ecosystem/rpc.d.ts +4 -0
- package/dist/ecosystem/rpc.js +2 -0
- package/dist/ecosystem/safe-fetch.d.ts +7 -0
- package/dist/ecosystem/safe-fetch.js +1 -0
- package/dist/ecosystem/scenario.d.ts +15 -0
- package/dist/ecosystem/scenario.js +4 -0
- package/dist/ecosystem/scheduler.d.ts +2 -0
- package/dist/ecosystem/scheduler.js +1 -0
- package/dist/ecosystem/schema.d.ts +1 -0
- package/dist/ecosystem/schema.js +1 -0
- package/dist/ecosystem/scope.d.ts +3 -0
- package/dist/ecosystem/scope.js +2 -0
- package/dist/ecosystem/secret.d.ts +9 -0
- package/dist/ecosystem/secret.js +1 -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 +1 -0
- package/dist/ecosystem/services/local-content.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 +28 -0
- package/dist/ecosystem/services.js +6 -0
- package/dist/ecosystem/testing.d.ts +7 -0
- package/dist/ecosystem/testing.js +1 -0
- package/dist/ecosystem/trigger.d.ts +1 -0
- package/dist/ecosystem/trigger.js +1 -0
- package/dist/ecosystem/types.d.ts +9 -0
- package/dist/ecosystem/types.js +5 -0
- package/dist/ecosystem/variable.d.ts +8 -0
- package/dist/ecosystem/variable.js +1 -0
- package/dist/ecosystem/virtual-user.d.ts +21 -0
- package/dist/ecosystem/virtual-user.js +5 -0
- package/dist/ecosystem/workflow.d.ts +18 -0
- package/dist/ecosystem/workflow.js +4 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.js +3 -3
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/middleware/auth-bearer.d.ts +1 -1
- package/dist/middleware/auth-cookie.d.ts +1 -1
- package/dist/middleware/cors.d.ts +1 -1
- package/dist/middleware/remote-auth.d.ts +1 -1
- package/dist/middleware/telemetry.d.ts +2 -2
- package/dist/services/agent-run-state-service.d.ts +29 -0
- package/dist/services/agent-run-state-service.js +1 -0
- package/dist/services/agent-runner-service.d.ts +220 -0
- package/dist/services/agent-runner-service.js +1 -0
- package/dist/services/agent-storage-service.d.ts +18 -0
- package/dist/services/agent-storage-service.js +1 -0
- package/dist/services/http-personas.d.ts +1 -1
- package/dist/services/http-personas.js +3 -3
- package/dist/services/in-memory-agent-run-state-service.d.ts +19 -0
- package/dist/services/in-memory-agent-run-state-service.js +54 -0
- package/dist/services/index.d.ts +9 -10
- package/dist/services/index.js +3 -3
- package/dist/services/meta-service.d.ts +5 -4
- 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/agent-storage-service-tests.js +302 -0
- package/dist/testing/service-tests.d.ts +4 -4
- package/dist/testing/service-tests.js +4 -4
- package/dist/types/core.types.d.ts +12 -11
- package/dist/types/core.types.js +1 -1
- package/dist/types/state.types.d.ts +11 -6
- package/dist/wirings/actor-flow/run-conversation.d.ts +2 -2
- package/dist/wirings/agent/agent-agui.d.ts +79 -0
- package/dist/wirings/agent/agent-agui.js +327 -0
- package/dist/wirings/agent/agent-finalize.d.ts +58 -0
- package/dist/wirings/agent/agent-finalize.js +138 -0
- package/dist/wirings/agent/agent-helpers.d.ts +35 -0
- package/dist/wirings/agent/agent-helpers.js +47 -0
- package/dist/wirings/agent/agent-interrupt.d.ts +153 -0
- package/dist/wirings/agent/agent-interrupt.js +257 -0
- package/dist/wirings/agent/agent-memory.d.ts +42 -0
- package/dist/wirings/agent/agent-memory.js +333 -0
- package/dist/wirings/agent/agent-model-config.d.ts +16 -0
- package/dist/wirings/agent/agent-model-config.js +51 -0
- package/dist/wirings/agent/agent-prepare.d.ts +117 -0
- package/dist/wirings/agent/agent-prepare.js +728 -0
- package/dist/wirings/agent/agent-registry.d.ts +16 -0
- package/dist/wirings/agent/agent-registry.js +51 -0
- package/dist/wirings/agent/agent-rpc.d.ts +15 -0
- package/dist/wirings/agent/agent-rpc.js +53 -0
- package/dist/wirings/agent/agent-runner.d.ts +7 -0
- package/dist/wirings/agent/agent-runner.js +580 -0
- package/dist/wirings/agent/agent-stream.d.ts +41 -0
- package/dist/wirings/agent/agent-stream.js +1029 -0
- package/dist/wirings/agent/agent-turn.d.ts +57 -0
- package/dist/wirings/agent/agent-turn.js +82 -0
- package/dist/wirings/agent/agent-utils.d.ts +1 -0
- package/dist/wirings/agent/agent-utils.js +1 -0
- package/dist/wirings/agent/agent.types.d.ts +625 -0
- 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/agent/voice-input.d.ts +69 -0
- package/dist/wirings/agent/voice-input.js +150 -0
- package/dist/wirings/agent/voice-output.d.ts +85 -0
- package/dist/wirings/agent/voice-output.js +196 -0
- package/dist/wirings/agent-scorer/agent-scorer-grade.d.ts +26 -0
- package/dist/wirings/agent-scorer/agent-scorer-grade.js +33 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.d.ts +17 -0
- package/dist/wirings/agent-scorer/agent-scorer-judge.js +92 -0
- package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +15 -0
- package/dist/wirings/agent-scorer/agent-scorer-live.js +38 -0
- package/dist/wirings/agent-scorer/agent-scorer-registry.d.ts +18 -0
- package/dist/wirings/agent-scorer/agent-scorer-registry.js +46 -0
- package/dist/wirings/agent-scorer/agent-scorer-sampling.d.ts +8 -0
- package/dist/wirings/agent-scorer/agent-scorer-sampling.js +31 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.d.ts +10 -0
- package/dist/wirings/agent-scorer/agent-scorer-snapshots.js +40 -0
- package/dist/wirings/agent-scorer/agent-scorer-worker.d.ts +15 -0
- package/dist/wirings/agent-scorer/agent-scorer-worker.js +60 -0
- package/dist/wirings/agent-scorer/agent-scorer.d.ts +39 -0
- package/dist/wirings/agent-scorer/agent-scorer.js +40 -0
- package/dist/wirings/agent-scorer/agent-scorer.types.d.ts +90 -0
- 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/ai-agent/ai-agent-prepare.js +2 -0
- package/dist/wirings/ai-agent/voice-output.d.ts +1 -2
- package/dist/wirings/channel/channel-rpc.types.d.ts +2 -2
- package/dist/wirings/rpc/addon-runner.d.ts +4 -0
- package/dist/wirings/rpc/addon-runner.js +14 -2
- package/dist/wirings/rpc/rpc-runner.d.ts +1 -1
- package/dist/wirings/rpc/rpc-runner.js +4 -2
- package/dist/wirings/rpc/rpc-types.d.ts +5 -1
- package/dist/wirings/rpc/wire-addon.d.ts +12 -0
- package/dist/wirings/rpc/wire-addon.js +4 -0
- 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/workflow/feature.d.ts +2 -1
- package/dist/wirings/workflow/index.d.ts +3 -14
- package/dist/wirings/workflow/index.js +0 -8
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +10 -0
- package/dist/wirings/workflow/pikku-scenario-service.js +9 -0
- package/dist/wirings/workflow/run-timeline.d.ts +1 -2
- package/dist/wirings/workflow/scenario.types.d.ts +37 -0
- package/dist/wirings/workflow/scenario.types.js +1 -0
- package/dist/wirings/workflow/workflow.types.d.ts +2 -37
- 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/actor-flow-drives-the-target-through-a-transport-seam.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-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/speech-synthesis-picks-a-voice-per-sentence-and-warns-once.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-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-transcript-event-is-sent-ahead-of-the-run.md +2 -2
- package/knowledge/decisions/internals/thread-history-records-the-transcript-not-the-audio.md +2 -2
- package/knowledge/decisions/internals/voice-output-speaks-unless-voice-input-explicitly-says-otherwise.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} +3 -3
- 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-empty-owners-constraint-matches-nothing.md +3 -3
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +20 -13
- package/knowledge/decisions/security/index.md +1 -2
- package/package.json +4 -4
- package/scripts/generate-api-report.mts +32 -8
- package/src/agent-naming.test.ts +68 -0
- package/src/ecosystem/agent-scorer.ts +24 -0
- package/src/ecosystem/agent.ts +42 -0
- package/src/ecosystem/channel/local.ts +1 -0
- package/src/ecosystem/channel.ts +22 -0
- package/src/ecosystem/cli/channel.ts +25 -0
- package/src/ecosystem/cli.ts +21 -0
- package/src/ecosystem/credential.ts +10 -0
- package/src/ecosystem/dev.ts +12 -0
- package/src/ecosystem/function.ts +28 -0
- package/src/ecosystem/gateway.ts +4 -0
- package/src/ecosystem/hmac.ts +1 -0
- package/src/ecosystem/http.ts +22 -0
- package/src/ecosystem/mcp.ts +17 -0
- package/src/ecosystem/middleware.ts +27 -0
- package/src/ecosystem/node-host-resolver.ts +1 -0
- package/src/ecosystem/node.ts +5 -0
- package/src/ecosystem/oauth2.ts +4 -0
- package/src/ecosystem/persona.ts +30 -0
- package/src/ecosystem/queue.ts +23 -0
- package/src/ecosystem/remote.ts +9 -0
- package/src/ecosystem/role.ts +13 -0
- package/src/ecosystem/rpc.ts +7 -0
- package/src/ecosystem/safe-fetch.ts +8 -0
- package/src/ecosystem/scenario.ts +32 -0
- package/src/ecosystem/scheduler.ts +5 -0
- package/src/ecosystem/schema.ts +1 -0
- package/src/ecosystem/scope.ts +14 -0
- package/src/ecosystem/secret.ts +15 -0
- package/src/ecosystem/services/istanbul-coverage.ts +1 -0
- package/src/ecosystem/services/local-content-request-handler.ts +16 -0
- package/src/ecosystem/services/local-content.ts +1 -0
- package/src/ecosystem/services/v8-coverage.ts +1 -0
- package/src/ecosystem/services.ts +82 -0
- package/src/ecosystem/testing.ts +8 -0
- package/src/ecosystem/trigger.ts +7 -0
- package/src/ecosystem/types.ts +34 -0
- package/src/ecosystem/variable.ts +14 -0
- package/src/ecosystem/virtual-user.ts +48 -0
- package/src/ecosystem/workflow.ts +68 -0
- package/src/index.ts +8 -19
- package/src/pikku-state.ts +3 -3
- package/src/public-surface.json +183 -91
- package/src/public-surface.json.README +20 -2
- package/src/public-surface.test.ts +31 -3
- 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/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/index.ts +13 -24
- package/src/services/meta-service.ts +5 -7
- 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 +13 -13
- package/src/types/state.types.ts +11 -10
- package/src/wirings/actor-flow/run-conversation.test.ts +2 -2
- package/src/wirings/actor-flow/run-conversation.ts +7 -9
- 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} +54 -51
- 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} +90 -80
- 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} +147 -146
- 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/{ai-agent/ai-agent.types.ts → agent/agent.types.ts} +51 -48
- package/src/wirings/agent/index.ts +56 -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 +23 -23
- 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/{ai-scorer/ai-scorer-judge.test.ts → agent-scorer/agent-scorer-judge.test.ts} +11 -14
- package/src/wirings/{ai-scorer/ai-scorer-judge.ts → agent-scorer/agent-scorer-judge.ts} +11 -11
- 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} +7 -7
- package/src/wirings/{ai-scorer/ai-scorer.types.ts → agent-scorer/agent-scorer.types.ts} +6 -6
- package/src/wirings/agent-scorer/index.ts +22 -0
- package/src/wirings/channel/channel-rpc.types.ts +2 -2
- package/src/wirings/rpc/addon-runner.ts +31 -3
- package/src/wirings/rpc/addon-secrets.test.ts +130 -0
- package/src/wirings/rpc/rpc-runner.ts +4 -2
- package/src/wirings/rpc/rpc-types.ts +5 -1
- package/src/wirings/rpc/wire-addon.ts +16 -0
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +1 -1
- 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/workflow/feature.ts +2 -5
- package/src/wirings/workflow/index.ts +1 -49
- package/src/wirings/workflow/pikku-scenario-service.ts +21 -1
- package/src/wirings/workflow/run-timeline.ts +1 -1
- package/src/wirings/workflow/scenario.types.ts +63 -0
- package/src/wirings/workflow/workflow.types.ts +1 -54
- package/src/wirings-stay-decoupled.test.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/src/wirings/ai-agent/index.ts +0 -65
- package/src/wirings/ai-scorer/index.ts +0 -24
- /package/src/wirings/{ai-agent/ai-agent-utils.ts → agent/agent-utils.ts} +0 -0
- /package/src/wirings/{ai-scorer/ai-scorer-sampling.ts → agent-scorer/agent-scorer-sampling.ts} +0 -0
|
@@ -2,10 +2,10 @@ import { beforeEach, describe, test } from 'node:test'
|
|
|
2
2
|
import assert from 'node:assert/strict'
|
|
3
3
|
|
|
4
4
|
import { resetPikkuState, pikkuState } from '../../pikku-state.js'
|
|
5
|
-
import {
|
|
5
|
+
import { runAgent, resumeAgentSync } from './agent-runner.js'
|
|
6
6
|
import { ForbiddenError } from '../../errors/errors.js'
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
7
|
+
import type { AgentMessage, CoreAgent } from './agent.types.js'
|
|
8
|
+
import type { AgentRunnerParams } from '../../services/agent-runner-service.js'
|
|
9
9
|
|
|
10
10
|
const logger = {
|
|
11
11
|
debug: () => {},
|
|
@@ -18,12 +18,12 @@ const sessionService = (session?: Record<string, unknown>) =>
|
|
|
18
18
|
({ get: () => session, setInitial: () => {}, sessionChanged: false }) as any
|
|
19
19
|
|
|
20
20
|
const addTestAgent = (agentName: string) => {
|
|
21
|
-
const agent:
|
|
21
|
+
const agent: CoreAgent = {
|
|
22
22
|
name: agentName,
|
|
23
23
|
description: 'test agent',
|
|
24
24
|
instructions: 'be helpful',
|
|
25
25
|
model: 'test/test-model',
|
|
26
|
-
} as
|
|
26
|
+
} as CoreAgent
|
|
27
27
|
|
|
28
28
|
pikkuState(null, 'agent', 'agentsMeta')[agentName] = {
|
|
29
29
|
...agent,
|
|
@@ -36,9 +36,9 @@ const addTestAgent = (agentName: string) => {
|
|
|
36
36
|
|
|
37
37
|
type Harness = {
|
|
38
38
|
threads: Map<string, { id: string; resourceId: string }>
|
|
39
|
-
messages: Map<string,
|
|
39
|
+
messages: Map<string, AgentMessage[]>
|
|
40
40
|
created: Array<{ threadId: string; resourceId: string }>
|
|
41
|
-
modelSawMessages:
|
|
41
|
+
modelSawMessages: AgentMessage[][]
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
const createHarness = (
|
|
@@ -48,7 +48,7 @@ const createHarness = (
|
|
|
48
48
|
const threads = new Map(
|
|
49
49
|
seedThreads.map((t) => [t.threadId, { id: t.threadId, ...t }])
|
|
50
50
|
)
|
|
51
|
-
const messages = new Map<string,
|
|
51
|
+
const messages = new Map<string, AgentMessage[]>(
|
|
52
52
|
Object.entries(seedMessages).map(([threadId, texts]) => [
|
|
53
53
|
threadId,
|
|
54
54
|
texts.map((text, index) => ({
|
|
@@ -60,7 +60,7 @@ const createHarness = (
|
|
|
60
60
|
])
|
|
61
61
|
)
|
|
62
62
|
const created: Harness['created'] = []
|
|
63
|
-
const modelSawMessages:
|
|
63
|
+
const modelSawMessages: AgentMessage[][] = []
|
|
64
64
|
|
|
65
65
|
const storage = {
|
|
66
66
|
getThread: async (threadId: string) => {
|
|
@@ -75,7 +75,7 @@ const createHarness = (
|
|
|
75
75
|
return thread
|
|
76
76
|
},
|
|
77
77
|
getMessages: async (threadId: string) => messages.get(threadId) ?? [],
|
|
78
|
-
saveMessages: async (threadId: string, newMessages:
|
|
78
|
+
saveMessages: async (threadId: string, newMessages: AgentMessage[]) => {
|
|
79
79
|
messages.set(threadId, [
|
|
80
80
|
...(messages.get(threadId) ?? []),
|
|
81
81
|
...newMessages,
|
|
@@ -87,9 +87,9 @@ const createHarness = (
|
|
|
87
87
|
|
|
88
88
|
pikkuState(null, 'package', 'singletonServices', {
|
|
89
89
|
logger,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
run: async (params:
|
|
90
|
+
agentStorage: storage,
|
|
91
|
+
agentRunner: {
|
|
92
|
+
run: async (params: AgentRunnerParams) => {
|
|
93
93
|
modelSawMessages.push(params.messages)
|
|
94
94
|
return {
|
|
95
95
|
text: 'ok',
|
|
@@ -100,7 +100,7 @@ const createHarness = (
|
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
102
|
},
|
|
103
|
-
|
|
103
|
+
agentRunState: {
|
|
104
104
|
createRun: async () => 'run-1',
|
|
105
105
|
updateRun: async () => {},
|
|
106
106
|
getRun: async () => ({
|
|
@@ -135,7 +135,7 @@ describe('AI agent thread ownership without a session', () => {
|
|
|
135
135
|
|
|
136
136
|
await assert.rejects(
|
|
137
137
|
() =>
|
|
138
|
-
|
|
138
|
+
runAgent(
|
|
139
139
|
'ownership-agent',
|
|
140
140
|
{
|
|
141
141
|
message: 'what did we discuss?',
|
|
@@ -160,11 +160,7 @@ describe('AI agent thread ownership without a session', () => {
|
|
|
160
160
|
|
|
161
161
|
await assert.rejects(
|
|
162
162
|
() =>
|
|
163
|
-
|
|
164
|
-
'run-1',
|
|
165
|
-
[{ toolCallId: 'tc-1', approved: true }],
|
|
166
|
-
{}
|
|
167
|
-
),
|
|
163
|
+
resumeAgentSync('run-1', [{ toolCallId: 'tc-1', approved: true }], {}),
|
|
168
164
|
(error: unknown) => error instanceof ForbiddenError
|
|
169
165
|
)
|
|
170
166
|
})
|
|
@@ -173,7 +169,7 @@ describe('AI agent thread ownership without a session', () => {
|
|
|
173
169
|
addTestAgent('ownership-agent')
|
|
174
170
|
const harness = createHarness()
|
|
175
171
|
|
|
176
|
-
const result = await
|
|
172
|
+
const result = await runAgent(
|
|
177
173
|
'ownership-agent',
|
|
178
174
|
{ message: 'hello', threadId: 'thread-new', resourceId: 'whatever' },
|
|
179
175
|
{}
|
|
@@ -198,12 +194,12 @@ describe('AI agent thread ownership without a session', () => {
|
|
|
198
194
|
const harness = createHarness()
|
|
199
195
|
const requestParams = {}
|
|
200
196
|
|
|
201
|
-
await
|
|
197
|
+
await runAgent(
|
|
202
198
|
'ownership-agent',
|
|
203
199
|
{ message: 'first', threadId: 'thread-sub', resourceId: 'ignored' },
|
|
204
200
|
requestParams
|
|
205
201
|
)
|
|
206
|
-
await
|
|
202
|
+
await runAgent(
|
|
207
203
|
'ownership-agent',
|
|
208
204
|
{ message: 'second', threadId: 'thread-sub', resourceId: 'ignored' },
|
|
209
205
|
requestParams
|
|
@@ -217,12 +213,12 @@ describe('AI agent thread ownership without a session', () => {
|
|
|
217
213
|
addTestAgent('ownership-agent')
|
|
218
214
|
const harness = createHarness()
|
|
219
215
|
|
|
220
|
-
await
|
|
216
|
+
await runAgent(
|
|
221
217
|
'ownership-agent',
|
|
222
218
|
{ message: 'hello', threadId: 'thread-a', resourceId: 'shared' },
|
|
223
219
|
{}
|
|
224
220
|
)
|
|
225
|
-
await
|
|
221
|
+
await runAgent(
|
|
226
222
|
'ownership-agent',
|
|
227
223
|
{ message: 'hello', threadId: 'thread-b', resourceId: 'shared' },
|
|
228
224
|
{}
|
|
@@ -243,7 +239,7 @@ describe('AI agent thread ownership with a session', () => {
|
|
|
243
239
|
{ 'thread-alice': ['earlier alice turn'] }
|
|
244
240
|
)
|
|
245
241
|
|
|
246
|
-
const result = await
|
|
242
|
+
const result = await runAgent(
|
|
247
243
|
'ownership-agent',
|
|
248
244
|
{
|
|
249
245
|
message: 'and then?',
|
|
@@ -265,7 +261,7 @@ describe('AI agent thread ownership with a session', () => {
|
|
|
265
261
|
addTestAgent('ownership-agent')
|
|
266
262
|
const harness = createHarness()
|
|
267
263
|
|
|
268
|
-
await
|
|
264
|
+
await runAgent(
|
|
269
265
|
'ownership-agent',
|
|
270
266
|
{ message: 'hello', threadId: 'thread-new', resourceId: 'project-1' },
|
|
271
267
|
{ sessionService: sessionService({ userId: 'alice' }) }
|
|
@@ -285,7 +281,7 @@ describe('AI agent thread ownership with a session', () => {
|
|
|
285
281
|
|
|
286
282
|
await assert.rejects(
|
|
287
283
|
() =>
|
|
288
|
-
|
|
284
|
+
runAgent(
|
|
289
285
|
'ownership-agent',
|
|
290
286
|
{
|
|
291
287
|
message: 'what did we discuss?',
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { describe, test } from 'node:test'
|
|
2
2
|
import assert from 'node:assert/strict'
|
|
3
3
|
|
|
4
|
-
import { toAccumulatedStep } from './
|
|
5
|
-
import type {
|
|
4
|
+
import { toAccumulatedStep } from './agent-turn.js'
|
|
5
|
+
import type { AgentStepResult } from '../../services/agent-runner-service.js'
|
|
6
6
|
|
|
7
|
-
const stepResult = (
|
|
8
|
-
overrides?: Partial<AIAgentStepResult>
|
|
9
|
-
): AIAgentStepResult => ({
|
|
7
|
+
const stepResult = (overrides?: Partial<AgentStepResult>): AgentStepResult => ({
|
|
10
8
|
text: '',
|
|
11
9
|
toolCalls: [],
|
|
12
10
|
toolResults: [],
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CoreSingletonServices } from '../../types/core.types.js'
|
|
2
|
-
import type {
|
|
2
|
+
import type { PikkuAgentMiddlewareHooks } from './agent.types.js'
|
|
3
3
|
|
|
4
4
|
/** Exactly what `modifyInput` accepts and returns, taken from the hook itself. */
|
|
5
5
|
type TurnInput = Pick<
|
|
6
|
-
Parameters<NonNullable<
|
|
6
|
+
Parameters<NonNullable<PikkuAgentMiddlewareHooks['modifyInput']>>[1],
|
|
7
7
|
'messages' | 'instructions'
|
|
8
8
|
>
|
|
9
9
|
|
|
@@ -16,13 +16,13 @@ type TurnInput = Pick<
|
|
|
16
16
|
* leaves the transcript there for `voiceOutput`).
|
|
17
17
|
*/
|
|
18
18
|
export const applyInputMiddleware = async (
|
|
19
|
-
|
|
19
|
+
agentMiddlewares: PikkuAgentMiddlewareHooks[],
|
|
20
20
|
singletonServices: CoreSingletonServices,
|
|
21
21
|
input: TurnInput,
|
|
22
22
|
sharedNotes: Record<string, unknown>
|
|
23
23
|
): Promise<TurnInput> => {
|
|
24
24
|
let { messages, instructions } = input
|
|
25
|
-
for (const mw of
|
|
25
|
+
for (const mw of agentMiddlewares) {
|
|
26
26
|
if (!mw.modifyInput) continue
|
|
27
27
|
const result = await mw.modifyInput(singletonServices, {
|
|
28
28
|
messages,
|
|
@@ -37,7 +37,7 @@ export const applyInputMiddleware = async (
|
|
|
37
37
|
|
|
38
38
|
/** The step fields both agent paths hand to `afterStep`, taken from the hook. */
|
|
39
39
|
type StepResult = Omit<
|
|
40
|
-
Parameters<NonNullable<
|
|
40
|
+
Parameters<NonNullable<PikkuAgentMiddlewareHooks['afterStep']>>[1],
|
|
41
41
|
'stepNumber'
|
|
42
42
|
>
|
|
43
43
|
|
|
@@ -46,12 +46,12 @@ type StepResult = Omit<
|
|
|
46
46
|
* ordinal — a hook that wants the run's totals accumulates them itself.
|
|
47
47
|
*/
|
|
48
48
|
export const notifyAfterStep = async (
|
|
49
|
-
|
|
49
|
+
agentMiddlewares: PikkuAgentMiddlewareHooks[],
|
|
50
50
|
singletonServices: CoreSingletonServices,
|
|
51
51
|
stepNumber: number,
|
|
52
52
|
stepResult: StepResult
|
|
53
53
|
): Promise<void> => {
|
|
54
|
-
for (const mw of
|
|
54
|
+
for (const mw of agentMiddlewares) {
|
|
55
55
|
if (!mw.afterStep) continue
|
|
56
56
|
await mw.afterStep(singletonServices, {
|
|
57
57
|
stepNumber,
|
|
@@ -7,12 +7,12 @@ import type {
|
|
|
7
7
|
MiddlewareMetadata,
|
|
8
8
|
PermissionMetadata,
|
|
9
9
|
} from '../../types/core.types.js'
|
|
10
|
-
import type { AIProviderOptions } from '../../services/
|
|
10
|
+
import type { AIProviderOptions } from '../../services/agent-runner-service.js'
|
|
11
11
|
import type { PikkuChannel } from '../channel/channel.types.js'
|
|
12
12
|
import type { CorePikkuChannelMiddleware } from '../channel/channel.types.js'
|
|
13
13
|
import type { ApprovalPolicy } from '../channel/channel-rpc.js'
|
|
14
14
|
|
|
15
|
-
export interface
|
|
15
|
+
export interface AgentThread {
|
|
16
16
|
id: string
|
|
17
17
|
resourceId: string
|
|
18
18
|
title?: string
|
|
@@ -21,7 +21,7 @@ export interface AIThread {
|
|
|
21
21
|
updatedAt: Date
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export type
|
|
24
|
+
export type AgentContentPart =
|
|
25
25
|
| { type: 'text'; text: string }
|
|
26
26
|
| { type: 'image'; data?: string; url?: string; mediaType?: string }
|
|
27
27
|
| {
|
|
@@ -41,13 +41,13 @@ export type AIContentPart =
|
|
|
41
41
|
spec: unknown
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
export interface
|
|
44
|
+
export interface AgentToolCall {
|
|
45
45
|
id: string
|
|
46
46
|
name: string
|
|
47
47
|
args: Record<string, unknown>
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export interface
|
|
50
|
+
export interface AgentToolResult {
|
|
51
51
|
id: string
|
|
52
52
|
name: string
|
|
53
53
|
result: string
|
|
@@ -60,12 +60,12 @@ export interface AIToolResult {
|
|
|
60
60
|
error?: string
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export interface
|
|
63
|
+
export interface AgentMessage {
|
|
64
64
|
id: string
|
|
65
65
|
role: 'system' | 'user' | 'assistant' | 'tool'
|
|
66
|
-
content?: string |
|
|
67
|
-
toolCalls?:
|
|
68
|
-
toolResults?:
|
|
66
|
+
content?: string | AgentContentPart[]
|
|
67
|
+
toolCalls?: AgentToolCall[]
|
|
68
|
+
toolResults?: AgentToolResult[]
|
|
69
69
|
reasoningContent?: string
|
|
70
70
|
/**
|
|
71
71
|
* Set on an assistant message whose generation was cut short by
|
|
@@ -87,7 +87,7 @@ export interface AIMessage {
|
|
|
87
87
|
createdAt: Date
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
export interface
|
|
90
|
+
export interface AgentStep {
|
|
91
91
|
usage: { inputTokens: number; outputTokens: number }
|
|
92
92
|
toolCalls?: {
|
|
93
93
|
name: string
|
|
@@ -98,7 +98,7 @@ export interface AIAgentStep {
|
|
|
98
98
|
}[]
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
export interface
|
|
101
|
+
export interface AgentInputAttachment {
|
|
102
102
|
type: 'image' | 'file'
|
|
103
103
|
data?: string
|
|
104
104
|
url?: string
|
|
@@ -106,11 +106,11 @@ export interface AIAgentInputAttachment {
|
|
|
106
106
|
filename?: string
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
export interface
|
|
109
|
+
export interface AgentInput {
|
|
110
110
|
message: string
|
|
111
111
|
threadId: string
|
|
112
112
|
resourceId: string
|
|
113
|
-
attachments?:
|
|
113
|
+
attachments?: AgentInputAttachment[]
|
|
114
114
|
model?: string
|
|
115
115
|
temperature?: number
|
|
116
116
|
/** Structured context injected into the system instructions for this request.
|
|
@@ -119,12 +119,12 @@ export interface AIAgentInput {
|
|
|
119
119
|
context?: string
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
export interface
|
|
122
|
+
export interface AgentOutput {
|
|
123
123
|
runId: string
|
|
124
124
|
text: string
|
|
125
125
|
object?: unknown
|
|
126
126
|
threadId: string
|
|
127
|
-
steps:
|
|
127
|
+
steps: AgentStep[]
|
|
128
128
|
usage: { inputTokens: number; outputTokens: number }
|
|
129
129
|
status?: 'completed' | 'suspended'
|
|
130
130
|
pendingApprovals?: Array<{
|
|
@@ -156,7 +156,7 @@ export type SessionScope = 'user' | 'org'
|
|
|
156
156
|
* written by whoever runs the server it executes on. A capability runs on
|
|
157
157
|
* someone else's machine, so it requires the field instead.
|
|
158
158
|
*/
|
|
159
|
-
export interface
|
|
159
|
+
export interface AgentToolDef extends Partial<ApprovalPolicy> {
|
|
160
160
|
name: string
|
|
161
161
|
description: string
|
|
162
162
|
inputSchema: Record<string, unknown>
|
|
@@ -178,14 +178,14 @@ export interface AIAgentToolDef extends Partial<ApprovalPolicy> {
|
|
|
178
178
|
forwardsApproval?: boolean
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
export interface
|
|
181
|
+
export interface PikkuAgentMiddlewareHooks<
|
|
182
182
|
State extends Record<string, unknown> = Record<string, unknown>,
|
|
183
183
|
Services = any,
|
|
184
184
|
> {
|
|
185
185
|
modifyInput?: (
|
|
186
186
|
services: Services,
|
|
187
187
|
ctx: {
|
|
188
|
-
messages:
|
|
188
|
+
messages: AgentMessage[]
|
|
189
189
|
instructions: string
|
|
190
190
|
/**
|
|
191
191
|
* Notes about this run that every middleware can read and write, as
|
|
@@ -206,14 +206,14 @@ export interface PikkuAIMiddlewareHooks<
|
|
|
206
206
|
shared: Record<string, unknown>
|
|
207
207
|
}
|
|
208
208
|
) =>
|
|
209
|
-
| Promise<{ messages:
|
|
210
|
-
| { messages:
|
|
209
|
+
| Promise<{ messages: AgentMessage[]; instructions: string }>
|
|
210
|
+
| { messages: AgentMessage[]; instructions: string }
|
|
211
211
|
|
|
212
212
|
modifyOutputStream?: (
|
|
213
213
|
services: Services,
|
|
214
214
|
ctx: {
|
|
215
|
-
event:
|
|
216
|
-
allEvents: readonly
|
|
215
|
+
event: AgentStreamEvent
|
|
216
|
+
allEvents: readonly AgentStreamEvent[]
|
|
217
217
|
/** Private to this middleware, for this run. Cross-middleware facts go in `shared`. */
|
|
218
218
|
state: State
|
|
219
219
|
/** Per-run notes shared with every middleware — see {@link modifyInput}. */
|
|
@@ -232,7 +232,7 @@ export interface PikkuAIMiddlewareHooks<
|
|
|
232
232
|
* it matters — and a hook that emits must make sure anything still
|
|
233
233
|
* outstanding has landed before it lets `done` through.
|
|
234
234
|
*/
|
|
235
|
-
emit: (event:
|
|
235
|
+
emit: (event: AgentStreamEvent) => Promise<void>
|
|
236
236
|
/**
|
|
237
237
|
* Aborts when the run is interrupted. Pass it to any provider call the
|
|
238
238
|
* hook makes: work started for a reply the user has already talked over
|
|
@@ -241,9 +241,9 @@ export interface PikkuAIMiddlewareHooks<
|
|
|
241
241
|
signal?: AbortSignal
|
|
242
242
|
}
|
|
243
243
|
) =>
|
|
244
|
-
| Promise<
|
|
245
|
-
|
|
|
246
|
-
|
|
|
244
|
+
| Promise<AgentStreamEvent | AgentStreamEvent[] | null>
|
|
245
|
+
| AgentStreamEvent
|
|
246
|
+
| AgentStreamEvent[]
|
|
247
247
|
| null
|
|
248
248
|
|
|
249
249
|
/**
|
|
@@ -265,20 +265,20 @@ export interface PikkuAIMiddlewareHooks<
|
|
|
265
265
|
services: Services,
|
|
266
266
|
ctx: {
|
|
267
267
|
text: string
|
|
268
|
-
messages:
|
|
268
|
+
messages: AgentMessage[]
|
|
269
269
|
usage: { inputTokens: number; outputTokens: number }
|
|
270
|
-
toolCalls: NonNullable<
|
|
270
|
+
toolCalls: NonNullable<AgentStep['toolCalls']>
|
|
271
271
|
}
|
|
272
272
|
) =>
|
|
273
273
|
| Promise<{
|
|
274
274
|
text: string
|
|
275
|
-
messages:
|
|
276
|
-
toolCalls?: NonNullable<
|
|
275
|
+
messages: AgentMessage[]
|
|
276
|
+
toolCalls?: NonNullable<AgentStep['toolCalls']>
|
|
277
277
|
}>
|
|
278
278
|
| {
|
|
279
279
|
text: string
|
|
280
|
-
messages:
|
|
281
|
-
toolCalls?: NonNullable<
|
|
280
|
+
messages: AgentMessage[]
|
|
281
|
+
toolCalls?: NonNullable<AgentStep['toolCalls']>
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
beforeToolCall?: (
|
|
@@ -327,12 +327,12 @@ export interface PikkuAIMiddlewareHooks<
|
|
|
327
327
|
ctx: {
|
|
328
328
|
error: Error
|
|
329
329
|
stepNumber: number
|
|
330
|
-
messages:
|
|
330
|
+
messages: AgentMessage[]
|
|
331
331
|
}
|
|
332
332
|
) => Promise<void> | void
|
|
333
333
|
}
|
|
334
334
|
|
|
335
|
-
export type
|
|
335
|
+
export type AgentMemoryConfig = {
|
|
336
336
|
storage?: string
|
|
337
337
|
vector?: string
|
|
338
338
|
embedder?: string
|
|
@@ -340,7 +340,7 @@ export type AIAgentMemoryConfig = {
|
|
|
340
340
|
workingMemory?: unknown
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
-
export type
|
|
343
|
+
export type CoreAgent<
|
|
344
344
|
PikkuPermission = CorePikkuPermission<any, any>,
|
|
345
345
|
PikkuMiddleware = CorePikkuMiddleware<any>,
|
|
346
346
|
Scope extends string = string,
|
|
@@ -382,7 +382,7 @@ export type CoreAIAgent<
|
|
|
382
382
|
*/
|
|
383
383
|
scorers?: Scorer[]
|
|
384
384
|
agentMode?: 'delegate' | 'supervise'
|
|
385
|
-
memory?:
|
|
385
|
+
memory?: AgentMemoryConfig
|
|
386
386
|
maxSteps?: number
|
|
387
387
|
toolChoice?: 'auto' | 'required' | 'none'
|
|
388
388
|
/**
|
|
@@ -400,15 +400,15 @@ export type CoreAIAgent<
|
|
|
400
400
|
tags?: string[]
|
|
401
401
|
prepareStep?: (ctx: {
|
|
402
402
|
stepNumber: number
|
|
403
|
-
messages:
|
|
404
|
-
tools:
|
|
403
|
+
messages: AgentMessage[]
|
|
404
|
+
tools: AgentToolDef[]
|
|
405
405
|
toolChoice: 'auto' | 'required' | 'none'
|
|
406
406
|
model: string
|
|
407
407
|
stop: () => void
|
|
408
408
|
}) => void | Promise<void>
|
|
409
409
|
middleware?: PikkuMiddleware[]
|
|
410
410
|
channelMiddleware?: CorePikkuChannelMiddleware<any, any>[]
|
|
411
|
-
|
|
411
|
+
agentMiddleware?: PikkuAgentMiddlewareHooks<any, any>[]
|
|
412
412
|
/**
|
|
413
413
|
* Whether a session is required to run this agent. Defaults to `false`, since
|
|
414
414
|
* agents are commonly invoked from an already-authenticated `pikkuFunc` or
|
|
@@ -429,7 +429,7 @@ export type CoreAIAgent<
|
|
|
429
429
|
permissions?: CorePermissionGroup<PikkuPermission>
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
export type
|
|
432
|
+
export type AgentStreamEvent =
|
|
433
433
|
| { type: 'step-start'; stepNumber: number; agent?: string; session?: string }
|
|
434
434
|
| { type: 'text-delta'; text: string; agent?: string; session?: string }
|
|
435
435
|
| { type: 'reasoning-delta'; text: string; agent?: string; session?: string }
|
|
@@ -555,7 +555,10 @@ export type AIStreamEvent =
|
|
|
555
555
|
}
|
|
556
556
|
| { type: 'done' }
|
|
557
557
|
|
|
558
|
-
export interface
|
|
558
|
+
export interface AgentStreamChannel extends PikkuChannel<
|
|
559
|
+
unknown,
|
|
560
|
+
AgentStreamEvent
|
|
561
|
+
> {}
|
|
559
562
|
|
|
560
563
|
export type PendingApproval =
|
|
561
564
|
| {
|
|
@@ -630,18 +633,18 @@ export interface AgentRunService {
|
|
|
630
633
|
owners?: string[]
|
|
631
634
|
limit?: number
|
|
632
635
|
offset?: number
|
|
633
|
-
}): Promise<
|
|
634
|
-
getThread(threadId: string): Promise<
|
|
635
|
-
getThreadMessages(threadId: string): Promise<
|
|
636
|
+
}): Promise<AgentThread[]>
|
|
637
|
+
getThread(threadId: string): Promise<AgentThread | null>
|
|
638
|
+
getThreadMessages(threadId: string): Promise<AgentMessage[]>
|
|
636
639
|
getThreadRuns(threadId: string): Promise<AgentRunRow[]>
|
|
637
640
|
deleteThread(threadId: string): Promise<boolean>
|
|
638
641
|
getDistinctAgentNames(): Promise<string[]>
|
|
639
642
|
}
|
|
640
643
|
|
|
641
|
-
export type
|
|
644
|
+
export type AgentsMeta = Record<
|
|
642
645
|
string,
|
|
643
646
|
Omit<
|
|
644
|
-
|
|
647
|
+
CoreAgent,
|
|
645
648
|
| 'input'
|
|
646
649
|
| 'output'
|
|
647
650
|
| 'tools'
|
|
@@ -649,7 +652,7 @@ export type AIAgentMeta = Record<
|
|
|
649
652
|
| 'workflows'
|
|
650
653
|
| 'middleware'
|
|
651
654
|
| 'channelMiddleware'
|
|
652
|
-
| '
|
|
655
|
+
| 'agentMiddleware'
|
|
653
656
|
| 'permissions'
|
|
654
657
|
> & {
|
|
655
658
|
tools?: string[]
|
|
@@ -660,7 +663,7 @@ export type AIAgentMeta = Record<
|
|
|
660
663
|
workingMemorySchema: string | null
|
|
661
664
|
middleware?: MiddlewareMetadata[]
|
|
662
665
|
channelMiddleware?: MiddlewareMetadata[]
|
|
663
|
-
|
|
666
|
+
agentMiddleware?: MiddlewareMetadata[]
|
|
664
667
|
permissions?: PermissionMetadata[]
|
|
665
668
|
sourceFile?: string
|
|
666
669
|
exportedName?: string
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export {
|
|
2
|
+
agent,
|
|
3
|
+
agentStream,
|
|
4
|
+
agentResume,
|
|
5
|
+
agentApprove,
|
|
6
|
+
agentInterrupt,
|
|
7
|
+
} from './agent-helpers.js'
|
|
8
|
+
export { wrapChannelWithAGUI } from './agent-agui.js'
|
|
9
|
+
export { runAgent, resumeAgentSync } from './agent-runner.js'
|
|
10
|
+
export { resolveModelAlias } from './agent-model-config.js'
|
|
11
|
+
export { streamAgent, resumeAgent, interruptAgent } from './agent-stream.js'
|
|
12
|
+
export {
|
|
13
|
+
voiceInput,
|
|
14
|
+
NoSpeechDetectedError,
|
|
15
|
+
SPOKEN_TURN,
|
|
16
|
+
SPOKEN_TRANSCRIPT,
|
|
17
|
+
} from './voice-input.js'
|
|
18
|
+
export {
|
|
19
|
+
voiceOutput,
|
|
20
|
+
unspeakableScripts,
|
|
21
|
+
voiceForText,
|
|
22
|
+
type SpeakableScripts,
|
|
23
|
+
} from './voice-output.js'
|
|
24
|
+
export { AgentInterruptedError, signalRunInterrupt } from './agent-interrupt.js'
|
|
25
|
+
export type {
|
|
26
|
+
AgentInterruption,
|
|
27
|
+
AgentInterruptResult,
|
|
28
|
+
InterruptibleRunHandle,
|
|
29
|
+
} from './agent-interrupt.js'
|
|
30
|
+
export {
|
|
31
|
+
type RunAgentParams,
|
|
32
|
+
type StreamAgentOptions,
|
|
33
|
+
ToolApprovalRequired,
|
|
34
|
+
ToolCredentialRequired,
|
|
35
|
+
canAccessThread,
|
|
36
|
+
isOwnedByPrincipal,
|
|
37
|
+
threadOwnerConstraint,
|
|
38
|
+
} from './agent-prepare.js'
|
|
39
|
+
export { addAgent } from './agent-registry.js'
|
|
40
|
+
export type {
|
|
41
|
+
AgentInput,
|
|
42
|
+
AgentsMeta,
|
|
43
|
+
AgentMemoryConfig,
|
|
44
|
+
AgentStep,
|
|
45
|
+
AgentContentPart,
|
|
46
|
+
AgentRunRow,
|
|
47
|
+
AgentRunService,
|
|
48
|
+
AgentRunState,
|
|
49
|
+
AgentMessage,
|
|
50
|
+
AgentStreamChannel,
|
|
51
|
+
AgentStreamEvent,
|
|
52
|
+
AgentThread,
|
|
53
|
+
CoreAgent,
|
|
54
|
+
PendingApproval,
|
|
55
|
+
PikkuAgentMiddlewareHooks,
|
|
56
|
+
} from './agent.types.js'
|