@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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { randomUUID } from './
|
|
1
|
+
import type { AgentStreamChannel, AgentStreamEvent } from './agent.types.js'
|
|
2
|
+
import { randomUUID } from './agent-utils.js'
|
|
3
3
|
|
|
4
4
|
type AGUIEvent =
|
|
5
5
|
| { type: 'TEXT_MESSAGE_START'; messageId: string }
|
|
@@ -57,9 +57,9 @@ function resultToString(result: unknown): string {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
export function wrapChannelWithAGUI(
|
|
60
|
-
inner:
|
|
60
|
+
inner: AgentStreamChannel,
|
|
61
61
|
options?: AGUIChannelOptions
|
|
62
|
-
):
|
|
62
|
+
): AgentStreamChannel {
|
|
63
63
|
const threadId = options?.threadId ?? randomUUID()
|
|
64
64
|
let runId: string | null = options?.runId ?? null
|
|
65
65
|
|
|
@@ -87,9 +87,9 @@ export function wrapChannelWithAGUI(
|
|
|
87
87
|
type: 'RUN_STARTED',
|
|
88
88
|
threadId,
|
|
89
89
|
runId: resolveRunId(),
|
|
90
|
-
} as unknown as
|
|
90
|
+
} as unknown as AgentStreamEvent)
|
|
91
91
|
}
|
|
92
|
-
inner.send(event as unknown as
|
|
92
|
+
inner.send(event as unknown as AgentStreamEvent)
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
function endTextMessage(): void {
|
|
@@ -171,7 +171,7 @@ export function wrapChannelWithAGUI(
|
|
|
171
171
|
sendBinary: (data) => inner.sendBinary(data),
|
|
172
172
|
close: () => inner.close(),
|
|
173
173
|
|
|
174
|
-
send: (event:
|
|
174
|
+
send: (event: AgentStreamEvent) => {
|
|
175
175
|
if (terminal) return
|
|
176
176
|
|
|
177
177
|
switch (event.type) {
|
package/src/wirings/{ai-agent/ai-agent-authorization.test.ts → agent/agent-authorization.test.ts}
RENAMED
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
pikkuState,
|
|
7
7
|
setSingletonServices,
|
|
8
8
|
} from '../../pikku-state.js'
|
|
9
|
-
import { assertAgentAuthorized } from './
|
|
9
|
+
import { assertAgentAuthorized } from './agent-prepare.js'
|
|
10
10
|
import { clearPermissionsCache } from '../../permissions.js'
|
|
11
11
|
import { ForbiddenError, MissingScopeError } from '../../errors/errors.js'
|
|
12
|
-
import type {
|
|
12
|
+
import type { CoreAgent } from './agent.types.js'
|
|
13
13
|
import type { CoreUserSession } from '../../types/core.types.js'
|
|
14
14
|
|
|
15
15
|
const logger = {
|
|
@@ -27,16 +27,16 @@ beforeEach(() => {
|
|
|
27
27
|
|
|
28
28
|
const addAgent = (
|
|
29
29
|
agentName: string,
|
|
30
|
-
overrides: Partial<
|
|
31
|
-
):
|
|
32
|
-
const agent:
|
|
30
|
+
overrides: Partial<CoreAgent> = {}
|
|
31
|
+
): CoreAgent => {
|
|
32
|
+
const agent: CoreAgent = {
|
|
33
33
|
name: agentName,
|
|
34
34
|
description: `${agentName} description`,
|
|
35
35
|
goal: `${agentName} goal`,
|
|
36
36
|
instructions: `${agentName} instructions`,
|
|
37
37
|
model: 'test/test-model',
|
|
38
38
|
...overrides,
|
|
39
|
-
} as
|
|
39
|
+
} as CoreAgent
|
|
40
40
|
|
|
41
41
|
pikkuState(null, 'agent', 'agents').set(agentName, agent)
|
|
42
42
|
return agent
|
|
@@ -4,13 +4,11 @@ import {
|
|
|
4
4
|
applyOutputMiddleware,
|
|
5
5
|
finalizeAgentRun,
|
|
6
6
|
type FinalizedRun,
|
|
7
|
-
} from './
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
7
|
+
} from './agent-finalize.js'
|
|
8
|
+
import type { AgentStep, PikkuAgentMiddlewareHooks } from './agent.types.js'
|
|
9
|
+
import type { AgentRunStateService } from '../../services/agent-run-state-service.js'
|
|
10
10
|
|
|
11
|
-
const step = (
|
|
12
|
-
toolCalls: NonNullable<AIAgentStep['toolCalls']>
|
|
13
|
-
): AIAgentStep => ({
|
|
11
|
+
const step = (toolCalls: NonNullable<AgentStep['toolCalls']>): AgentStep => ({
|
|
14
12
|
usage: { inputTokens: 0, outputTokens: 0 },
|
|
15
13
|
toolCalls,
|
|
16
14
|
})
|
|
@@ -24,7 +22,7 @@ const call = (name: string, result: string) => ({
|
|
|
24
22
|
describe('applyOutputMiddleware', () => {
|
|
25
23
|
test('hands the middleware every tool call the run made, flattened across steps', async () => {
|
|
26
24
|
const seen: string[][] = []
|
|
27
|
-
const middleware:
|
|
25
|
+
const middleware: PikkuAgentMiddlewareHooks[] = [
|
|
28
26
|
{
|
|
29
27
|
modifyOutput: (_services, ctx) => {
|
|
30
28
|
seen.push(ctx.toolCalls.map((c) => c.name))
|
|
@@ -48,7 +46,7 @@ describe('applyOutputMiddleware', () => {
|
|
|
48
46
|
})
|
|
49
47
|
|
|
50
48
|
test('a rewritten tool call is redistributed back onto the step it came from', async () => {
|
|
51
|
-
const middleware:
|
|
49
|
+
const middleware: PikkuAgentMiddlewareHooks[] = [
|
|
52
50
|
{
|
|
53
51
|
modifyOutput: (_services, ctx) => ({
|
|
54
52
|
text: ctx.text,
|
|
@@ -79,7 +77,7 @@ describe('applyOutputMiddleware', () => {
|
|
|
79
77
|
})
|
|
80
78
|
|
|
81
79
|
test('dropping a tool call collapses the calls into the last step rather than mis-attributing them', async () => {
|
|
82
|
-
const middleware:
|
|
80
|
+
const middleware: PikkuAgentMiddlewareHooks[] = [
|
|
83
81
|
{
|
|
84
82
|
modifyOutput: (_services, ctx) => ({
|
|
85
83
|
text: ctx.text,
|
|
@@ -108,7 +106,7 @@ describe('applyOutputMiddleware', () => {
|
|
|
108
106
|
|
|
109
107
|
test('runs the chain in reverse registration order, each hook seeing the previous rewrite', async () => {
|
|
110
108
|
const order: string[] = []
|
|
111
|
-
const middleware:
|
|
109
|
+
const middleware: PikkuAgentMiddlewareHooks[] = [
|
|
112
110
|
{
|
|
113
111
|
modifyOutput: (_services, ctx) => {
|
|
114
112
|
order.push(`first saw ${ctx.text}`)
|
|
@@ -152,14 +150,14 @@ describe('finalizeAgentRun', () => {
|
|
|
152
150
|
|
|
153
151
|
test('completes the run and records its usage', async () => {
|
|
154
152
|
const updates: unknown[] = []
|
|
155
|
-
const
|
|
153
|
+
const agentRunState = {
|
|
156
154
|
updateRun: async (_runId: string, update: unknown) => {
|
|
157
155
|
updates.push(update)
|
|
158
156
|
},
|
|
159
|
-
} as unknown as
|
|
157
|
+
} as unknown as AgentRunStateService
|
|
160
158
|
|
|
161
159
|
await finalizeAgentRun(
|
|
162
|
-
|
|
160
|
+
agentRunState,
|
|
163
161
|
run({ inputTokens: 10, outputTokens: 20, model: 'gpt-4o' })
|
|
164
162
|
)
|
|
165
163
|
|
|
@@ -173,13 +171,16 @@ describe('finalizeAgentRun', () => {
|
|
|
173
171
|
|
|
174
172
|
test('omits usage entirely when no model reported one', async () => {
|
|
175
173
|
const updates: any[] = []
|
|
176
|
-
const
|
|
174
|
+
const agentRunState = {
|
|
177
175
|
updateRun: async (_runId: string, update: unknown) => {
|
|
178
176
|
updates.push(update)
|
|
179
177
|
},
|
|
180
|
-
} as unknown as
|
|
178
|
+
} as unknown as AgentRunStateService
|
|
181
179
|
|
|
182
|
-
await finalizeAgentRun(
|
|
180
|
+
await finalizeAgentRun(
|
|
181
|
+
agentRunState,
|
|
182
|
+
run({ inputTokens: 0, outputTokens: 0 })
|
|
183
|
+
)
|
|
183
184
|
|
|
184
185
|
assert.deepEqual(updates, [{ status: 'completed' }])
|
|
185
186
|
})
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from './
|
|
6
|
-
import type {
|
|
2
|
+
AgentStep,
|
|
3
|
+
AgentMessage,
|
|
4
|
+
PikkuAgentMiddlewareHooks,
|
|
5
|
+
} from './agent.types.js'
|
|
6
|
+
import type { AgentRunStateService } from '../../services/agent-run-state-service.js'
|
|
7
7
|
import { pikkuState } from '../../pikku-state.js'
|
|
8
|
-
import { scoreFinishedRun } from '../
|
|
9
|
-
import { recordScoreSnapshot } from '../
|
|
8
|
+
import { scoreFinishedRun } from '../agent-scorer/agent-scorer-live.js'
|
|
9
|
+
import { recordScoreSnapshot } from '../agent-scorer/agent-scorer-snapshots.js'
|
|
10
10
|
|
|
11
11
|
export type RunUsage = {
|
|
12
12
|
inputTokens: number
|
|
@@ -28,7 +28,7 @@ export type FinalizedRun = {
|
|
|
28
28
|
/** The prompt the run answered — what a scorer grades the answer against. */
|
|
29
29
|
input: string
|
|
30
30
|
text: string
|
|
31
|
-
steps:
|
|
31
|
+
steps: AgentStep[]
|
|
32
32
|
usage: RunUsage
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@ export type FinalizedRun = {
|
|
|
36
36
|
* The prompt a run answered: the most recent user turn, which is what the model
|
|
37
37
|
* was last asked. On a resumed run the earlier turns are context, not the ask.
|
|
38
38
|
*/
|
|
39
|
-
export const lastUserMessageText = (messages:
|
|
39
|
+
export const lastUserMessageText = (messages: AgentMessage[]): string => {
|
|
40
40
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
41
41
|
const message = messages[i]
|
|
42
42
|
if (message?.role !== 'user') continue
|
|
@@ -52,8 +52,8 @@ export const lastUserMessageText = (messages: AIMessage[]): string => {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const flattenToolCalls = (
|
|
55
|
-
steps:
|
|
56
|
-
): NonNullable<
|
|
55
|
+
steps: AgentStep[]
|
|
56
|
+
): NonNullable<AgentStep['toolCalls']> =>
|
|
57
57
|
steps.flatMap((step) => step.toolCalls ?? [])
|
|
58
58
|
|
|
59
59
|
/**
|
|
@@ -63,9 +63,9 @@ const flattenToolCalls = (
|
|
|
63
63
|
* step rather than silently mis-attributing calls to the wrong step.
|
|
64
64
|
*/
|
|
65
65
|
const distributeToolCalls = (
|
|
66
|
-
steps:
|
|
67
|
-
toolCalls: NonNullable<
|
|
68
|
-
):
|
|
66
|
+
steps: AgentStep[],
|
|
67
|
+
toolCalls: NonNullable<AgentStep['toolCalls']>
|
|
68
|
+
): AgentStep[] => {
|
|
69
69
|
if (toolCalls.length !== flattenToolCalls(steps).length) {
|
|
70
70
|
return steps.map((step, index) => ({
|
|
71
71
|
...step,
|
|
@@ -89,22 +89,22 @@ const distributeToolCalls = (
|
|
|
89
89
|
* wraps the others, so it sees the output last.
|
|
90
90
|
*/
|
|
91
91
|
export const applyOutputMiddleware = async (
|
|
92
|
-
|
|
92
|
+
agentMiddlewares: PikkuAgentMiddlewareHooks[],
|
|
93
93
|
singletonServices: any,
|
|
94
94
|
input: {
|
|
95
95
|
text: string
|
|
96
|
-
messages:
|
|
97
|
-
steps:
|
|
96
|
+
messages: AgentMessage[]
|
|
97
|
+
steps: AgentStep[]
|
|
98
98
|
usage: { inputTokens: number; outputTokens: number }
|
|
99
99
|
}
|
|
100
|
-
): Promise<{ text: string; messages:
|
|
100
|
+
): Promise<{ text: string; messages: AgentMessage[]; steps: AgentStep[] }> => {
|
|
101
101
|
let text = input.text
|
|
102
102
|
let messages = input.messages
|
|
103
103
|
let steps = input.steps
|
|
104
104
|
let toolCalls = flattenToolCalls(steps)
|
|
105
105
|
|
|
106
|
-
for (let i =
|
|
107
|
-
const mw =
|
|
106
|
+
for (let i = agentMiddlewares.length - 1; i >= 0; i--) {
|
|
107
|
+
const mw = agentMiddlewares[i]
|
|
108
108
|
if (!mw.modifyOutput) continue
|
|
109
109
|
const result = await mw.modifyOutput(singletonServices, {
|
|
110
110
|
text,
|
|
@@ -136,10 +136,10 @@ export const applyOutputMiddleware = async (
|
|
|
136
136
|
* the streaming path, the client already has the reply.
|
|
137
137
|
*/
|
|
138
138
|
export const finalizeAgentRun = async (
|
|
139
|
-
|
|
139
|
+
agentRunState: AgentRunStateService,
|
|
140
140
|
run: FinalizedRun
|
|
141
141
|
): Promise<void> => {
|
|
142
|
-
await
|
|
142
|
+
await agentRunState.updateRun(run.runId, {
|
|
143
143
|
status: 'completed',
|
|
144
144
|
...(run.usage.model
|
|
145
145
|
? {
|