@pikku/core 0.12.107 → 0.12.112
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 +357 -0
- package/dist/analytics/analytics.d.ts +6 -0
- package/dist/analytics/analytics.js +58 -0
- package/dist/analytics/analytics.types.d.ts +156 -0
- package/dist/analytics/analytics.types.js +1 -0
- package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
- package/dist/analytics/anonymous-analytics-identity.js +27 -0
- package/dist/analytics/compose-analytics-identity.d.ts +14 -0
- package/dist/analytics/compose-analytics-identity.js +33 -0
- package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
- package/dist/analytics/cookie-analytics-identity.js +37 -0
- package/dist/analytics/define-analytics-events.d.ts +22 -0
- package/dist/analytics/define-analytics-events.js +9 -0
- package/dist/analytics/fan-out-analytics.d.ts +15 -0
- package/dist/analytics/fan-out-analytics.js +36 -0
- package/dist/analytics/index.d.ts +13 -0
- package/dist/analytics/index.js +8 -0
- package/dist/analytics/logger-analytics-service.d.ts +14 -0
- package/dist/analytics/logger-analytics-service.js +23 -0
- package/dist/analytics/mint-cookie.d.ts +44 -0
- package/dist/analytics/mint-cookie.js +55 -0
- package/dist/dev/hot-reload.d.ts +0 -1
- package/dist/dev/hot-reload.js +4 -25
- package/dist/dev/module-runner.js +104 -25
- package/dist/errors/errors.d.ts +7 -0
- package/dist/errors/errors.js +17 -0
- package/dist/function/function-meta.types.d.ts +2 -0
- package/dist/function/function-runner.js +29 -0
- package/dist/function/functions.types.d.ts +22 -3
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/pikku-state.d.ts +1 -1
- package/dist/scopes.d.ts +11 -0
- package/dist/scopes.js +17 -0
- package/dist/services/credential-wire-service.d.ts +1 -1
- package/dist/services/feature-flag-service.d.ts +100 -0
- package/dist/services/feature-flag-service.js +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/meta-service.d.ts +16 -0
- package/dist/services/meta-service.js +19 -0
- package/dist/services/webhook-service.d.ts +7 -2
- package/dist/services/webhook-service.js +11 -6
- package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
- package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
- package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
- package/dist/types/core.types.d.ts +23 -0
- package/dist/wirings/agent/agent-rpc.d.ts +1 -1
- package/dist/wirings/agent/agent-turn.d.ts +1 -1
- package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
- package/dist/wirings/channel/channel-common.d.ts +1 -1
- package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
- package/dist/wirings/channel/channel-runner.d.ts +1 -1
- package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
- package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
- package/dist/wirings/flag/assert-feature-available.js +23 -0
- package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
- package/dist/wirings/flag/cached-flag-source.js +96 -0
- package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
- package/dist/wirings/flag/define-feature-flags.js +32 -0
- package/dist/wirings/flag/flag.types.d.ts +97 -0
- package/dist/wirings/flag/flag.types.js +1 -0
- package/dist/wirings/flag/index.d.ts +7 -0
- package/dist/wirings/flag/index.js +5 -0
- package/dist/wirings/flag/resolve-flag.d.ts +52 -0
- package/dist/wirings/flag/resolve-flag.js +90 -0
- package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
- package/dist/wirings/flag/validate-flag-definitions.js +103 -0
- package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
- package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
- package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
- package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +50 -0
- package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +38 -0
- package/knowledge/decisions/internals/index.md +2 -0
- package/package.json +11 -5
- package/run-tests.sh +17 -9
- package/src/public-surface.json +26 -0
- package/src/agent-naming.test.ts +0 -68
- package/src/api-report.test.ts +0 -138
- package/src/app-alias-surface.test.ts +0 -179
- package/src/app-leaf-surface.test.ts +0 -222
- package/src/bootstrap-compat/root.ts +0 -20
- package/src/classification/column-form.test.ts +0 -97
- package/src/classification/column-form.ts +0 -55
- package/src/classification/data-classification.ts +0 -73
- package/src/classification/index.ts +0 -40
- package/src/classification/key-ids.ts +0 -2
- package/src/classification/secret-value.test.ts +0 -204
- package/src/classification/secret-value.ts +0 -106
- package/src/crypto-utils.test.ts +0 -668
- package/src/crypto-utils.ts +0 -460
- package/src/dev/hot-reload.test.ts +0 -587
- package/src/dev/hot-reload.ts +0 -225
- package/src/dev/module-runner.test.ts +0 -235
- package/src/dev/module-runner.ts +0 -138
- package/src/dev/reload-meta.test.ts +0 -183
- package/src/dev/reload-meta.ts +0 -144
- package/src/ecosystem-tier-removed.test.ts +0 -72
- package/src/env.ts +0 -1
- package/src/errors/error-handler.ts +0 -77
- package/src/errors/error.test.ts +0 -229
- package/src/errors/errors.ts +0 -393
- package/src/errors/index.ts +0 -11
- package/src/errors/serialized-error.ts +0 -12
- package/src/factory-functions.test.ts +0 -111
- package/src/function/abort-scope.test.ts +0 -97
- package/src/function/abort-scope.ts +0 -80
- package/src/function/function-meta.types.ts +0 -151
- package/src/function/function-runner.test.ts +0 -1619
- package/src/function/function-runner.ts +0 -499
- package/src/function/functions.types.ts +0 -319
- package/src/function/index.ts +0 -40
- package/src/function/list.types.test.ts +0 -100
- package/src/function/list.types.ts +0 -69
- package/src/function/pikku-request.test.ts +0 -35
- package/src/function/pikku-request.ts +0 -17
- package/src/gopass-secrets-removed.test.ts +0 -51
- package/src/handle-error.test.ts +0 -532
- package/src/handle-error.ts +0 -64
- package/src/middleware/auth-apikey.test.ts +0 -362
- package/src/middleware/auth-apikey.ts +0 -39
- package/src/middleware/auth-bearer.test.ts +0 -566
- package/src/middleware/auth-bearer.ts +0 -83
- package/src/middleware/auth-cookie.test.ts +0 -572
- package/src/middleware/auth-cookie.ts +0 -107
- package/src/middleware/cors.test.ts +0 -579
- package/src/middleware/cors.ts +0 -103
- package/src/middleware/index.ts +0 -30
- package/src/middleware/middleware-factories.ts +0 -76
- package/src/middleware/middleware.types.ts +0 -61
- package/src/middleware/remote-auth.test.ts +0 -547
- package/src/middleware/remote-auth.ts +0 -95
- package/src/middleware/remote-jobs-secret.ts +0 -35
- package/src/middleware/require-origin.test.ts +0 -115
- package/src/middleware/require-origin.ts +0 -79
- package/src/middleware/telemetry.ts +0 -83
- package/src/middleware-runner.test.ts +0 -578
- package/src/middleware-runner.ts +0 -232
- package/src/no-any-casts.test.ts +0 -57
- package/src/no-root-barrel.test.ts +0 -122
- package/src/permissions.test.ts +0 -256
- package/src/permissions.ts +0 -217
- package/src/pikku-state.test.ts +0 -198
- package/src/pikku-state.ts +0 -206
- package/src/production-barrels-stay-lean.test.ts +0 -110
- package/src/public-surface.test.ts +0 -133
- package/src/remote.test.ts +0 -173
- package/src/remote.ts +0 -56
- package/src/removed-legacy-exports.test.ts +0 -66
- package/src/run-tests-script.test.ts +0 -67
- package/src/schema.test.ts +0 -430
- package/src/schema.ts +0 -204
- package/src/scopes.test.ts +0 -203
- package/src/scopes.ts +0 -67
- package/src/services/agent-run-state-service.ts +0 -37
- package/src/services/agent-runner-service.ts +0 -238
- package/src/services/agent-storage-service.ts +0 -39
- package/src/services/ai-embedding-service.ts +0 -9
- package/src/services/audit-service.test.ts +0 -44
- package/src/services/audit-service.ts +0 -280
- package/src/services/content-service.ts +0 -65
- package/src/services/credential-service.ts +0 -20
- package/src/services/credential-wire-service.test.ts +0 -235
- package/src/services/credential-wire-service.ts +0 -120
- package/src/services/deployment-service.ts +0 -32
- package/src/services/email-service.test.ts +0 -100
- package/src/services/email-service.ts +0 -60
- package/src/services/email-template.test.ts +0 -311
- package/src/services/email-template.ts +0 -254
- package/src/services/file-scenario-run-store.test.ts +0 -349
- package/src/services/file-scenario-run-store.ts +0 -282
- package/src/services/gateway-service.ts +0 -5
- package/src/services/http-personas-converse.test.ts +0 -274
- package/src/services/http-personas.test.ts +0 -379
- package/src/services/http-personas.ts +0 -508
- package/src/services/in-memory-agent-run-state-service.ts +0 -87
- package/src/services/in-memory-queue-service.test.ts +0 -162
- package/src/services/in-memory-queue-service.ts +0 -78
- package/src/services/in-memory-session-store.test.ts +0 -58
- package/src/services/in-memory-session-store.ts +0 -20
- package/src/services/in-memory-trigger-service.ts +0 -47
- package/src/services/in-memory-workflow-service.test.ts +0 -430
- package/src/services/in-memory-workflow-service.ts +0 -595
- package/src/services/index.ts +0 -192
- package/src/services/istanbul-coverage-service.test.ts +0 -66
- package/src/services/istanbul-coverage-service.ts +0 -59
- package/src/services/jwt-service.ts +0 -15
- package/src/services/local-content-request-handler.test.ts +0 -240
- package/src/services/local-content-request-handler.ts +0 -295
- package/src/services/local-content.test.ts +0 -186
- package/src/services/local-content.ts +0 -242
- package/src/services/local-credential-service.ts +0 -63
- package/src/services/local-email-service.test.ts +0 -182
- package/src/services/local-email-service.ts +0 -43
- package/src/services/local-gateway-service.ts +0 -51
- package/src/services/local-secrets.test.ts +0 -95
- package/src/services/local-secrets.ts +0 -71
- package/src/services/local-variables.test.ts +0 -61
- package/src/services/local-variables.ts +0 -45
- package/src/services/logger-console.test.ts +0 -117
- package/src/services/logger-console.ts +0 -174
- package/src/services/logger.ts +0 -48
- package/src/services/meta-service.test.ts +0 -75
- package/src/services/meta-service.ts +0 -767
- package/src/services/persona-actor-secret.test.ts +0 -68
- package/src/services/persona-actor-secret.ts +0 -70
- package/src/services/persona-sign-in.test.ts +0 -219
- package/src/services/persona-sign-in.ts +0 -238
- package/src/services/personas-service.ts +0 -191
- package/src/services/pikku-user-id.test.ts +0 -62
- package/src/services/pikku-user-id.ts +0 -13
- package/src/services/queue-webhook-service.test.ts +0 -409
- package/src/services/queue-webhook-service.ts +0 -150
- package/src/services/remote-jobs.test.ts +0 -106
- package/src/services/remote-jobs.ts +0 -92
- package/src/services/scheduler-service.ts +0 -37
- package/src/services/schema-service.ts +0 -10
- package/src/services/scope-service.ts +0 -91
- package/src/services/scoped-credential-service.test.ts +0 -86
- package/src/services/scoped-credential-service.ts +0 -63
- package/src/services/scoped-secret-service.test.ts +0 -93
- package/src/services/scoped-secret-service.ts +0 -40
- package/src/services/secret-host-binding.test.ts +0 -138
- package/src/services/secret-host-binding.ts +0 -51
- package/src/services/secret-service.ts +0 -25
- package/src/services/secretless.test.ts +0 -54
- package/src/services/secretless.ts +0 -29
- package/src/services/session-store.ts +0 -9
- package/src/services/stub-tracker.test.ts +0 -104
- package/src/services/stub-tracker.ts +0 -175
- package/src/services/system-role-guard.test.ts +0 -96
- package/src/services/system-role-guard.ts +0 -71
- package/src/services/temporary-file-service.ts +0 -76
- package/src/services/trigger-service.ts +0 -5
- package/src/services/typed-credential-service.ts +0 -83
- package/src/services/typed-secret-service.test.ts +0 -204
- package/src/services/typed-secret-service.ts +0 -132
- package/src/services/typed-variables-service.test.ts +0 -166
- package/src/services/typed-variables-service.ts +0 -166
- package/src/services/user-session-service.test.ts +0 -147
- package/src/services/user-session-service.ts +0 -85
- package/src/services/v8-coverage-service.test.ts +0 -69
- package/src/services/v8-coverage-service.ts +0 -163
- package/src/services/variables-service.ts +0 -13
- package/src/services/webhook-service.ts +0 -147
- package/src/services/workflow-service.ts +0 -120
- package/src/side-effects-are-declared.test.ts +0 -84
- package/src/source-files-stay-composable.test.ts +0 -41
- package/src/template-alias-surface.test.ts +0 -240
- package/src/test-utils.ts +0 -38
- package/src/testing/index.ts +0 -3
- package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
- package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
- package/src/testing/service-tests/channel-store-tests.ts +0 -98
- package/src/testing/service-tests/credential-service-tests.ts +0 -143
- package/src/testing/service-tests/deployment-service-tests.ts +0 -33
- package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
- package/src/testing/service-tests/secret-service-tests.ts +0 -105
- package/src/testing/service-tests/session-store-tests.ts +0 -62
- package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
- package/src/testing/service-tests/workflow-service-tests.ts +0 -308
- package/src/testing/service-tests.ts +0 -95
- package/src/time-utils.test.ts +0 -56
- package/src/time-utils.ts +0 -89
- package/src/types/core.types.ts +0 -446
- package/src/types/index.ts +0 -25
- package/src/types/state.types.ts +0 -226
- package/src/types/typed-credentials.test.ts +0 -72
- package/src/utils/hash.test.ts +0 -68
- package/src/utils/hash.ts +0 -26
- package/src/utils/hmac.ts +0 -21
- package/src/utils/node-host-resolver.ts +0 -20
- package/src/utils/safe-fetch.test.ts +0 -515
- package/src/utils/safe-fetch.ts +0 -347
- package/src/utils.test.ts +0 -359
- package/src/utils.ts +0 -165
- package/src/version.test.ts +0 -80
- package/src/version.ts +0 -25
- package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
- package/src/wirings/actor-flow/index.ts +0 -10
- package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
- package/src/wirings/actor-flow/run-conversation.ts +0 -280
- package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
- package/src/wirings/addon/addon-runner.ts +0 -236
- package/src/wirings/addon/addon-scopes.test.ts +0 -225
- package/src/wirings/addon/addon-secrets.test.ts +0 -391
- package/src/wirings/addon/index.ts +0 -12
- package/src/wirings/addon/remote-addon-auth.ts +0 -65
- package/src/wirings/addon/wire-addon.test.ts +0 -102
- package/src/wirings/addon/wire-addon.ts +0 -202
- package/src/wirings/addon/wire-remote-addon.ts +0 -41
- package/src/wirings/agent/agent-agui.test.ts +0 -1213
- package/src/wirings/agent/agent-agui.ts +0 -405
- package/src/wirings/agent/agent-authorization.test.ts +0 -208
- package/src/wirings/agent/agent-finalize.test.ts +0 -187
- package/src/wirings/agent/agent-finalize.ts +0 -197
- package/src/wirings/agent/agent-helpers.test.ts +0 -215
- package/src/wirings/agent/agent-helpers.ts +0 -96
- package/src/wirings/agent/agent-interrupt.test.ts +0 -833
- package/src/wirings/agent/agent-interrupt.ts +0 -400
- package/src/wirings/agent/agent-memory.test.ts +0 -397
- package/src/wirings/agent/agent-memory.ts +0 -496
- package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
- package/src/wirings/agent/agent-model-config.test.ts +0 -103
- package/src/wirings/agent/agent-model-config.ts +0 -59
- package/src/wirings/agent/agent-prepare.test.ts +0 -977
- package/src/wirings/agent/agent-prepare.ts +0 -1083
- package/src/wirings/agent/agent-registry.test.ts +0 -455
- package/src/wirings/agent/agent-registry.ts +0 -99
- package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
- package/src/wirings/agent/agent-rpc.ts +0 -116
- package/src/wirings/agent/agent-runner.test.ts +0 -1229
- package/src/wirings/agent/agent-runner.ts +0 -858
- package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
- package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
- package/src/wirings/agent/agent-stream.test.ts +0 -1800
- package/src/wirings/agent/agent-stream.ts +0 -1639
- package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
- package/src/wirings/agent/agent-turn.test.ts +0 -65
- package/src/wirings/agent/agent-turn.ts +0 -122
- package/src/wirings/agent/agent-utils.ts +0 -20
- package/src/wirings/agent/agent.types.ts +0 -676
- package/src/wirings/agent/index.ts +0 -58
- package/src/wirings/agent/voice-input.test.ts +0 -220
- package/src/wirings/agent/voice-input.ts +0 -180
- package/src/wirings/agent/voice-output.test.ts +0 -510
- package/src/wirings/agent/voice-output.ts +0 -311
- package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
- package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
- package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
- package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
- package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
- package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
- package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
- package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
- package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
- package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
- package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
- package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
- package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
- package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
- package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
- package/src/wirings/agent-scorer/index.ts +0 -23
- package/src/wirings/channel/channel-common.ts +0 -102
- package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
- package/src/wirings/channel/channel-handler.test.ts +0 -322
- package/src/wirings/channel/channel-handler.ts +0 -259
- package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
- package/src/wirings/channel/channel-host-rpc.ts +0 -69
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
- package/src/wirings/channel/channel-middleware-runner.ts +0 -126
- package/src/wirings/channel/channel-rpc-registry.ts +0 -116
- package/src/wirings/channel/channel-rpc-responder.ts +0 -117
- package/src/wirings/channel/channel-rpc-service.ts +0 -132
- package/src/wirings/channel/channel-rpc-validators.ts +0 -65
- package/src/wirings/channel/channel-rpc.test.ts +0 -841
- package/src/wirings/channel/channel-rpc.ts +0 -5
- package/src/wirings/channel/channel-rpc.types.ts +0 -160
- package/src/wirings/channel/channel-runner.ts +0 -164
- package/src/wirings/channel/channel-store.ts +0 -35
- package/src/wirings/channel/channel.types.ts +0 -193
- package/src/wirings/channel/define-channel-routes.ts +0 -5
- package/src/wirings/channel/eventhub-service.ts +0 -16
- package/src/wirings/channel/eventhub-store.ts +0 -13
- package/src/wirings/channel/index.ts +0 -40
- package/src/wirings/channel/local/index.ts +0 -3
- package/src/wirings/channel/local/local-channel-handler.ts +0 -98
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
- package/src/wirings/channel/local/local-channel-runner.ts +0 -271
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
- package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
- package/src/wirings/channel/log-channels.ts +0 -16
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
- package/src/wirings/channel/serverless/index.ts +0 -6
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
- package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
- package/src/wirings/cli/channel/cli-approval.ts +0 -135
- package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
- package/src/wirings/cli/channel/index.ts +0 -6
- package/src/wirings/cli/cli-runner.test.ts +0 -969
- package/src/wirings/cli/cli-runner.ts +0 -538
- package/src/wirings/cli/cli.types.ts +0 -388
- package/src/wirings/cli/command-parser.test.ts +0 -1120
- package/src/wirings/cli/command-parser.ts +0 -713
- package/src/wirings/cli/define-cli-commands.ts +0 -13
- package/src/wirings/cli/format-cli-error.test.ts +0 -91
- package/src/wirings/cli/format-cli-error.ts +0 -96
- package/src/wirings/cli/index.ts +0 -19
- package/src/wirings/credential/credential.types.ts +0 -37
- package/src/wirings/credential/define-credential.ts +0 -49
- package/src/wirings/credential/index.ts +0 -7
- package/src/wirings/credential/validate-credential-definitions.ts +0 -63
- package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
- package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
- package/src/wirings/gateway/gateway-runner.test.ts +0 -581
- package/src/wirings/gateway/gateway-runner.ts +0 -411
- package/src/wirings/gateway/gateway.types.ts +0 -137
- package/src/wirings/gateway/index.ts +0 -15
- package/src/wirings/http/http-routes.test.ts +0 -318
- package/src/wirings/http/http-routes.ts +0 -111
- package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
- package/src/wirings/http/http-runner.test.ts +0 -503
- package/src/wirings/http/http-runner.ts +0 -462
- package/src/wirings/http/http.types.ts +0 -307
- package/src/wirings/http/index.ts +0 -27
- package/src/wirings/http/log-http-routes.ts +0 -18
- package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
- package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
- package/src/wirings/http/routers/http-router.ts +0 -13
- package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
- package/src/wirings/http/routers/path-to-regex.ts +0 -115
- package/src/wirings/http/web-request.test.ts +0 -382
- package/src/wirings/http/web-request.ts +0 -162
- package/src/wirings/mcp/index.ts +0 -26
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
- package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
- package/src/wirings/mcp/mcp-runner.test.ts +0 -588
- package/src/wirings/mcp/mcp-runner.ts +0 -330
- package/src/wirings/mcp/mcp.types.ts +0 -199
- package/src/wirings/node/index.ts +0 -2
- package/src/wirings/node/node.types.ts +0 -23
- package/src/wirings/oauth2/index.ts +0 -1
- package/src/wirings/oauth2/oauth2.types.ts +0 -12
- package/src/wirings/persona/define-personas.ts +0 -33
- package/src/wirings/persona/index.ts +0 -75
- package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
- package/src/wirings/persona/persona-app-scopes.ts +0 -74
- package/src/wirings/persona/persona-email.ts +0 -87
- package/src/wirings/persona/persona-environments.test.ts +0 -194
- package/src/wirings/persona/persona-environments.ts +0 -138
- package/src/wirings/persona/persona-mailbox.ts +0 -156
- package/src/wirings/persona/persona.test.ts +0 -230
- package/src/wirings/persona/persona.types.ts +0 -156
- package/src/wirings/persona/validate-personas.ts +0 -137
- package/src/wirings/queue/index.ts +0 -29
- package/src/wirings/queue/queue-identity.test.ts +0 -454
- package/src/wirings/queue/queue-identity.ts +0 -176
- package/src/wirings/queue/queue-runner.test.ts +0 -705
- package/src/wirings/queue/queue-runner.ts +0 -181
- package/src/wirings/queue/queue.types.ts +0 -161
- package/src/wirings/queue/register-queue-helper.ts +0 -46
- package/src/wirings/queue/signed-queue-service.ts +0 -60
- package/src/wirings/queue/validate-worker-config.test.ts +0 -108
- package/src/wirings/queue/validate-worker-config.ts +0 -90
- package/src/wirings/role/define-system-role.ts +0 -33
- package/src/wirings/role/index.ts +0 -13
- package/src/wirings/role/role.test.ts +0 -104
- package/src/wirings/role/role.types.ts +0 -47
- package/src/wirings/role/validate-role-definitions.ts +0 -93
- package/src/wirings/rpc/index.ts +0 -8
- package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
- package/src/wirings/rpc/rpc-runner.ts +0 -569
- package/src/wirings/rpc/rpc-types.ts +0 -87
- package/src/wirings/scheduler/index.ts +0 -11
- package/src/wirings/scheduler/log-schedulers.ts +0 -16
- package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
- package/src/wirings/scheduler/scheduler-runner.ts +0 -138
- package/src/wirings/scheduler/scheduler.types.ts +0 -42
- package/src/wirings/scope/define-scope.ts +0 -33
- package/src/wirings/scope/index.ts +0 -15
- package/src/wirings/scope/scope.test.ts +0 -159
- package/src/wirings/scope/scope.types.ts +0 -42
- package/src/wirings/scope/validate-scope-definitions.ts +0 -107
- package/src/wirings/secret/index.ts +0 -9
- package/src/wirings/secret/secret.types.ts +0 -70
- package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
- package/src/wirings/secret/validate-secret-definitions.ts +0 -88
- package/src/wirings/trigger/index.ts +0 -9
- package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
- package/src/wirings/trigger/trigger-runner.test.ts +0 -78
- package/src/wirings/trigger/trigger-runner.ts +0 -113
- package/src/wirings/trigger/trigger.types.ts +0 -100
- package/src/wirings/variable/index.ts +0 -8
- package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
- package/src/wirings/variable/validate-variable-definitions.ts +0 -71
- package/src/wirings/variable/variable.types.ts +0 -40
- package/src/wirings/virtual-user/index.ts +0 -107
- package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
- package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
- package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
- package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
- package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
- package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
- package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
- package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
- package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
- package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
- package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
- package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
- package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
- package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
- package/src/wirings/workflow/feature.test.ts +0 -131
- package/src/wirings/workflow/feature.ts +0 -59
- package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
- package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
- package/src/wirings/workflow/graph/graph-node.ts +0 -115
- package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
- package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
- package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
- package/src/wirings/workflow/graph/graph-validation.ts +0 -41
- package/src/wirings/workflow/graph/template.test.ts +0 -49
- package/src/wirings/workflow/graph/template.ts +0 -42
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
- package/src/wirings/workflow/index.ts +0 -107
- package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
- package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
- package/src/wirings/workflow/run-timeline.test.ts +0 -199
- package/src/wirings/workflow/run-timeline.ts +0 -185
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
- package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
- package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
- package/src/wirings/workflow/scenario-poll.test.ts +0 -64
- package/src/wirings/workflow/scenario-poll.ts +0 -27
- package/src/wirings/workflow/scenario-prose.test.ts +0 -275
- package/src/wirings/workflow/scenario-prose.ts +0 -86
- package/src/wirings/workflow/scenario-run.types.ts +0 -193
- package/src/wirings/workflow/scenario-service.test.ts +0 -147
- package/src/wirings/workflow/scenario-step-guards.ts +0 -23
- package/src/wirings/workflow/scenario-step.test.ts +0 -800
- package/src/wirings/workflow/scenario-step.types.ts +0 -262
- package/src/wirings/workflow/scenario-surface.test.ts +0 -146
- package/src/wirings/workflow/scenario-surface.ts +0 -71
- package/src/wirings/workflow/scenario.types.ts +0 -63
- package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
- package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
- package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
- package/src/wirings/workflow/workflow-approval.ts +0 -290
- package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
- package/src/wirings/workflow/workflow-constants.ts +0 -66
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
- package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
- package/src/wirings/workflow/workflow-errors.ts +0 -132
- package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
- package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
- package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
- package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
- package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
- package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
- package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
- package/src/wirings/workflow/workflow-recovery.ts +0 -192
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
- package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
- package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
- package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
- package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
- package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
- package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
- package/src/wirings/workflow/workflow-status-stream.ts +0 -144
- package/src/wirings/workflow/workflow-step-claim.ts +0 -46
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
- package/src/wirings/workflow/workflow-suspend.ts +0 -61
- package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
- package/src/wirings/workflow/workflow.types.ts +0 -268
- package/src/wirings-stay-decoupled.test.ts +0 -130
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.type-tests.json +0 -15
|
@@ -9,9 +9,12 @@ import { parseVersionedId } from '../version.js';
|
|
|
9
9
|
import { PikkuSessionService } from '../services/user-session-service.js';
|
|
10
10
|
import { MissingSessionError, ReadonlySessionError } from '../errors/errors.js';
|
|
11
11
|
import { verifyScopes } from '../scopes.js';
|
|
12
|
+
import { assertFeatureAvailable } from '../wirings/flag/assert-feature-available.js';
|
|
12
13
|
import { PikkuCredentialWireService, createWireServicesCredentialWireProps, } from '../services/credential-wire-service.js';
|
|
13
14
|
import { defaultPikkuUserIdResolver } from '../services/pikku-user-id.js';
|
|
14
15
|
import { createInvocationAudit, resolveAuditConfig, } from '../services/audit-service.js';
|
|
16
|
+
import { createInvocationAnalytics } from '../analytics/analytics.js';
|
|
17
|
+
import { LoggerAnalyticsService } from '../analytics/logger-analytics-service.js';
|
|
15
18
|
import { rpcService } from '../wirings/rpc/rpc-runner.js';
|
|
16
19
|
import { getOrCreatePackageSingletonServices } from '../wirings/addon/addon-runner.js';
|
|
17
20
|
import { resolveAddonAuth, resolveAddonFunctionTarget, resolveAddonScopes, resolveAddonTagMiddleware, } from '../wirings/addon/wire-addon.js';
|
|
@@ -209,6 +212,16 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
209
212
|
verifyScopes(addonScopes.length > 0
|
|
210
213
|
? [...addonScopes, ...(functionScopes ?? [])]
|
|
211
214
|
: functionScopes, session);
|
|
215
|
+
const featureFlag = funcConfig.featureFlag ?? funcMeta.featureFlag;
|
|
216
|
+
if (featureFlag) {
|
|
217
|
+
// The host's source, not the package's: a `featureFlag:` on an addon
|
|
218
|
+
// function names a flag the consuming application declared and its
|
|
219
|
+
// operators switch. A package factory builds its own services and has no
|
|
220
|
+
// reason to carry one, and reading that would leave every addon gate
|
|
221
|
+
// open.
|
|
222
|
+
await assertFeatureAvailable(featureFlag, singletonServices.featureFlags ??
|
|
223
|
+
resolvedSingletonServices.featureFlags, session);
|
|
224
|
+
}
|
|
212
225
|
let actualData = await data();
|
|
213
226
|
const inputSchemaName = funcMeta.inputSchemaName;
|
|
214
227
|
if (inputSchemaName) {
|
|
@@ -228,6 +241,7 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
228
241
|
});
|
|
229
242
|
let wireServices;
|
|
230
243
|
let invocationAuditLog;
|
|
244
|
+
let invocationAnalytics;
|
|
231
245
|
try {
|
|
232
246
|
wireServices = (await resolvedCreateWireServices?.(resolvedSingletonServices, invocationWire));
|
|
233
247
|
let services = wireServices && Object.keys(wireServices).length > 0
|
|
@@ -240,6 +254,20 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
240
254
|
invocationAuditLog = createInvocationAudit(resolvedSingletonServices.audit, invocationWire, resolvedSingletonServices.logger);
|
|
241
255
|
services = { ...services, auditLog: invocationAuditLog };
|
|
242
256
|
}
|
|
257
|
+
// Unconditional, unlike the audit — every function can record. Built on
|
|
258
|
+
// first access, since most invocations record nothing.
|
|
259
|
+
if (!services.analytics) {
|
|
260
|
+
services = { ...services };
|
|
261
|
+
Object.defineProperty(services, 'analytics', {
|
|
262
|
+
get() {
|
|
263
|
+
invocationAnalytics ??= createInvocationAnalytics(resolvedSingletonServices.analyticsService ??
|
|
264
|
+
new LoggerAnalyticsService(resolvedSingletonServices.logger), invocationWire, resolvedSingletonServices.logger, resolvedSingletonServices.analyticsIdentity);
|
|
265
|
+
return invocationAnalytics;
|
|
266
|
+
},
|
|
267
|
+
configurable: true,
|
|
268
|
+
enumerable: true,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
243
271
|
const callerPackageName = funcPackageName;
|
|
244
272
|
Object.defineProperty(invocationWire, 'rpc', {
|
|
245
273
|
get() {
|
|
@@ -259,6 +287,7 @@ export const runPikkuFunc = async (wireType, wireId, funcName, { singletonServic
|
|
|
259
287
|
finally {
|
|
260
288
|
// Flush the runner-installed audit buffer before wire services close.
|
|
261
289
|
await invocationAuditLog?.close();
|
|
290
|
+
await invocationAnalytics?.close();
|
|
262
291
|
if (wireServices && Object.keys(wireServices).length > 0) {
|
|
263
292
|
await closeWireServices(resolvedSingletonServices.logger, wireServices);
|
|
264
293
|
}
|
|
@@ -15,7 +15,7 @@ export type CorePikkuPermissionConfig<In = any, Services extends CoreSecretlessS
|
|
|
15
15
|
name?: string;
|
|
16
16
|
description?: string;
|
|
17
17
|
};
|
|
18
|
-
export declare const pikkuPermission: <In = any, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Wire extends PickRequired<PikkuWire<In, never, false, any, PikkuRPC, never, never>,
|
|
18
|
+
export declare const pikkuPermission: <In = any, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Wire extends PickRequired<PikkuWire<In, never, false, any, PikkuRPC, never, never>, 'session'> = PickRequired<PikkuWire<In, never, false, any, PikkuRPC, never, never>, 'session'>>(permission: CorePikkuPermission<In, Services, Wire> | CorePikkuPermissionConfig<In, Services, Wire>) => CorePikkuPermission<In, Services, Wire>;
|
|
19
19
|
export type CorePikkuPermissionFactory<In = any, Services extends CoreSecretlessSingletonServices = SecretlessServices<CoreServices>, Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> = PikkuWire<In, never, false, any, PikkuRPC, never, never>> = (input: In) => CorePikkuPermission<any, Services, Wire>;
|
|
20
20
|
export declare const pikkuPermissionFactory: <In = any>(factory: CorePikkuPermissionFactory<In>) => CorePikkuPermissionFactory<In>;
|
|
21
21
|
/**
|
|
@@ -47,7 +47,7 @@ export type CorePermissionGroup<PikkuPermission = CorePikkuPermission<any>> = Re
|
|
|
47
47
|
* it is never recorded and never replayed.
|
|
48
48
|
*/
|
|
49
49
|
export type CorePikkuFunctionHook<Services = any, Data = any, Wire = any> = (services: Services, data: Data, wire: Wire) => Promise<void> | void;
|
|
50
|
-
export type CorePikkuFunctionConfig<PikkuFunction extends CorePikkuFunction<any, any, any, any, any> | CorePikkuFunctionSessionless<any, any, any, any, any>, PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined, Scope extends string = string> = {
|
|
50
|
+
export type CorePikkuFunctionConfig<PikkuFunction extends CorePikkuFunction<any, any, any, any, any> | CorePikkuFunctionSessionless<any, any, any, any, any>, PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined, Scope extends string = string, FeatureFlagName extends string = string> = {
|
|
51
51
|
/** A human name for this function, shown wherever it is listed rather than called. */
|
|
52
52
|
title?: string;
|
|
53
53
|
/** What the function does. An agent choosing between tools reads this, so it is worth more care than a comment would be. */
|
|
@@ -128,6 +128,20 @@ export type CorePikkuFunctionConfig<PikkuFunction extends CorePikkuFunction<any,
|
|
|
128
128
|
auth?: boolean;
|
|
129
129
|
/** Scopes the session must hold. All are required, and checked before `permissions`, which OR together — a scope only narrows access. */
|
|
130
130
|
scopes?: Scope[];
|
|
131
|
+
/**
|
|
132
|
+
* The feature this function belongs to. Singular: a function implements part
|
|
133
|
+
* of one feature, and needing two is a sign it does two things.
|
|
134
|
+
*
|
|
135
|
+
* Resolved at runtime on every call, unlike `tags:` — a flag is
|
|
136
|
+
* meant to be flipped in a running system, so nothing here filters a build.
|
|
137
|
+
*
|
|
138
|
+
* Checked for AVAILABILITY only, never capability — if the runner enforced
|
|
139
|
+
* the capability half a flag would become a second authorization path with
|
|
140
|
+
* OR-ish semantics against `scopes:`. Authorization is always `scopes:`.
|
|
141
|
+
* Runs after `scopes:` so an unauthorized caller gets a 403 whether or not
|
|
142
|
+
* the feature is up, rather than learning that it exists and is off.
|
|
143
|
+
*/
|
|
144
|
+
featureFlag?: FeatureFlagName;
|
|
131
145
|
/** Checks that run before the body. Grouped names OR together, so any one passing admits the caller; use `scopes` to require rather than offer. */
|
|
132
146
|
permissions?: CorePermissionGroup<PikkuPermission>;
|
|
133
147
|
/** Wraps this function wherever it is called from, unlike wiring middleware which only wraps one route into it. */
|
|
@@ -148,5 +162,10 @@ export type CorePikkuFunctionConfig<PikkuFunction extends CorePikkuFunction<any,
|
|
|
148
162
|
* so an anonymous caller holds none and satisfies none — a sessionless function
|
|
149
163
|
* with scopes rejects every caller it exists to serve. Gate it with
|
|
150
164
|
* `permissions`, which receive the optional session and may pass anonymous.
|
|
165
|
+
*
|
|
166
|
+
* `featureFlag` is deliberately NOT omitted. It reads the config snapshot
|
|
167
|
+
* rather than the session, so it applies identically to a cron task, a queue
|
|
168
|
+
* worker and a webhook — which is where a kill switch matters most, since
|
|
169
|
+
* nobody is watching a UI to notice the feature is off.
|
|
151
170
|
*/
|
|
152
|
-
export type CorePikkuSessionlessFunctionConfig<PikkuFunction extends CorePikkuFunctionSessionless<any, any, any, any, any>, PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined> = Omit<CorePikkuFunctionConfig<PikkuFunction, PikkuPermission, PikkuMiddleware, InputSchema, OutputSchema>, 'scopes'>;
|
|
171
|
+
export type CorePikkuSessionlessFunctionConfig<PikkuFunction extends CorePikkuFunctionSessionless<any, any, any, any, any>, PikkuPermission extends CorePikkuPermission<any, any, any> = CorePikkuPermission<any>, PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<any, any>, InputSchema extends StandardSchemaV1 | undefined = undefined, OutputSchema extends StandardSchemaV1 | undefined = undefined, FeatureFlagName extends string = string> = Omit<CorePikkuFunctionConfig<PikkuFunction, PikkuPermission, PikkuMiddleware, InputSchema, OutputSchema, string, FeatureFlagName>, 'scopes'>;
|
package/dist/pikku-state.d.ts
CHANGED
|
@@ -7,5 +7,5 @@ export declare const resetPikkuState: () => void;
|
|
|
7
7
|
export declare const getSingletonServices: () => CoreSingletonServices;
|
|
8
8
|
export declare const setSingletonServices: (services: CoreSingletonServices) => void;
|
|
9
9
|
export declare const getCreateWireServices: () => CreateWireServices | undefined;
|
|
10
|
-
export declare const addPackageServiceFactories: (packageName: string, factories: NonNullable<PikkuPackageState[
|
|
10
|
+
export declare const addPackageServiceFactories: (packageName: string, factories: NonNullable<PikkuPackageState['package']['factories']>) => void;
|
|
11
11
|
export type { PikkuPackageState } from './types/state.types.js';
|
package/dist/scopes.d.ts
CHANGED
|
@@ -4,6 +4,17 @@ import type { CoreUserSession } from './types/core.types.js';
|
|
|
4
4
|
* than enforcing. Fails closed; an empty `required` is satisfied by anything.
|
|
5
5
|
*/
|
|
6
6
|
export declare const hasScopes: (required: readonly string[] | undefined, held: Iterable<string> | undefined) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* True when `held` satisfies AT LEAST ONE of `candidates`, with the same
|
|
9
|
+
* parent/wildcard rules as {@link hasScopes}.
|
|
10
|
+
*
|
|
11
|
+
* The OR counterpart to {@link hasScopes}, for a feature flag's `anyOf`: a flag
|
|
12
|
+
* usually reveals one entry point several roles can reach, so requiring all of
|
|
13
|
+
* them would hide it from everyone who can actually use it. Fails closed — an
|
|
14
|
+
* empty or absent `candidates` is satisfied by nothing, because "any of
|
|
15
|
+
* nothing" has no member that could hold.
|
|
16
|
+
*/
|
|
17
|
+
export declare const hasAnyScope: (candidates: readonly string[] | undefined, held: Iterable<string> | undefined) => boolean;
|
|
7
18
|
/**
|
|
8
19
|
* Throws {@link MissingScopeError} naming the first scope the session does not
|
|
9
20
|
* hold. Fails closed: no session, or a session without `scopes`, satisfies
|
package/dist/scopes.js
CHANGED
|
@@ -36,6 +36,23 @@ const firstUnsatisfied = (required, held) => {
|
|
|
36
36
|
* than enforcing. Fails closed; an empty `required` is satisfied by anything.
|
|
37
37
|
*/
|
|
38
38
|
export const hasScopes = (required, held) => firstUnsatisfied(required, held) === null;
|
|
39
|
+
/**
|
|
40
|
+
* True when `held` satisfies AT LEAST ONE of `candidates`, with the same
|
|
41
|
+
* parent/wildcard rules as {@link hasScopes}.
|
|
42
|
+
*
|
|
43
|
+
* The OR counterpart to {@link hasScopes}, for a feature flag's `anyOf`: a flag
|
|
44
|
+
* usually reveals one entry point several roles can reach, so requiring all of
|
|
45
|
+
* them would hide it from everyone who can actually use it. Fails closed — an
|
|
46
|
+
* empty or absent `candidates` is satisfied by nothing, because "any of
|
|
47
|
+
* nothing" has no member that could hold.
|
|
48
|
+
*/
|
|
49
|
+
export const hasAnyScope = (candidates, held) => {
|
|
50
|
+
if (!candidates || candidates.length === 0) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const grants = new Set(held ?? []);
|
|
54
|
+
return candidates.some((scope) => holds(grants, scope));
|
|
55
|
+
};
|
|
39
56
|
/**
|
|
40
57
|
* Throws {@link MissingScopeError} naming the first scope the session does not
|
|
41
58
|
* hold. Fails closed: no session, or a session without `scopes`, satisfies
|
|
@@ -42,5 +42,5 @@ export declare function createMiddlewareCredentialWireProps(credentialWire: Pikk
|
|
|
42
42
|
export declare function createWireServicesCredentialWireProps(credentialWire: PikkuCredentialWireService, allowedNames?: string[]): {
|
|
43
43
|
setCredential: (name: string, value: unknown) => void;
|
|
44
44
|
getCredential: <T = unknown>(name: string) => T | Promise<T | null> | null;
|
|
45
|
-
getCredentials: () => Record<string, unknown
|
|
45
|
+
getCredentials: () => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
46
46
|
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { DeclaredFlag, FlagConfigSnapshot, FlagSubject } from '../wirings/flag/flag.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The read half of feature flags, and the only half on the request path.
|
|
4
|
+
*
|
|
5
|
+
* Split from {@link FeatureFlagStore} so a third-party provider — PostHog,
|
|
6
|
+
* Unleash, LaunchDarkly — can back flags without pretending to implement an
|
|
7
|
+
* administration surface it does not own. Their UI is the operator surface;
|
|
8
|
+
* writing flags back through their management API means two systems own the
|
|
9
|
+
* same rows, and an implementation that throws from six methods is a console
|
|
10
|
+
* full of buttons that 500.
|
|
11
|
+
*/
|
|
12
|
+
export interface FeatureFlagSource {
|
|
13
|
+
/**
|
|
14
|
+
* The global config half: one small blob shared by every user, never
|
|
15
|
+
* per-user data.
|
|
16
|
+
*
|
|
17
|
+
* Implementations MUST cache this in isolate memory and MUST fall back to the
|
|
18
|
+
* compiled declaration when the backing store cannot be read — never to a
|
|
19
|
+
* database query, which would put I/O on the request path this design exists
|
|
20
|
+
* to keep clear. See `compiledFallbackSnapshot`.
|
|
21
|
+
*/
|
|
22
|
+
snapshot(): Promise<FlagConfigSnapshot>;
|
|
23
|
+
/**
|
|
24
|
+
* The flags the running app declares, where the implementation was told.
|
|
25
|
+
*
|
|
26
|
+
* Optional because it is not on the request path: resolution reads the
|
|
27
|
+
* snapshot, and a declaration absent from it already fails open. It exists so
|
|
28
|
+
* an administration surface can report the drift a provider cannot fix for
|
|
29
|
+
* itself — a flag declared in code that nobody created in PostHog resolves as
|
|
30
|
+
* on for everyone, and that is worth seeing before production finds it.
|
|
31
|
+
*/
|
|
32
|
+
declaredFlags?(): readonly DeclaredFlag[];
|
|
33
|
+
}
|
|
34
|
+
/** One flag as an administration surface sees it. */
|
|
35
|
+
export type FlagRow = DeclaredFlag & {
|
|
36
|
+
enabled: boolean;
|
|
37
|
+
rolloutPercent: number | null;
|
|
38
|
+
/**
|
|
39
|
+
* False when the flag's declaration has been removed from code but its row
|
|
40
|
+
* survives: still switchable, no longer offered, awaiting `pikku flags
|
|
41
|
+
* prune`. Never a silent revoke.
|
|
42
|
+
*/
|
|
43
|
+
declared: boolean;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* One override, as an administration surface sees it.
|
|
47
|
+
*
|
|
48
|
+
* Carries the subject's kind, which resolution does not: by the time a flag is
|
|
49
|
+
* resolved the organization and the user are one opaque string, and only a
|
|
50
|
+
* screen rendering the row needs to say which it was.
|
|
51
|
+
*/
|
|
52
|
+
export type FlagOverrideRow = {
|
|
53
|
+
/** The organization or user this override pins, as an opaque id. */
|
|
54
|
+
subjectId: string;
|
|
55
|
+
/** Which of the two `subjectId` is — `organization` or `user`. */
|
|
56
|
+
subjectKind: string;
|
|
57
|
+
/** Whether the subject is pinned on or pinned off, past the rollout either way. */
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
/** The user who wrote the override, where the store recorded one. */
|
|
60
|
+
grantedBy?: string;
|
|
61
|
+
/** When it was written, as an ISO-8601 instant, where the store recorded one. */
|
|
62
|
+
grantedAt?: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* The write half: the declaration lifecycle plus the operator controls.
|
|
66
|
+
*
|
|
67
|
+
* Implemented by a store pikku owns. Absent when flags come from a provider,
|
|
68
|
+
* which is what makes the console's Flags tab read-only rather than lying.
|
|
69
|
+
*/
|
|
70
|
+
export interface FeatureFlagStore extends FeatureFlagSource {
|
|
71
|
+
/**
|
|
72
|
+
* Registers the declared vocabulary. Additive on the same terms as
|
|
73
|
+
* `syncScopes`: a removed declaration leaves the row marked `declared: false`
|
|
74
|
+
* rather than deleting an operator's switch on deploy.
|
|
75
|
+
*
|
|
76
|
+
* A flag's description and `anyOf` *are* re-synced, because that is the
|
|
77
|
+
* declaration's whole content — editing it is how you change what the flag
|
|
78
|
+
* means, and the deploy is when it takes effect. `enabled`, the rollout and
|
|
79
|
+
* every override are the operator's, and are never touched.
|
|
80
|
+
*/
|
|
81
|
+
syncFlags(flags: DeclaredFlag[]): Promise<void>;
|
|
82
|
+
listFlags(): Promise<FlagRow[]>;
|
|
83
|
+
/**
|
|
84
|
+
* One flag's overrides, in full.
|
|
85
|
+
*
|
|
86
|
+
* Not folded into {@link listFlags}: the overrides are unbounded per flag
|
|
87
|
+
* while the list is one row each, and a screen that reads every override of
|
|
88
|
+
* every flag to render a board would grow with the wrong number.
|
|
89
|
+
*/
|
|
90
|
+
listOverrides(key: string): Promise<FlagOverrideRow[]>;
|
|
91
|
+
setEnabled(key: string, enabled: boolean, actor?: string, note?: string): Promise<void>;
|
|
92
|
+
/** `percent` is 0–100, or null to remove the rollout constraint. */
|
|
93
|
+
setRollout(key: string, percent: number | null, actor?: string): Promise<void>;
|
|
94
|
+
setOverride(key: string, subject: FlagSubject, enabled: boolean, actor?: string): Promise<void>;
|
|
95
|
+
clearOverride(key: string, subject: FlagSubject): Promise<void>;
|
|
96
|
+
/** Flags in the store with no declaration left in code; powers `pikku flags audit`. */
|
|
97
|
+
findStaleFlags(): Promise<string[]>;
|
|
98
|
+
/** Removes undeclared flags and their overrides. */
|
|
99
|
+
pruneFlags(): Promise<string[]>;
|
|
100
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/services/index.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ export type { VariableMeta } from './typed-variables-service.js';
|
|
|
47
47
|
export type { MetaService } from './meta-service.js';
|
|
48
48
|
export type { SessionStore } from './session-store.js';
|
|
49
49
|
export type { ScopeService, Role } from './scope-service.js';
|
|
50
|
+
export type { FeatureFlagSource, FeatureFlagStore, FlagRow, FlagOverrideRow, } from './feature-flag-service.js';
|
|
50
51
|
export type { IsSystemRole } from './system-role-guard.js';
|
|
51
52
|
export { NoopAuditService, createInvocationAudit } from './audit-service.js';
|
|
52
53
|
export type { AuditConfig, AuditDurability, AuditEvent, AuditEventBatch, AuditLog, AuditService, AuditUserIdentity, ResolvedAuditConfig, } from './audit-service.js';
|
|
@@ -9,6 +9,8 @@ import type { WorkflowsMeta } from '../wirings/workflow/workflow.types.js';
|
|
|
9
9
|
import type { FeaturesMeta } from '../wirings/workflow/scenario.types.js';
|
|
10
10
|
import type { ResolvedPersona } from './personas-service.js';
|
|
11
11
|
import type { SystemRoleDefinitionsMeta } from '../wirings/role/role.types.js';
|
|
12
|
+
import type { FeatureFlagDefinitionsMeta } from '../wirings/flag/flag.types.js';
|
|
13
|
+
import type { AnalyticsEventsMeta } from '../analytics/analytics.types.js';
|
|
12
14
|
import type { TriggerMeta, TriggerSourceMeta } from '../wirings/trigger/trigger.types.js';
|
|
13
15
|
import type { SecretDefinitionsMeta } from '../wirings/secret/secret.types.js';
|
|
14
16
|
import type { CredentialDefinitionsMeta } from '../wirings/credential/credential.types.js';
|
|
@@ -152,6 +154,16 @@ export interface MetaService {
|
|
|
152
154
|
* seed granted from rather than a second one.
|
|
153
155
|
*/
|
|
154
156
|
getSystemRolesMeta(): Promise<SystemRoleDefinitionsMeta>;
|
|
157
|
+
/**
|
|
158
|
+
* The flags declared with `defineFeatureFlags`, keyed by name.
|
|
159
|
+
*
|
|
160
|
+
* The declaration half only. What an operator set — the switch, the rollout,
|
|
161
|
+
* the overrides — lives in the flag store and is read through the admin
|
|
162
|
+
* surface, because it changes without a deploy and this does not.
|
|
163
|
+
*/
|
|
164
|
+
getFeatureFlagsMeta(): Promise<FeatureFlagDefinitionsMeta>;
|
|
165
|
+
/** The events declared with `defineAnalyticsEvents`, keyed by name. */
|
|
166
|
+
getAnalyticsMeta(): Promise<AnalyticsEventsMeta>;
|
|
155
167
|
getFeaturesMeta(): Promise<FeaturesMeta>;
|
|
156
168
|
getTriggerMeta(): Promise<TriggerMeta>;
|
|
157
169
|
getTriggerSourceMeta(): Promise<TriggerSourceMeta>;
|
|
@@ -182,6 +194,8 @@ export declare class LocalMetaService implements MetaService {
|
|
|
182
194
|
private workflowMetaCache;
|
|
183
195
|
private personasMetaCache;
|
|
184
196
|
private systemRolesMetaCache;
|
|
197
|
+
private featureFlagsMetaCache;
|
|
198
|
+
private analyticsMetaCache;
|
|
185
199
|
private featuresMetaCache;
|
|
186
200
|
private triggerMetaCache;
|
|
187
201
|
private triggerSourceMetaCache;
|
|
@@ -216,6 +230,8 @@ export declare class LocalMetaService implements MetaService {
|
|
|
216
230
|
getWorkflowMeta(): Promise<WorkflowsMeta>;
|
|
217
231
|
getPersonasMeta(): Promise<Record<string, ResolvedPersona>>;
|
|
218
232
|
getSystemRolesMeta(): Promise<SystemRoleDefinitionsMeta>;
|
|
233
|
+
getFeatureFlagsMeta(): Promise<FeatureFlagDefinitionsMeta>;
|
|
234
|
+
getAnalyticsMeta(): Promise<AnalyticsEventsMeta>;
|
|
219
235
|
getFeaturesMeta(): Promise<FeaturesMeta>;
|
|
220
236
|
getTriggerMeta(): Promise<TriggerMeta>;
|
|
221
237
|
getTriggerSourceMeta(): Promise<TriggerSourceMeta>;
|
|
@@ -15,6 +15,8 @@ export class LocalMetaService {
|
|
|
15
15
|
workflowMetaCache = null;
|
|
16
16
|
personasMetaCache = null;
|
|
17
17
|
systemRolesMetaCache = null;
|
|
18
|
+
featureFlagsMetaCache = null;
|
|
19
|
+
analyticsMetaCache = null;
|
|
18
20
|
featuresMetaCache = null;
|
|
19
21
|
triggerMetaCache = null;
|
|
20
22
|
triggerSourceMetaCache = null;
|
|
@@ -111,6 +113,8 @@ export class LocalMetaService {
|
|
|
111
113
|
this.workflowMetaCache = null;
|
|
112
114
|
this.personasMetaCache = null;
|
|
113
115
|
this.systemRolesMetaCache = null;
|
|
116
|
+
this.featureFlagsMetaCache = null;
|
|
117
|
+
this.analyticsMetaCache = null;
|
|
114
118
|
this.featuresMetaCache = null;
|
|
115
119
|
this.triggerMetaCache = null;
|
|
116
120
|
this.triggerSourceMetaCache = null;
|
|
@@ -270,6 +274,21 @@ export class LocalMetaService {
|
|
|
270
274
|
this.systemRolesMetaCache = content ? JSON.parse(content) : {};
|
|
271
275
|
return this.systemRolesMetaCache;
|
|
272
276
|
}
|
|
277
|
+
async getFeatureFlagsMeta() {
|
|
278
|
+
if (this.featureFlagsMetaCache)
|
|
279
|
+
return this.featureFlagsMetaCache;
|
|
280
|
+
// Beside the scopes their `anyOf` names, which is where codegen writes it.
|
|
281
|
+
const content = await this.readFile('scopes/pikku-flags-meta.gen.json');
|
|
282
|
+
this.featureFlagsMetaCache = content ? JSON.parse(content) : {};
|
|
283
|
+
return this.featureFlagsMetaCache;
|
|
284
|
+
}
|
|
285
|
+
async getAnalyticsMeta() {
|
|
286
|
+
if (this.analyticsMetaCache)
|
|
287
|
+
return this.analyticsMetaCache;
|
|
288
|
+
const content = await this.readFile('analytics/pikku-analytics-meta.gen.json');
|
|
289
|
+
this.analyticsMetaCache = content ? JSON.parse(content) : {};
|
|
290
|
+
return this.analyticsMetaCache;
|
|
291
|
+
}
|
|
273
292
|
async getFeaturesMeta() {
|
|
274
293
|
if (this.featuresMetaCache)
|
|
275
294
|
return this.featuresMetaCache;
|
|
@@ -92,8 +92,13 @@ export declare abstract class WebhookService {
|
|
|
92
92
|
verify(secret: string, signature: string, body: string): boolean;
|
|
93
93
|
/**
|
|
94
94
|
* The three methods below are optional capability: the default queue-only
|
|
95
|
-
* service keeps no history
|
|
96
|
-
*
|
|
95
|
+
* service keeps no history, and a store-backed implementation (e.g.
|
|
96
|
+
* `KyselyWebhookService` in `@pikku/kysely`) overrides them.
|
|
97
|
+
*
|
|
98
|
+
* Only the write throws. A write that goes nowhere loses the caller's data,
|
|
99
|
+
* so it has to say so; a read of a history nobody keeps is honestly empty,
|
|
100
|
+
* and throwing there turns the console's webhooks page into an error on
|
|
101
|
+
* every app that has not opted into persistence.
|
|
97
102
|
*/
|
|
98
103
|
recordAttempt(_deliveryId: string, _result: WebhookAttemptResult): Promise<void>;
|
|
99
104
|
/** Most recent first. */
|
|
@@ -14,17 +14,22 @@ export class WebhookService {
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* The three methods below are optional capability: the default queue-only
|
|
17
|
-
* service keeps no history
|
|
18
|
-
*
|
|
17
|
+
* service keeps no history, and a store-backed implementation (e.g.
|
|
18
|
+
* `KyselyWebhookService` in `@pikku/kysely`) overrides them.
|
|
19
|
+
*
|
|
20
|
+
* Only the write throws. A write that goes nowhere loses the caller's data,
|
|
21
|
+
* so it has to say so; a read of a history nobody keeps is honestly empty,
|
|
22
|
+
* and throwing there turns the console's webhooks page into an error on
|
|
23
|
+
* every app that has not opted into persistence.
|
|
19
24
|
*/
|
|
20
25
|
recordAttempt(_deliveryId, _result) {
|
|
21
26
|
throw new NotImplementedError('webhook delivery persistence is not configured');
|
|
22
27
|
}
|
|
23
28
|
/** Most recent first. */
|
|
24
|
-
listDeliveries(_opts) {
|
|
25
|
-
|
|
29
|
+
async listDeliveries(_opts) {
|
|
30
|
+
return [];
|
|
26
31
|
}
|
|
27
|
-
getDelivery(_deliveryId) {
|
|
28
|
-
|
|
32
|
+
async getDelivery(_deliveryId) {
|
|
33
|
+
return null;
|
|
29
34
|
}
|
|
30
35
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `agentRunService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineAgentRunServiceTests: (name: string, agentRunService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineAgentRunServiceTests: (name: string, agentRunService: NonNullable<ServiceTestConfig['services']['agentRunService']>,
|
|
4
4
|
/**
|
|
5
5
|
* Thread-ownership is a property of the two services together — the run
|
|
6
6
|
* service lists what the storage service owns — so that half of the suite
|
|
7
7
|
* only runs when a backend supplies both. Passed explicitly rather than
|
|
8
8
|
* closed over, so the dependency is visible in the signature.
|
|
9
9
|
*/
|
|
10
|
-
agentStorageService?: ServiceTestConfig[
|
|
10
|
+
agentStorageService?: ServiceTestConfig['services']['agentStorageService']) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `agentStorageService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineAiStorageServiceTests: (name: string, agentStorageService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineAiStorageServiceTests: (name: string, agentStorageService: NonNullable<ServiceTestConfig['services']['agentStorageService']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `channelStore`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineChannelStoreTests: (name: string, channelStore: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineChannelStoreTests: (name: string, channelStore: NonNullable<ServiceTestConfig['services']['channelStore']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `credentialService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineCredentialServiceTests: (name: string, credentialService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineCredentialServiceTests: (name: string, credentialService: NonNullable<ServiceTestConfig['services']['credentialService']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `deploymentService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineDeploymentServiceTests: (name: string, deploymentService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineDeploymentServiceTests: (name: string, deploymentService: NonNullable<ServiceTestConfig['services']['deploymentService']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `eventHubStore`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineEventHubStoreTests: (name: string, eventHubStore: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineEventHubStoreTests: (name: string, eventHubStore: NonNullable<ServiceTestConfig['services']['eventHubStore']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `secretService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineSecretServiceTests: (name: string, secretService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineSecretServiceTests: (name: string, secretService: NonNullable<ServiceTestConfig['services']['secretService']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `sessionStore`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineSessionStoreTests: (name: string, sessionStore: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineSessionStoreTests: (name: string, sessionStore: NonNullable<ServiceTestConfig['services']['sessionStore']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `workflowRunService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineWorkflowRunServiceTests: (name: string, workflowRunService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineWorkflowRunServiceTests: (name: string, workflowRunService: NonNullable<ServiceTestConfig['services']['workflowRunService']>) => void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ServiceTestConfig } from '../service-tests.js';
|
|
2
2
|
/** Conformance suite for `workflowService`. Runs only when a backend supplies one. */
|
|
3
|
-
export declare const defineWorkflowServiceTests: (name: string, workflowService: NonNullable<ServiceTestConfig[
|
|
3
|
+
export declare const defineWorkflowServiceTests: (name: string, workflowService: NonNullable<ServiceTestConfig['services']['workflowService']>) => void;
|
|
@@ -38,7 +38,9 @@ import type { MetaService } from '../services/meta-service.js';
|
|
|
38
38
|
import type { CoverageService } from '../services/v8-coverage-service.js';
|
|
39
39
|
import type { SessionStore } from '../services/session-store.js';
|
|
40
40
|
import type { ScopeService } from '../services/scope-service.js';
|
|
41
|
+
import type { FeatureFlagSource } from '../services/feature-flag-service.js';
|
|
41
42
|
import type { AuditDurability, AuditLog, AuditService } from '../services/audit-service.js';
|
|
43
|
+
import type { AnalyticsLog, AnalyticsIdentityResolver, AnalyticsService } from '../analytics/analytics.types.js';
|
|
42
44
|
export type PikkuWiringTypes = 'http' | 'scheduler' | 'trigger' | 'channel' | 'rpc' | 'queue' | 'mcp' | 'cli' | 'workflow' | 'agent' | 'gateway';
|
|
43
45
|
/**
|
|
44
46
|
* Runtime pool tuning for the Postgres adapter. The connection string stays
|
|
@@ -145,6 +147,20 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
|
|
|
145
147
|
/** V8 precise-coverage collector (`pikku dev --coverage` only) */
|
|
146
148
|
coverageService?: CoverageService;
|
|
147
149
|
audit?: AuditService;
|
|
150
|
+
/** Where product-analytics events go; unset means the logger. */
|
|
151
|
+
analyticsService?: AnalyticsService;
|
|
152
|
+
/**
|
|
153
|
+
* Resolves the browser-originated half of an event's identity — vendor ids
|
|
154
|
+
* and consent — from the wire. Unset means a sink sees only what the session
|
|
155
|
+
* carries, which is enough for a product-analytics tool and not enough for an
|
|
156
|
+
* ad platform.
|
|
157
|
+
*/
|
|
158
|
+
analyticsIdentity?: AnalyticsIdentityResolver;
|
|
159
|
+
/**
|
|
160
|
+
* Request-scoped buffer writing into `analyticsService`. Narrow it to the
|
|
161
|
+
* app's own event union in `SingletonServices` to type `record()`.
|
|
162
|
+
*/
|
|
163
|
+
analytics?: AnalyticsLog;
|
|
148
164
|
/**
|
|
149
165
|
* Request-scoped audit buffer that writes into `audit` (the durable sink).
|
|
150
166
|
* Returned as a wire service so the runner flushes it via `close()` when the
|
|
@@ -158,6 +174,13 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
|
|
|
158
174
|
* never by the function runner.
|
|
159
175
|
*/
|
|
160
176
|
scopeService?: ScopeService;
|
|
177
|
+
/**
|
|
178
|
+
* The global feature-flag config, read by the function runner to enforce a
|
|
179
|
+
* flag's availability. Inert when absent: a project that declares no flag
|
|
180
|
+
* carries nothing, and a `featureFlag:` with no source registered is a
|
|
181
|
+
* no-op rather than a closed door.
|
|
182
|
+
*/
|
|
183
|
+
featureFlags?: FeatureFlagSource;
|
|
161
184
|
/**
|
|
162
185
|
* Built once by the factory an auth package registers and injected by the
|
|
163
186
|
* generated `pikkuServices` wrapper — service factories must not return it
|
|
@@ -12,4 +12,4 @@ export type AgentRPCOptions = {
|
|
|
12
12
|
* to the runner and stream code it delegates to, instead of a wing of the RPC
|
|
13
13
|
* primitive.
|
|
14
14
|
*/
|
|
15
|
-
export declare const createAgentRPC: (wire: PikkuRawWire, options: AgentRPCOptions) => PikkuRPC[
|
|
15
|
+
export declare const createAgentRPC: (wire: PikkuRawWire, options: AgentRPCOptions) => PikkuRPC['agent'];
|
|
@@ -30,10 +30,10 @@ export declare const toAccumulatedStep: (stepResult: StepResult) => {
|
|
|
30
30
|
outputTokens: number;
|
|
31
31
|
};
|
|
32
32
|
toolCalls: {
|
|
33
|
-
error?: string | undefined;
|
|
34
33
|
name: string;
|
|
35
34
|
args: Record<string, unknown>;
|
|
36
35
|
result: string;
|
|
36
|
+
error?: string | undefined;
|
|
37
37
|
}[];
|
|
38
38
|
};
|
|
39
39
|
type PendingApproval = {
|
|
@@ -8,7 +8,7 @@ import { type ScorerInput } from './agent-scorer.types.js';
|
|
|
8
8
|
* also strictly best-effort: the client already has its answer, so nothing here
|
|
9
9
|
* may fail the run.
|
|
10
10
|
*/
|
|
11
|
-
export declare const scoreFinishedRun: (run: ScorerInput, services: Pick<CoreSingletonServices,
|
|
11
|
+
export declare const scoreFinishedRun: (run: ScorerInput, services: Pick<CoreSingletonServices, 'logger'> & {
|
|
12
12
|
queueService?: {
|
|
13
13
|
add: (queueName: string, data: unknown) => Promise<any>;
|
|
14
14
|
};
|
|
@@ -6,7 +6,7 @@ export declare const runChannelLifecycleWithMiddleware: ({ channelConfig, meta,
|
|
|
6
6
|
channelConfig: CoreChannel<unknown, any>;
|
|
7
7
|
meta: ChannelMessageMeta;
|
|
8
8
|
lifecycleConfig: any;
|
|
9
|
-
lifecycleType:
|
|
9
|
+
lifecycleType: 'connect' | 'disconnect';
|
|
10
10
|
services: CoreSingletonServices;
|
|
11
11
|
channel: any;
|
|
12
12
|
data?: unknown;
|
|
@@ -5,10 +5,10 @@ import type { ChannelRPCValidator } from './channel-rpc.types.js';
|
|
|
5
5
|
* declared return type — the same one an agent tool or an HTTP response is
|
|
6
6
|
* checked against.
|
|
7
7
|
*/
|
|
8
|
-
export declare const createChannelRPCResultValidator: (singletonServices: Pick<CoreSingletonServices,
|
|
8
|
+
export declare const createChannelRPCResultValidator: (singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>, packageName?: string | null) => ChannelRPCValidator;
|
|
9
9
|
/**
|
|
10
10
|
* Checks outbound arguments against the declared input type. Unlike the result
|
|
11
11
|
* check this is not a boundary — it catches version drift, where a server built
|
|
12
12
|
* against a newer capability signature calls a client that predates it.
|
|
13
13
|
*/
|
|
14
|
-
export declare const createChannelRPCInputValidator: (singletonServices: Pick<CoreSingletonServices,
|
|
14
|
+
export declare const createChannelRPCInputValidator: (singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>, packageName?: string | null) => ChannelRPCValidator;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SessionService } from '../../services/user-session-service.js';
|
|
2
2
|
import type { ChannelMeta, CoreChannel, RunChannelOptions, RunChannelParams } from './channel.types.js';
|
|
3
3
|
export declare const wireChannel: <In, Channel extends string, ChannelConnect, ChannelDisconnect, ChannelFunctionMessage>(channel: CoreChannel<In, Channel, ChannelConnect, ChannelDisconnect, ChannelFunctionMessage>) => void;
|
|
4
|
-
export declare const openChannel: ({ route, coerceDataFromSchema, request, }: Pick<CoreChannel<unknown, string>,
|
|
4
|
+
export declare const openChannel: ({ route, coerceDataFromSchema, request, }: Pick<CoreChannel<unknown, string>, 'route'> & RunChannelParams<unknown> & {
|
|
5
5
|
userSession: SessionService<any>;
|
|
6
6
|
} & RunChannelOptions) => Promise<{
|
|
7
7
|
openingData: unknown;
|