@pikku/core 0.12.106 → 0.12.111
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 +358 -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/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/rpc/rpc-runner.js +3 -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/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 -566
- 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
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/core",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.111",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/pikkujs/pikku.git",
|
|
7
|
+
"directory": "packages/core"
|
|
8
|
+
},
|
|
4
9
|
"description": "The Pikku runtime — functions, wirings, services, middleware and types",
|
|
5
10
|
"author": "yasser.fadl@gmail.com",
|
|
6
11
|
"license": "MIT",
|
|
@@ -13,7 +18,7 @@
|
|
|
13
18
|
"test": "bash run-tests.sh",
|
|
14
19
|
"test:watch": "bash run-tests.sh --watch",
|
|
15
20
|
"test:coverage": "bash run-tests.sh --coverage",
|
|
16
|
-
"prepublishOnly": "
|
|
21
|
+
"prepublishOnly": "bun run build",
|
|
17
22
|
"api-report": "tsx scripts/generate-api-report.mts"
|
|
18
23
|
},
|
|
19
24
|
"sideEffects": [
|
|
@@ -51,6 +56,7 @@
|
|
|
51
56
|
"./mcp": "./dist/wirings/mcp/index.js",
|
|
52
57
|
"./agent": "./dist/wirings/agent/index.js",
|
|
53
58
|
"./agent-scorer": "./dist/wirings/agent-scorer/index.js",
|
|
59
|
+
"./analytics": "./dist/analytics/index.js",
|
|
54
60
|
"./gateway": "./dist/wirings/gateway/index.js",
|
|
55
61
|
"./cli": "./dist/wirings/cli/index.js",
|
|
56
62
|
"./cli/command-parser": "./dist/wirings/cli/command-parser.js",
|
|
@@ -65,6 +71,7 @@
|
|
|
65
71
|
"./oauth2": "./dist/wirings/oauth2/index.js",
|
|
66
72
|
"./errors": "./dist/errors/index.js",
|
|
67
73
|
"./services": "./dist/services/index.js",
|
|
74
|
+
"./flag": "./dist/wirings/flag/index.js",
|
|
68
75
|
"./services/local-meta": "./dist/services/meta-service.js",
|
|
69
76
|
"./services/v8-coverage": "./dist/services/v8-coverage-service.js",
|
|
70
77
|
"./services/istanbul-coverage": "./dist/services/istanbul-coverage-service.js",
|
|
@@ -92,10 +99,9 @@
|
|
|
92
99
|
"@ag-ui/core": "0.0.57",
|
|
93
100
|
"@types/node": "^24.13.3",
|
|
94
101
|
"esbuild": "~0.28.2",
|
|
95
|
-
"tsx": "^4.23.12"
|
|
96
|
-
"typescript": "^6.0.3"
|
|
102
|
+
"tsx": "^4.23.12"
|
|
97
103
|
},
|
|
98
104
|
"engines": {
|
|
99
105
|
"node": ">=24"
|
|
100
106
|
}
|
|
101
|
-
}
|
|
107
|
+
}
|
package/run-tests.sh
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
-
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
4
|
-
cd "$script_dir"
|
|
5
|
-
|
|
6
3
|
# Enable nullglob to handle cases where no files match the pattern
|
|
7
4
|
shopt -s nullglob
|
|
8
5
|
|
|
@@ -43,18 +40,29 @@ if [ ${#files[@]} -eq 0 ]; then
|
|
|
43
40
|
exit 0
|
|
44
41
|
fi
|
|
45
42
|
|
|
46
|
-
# Construct the
|
|
47
|
-
|
|
43
|
+
# Construct the bun command
|
|
44
|
+
#
|
|
45
|
+
# --parallel gives every test file its own worker process, which is what node's
|
|
46
|
+
# `--test` did. Several suites keep module-level caches (a TypeScript program, a
|
|
47
|
+
# temp fixture directory) that a shared process would leak between files.
|
|
48
|
+
#
|
|
49
|
+
# --timeout because bun caps a test at 5s by default where node had no cap, and
|
|
50
|
+
# the suites that build real TypeScript programs run well past that.
|
|
51
|
+
bun_cmd=(bun test --parallel --timeout 120000)
|
|
48
52
|
|
|
49
53
|
# Append options based on flags
|
|
50
54
|
if [ "$watch_mode" = true ]; then
|
|
51
|
-
|
|
55
|
+
# --watch reruns in one process; parallel workers have nothing to watch.
|
|
56
|
+
bun_cmd=(bun test --watch --timeout 120000)
|
|
52
57
|
fi
|
|
53
58
|
|
|
54
59
|
if [ "$coverage_mode" = true ]; then
|
|
55
|
-
|
|
60
|
+
# --coverage-dir=. keeps lcov.info at the package root: CI merges every
|
|
61
|
+
# package's report by prefixing its SF paths with the file's own directory,
|
|
62
|
+
# so a nested coverage/ directory would re-root them one level too deep.
|
|
63
|
+
bun_cmd+=(--coverage --coverage-reporter=lcov --coverage-reporter=text --coverage-dir=.)
|
|
56
64
|
export PIKKU_TEST_COVERAGE=1
|
|
57
65
|
fi
|
|
58
66
|
|
|
59
|
-
# Execute the
|
|
60
|
-
"${
|
|
67
|
+
# Execute the bun command with the expanded list of files
|
|
68
|
+
"${bun_cmd[@]}" "${files[@]}"
|
package/src/public-surface.json
CHANGED
|
@@ -350,6 +350,7 @@
|
|
|
350
350
|
"BadRequestError",
|
|
351
351
|
"ConflictError",
|
|
352
352
|
"ExpectationFailedError",
|
|
353
|
+
"FeatureUnavailableError",
|
|
353
354
|
"ForbiddenError",
|
|
354
355
|
"GatewayTimeoutError",
|
|
355
356
|
"GoneError",
|
|
@@ -449,6 +450,19 @@
|
|
|
449
450
|
"verifyActorSecret",
|
|
450
451
|
"withoutSecrets"
|
|
451
452
|
],
|
|
453
|
+
"./flag": [
|
|
454
|
+
"CachedFlagSource",
|
|
455
|
+
"assertFeatureAvailable",
|
|
456
|
+
"bucketOf",
|
|
457
|
+
"compiledFallbackSnapshot",
|
|
458
|
+
"defineFeatureFlags",
|
|
459
|
+
"flattenFeatureFlagDefinitions",
|
|
460
|
+
"resolveFlag",
|
|
461
|
+
"resolveFlagForClient",
|
|
462
|
+
"resolveFlagsForClient",
|
|
463
|
+
"subjectIdOf",
|
|
464
|
+
"validateAndBuildFeatureFlagDefinitionsMeta"
|
|
465
|
+
],
|
|
452
466
|
"./services/local-meta": [
|
|
453
467
|
"LocalMetaService"
|
|
454
468
|
],
|
|
@@ -549,5 +563,17 @@
|
|
|
549
563
|
"pikkuDevReloader",
|
|
550
564
|
"reconcileAddonRegistry",
|
|
551
565
|
"reloadGeneratedMeta"
|
|
566
|
+
],
|
|
567
|
+
"./analytics": [
|
|
568
|
+
"LoggerAnalyticsService",
|
|
569
|
+
"anonymousAnalyticsIdentity",
|
|
570
|
+
"composeAnalyticsIdentity",
|
|
571
|
+
"cookieAnalyticsIdentity",
|
|
572
|
+
"createInvocationAnalytics",
|
|
573
|
+
"defineAnalyticsEvents",
|
|
574
|
+
"fanOutAnalytics",
|
|
575
|
+
"flattenAnalyticsEvent",
|
|
576
|
+
"mintCookie",
|
|
577
|
+
"randomDigits"
|
|
552
578
|
]
|
|
553
579
|
}
|
package/src/agent-naming.test.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
import { readFileSync } from 'node:fs'
|
|
4
|
-
import { fileURLToPath } from 'node:url'
|
|
5
|
-
import { join, dirname } from 'node:path'
|
|
6
|
-
|
|
7
|
-
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
8
|
-
const reportPath = join(packageRoot, 'api-report.md')
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* `AI` described the model provider, never the agent runtime, so #596 renamed
|
|
12
|
-
* every agent symbol to `Agent`. The names below are the ones that survived,
|
|
13
|
-
* because each really does wrap a provider call.
|
|
14
|
-
*
|
|
15
|
-
* Listing them here is what makes the rule checkable: anything else exported as
|
|
16
|
-
* `AI*` is a symbol that slipped back to the old naming, and this fails rather
|
|
17
|
-
* than letting it reach a consumer.
|
|
18
|
-
*/
|
|
19
|
-
const PROVIDER_SYMBOLS = new Set([
|
|
20
|
-
'AIEmbeddingService',
|
|
21
|
-
'AIEmbedManyParams',
|
|
22
|
-
'AIEmbedManyResult',
|
|
23
|
-
'AIEmbedParams',
|
|
24
|
-
'AIEmbedResult',
|
|
25
|
-
'AIGenerateImageParams',
|
|
26
|
-
'AIGenerateImagePrompt',
|
|
27
|
-
'AIGenerateImageResult',
|
|
28
|
-
'AIGenerateSpeechParams',
|
|
29
|
-
'AIGenerateSpeechResult',
|
|
30
|
-
'AIProviderAuthError',
|
|
31
|
-
'AIProviderNotConfiguredError',
|
|
32
|
-
'AIProviderOptions',
|
|
33
|
-
'AIRerankParams',
|
|
34
|
-
'AIRerankResult',
|
|
35
|
-
'AITranscriptionParams',
|
|
36
|
-
'AITranscriptionResult',
|
|
37
|
-
])
|
|
38
|
-
|
|
39
|
-
describe('the agent runtime is not exported under the AI name', () => {
|
|
40
|
-
test('every AI* symbol in the public surface is a provider wrapper', () => {
|
|
41
|
-
const report = readFileSync(reportPath, 'utf-8')
|
|
42
|
-
const found = new Set(report.match(/\bAI[A-Z][A-Za-z]*/g) ?? [])
|
|
43
|
-
|
|
44
|
-
const strays = [...found].filter((name) => !PROVIDER_SYMBOLS.has(name))
|
|
45
|
-
|
|
46
|
-
assert.deepEqual(
|
|
47
|
-
strays,
|
|
48
|
-
[],
|
|
49
|
-
'these are exported as `AI*` but are not provider wrappers — rename them ' +
|
|
50
|
-
'to `Agent*`, or add them to PROVIDER_SYMBOLS if they genuinely wrap a ' +
|
|
51
|
-
'model provider call'
|
|
52
|
-
)
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
test('the agent entry points are the renamed ones', () => {
|
|
56
|
-
const { exports } = JSON.parse(
|
|
57
|
-
readFileSync(join(packageRoot, 'package.json'), 'utf-8')
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
assert.ok(exports['./agent'], 'expected the ./agent entry point')
|
|
61
|
-
assert.ok(
|
|
62
|
-
exports['./agent-scorer'],
|
|
63
|
-
'expected the ./agent-scorer entry point'
|
|
64
|
-
)
|
|
65
|
-
assert.equal(exports['./ai-agent'], undefined)
|
|
66
|
-
assert.equal(exports['./ai-scorer'], undefined)
|
|
67
|
-
})
|
|
68
|
-
})
|
package/src/api-report.test.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
import { execFileSync } from 'node:child_process'
|
|
4
|
-
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
|
|
5
|
-
import { tmpdir } from 'node:os'
|
|
6
|
-
import { fileURLToPath } from 'node:url'
|
|
7
|
-
import { join, dirname } from 'node:path'
|
|
8
|
-
|
|
9
|
-
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
10
|
-
const reportPath = join(packageRoot, 'api-report.md')
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* `public-surface.json` pins the *names* a consumer can reach. That catches an
|
|
14
|
-
* export appearing or vanishing and nothing else — adding a method to
|
|
15
|
-
* `MetaService`, or making a field on `ChannelMeta` required, sails past it,
|
|
16
|
-
* as does every type-only export. Those are the changes that break a
|
|
17
|
-
* consumer's build, and the report's summary counts how many more of them
|
|
18
|
-
* there are than there are names.
|
|
19
|
-
*
|
|
20
|
-
* So `api-report.md` records what each symbol *is*, and this fails when the
|
|
21
|
-
* committed report and the code disagree.
|
|
22
|
-
*
|
|
23
|
-
* knowledge: decisions/internals/the-api-report-pins-members-not-just-names.md
|
|
24
|
-
*/
|
|
25
|
-
describe('the API report matches the code', () => {
|
|
26
|
-
test('regenerating produces no diff', () => {
|
|
27
|
-
const committed = readFileSync(reportPath, 'utf-8')
|
|
28
|
-
|
|
29
|
-
execFileSync(
|
|
30
|
-
'npx',
|
|
31
|
-
['tsx', join(packageRoot, 'scripts', 'generate-api-report.mts')],
|
|
32
|
-
{ cwd: packageRoot, stdio: 'pipe' }
|
|
33
|
-
)
|
|
34
|
-
const regenerated = readFileSync(reportPath, 'utf-8')
|
|
35
|
-
|
|
36
|
-
if (committed !== regenerated) {
|
|
37
|
-
// Restore, so a failing run does not leave the tree dirty.
|
|
38
|
-
const committedLines = committed.split('\n')
|
|
39
|
-
const regeneratedLines = regenerated.split('\n')
|
|
40
|
-
const firstDiff = regeneratedLines.findIndex(
|
|
41
|
-
(line, i) => line !== committedLines[i]
|
|
42
|
-
)
|
|
43
|
-
writeFileSync(reportPath, committed)
|
|
44
|
-
|
|
45
|
-
assert.fail(
|
|
46
|
-
'the public API changed but api-report.md was not regenerated.\n' +
|
|
47
|
-
`First difference at line ${firstDiff + 1}:\n` +
|
|
48
|
-
` committed: ${committedLines[firstDiff] ?? '(end of file)'}\n` +
|
|
49
|
-
` regenerated: ${regeneratedLines[firstDiff] ?? '(end of file)'}\n` +
|
|
50
|
-
'Run `yarn api-report` and review the diff — a member added to an ' +
|
|
51
|
-
'exported interface or class is a change consumers compile against.'
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test('the report actually contains member-level detail', () => {
|
|
57
|
-
// Guards the test above: a report of bare names would match itself forever
|
|
58
|
-
// while pinning nothing that public-surface.json does not already pin.
|
|
59
|
-
const report = readFileSync(reportPath, 'utf-8')
|
|
60
|
-
|
|
61
|
-
assert.ok(
|
|
62
|
-
/export interface MetaService \{[^}]*getHttpMeta/.test(report),
|
|
63
|
-
'expected MetaService to be reported with its members'
|
|
64
|
-
)
|
|
65
|
-
assert.ok(
|
|
66
|
-
!/^\w+: any$/m.test(report),
|
|
67
|
-
'symbols reported as `any` mean re-export aliases are not being followed'
|
|
68
|
-
)
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Every branch that touches the public surface rewrites the whole report, so
|
|
74
|
-
* two of them meeting is a ~9000-line conflict with no meaningful resolution
|
|
75
|
-
* in it. A merge driver takes the conflict away; the test above is what still
|
|
76
|
-
* insists on a report that matches the code.
|
|
77
|
-
*
|
|
78
|
-
* knowledge: decisions/internals/the-api-report-pins-members-not-just-names.md
|
|
79
|
-
*/
|
|
80
|
-
describe('merging the API report is not hand work', () => {
|
|
81
|
-
const repoRoot = join(packageRoot, '..', '..')
|
|
82
|
-
|
|
83
|
-
test('.gitattributes routes the report through the driver', () => {
|
|
84
|
-
const attributes = readFileSync(join(repoRoot, '.gitattributes'), 'utf-8')
|
|
85
|
-
|
|
86
|
-
assert.match(
|
|
87
|
-
attributes,
|
|
88
|
-
/^packages\/core\/api-report\.md\s+merge=api-report\b/m,
|
|
89
|
-
'the report must name the merge driver, or git conflicts on it as usual'
|
|
90
|
-
)
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
test('the setup script registers the driver as a plain take-one-side', () => {
|
|
94
|
-
// Against a throwaway repository rather than this one: a driver is written
|
|
95
|
-
// to `.git/config`, which every worktree of a checkout shares, so running
|
|
96
|
-
// this in place would reach into whatever else is checked out beside it.
|
|
97
|
-
const sandbox = mkdtempSync(join(tmpdir(), 'pikku-merge-driver-'))
|
|
98
|
-
try {
|
|
99
|
-
execFileSync('git', ['init', '--quiet', sandbox], { stdio: 'pipe' })
|
|
100
|
-
execFileSync(
|
|
101
|
-
'node',
|
|
102
|
-
[join(repoRoot, 'scripts', 'setup-merge-drivers.mjs')],
|
|
103
|
-
{ cwd: sandbox, stdio: 'pipe' }
|
|
104
|
-
)
|
|
105
|
-
const driver = execFileSync(
|
|
106
|
-
'git',
|
|
107
|
-
['config', '--local', 'merge.api-report.driver'],
|
|
108
|
-
{ cwd: sandbox, stdio: 'pipe' }
|
|
109
|
-
)
|
|
110
|
-
.toString()
|
|
111
|
-
.trim()
|
|
112
|
-
|
|
113
|
-
// `true` writes nothing and succeeds, which is how a driver tells git to
|
|
114
|
-
// keep the side already in %A. Anything that regenerates the report is
|
|
115
|
-
// the trap this pins shut: git runs a driver while merging that one
|
|
116
|
-
// path, with the rest of the tree still unmerged, so the generator reads
|
|
117
|
-
// the old sources and resolves to a report missing exactly the API the
|
|
118
|
-
// incoming branch adds — conflict-free and wrong, which is worse than a
|
|
119
|
-
// conflict. The regeneration belongs to the guard above, which runs
|
|
120
|
-
// against a finished tree.
|
|
121
|
-
assert.equal(
|
|
122
|
-
driver,
|
|
123
|
-
'true',
|
|
124
|
-
'the driver must resolve to one side verbatim and run nothing'
|
|
125
|
-
)
|
|
126
|
-
} finally {
|
|
127
|
-
rmSync(sandbox, { recursive: true, force: true })
|
|
128
|
-
}
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
test('postinstall runs the setup, so a fresh clone is not left without it', () => {
|
|
132
|
-
const manifest = JSON.parse(
|
|
133
|
-
readFileSync(join(repoRoot, 'package.json'), 'utf-8')
|
|
134
|
-
)
|
|
135
|
-
|
|
136
|
-
assert.match(manifest.scripts.postinstall, /setup-merge-drivers\.mjs/)
|
|
137
|
-
})
|
|
138
|
-
})
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { test, describe } from 'node:test'
|
|
2
|
-
import * as assert from 'assert'
|
|
3
|
-
import ts from 'typescript'
|
|
4
|
-
import { readFileSync, readdirSync, statSync } from 'node:fs'
|
|
5
|
-
import { dirname, join, relative } from 'node:path'
|
|
6
|
-
import { fileURLToPath } from 'node:url'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The generated `#pikku` alias is the app developer's public API. An app
|
|
10
|
-
* reaching past it into `@pikku/core` is the smell this file measures: the
|
|
11
|
-
* alias is typed against that app's own functions, so a name pulled from core
|
|
12
|
-
* directly is one the app is holding untyped and one the CLI cannot evolve.
|
|
13
|
-
*
|
|
14
|
-
* The trees below are apps rather than packages, so they have no `src`
|
|
15
|
-
* convention to walk — bootstrap and test files sit wherever the runtime wants
|
|
16
|
-
* them. Walking each tree root means skipping what an app accumulates:
|
|
17
|
-
* installed dependencies, build output, and its own generated `.pikku`.
|
|
18
|
-
*/
|
|
19
|
-
const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '../../..')
|
|
20
|
-
const appTrees = ['templates', 'e2e', 'verifiers']
|
|
21
|
-
const skipped = new Set(['node_modules', 'dist', '.next', 'build'])
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* `outDir` is a project's own setting, so the generated tree is not always
|
|
25
|
-
* `.pikku` — the treeshake verifier writes one output tree per scenario under
|
|
26
|
-
* `.pikku-shake`. Matching the prefix keeps a leaf's generated `index.ts`, which
|
|
27
|
-
* carries no `.gen.` in its name, from reading as hand-written app code.
|
|
28
|
-
*/
|
|
29
|
-
const isGeneratedTree = (entry: string) => entry.startsWith('.pikku')
|
|
30
|
-
|
|
31
|
-
const walkApp = (dir: string, out: string[] = []): string[] => {
|
|
32
|
-
for (const entry of readdirSync(dir)) {
|
|
33
|
-
if (skipped.has(entry) || isGeneratedTree(entry)) continue
|
|
34
|
-
const path = join(dir, entry)
|
|
35
|
-
if (statSync(path).isDirectory()) walkApp(path, out)
|
|
36
|
-
else if (path.endsWith('.ts') || path.endsWith('.tsx')) out.push(path)
|
|
37
|
-
}
|
|
38
|
-
return out
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* `.gen.*` and `.d.ts` files are CLI output, not hand-written source: what they
|
|
43
|
-
* import is decided by the codegen templates, which are the thing that writes
|
|
44
|
-
* the alias in the first place.
|
|
45
|
-
*/
|
|
46
|
-
const isGenerated = (path: string) =>
|
|
47
|
-
path.includes('.gen.') || path.endsWith('.d.ts')
|
|
48
|
-
|
|
49
|
-
const appSourceFiles = () =>
|
|
50
|
-
appTrees
|
|
51
|
-
.flatMap((tree) => walkApp(join(repoRoot, tree)))
|
|
52
|
-
.filter((file) => !isGenerated(file))
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Parsed rather than grepped: a step body held as a template literal is fixture
|
|
56
|
-
* text describing a user's file, not an import the app itself makes.
|
|
57
|
-
*/
|
|
58
|
-
const coreImports = (file: string) => {
|
|
59
|
-
const source = ts.createSourceFile(
|
|
60
|
-
file,
|
|
61
|
-
readFileSync(file, 'utf8'),
|
|
62
|
-
ts.ScriptTarget.Latest,
|
|
63
|
-
true
|
|
64
|
-
)
|
|
65
|
-
const found: { specifier: string; line: number; names: string[] }[] = []
|
|
66
|
-
for (const statement of source.statements) {
|
|
67
|
-
if (
|
|
68
|
-
!ts.isImportDeclaration(statement) &&
|
|
69
|
-
!ts.isExportDeclaration(statement)
|
|
70
|
-
) {
|
|
71
|
-
continue
|
|
72
|
-
}
|
|
73
|
-
const moduleSpecifier = statement.moduleSpecifier
|
|
74
|
-
if (!moduleSpecifier || !ts.isStringLiteral(moduleSpecifier)) continue
|
|
75
|
-
const specifier = moduleSpecifier.text
|
|
76
|
-
if (specifier !== '@pikku/core' && !specifier.startsWith('@pikku/core/')) {
|
|
77
|
-
continue
|
|
78
|
-
}
|
|
79
|
-
const { line } = source.getLineAndCharacterOfPosition(
|
|
80
|
-
statement.getStart(source)
|
|
81
|
-
)
|
|
82
|
-
const clause = ts.isImportDeclaration(statement)
|
|
83
|
-
? statement.importClause?.namedBindings
|
|
84
|
-
: statement.exportClause
|
|
85
|
-
const names =
|
|
86
|
-
clause && (ts.isNamedImports(clause) || ts.isNamedExports(clause))
|
|
87
|
-
? clause.elements.map((element) => element.name.text)
|
|
88
|
-
: []
|
|
89
|
-
found.push({ specifier, line: line + 1, names })
|
|
90
|
-
}
|
|
91
|
-
return found
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* The scenario and persona surfaces are test-only names — actors, cookie jars,
|
|
96
|
-
* polling helpers, the typed personas an app declares. They are app code, but a
|
|
97
|
-
* distinct surface from wiring, so they reach the app through their own
|
|
98
|
-
* sub-entry rather than crowding the main hub.
|
|
99
|
-
*/
|
|
100
|
-
const scenarioSubpaths = new Set(['@pikku/core/scenario', '@pikku/core/persona'])
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* A relative path into the generated scenario barrel reaches the same file the
|
|
104
|
-
* alias does, so it compiles — and then hard-codes how far the app file sits
|
|
105
|
-
* from `outDir`. Moving either end breaks it, and the CLI has no way to see
|
|
106
|
-
* that it is depended upon.
|
|
107
|
-
*/
|
|
108
|
-
const relativeIntoScenarioBarrel = (file: string) => {
|
|
109
|
-
const source = ts.createSourceFile(
|
|
110
|
-
file,
|
|
111
|
-
readFileSync(file, 'utf8'),
|
|
112
|
-
ts.ScriptTarget.Latest,
|
|
113
|
-
true
|
|
114
|
-
)
|
|
115
|
-
const found: { specifier: string; line: number }[] = []
|
|
116
|
-
for (const statement of source.statements) {
|
|
117
|
-
if (
|
|
118
|
-
!ts.isImportDeclaration(statement) &&
|
|
119
|
-
!ts.isExportDeclaration(statement)
|
|
120
|
-
) {
|
|
121
|
-
continue
|
|
122
|
-
}
|
|
123
|
-
const moduleSpecifier = statement.moduleSpecifier
|
|
124
|
-
if (!moduleSpecifier || !ts.isStringLiteral(moduleSpecifier)) continue
|
|
125
|
-
if (!moduleSpecifier.text.startsWith('.')) continue
|
|
126
|
-
if (!/\/pikku-scenario-types\.gen\.js$/.test(moduleSpecifier.text)) continue
|
|
127
|
-
const { line } = source.getLineAndCharacterOfPosition(
|
|
128
|
-
statement.getStart(source)
|
|
129
|
-
)
|
|
130
|
-
found.push({ specifier: moduleSpecifier.text, line: line + 1 })
|
|
131
|
-
}
|
|
132
|
-
return found
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
describe('the #pikku alias is the app surface', () => {
|
|
136
|
-
test('scenario code reaches the test surface through #pikku/scenario', () => {
|
|
137
|
-
const offenders: string[] = []
|
|
138
|
-
|
|
139
|
-
for (const file of appSourceFiles()) {
|
|
140
|
-
for (const { specifier, line, names } of coreImports(file)) {
|
|
141
|
-
if (!scenarioSubpaths.has(specifier)) continue
|
|
142
|
-
offenders.push(
|
|
143
|
-
`${relative(repoRoot, file)}:${line} ${names.join(', ')} from '${specifier}'`
|
|
144
|
-
)
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
assert.deepStrictEqual(
|
|
149
|
-
offenders,
|
|
150
|
-
[],
|
|
151
|
-
`Scenario and persona names come from the generated ` +
|
|
152
|
-
`'#pikku/scenario' entry, which is typed against this app's own ` +
|
|
153
|
-
`personas and steps.\n` +
|
|
154
|
-
`Reaching '@pikku/core/scenario' or '@pikku/core/persona' directly ` +
|
|
155
|
-
`gets the untyped shape, from a subpath scheduled for deletion.\n\n` +
|
|
156
|
-
offenders.join('\n')
|
|
157
|
-
)
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
test('the scenario barrel is reached through the alias, not a relative path', () => {
|
|
161
|
-
const offenders: string[] = []
|
|
162
|
-
|
|
163
|
-
for (const file of appSourceFiles()) {
|
|
164
|
-
for (const { specifier, line } of relativeIntoScenarioBarrel(file)) {
|
|
165
|
-
offenders.push(`${relative(repoRoot, file)}:${line} '${specifier}'`)
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
assert.deepStrictEqual(
|
|
170
|
-
offenders,
|
|
171
|
-
[],
|
|
172
|
-
`The generated scenario barrel is reached through '#pikku/scenario', ` +
|
|
173
|
-
`which the app's own 'imports' map points at.\n` +
|
|
174
|
-
`A relative path hard-codes the distance from the file to 'outDir', ` +
|
|
175
|
-
`so moving either end breaks it silently.\n\n` +
|
|
176
|
-
offenders.join('\n')
|
|
177
|
-
)
|
|
178
|
-
})
|
|
179
|
-
})
|