@pikku/core 0.11.2 → 0.12.1
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 +57 -2
- package/dist/crypto-utils.d.ts +2 -0
- package/dist/crypto-utils.js +78 -0
- package/dist/errors/errors.d.ts +14 -0
- package/dist/errors/errors.js +26 -0
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/function/function-runner.d.ts +10 -4
- package/dist/function/function-runner.js +126 -45
- package/dist/function/functions.types.d.ts +32 -87
- package/dist/function/functions.types.js +16 -46
- package/dist/function/index.d.ts +2 -2
- package/dist/function/index.js +1 -2
- package/dist/handle-error.d.ts +2 -2
- package/dist/handle-error.js +3 -12
- package/dist/index.d.ts +30 -26
- package/dist/index.js +19 -29
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +2 -0
- package/dist/middleware/auth-apikey.d.ts +2 -2
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +3 -3
- package/dist/middleware/auth-bearer.js +4 -7
- package/dist/middleware/auth-cookie.d.ts +4 -4
- package/dist/middleware/auth-cookie.js +7 -9
- package/dist/middleware/cors.d.ts +46 -0
- package/dist/middleware/cors.js +81 -0
- package/dist/middleware/index.d.ts +5 -3
- package/dist/middleware/index.js +5 -3
- package/dist/middleware/remote-auth.d.ts +5 -0
- package/dist/middleware/remote-auth.js +55 -0
- package/dist/middleware/timeout.d.ts +2 -2
- package/dist/middleware-runner.d.ts +1 -1
- package/dist/middleware-runner.js +8 -10
- package/dist/permissions.d.ts +2 -2
- package/dist/permissions.js +11 -15
- package/dist/pikku-state.d.ts +10 -8
- package/dist/pikku-state.js +48 -25
- package/dist/schema.d.ts +4 -4
- package/dist/schema.js +20 -15
- package/dist/services/ai-agent-runner-service.d.ts +43 -0
- package/dist/services/ai-agent-runner-service.js +1 -0
- package/dist/services/ai-run-state-service.d.ts +13 -0
- package/dist/services/ai-run-state-service.js +1 -0
- package/dist/services/ai-storage-service.d.ts +18 -0
- package/dist/services/ai-storage-service.js +1 -0
- package/dist/services/content-service.d.ts +6 -0
- package/dist/services/deployment-service.d.ts +19 -0
- package/dist/services/deployment-service.js +1 -0
- package/dist/services/gopass-secrets.d.ts +47 -0
- package/dist/services/gopass-secrets.js +97 -0
- package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
- package/dist/services/in-memory-ai-run-state-service.js +44 -0
- package/dist/services/in-memory-trigger-service.d.ts +22 -0
- package/dist/services/in-memory-trigger-service.js +48 -0
- package/dist/services/in-memory-workflow-service.d.ts +59 -0
- package/dist/services/in-memory-workflow-service.js +287 -0
- package/dist/services/index.d.ts +26 -11
- package/dist/services/index.js +11 -13
- package/dist/services/local-content.d.ts +2 -1
- package/dist/services/local-content.js +6 -1
- package/dist/services/local-secrets.d.ts +25 -2
- package/dist/services/local-secrets.js +45 -0
- package/dist/services/local-variables.d.ts +6 -1
- package/dist/services/local-variables.js +18 -0
- package/dist/services/logger-console.d.ts +2 -1
- package/dist/services/scheduler-service.d.ts +9 -1
- package/dist/services/scheduler-service.js +8 -0
- package/dist/services/schema-service.d.ts +6 -0
- package/dist/services/scoped-secret-service.d.ts +16 -0
- package/dist/services/scoped-secret-service.js +35 -0
- package/dist/services/secret-service.d.ts +25 -4
- package/dist/services/trigger-service.d.ts +16 -0
- package/dist/services/trigger-service.js +1 -0
- package/dist/services/typed-secret-service.d.ts +30 -0
- package/dist/services/typed-secret-service.js +40 -0
- package/dist/services/typed-variables-service.d.ts +27 -0
- package/dist/services/typed-variables-service.js +46 -0
- package/dist/services/user-session-service.d.ts +15 -2
- package/dist/services/user-session-service.js +17 -0
- package/dist/services/variables-service.d.ts +5 -0
- package/dist/services/workflow-service.d.ts +9 -5
- package/dist/types/core.types.d.ts +67 -25
- package/dist/types/core.types.js +8 -1
- package/dist/types/state.types.d.ts +53 -59
- package/dist/utils.d.ts +7 -6
- package/dist/utils.js +27 -12
- package/dist/version.d.ts +6 -0
- package/dist/version.js +19 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
- package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
- package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
- package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
- package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
- package/dist/wirings/ai-agent/index.d.ts +7 -0
- package/dist/wirings/ai-agent/index.js +6 -0
- package/dist/wirings/channel/channel-common.d.ts +8 -5
- package/dist/wirings/channel/channel-common.js +15 -8
- package/dist/wirings/channel/channel-handler.d.ts +3 -3
- package/dist/wirings/channel/channel-handler.js +15 -6
- package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
- package/dist/wirings/channel/channel-middleware-runner.js +73 -0
- package/dist/wirings/channel/channel-runner.d.ts +5 -5
- package/dist/wirings/channel/channel-runner.js +10 -9
- package/dist/wirings/channel/channel-store.d.ts +1 -1
- package/dist/wirings/channel/channel.types.d.ts +9 -7
- package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
- package/dist/wirings/channel/define-channel-routes.js +23 -0
- package/dist/wirings/channel/index.d.ts +10 -8
- package/dist/wirings/channel/index.js +7 -8
- package/dist/wirings/channel/local/index.d.ts +3 -3
- package/dist/wirings/channel/local/index.js +3 -3
- package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
- package/dist/wirings/channel/local/local-channel-runner.js +22 -9
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
- package/dist/wirings/channel/log-channels.d.ts +1 -1
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.js +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/index.d.ts +1 -1
- package/dist/wirings/cli/channel/index.js +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +3 -3
- package/dist/wirings/cli/cli-runner.js +12 -8
- package/dist/wirings/cli/cli.types.d.ts +9 -9
- package/dist/wirings/cli/command-parser.d.ts +1 -1
- package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
- package/dist/wirings/cli/define-cli-commands.js +20 -0
- package/dist/wirings/cli/index.d.ts +2 -3
- package/dist/wirings/cli/index.js +1 -3
- package/dist/wirings/http/http-routes.d.ts +69 -0
- package/dist/wirings/http/http-routes.js +139 -0
- package/dist/wirings/http/http-runner.d.ts +9 -9
- package/dist/wirings/http/http-runner.js +79 -34
- package/dist/wirings/http/http.types.d.ts +77 -41
- package/dist/wirings/http/index.d.ts +5 -4
- package/dist/wirings/http/index.js +4 -3
- package/dist/wirings/http/log-http-routes.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
- package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
- package/dist/wirings/http/routers/http-router.d.ts +1 -1
- package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
- package/dist/wirings/mcp/index.d.ts +4 -3
- package/dist/wirings/mcp/index.js +3 -3
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
- package/dist/wirings/mcp/mcp-runner.js +28 -40
- package/dist/wirings/mcp/mcp.types.d.ts +5 -5
- package/dist/wirings/node/index.d.ts +2 -0
- package/dist/wirings/node/index.js +1 -0
- package/dist/wirings/node/node.types.d.ts +20 -0
- package/dist/wirings/node/node.types.js +1 -0
- package/dist/wirings/oauth2/index.d.ts +3 -0
- package/dist/wirings/oauth2/index.js +2 -0
- package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
- package/dist/wirings/oauth2/oauth2-client.js +267 -0
- package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
- package/dist/wirings/oauth2/oauth2.types.js +4 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
- package/dist/wirings/queue/index.d.ts +1 -1
- package/dist/wirings/queue/queue-runner.d.ts +1 -5
- package/dist/wirings/queue/queue-runner.js +11 -8
- package/dist/wirings/queue/queue.types.d.ts +5 -5
- package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
- package/dist/wirings/queue/register-queue-helper.js +1 -1
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +3 -1
- package/dist/wirings/rpc/index.js +2 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
- package/dist/wirings/rpc/rpc-runner.js +177 -31
- package/dist/wirings/rpc/rpc-types.d.ts +20 -4
- package/dist/wirings/rpc/wire-addon.d.ts +10 -0
- package/dist/wirings/rpc/wire-addon.js +9 -0
- package/dist/wirings/scheduler/index.d.ts +2 -2
- package/dist/wirings/scheduler/index.js +1 -2
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
- package/dist/wirings/scheduler/scheduler-runner.js +11 -14
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
- package/dist/wirings/secret/index.d.ts +3 -0
- package/dist/wirings/secret/index.js +2 -0
- package/dist/wirings/secret/secret.types.d.ts +27 -0
- package/dist/wirings/secret/secret.types.js +1 -0
- package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
- package/dist/wirings/secret/validate-secret-definitions.js +55 -0
- package/dist/wirings/trigger/index.d.ts +3 -2
- package/dist/wirings/trigger/index.js +2 -2
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
- package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
- package/dist/wirings/trigger/trigger-runner.js +48 -19
- package/dist/wirings/trigger/trigger.types.d.ts +99 -11
- package/dist/wirings/trigger/trigger.types.js +40 -1
- package/dist/wirings/variable/index.d.ts +3 -0
- package/dist/wirings/variable/index.js +2 -0
- package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
- package/dist/wirings/variable/validate-variable-definitions.js +45 -0
- package/dist/wirings/variable/variable.types.d.ts +18 -0
- package/dist/wirings/variable/variable.types.js +1 -0
- package/dist/wirings/workflow/dsl/index.d.ts +1 -1
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
- package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
- package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
- package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
- package/dist/wirings/workflow/graph/graph-runner.js +384 -296
- package/dist/wirings/workflow/graph/index.d.ts +4 -3
- package/dist/wirings/workflow/graph/index.js +3 -3
- package/dist/wirings/workflow/graph/template.d.ts +15 -0
- package/dist/wirings/workflow/graph/template.js +27 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
- package/dist/wirings/workflow/index.d.ts +6 -6
- package/dist/wirings/workflow/index.js +6 -4
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
- package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
- package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
- package/dist/wirings/workflow/workflow-helpers.js +38 -0
- package/dist/wirings/workflow/workflow.types.d.ts +42 -95
- package/package.json +14 -15
- package/run-tests.sh +4 -1
- package/src/crypto-utils.test.ts +116 -0
- package/src/crypto-utils.ts +99 -0
- package/src/errors/error.test.ts +143 -2
- package/src/errors/errors.ts +27 -0
- package/src/errors/index.ts +1 -1
- package/src/factory-functions.test.ts +42 -2
- package/src/function/function-runner.test.ts +6 -13
- package/src/function/function-runner.ts +161 -53
- package/src/function/functions.types.ts +63 -132
- package/src/function/index.ts +5 -2
- package/src/handle-error.test.ts +361 -0
- package/src/handle-error.ts +6 -14
- package/src/index.ts +97 -30
- package/src/internal.ts +6 -0
- package/src/middleware/auth-apikey.test.ts +16 -13
- package/src/middleware/auth-apikey.ts +3 -3
- package/src/middleware/auth-bearer.test.ts +18 -15
- package/src/middleware/auth-bearer.ts +27 -32
- package/src/middleware/auth-cookie.test.ts +17 -14
- package/src/middleware/auth-cookie.ts +9 -13
- package/src/middleware/cors.test.ts +424 -0
- package/src/middleware/cors.ts +104 -0
- package/src/middleware/index.ts +5 -3
- package/src/middleware/remote-auth.test.ts +488 -0
- package/src/middleware/remote-auth.ts +68 -0
- package/src/middleware-runner.test.ts +123 -1
- package/src/middleware-runner.ts +13 -13
- package/src/permissions.test.ts +83 -9
- package/src/permissions.ts +17 -19
- package/src/pikku-state.test.ts +224 -0
- package/src/pikku-state.ts +59 -35
- package/src/run-tests-script.test.ts +49 -0
- package/src/schema.test.ts +198 -6
- package/src/schema.ts +28 -21
- package/src/services/ai-agent-runner-service.ts +41 -0
- package/src/services/ai-run-state-service.ts +20 -0
- package/src/services/ai-storage-service.ts +39 -0
- package/src/services/content-service.ts +7 -0
- package/src/services/deployment-service.ts +22 -0
- package/src/services/gopass-secrets.ts +98 -0
- package/src/services/in-memory-ai-run-state-service.ts +73 -0
- package/src/services/in-memory-trigger-service.ts +64 -0
- package/src/services/in-memory-workflow-service.test.ts +351 -0
- package/src/services/in-memory-workflow-service.ts +395 -0
- package/src/services/index.ts +50 -14
- package/src/services/local-content.ts +9 -3
- package/src/services/local-secrets.test.ts +80 -0
- package/src/services/local-secrets.ts +53 -2
- package/src/services/local-variables.test.ts +61 -0
- package/src/services/local-variables.ts +23 -1
- package/src/services/logger-console.test.ts +118 -0
- package/src/services/logger-console.ts +2 -1
- package/src/services/scheduler-service.ts +11 -1
- package/src/services/schema-service.ts +7 -0
- package/src/services/scoped-secret-service.test.ts +74 -0
- package/src/services/scoped-secret-service.ts +41 -0
- package/src/services/secret-service.ts +25 -4
- package/src/services/trigger-service.ts +17 -0
- package/src/services/typed-secret-service.test.ts +93 -0
- package/src/services/typed-secret-service.ts +70 -0
- package/src/services/typed-variables-service.test.ts +73 -0
- package/src/services/typed-variables-service.ts +81 -0
- package/src/services/user-session-service.test.ts +113 -0
- package/src/services/user-session-service.ts +25 -2
- package/src/services/variables-service.ts +5 -0
- package/src/services/workflow-service.ts +23 -13
- package/src/time-utils.test.ts +1 -1
- package/src/types/core.types.ts +95 -24
- package/src/types/state.types.ts +56 -73
- package/src/utils.test.ts +350 -0
- package/src/utils.ts +33 -18
- package/src/version.test.ts +80 -0
- package/src/version.ts +25 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
- package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
- package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
- package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
- package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
- package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
- package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
- package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
- package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
- package/src/wirings/ai-agent/index.ts +39 -0
- package/src/wirings/channel/channel-common.ts +33 -20
- package/src/wirings/channel/channel-handler.ts +26 -9
- package/src/wirings/channel/channel-middleware-runner.ts +119 -0
- package/src/wirings/channel/channel-runner.ts +15 -16
- package/src/wirings/channel/channel-store.ts +1 -1
- package/src/wirings/channel/channel.types.ts +21 -9
- package/src/wirings/channel/define-channel-routes.ts +25 -0
- package/src/wirings/channel/index.ts +23 -8
- package/src/wirings/channel/local/index.ts +3 -3
- package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
- package/src/wirings/channel/local/local-channel-runner.ts +40 -19
- package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
- package/src/wirings/channel/serverless/index.ts +5 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
- package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
- package/src/wirings/cli/channel/index.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +10 -10
- package/src/wirings/cli/cli-runner.ts +28 -14
- package/src/wirings/cli/cli.types.ts +14 -14
- package/src/wirings/cli/command-parser.test.ts +9 -9
- package/src/wirings/cli/command-parser.ts +1 -1
- package/src/wirings/cli/define-cli-commands.ts +24 -0
- package/src/wirings/cli/index.ts +10 -4
- package/src/wirings/http/http-routes.test.ts +322 -0
- package/src/wirings/http/http-routes.ts +198 -0
- package/src/wirings/http/http-runner.test.ts +12 -20
- package/src/wirings/http/http-runner.ts +101 -51
- package/src/wirings/http/http.types.ts +119 -48
- package/src/wirings/http/index.ts +16 -4
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
- package/src/wirings/http/routers/http-router.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.ts +4 -3
- package/src/wirings/mcp/index.ts +27 -3
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
- package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
- package/src/wirings/mcp/mcp-runner.ts +48 -65
- package/src/wirings/mcp/mcp.types.ts +5 -5
- package/src/wirings/node/index.ts +2 -0
- package/src/wirings/node/node.types.ts +23 -0
- package/src/wirings/oauth2/index.ts +3 -0
- package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
- package/src/wirings/oauth2/oauth2-client.ts +335 -0
- package/src/wirings/oauth2/oauth2.types.ts +69 -0
- package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
- package/src/wirings/queue/index.ts +13 -2
- package/src/wirings/queue/queue-runner.test.ts +142 -73
- package/src/wirings/queue/queue-runner.ts +18 -14
- package/src/wirings/queue/queue.types.ts +5 -5
- package/src/wirings/queue/register-queue-helper.ts +3 -5
- package/src/wirings/queue/validate-worker-config.test.ts +108 -0
- package/src/wirings/queue/validate-worker-config.ts +4 -1
- package/src/wirings/rpc/index.ts +3 -1
- package/src/wirings/rpc/rpc-runner.ts +254 -41
- package/src/wirings/rpc/rpc-types.ts +28 -4
- package/src/wirings/rpc/wire-addon.ts +20 -0
- package/src/wirings/scheduler/index.ts +6 -4
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
- package/src/wirings/scheduler/scheduler-runner.ts +20 -27
- package/src/wirings/scheduler/scheduler.types.ts +2 -2
- package/src/wirings/secret/index.ts +9 -0
- package/src/wirings/secret/secret.types.ts +32 -0
- package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
- package/src/wirings/secret/validate-secret-definitions.ts +82 -0
- package/src/wirings/trigger/index.ts +10 -2
- package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
- package/src/wirings/trigger/trigger-runner.test.ts +79 -0
- package/src/wirings/trigger/trigger-runner.ts +80 -41
- package/src/wirings/trigger/trigger.types.ts +144 -22
- package/src/wirings/variable/index.ts +8 -0
- package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
- package/src/wirings/variable/validate-variable-definitions.ts +69 -0
- package/src/wirings/variable/variable.types.ts +22 -0
- package/src/wirings/workflow/dsl/index.ts +1 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
- package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
- package/src/wirings/workflow/graph/graph-node.ts +1 -6
- package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
- package/src/wirings/workflow/graph/graph-runner.ts +496 -374
- package/src/wirings/workflow/graph/index.ts +14 -3
- package/src/wirings/workflow/graph/template.test.ts +49 -0
- package/src/wirings/workflow/graph/template.ts +42 -0
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
- package/src/wirings/workflow/index.ts +21 -10
- package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
- package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
- package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
- package/src/wirings/workflow/workflow-helpers.ts +79 -0
- package/src/wirings/workflow/workflow.types.ts +47 -92
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
- package/dist/wirings/forge-node/forge-node.types.js +0 -38
- package/dist/wirings/forge-node/index.d.ts +0 -1
- package/dist/wirings/forge-node/index.js +0 -1
- package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
- package/dist/wirings/workflow/wire-workflow.js +0 -53
- package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
- package/dist/wirings/workflow/workflow-utils.js +0 -66
- package/src/wirings/forge-node/forge-node.types.ts +0 -135
- package/src/wirings/forge-node/index.ts +0 -1
- package/src/wirings/workflow/wire-workflow.ts +0 -94
- package/src/wirings/workflow/workflow-utils.ts +0 -120
package/dist/schema.js
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { UnprocessableContentError } from './errors/errors.js';
|
|
2
|
-
import { pikkuState } from './pikku-state.js';
|
|
1
|
+
import { MissingSchemaError, UnprocessableContentError, } from './errors/errors.js';
|
|
2
|
+
import { pikkuState, getAllPackageStates } from './pikku-state.js';
|
|
3
|
+
const schemaKey = (name, packageName) => packageName ? `${packageName}:${name}` : name;
|
|
3
4
|
/**
|
|
4
5
|
* Adds a schema to the schemas map for a specific package.
|
|
5
6
|
* @param name - The name of the schema.
|
|
6
7
|
* @param value - The schema value.
|
|
7
|
-
* @param packageName - The package name (null for main package, '@scope/package' for
|
|
8
|
+
* @param packageName - The package name (null for main package, '@scope/package' for addon packages).
|
|
8
9
|
* @ignore
|
|
9
10
|
*/
|
|
10
11
|
export const addSchema = (name, value, packageName = null) => {
|
|
11
|
-
|
|
12
|
+
const schema = value?.default ?? value;
|
|
13
|
+
pikkuState(packageName, 'misc', 'schemas').set(name, schema);
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
16
|
* Retrieves a schema from the schemas map for a specific package.
|
|
15
17
|
* @param name - The name of the schema.
|
|
16
|
-
* @param packageName - The package name (null for main package, '@scope/package' for
|
|
18
|
+
* @param packageName - The package name (null for main package, '@scope/package' for addon packages).
|
|
17
19
|
* @returns The schema value or undefined if not found.
|
|
18
20
|
* @ignore
|
|
19
21
|
*/
|
|
@@ -25,12 +27,17 @@ export const getSchema = (name, packageName = null) => {
|
|
|
25
27
|
* @param logger - A logger for logging information.
|
|
26
28
|
*/
|
|
27
29
|
export const compileAllSchemas = (logger, schemaService) => {
|
|
30
|
+
if (!schemaService) {
|
|
31
|
+
schemaService = pikkuState(null, 'package', 'singletonServices')?.schema;
|
|
32
|
+
}
|
|
28
33
|
if (!schemaService) {
|
|
29
34
|
throw new Error('SchemaService needs to be defined to load schemas');
|
|
30
35
|
}
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
for (const [pkgName, packageState] of getAllPackageStates()) {
|
|
37
|
+
const resolvedPkgName = pkgName === '__main__' ? null : pkgName;
|
|
38
|
+
for (const [name, schema] of packageState.misc.schemas) {
|
|
39
|
+
schemaService.compileSchema(schemaKey(name, resolvedPkgName), schema);
|
|
40
|
+
}
|
|
34
41
|
}
|
|
35
42
|
validateAllSchemasLoaded(logger, schemaService);
|
|
36
43
|
};
|
|
@@ -40,7 +47,7 @@ const validateAllSchemasLoaded = (logger, schemaService) => {
|
|
|
40
47
|
const missingSchemas = [];
|
|
41
48
|
for (const routePaths of Object.values(routesMeta)) {
|
|
42
49
|
for (const meta of Object.values(routePaths)) {
|
|
43
|
-
const inputs = pikkuState(null, 'function', 'meta')[meta.
|
|
50
|
+
const inputs = pikkuState(null, 'function', 'meta')[meta.pikkuFuncId]
|
|
44
51
|
?.inputs;
|
|
45
52
|
const input = inputs?.[0];
|
|
46
53
|
if (!input || validators.has(input)) {
|
|
@@ -88,17 +95,15 @@ export const validateSchema = async (logger, schemaService, schemaName, data, pa
|
|
|
88
95
|
return;
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
|
-
|
|
98
|
+
const key = schemaKey(schemaName, packageName);
|
|
92
99
|
const schemas = pikkuState(packageName, 'misc', 'schemas');
|
|
93
100
|
const schema = schemas.get(schemaName);
|
|
94
101
|
if (schema === undefined) {
|
|
95
102
|
const availableSchemas = Array.from(schemas.keys());
|
|
96
103
|
logger.error(`Schema '${schemaName}' not found for package '${packageName ?? 'main'}'. Available schemas: ${availableSchemas.join(', ') || '(none)'}`);
|
|
104
|
+
throw new MissingSchemaError(`Schema '${schemaName}' not found. Ensure schema generation has been run.`);
|
|
97
105
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
await schemaService.compileSchema(schemaName, schema);
|
|
102
|
-
await schemaService.validateSchema(schemaName, data);
|
|
106
|
+
await schemaService.compileSchema(key, schema);
|
|
107
|
+
await schemaService.validateSchema(key, data);
|
|
103
108
|
}
|
|
104
109
|
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AIMessage, AIAgentStep, AIAgentToolDef, AIStreamChannel } from '../wirings/ai-agent/ai-agent.types.js';
|
|
2
|
+
export type AIAgentRunnerParams = {
|
|
3
|
+
model: string;
|
|
4
|
+
temperature?: number;
|
|
5
|
+
instructions: string;
|
|
6
|
+
messages: AIMessage[];
|
|
7
|
+
tools: AIAgentToolDef[];
|
|
8
|
+
maxSteps: number;
|
|
9
|
+
toolChoice: 'auto' | 'required' | 'none';
|
|
10
|
+
outputSchema?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
export type AIAgentRunnerResult = {
|
|
13
|
+
text: string;
|
|
14
|
+
object?: unknown;
|
|
15
|
+
steps: AIAgentStep[];
|
|
16
|
+
usage: {
|
|
17
|
+
inputTokens: number;
|
|
18
|
+
outputTokens: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type AIAgentStepResult = {
|
|
22
|
+
text: string;
|
|
23
|
+
object?: unknown;
|
|
24
|
+
toolCalls: {
|
|
25
|
+
toolCallId: string;
|
|
26
|
+
toolName: string;
|
|
27
|
+
args: unknown;
|
|
28
|
+
}[];
|
|
29
|
+
toolResults: {
|
|
30
|
+
toolCallId: string;
|
|
31
|
+
toolName: string;
|
|
32
|
+
result: unknown;
|
|
33
|
+
}[];
|
|
34
|
+
usage: {
|
|
35
|
+
inputTokens: number;
|
|
36
|
+
outputTokens: number;
|
|
37
|
+
};
|
|
38
|
+
finishReason: 'stop' | 'tool-calls' | 'length' | 'error' | 'unknown';
|
|
39
|
+
};
|
|
40
|
+
export interface AIAgentRunnerService {
|
|
41
|
+
stream(params: AIAgentRunnerParams, channel: AIStreamChannel): Promise<AIAgentStepResult>;
|
|
42
|
+
run(params: AIAgentRunnerParams): Promise<AIAgentStepResult>;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentRunState, PendingApproval } from '../wirings/ai-agent/ai-agent.types.js';
|
|
2
|
+
export type CreateRunInput = Omit<AgentRunState, 'runId'>;
|
|
3
|
+
export interface AIRunStateService {
|
|
4
|
+
createRun(run: CreateRunInput): Promise<string>;
|
|
5
|
+
updateRun(runId: string, updates: Partial<AgentRunState>): Promise<void>;
|
|
6
|
+
getRun(runId: string): Promise<AgentRunState | null>;
|
|
7
|
+
getRunsByThread(threadId: string): Promise<AgentRunState[]>;
|
|
8
|
+
resolveApproval(toolCallId: string, status: 'approved' | 'denied'): Promise<void>;
|
|
9
|
+
findRunByToolCallId(toolCallId: string): Promise<{
|
|
10
|
+
run: AgentRunState;
|
|
11
|
+
approval: PendingApproval;
|
|
12
|
+
} | null>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AIThread, AIMessage } from '../wirings/ai-agent/ai-agent.types.js';
|
|
2
|
+
export interface AIStorageService {
|
|
3
|
+
createThread(resourceId: string, options?: {
|
|
4
|
+
threadId?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
metadata?: Record<string, unknown>;
|
|
7
|
+
}): Promise<AIThread>;
|
|
8
|
+
getThread(threadId: string): Promise<AIThread>;
|
|
9
|
+
getThreads(resourceId: string): Promise<AIThread[]>;
|
|
10
|
+
deleteThread(threadId: string): Promise<void>;
|
|
11
|
+
getMessages(threadId: string, options?: {
|
|
12
|
+
lastN?: number;
|
|
13
|
+
cursor?: string;
|
|
14
|
+
}): Promise<AIMessage[]>;
|
|
15
|
+
saveMessages(threadId: string, messages: AIMessage[]): Promise<void>;
|
|
16
|
+
getWorkingMemory(id: string, scope: 'resource' | 'thread'): Promise<Record<string, unknown> | null>;
|
|
17
|
+
saveWorkingMemory(id: string, scope: 'resource' | 'thread', data: Record<string, unknown>): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -49,4 +49,10 @@ export interface ContentService {
|
|
|
49
49
|
* @returns A readable file stream.
|
|
50
50
|
*/
|
|
51
51
|
readFile(assetKey: string): Promise<ReadableStream | NodeJS.ReadableStream>;
|
|
52
|
+
/**
|
|
53
|
+
* Reads an entire file from storage into a Buffer.
|
|
54
|
+
* @param assetKey - The key of the file to read.
|
|
55
|
+
* @returns The file contents as a Buffer.
|
|
56
|
+
*/
|
|
57
|
+
readFileAsBuffer(assetKey: string): Promise<Buffer>;
|
|
52
58
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface DeploymentServiceConfig {
|
|
2
|
+
heartbeatInterval?: number;
|
|
3
|
+
heartbeatTtl?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface DeploymentConfig {
|
|
6
|
+
deploymentId: string;
|
|
7
|
+
endpoint: string;
|
|
8
|
+
functions?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface DeploymentInfo {
|
|
11
|
+
deploymentId: string;
|
|
12
|
+
endpoint: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DeploymentService {
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
start(config: DeploymentConfig): Promise<void>;
|
|
17
|
+
stop(): Promise<void>;
|
|
18
|
+
findFunction(name: string): Promise<DeploymentInfo[]>;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SecretService } from './secret-service.js';
|
|
2
|
+
/**
|
|
3
|
+
* Service for retrieving secrets from gopass.
|
|
4
|
+
* Requires gopass to be installed and configured on the system.
|
|
5
|
+
*/
|
|
6
|
+
export declare class GopassSecretService implements SecretService {
|
|
7
|
+
private prefix;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an instance of GopassSecretService.
|
|
10
|
+
* @param prefix - Optional prefix for all secret keys (e.g., 'pikku/' will look up 'pikku/mykey' for key 'mykey')
|
|
11
|
+
*/
|
|
12
|
+
constructor(prefix?: string);
|
|
13
|
+
private getFullKey;
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves a secret by key and parses it as JSON.
|
|
16
|
+
* @param key - The key of the secret to retrieve.
|
|
17
|
+
* @returns A promise that resolves to the parsed secret value.
|
|
18
|
+
* @throws {Error} If the secret is not found or gopass fails.
|
|
19
|
+
*/
|
|
20
|
+
getSecretJSON<R>(key: string): Promise<R>;
|
|
21
|
+
/**
|
|
22
|
+
* Retrieves a secret by key as a string.
|
|
23
|
+
* @param key - The key of the secret to retrieve.
|
|
24
|
+
* @returns A promise that resolves to the secret value.
|
|
25
|
+
* @throws {Error} If the secret is not found or gopass fails.
|
|
26
|
+
*/
|
|
27
|
+
getSecret(key: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Checks if a secret exists without throwing.
|
|
30
|
+
* @param key - The key of the secret to check.
|
|
31
|
+
* @returns A promise that resolves to true if the secret exists.
|
|
32
|
+
*/
|
|
33
|
+
hasSecret(key: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Stores a JSON value as a secret in gopass.
|
|
36
|
+
* @param key - The key to store the secret under.
|
|
37
|
+
* @param value - The JSON value to store.
|
|
38
|
+
* @returns A promise that resolves when the secret is stored.
|
|
39
|
+
*/
|
|
40
|
+
setSecretJSON(key: string, value: unknown): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Deletes a secret from gopass.
|
|
43
|
+
* @param key - The key of the secret to delete.
|
|
44
|
+
* @returns A promise that resolves when the secret is deleted.
|
|
45
|
+
*/
|
|
46
|
+
deleteSecret(key: string): Promise<void>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { execFileSync } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Service for retrieving secrets from gopass.
|
|
4
|
+
* Requires gopass to be installed and configured on the system.
|
|
5
|
+
*/
|
|
6
|
+
export class GopassSecretService {
|
|
7
|
+
prefix;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an instance of GopassSecretService.
|
|
10
|
+
* @param prefix - Optional prefix for all secret keys (e.g., 'pikku/' will look up 'pikku/mykey' for key 'mykey')
|
|
11
|
+
*/
|
|
12
|
+
constructor(prefix = '') {
|
|
13
|
+
this.prefix = prefix;
|
|
14
|
+
}
|
|
15
|
+
getFullKey(key) {
|
|
16
|
+
if (!/^[\w.\-/]+$/.test(key)) {
|
|
17
|
+
throw new Error(`Invalid secret key format: ${key}`);
|
|
18
|
+
}
|
|
19
|
+
return this.prefix ? `${this.prefix}${key}` : key;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Retrieves a secret by key and parses it as JSON.
|
|
23
|
+
* @param key - The key of the secret to retrieve.
|
|
24
|
+
* @returns A promise that resolves to the parsed secret value.
|
|
25
|
+
* @throws {Error} If the secret is not found or gopass fails.
|
|
26
|
+
*/
|
|
27
|
+
async getSecretJSON(key) {
|
|
28
|
+
const value = await this.getSecret(key);
|
|
29
|
+
return JSON.parse(value);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves a secret by key as a string.
|
|
33
|
+
* @param key - The key of the secret to retrieve.
|
|
34
|
+
* @returns A promise that resolves to the secret value.
|
|
35
|
+
* @throws {Error} If the secret is not found or gopass fails.
|
|
36
|
+
*/
|
|
37
|
+
async getSecret(key) {
|
|
38
|
+
const fullKey = this.getFullKey(key);
|
|
39
|
+
try {
|
|
40
|
+
return execFileSync('gopass', ['show', '-o', fullKey], {
|
|
41
|
+
encoding: 'utf8',
|
|
42
|
+
}).trim();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new Error(`Secret Not Found: ${key}`, { cause: error });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a secret exists without throwing.
|
|
50
|
+
* @param key - The key of the secret to check.
|
|
51
|
+
* @returns A promise that resolves to true if the secret exists.
|
|
52
|
+
*/
|
|
53
|
+
async hasSecret(key) {
|
|
54
|
+
const fullKey = this.getFullKey(key);
|
|
55
|
+
try {
|
|
56
|
+
execFileSync('gopass', ['show', '-o', fullKey], { encoding: 'utf8' });
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Stores a JSON value as a secret in gopass.
|
|
65
|
+
* @param key - The key to store the secret under.
|
|
66
|
+
* @param value - The JSON value to store.
|
|
67
|
+
* @returns A promise that resolves when the secret is stored.
|
|
68
|
+
*/
|
|
69
|
+
async setSecretJSON(key, value) {
|
|
70
|
+
const fullKey = this.getFullKey(key);
|
|
71
|
+
const jsonValue = JSON.stringify(value);
|
|
72
|
+
try {
|
|
73
|
+
execFileSync('gopass', ['insert', '-f', fullKey], {
|
|
74
|
+
encoding: 'utf8',
|
|
75
|
+
input: jsonValue,
|
|
76
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error(`Failed to set secret: ${key}`, { cause: error });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Deletes a secret from gopass.
|
|
85
|
+
* @param key - The key of the secret to delete.
|
|
86
|
+
* @returns A promise that resolves when the secret is deleted.
|
|
87
|
+
*/
|
|
88
|
+
async deleteSecret(key) {
|
|
89
|
+
const fullKey = this.getFullKey(key);
|
|
90
|
+
try {
|
|
91
|
+
execFileSync('gopass', ['rm', '-f', fullKey], { encoding: 'utf8' });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Ignore errors if secret doesn't exist
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AIRunStateService, CreateRunInput } from './ai-run-state-service.js';
|
|
2
|
+
import type { AgentRunState, PendingApproval } from '../wirings/ai-agent/ai-agent.types.js';
|
|
3
|
+
export declare class InMemoryAIRunStateService implements AIRunStateService {
|
|
4
|
+
private runs;
|
|
5
|
+
private counter;
|
|
6
|
+
createRun(run: CreateRunInput): Promise<string>;
|
|
7
|
+
updateRun(runId: string, updates: Partial<AgentRunState>): Promise<void>;
|
|
8
|
+
getRun(runId: string): Promise<AgentRunState | null>;
|
|
9
|
+
getRunsByThread(threadId: string): Promise<AgentRunState[]>;
|
|
10
|
+
resolveApproval(toolCallId: string, status: 'approved' | 'denied'): Promise<void>;
|
|
11
|
+
findRunByToolCallId(toolCallId: string): Promise<{
|
|
12
|
+
run: AgentRunState;
|
|
13
|
+
approval: PendingApproval;
|
|
14
|
+
} | null>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export class InMemoryAIRunStateService {
|
|
2
|
+
runs = new Map();
|
|
3
|
+
counter = 0;
|
|
4
|
+
async createRun(run) {
|
|
5
|
+
const runId = `run-${++this.counter}-${Date.now()}`;
|
|
6
|
+
this.runs.set(runId, { ...run, runId });
|
|
7
|
+
return runId;
|
|
8
|
+
}
|
|
9
|
+
async updateRun(runId, updates) {
|
|
10
|
+
const run = this.runs.get(runId);
|
|
11
|
+
if (run) {
|
|
12
|
+
Object.assign(run, updates, { updatedAt: new Date() });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async getRun(runId) {
|
|
16
|
+
return this.runs.get(runId) ?? null;
|
|
17
|
+
}
|
|
18
|
+
async getRunsByThread(threadId) {
|
|
19
|
+
return [...this.runs.values()].filter((r) => r.threadId === threadId);
|
|
20
|
+
}
|
|
21
|
+
async resolveApproval(toolCallId, status) {
|
|
22
|
+
for (const run of this.runs.values()) {
|
|
23
|
+
if (run.pendingApprovals) {
|
|
24
|
+
const approval = run.pendingApprovals.find((a) => a.toolCallId === toolCallId);
|
|
25
|
+
if (approval) {
|
|
26
|
+
run.pendingApprovals = run.pendingApprovals.filter((a) => a.toolCallId !== toolCallId);
|
|
27
|
+
run.updatedAt = new Date();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async findRunByToolCallId(toolCallId) {
|
|
34
|
+
for (const run of this.runs.values()) {
|
|
35
|
+
if (run.pendingApprovals) {
|
|
36
|
+
const approval = run.pendingApprovals.find((a) => a.toolCallId === toolCallId);
|
|
37
|
+
if (approval) {
|
|
38
|
+
return { run, approval };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PikkuTriggerService } from '../wirings/trigger/pikku-trigger-service.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory TriggerService implementation.
|
|
4
|
+
*
|
|
5
|
+
* Reads both `wireTrigger` declarations and `wireTriggerSource` registrations
|
|
6
|
+
* from pikkuState. Only starts triggers that have both a declaration and a source.
|
|
7
|
+
* On fire, invokes target via `ContextAwareRPCService`.
|
|
8
|
+
*
|
|
9
|
+
* Single owner — one process runs triggers, no distributed claiming.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const triggerService = new InMemoryTriggerService()
|
|
14
|
+
* await triggerService.start()
|
|
15
|
+
*
|
|
16
|
+
* // On shutdown
|
|
17
|
+
* await triggerService.stop()
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class InMemoryTriggerService extends PikkuTriggerService {
|
|
21
|
+
start(): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PikkuTriggerService } from '../wirings/trigger/pikku-trigger-service.js';
|
|
2
|
+
import { getSingletonServices } from '../pikku-state.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory TriggerService implementation.
|
|
5
|
+
*
|
|
6
|
+
* Reads both `wireTrigger` declarations and `wireTriggerSource` registrations
|
|
7
|
+
* from pikkuState. Only starts triggers that have both a declaration and a source.
|
|
8
|
+
* On fire, invokes target via `ContextAwareRPCService`.
|
|
9
|
+
*
|
|
10
|
+
* Single owner — one process runs triggers, no distributed claiming.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const triggerService = new InMemoryTriggerService()
|
|
15
|
+
* await triggerService.start()
|
|
16
|
+
*
|
|
17
|
+
* // On shutdown
|
|
18
|
+
* await triggerService.stop()
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class InMemoryTriggerService extends PikkuTriggerService {
|
|
22
|
+
async start() {
|
|
23
|
+
const singletonServices = getSingletonServices();
|
|
24
|
+
const triggerTargets = this.getTriggerTargets();
|
|
25
|
+
const triggerSources = this.getTriggerSources();
|
|
26
|
+
for (const [name, source] of triggerSources) {
|
|
27
|
+
if (this.activeTriggers.has(name)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const targets = triggerTargets.get(name);
|
|
31
|
+
if (!targets || targets.length === 0) {
|
|
32
|
+
singletonServices.logger.info(`Trigger source '${name}' has no targets, skipping`);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const triggerInstance = await this.setupTriggerInstance(name, source.input, (data) => this.onTriggerFire(name, targets, data));
|
|
37
|
+
this.activeTriggers.set(name, triggerInstance);
|
|
38
|
+
singletonServices.logger.info(`Started trigger: ${name}`);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
singletonServices.logger.error(`Failed to start trigger ${name}: ${error}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (this.activeTriggers.size === 0) {
|
|
45
|
+
singletonServices.logger.info('No triggers started (no matching sources and targets found)');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { PikkuWorkflowService } from '../wirings/workflow/pikku-workflow-service.js';
|
|
2
|
+
import type { SerializedError } from '../types/core.types.js';
|
|
3
|
+
import type { WorkflowRun, WorkflowRunWire, StepState, WorkflowStatus, WorkflowStepOptions } from '../wirings/workflow/workflow.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* In-memory implementation of WorkflowService for inline-only execution
|
|
6
|
+
*
|
|
7
|
+
* This is a lightweight workflow service that stores all state in memory.
|
|
8
|
+
* It only supports inline execution (no queue workers) and is ideal for:
|
|
9
|
+
* - CLI tools that need workflow-like step orchestration
|
|
10
|
+
* - Testing and development
|
|
11
|
+
* - Single-process applications without persistence requirements
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const workflowService = new InMemoryWorkflowService()
|
|
16
|
+
* await workflowService.startWorkflow('myWorkflow', input, { type: 'cli' }, rpc, { inline: true })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class InMemoryWorkflowService extends PikkuWorkflowService {
|
|
20
|
+
private runs;
|
|
21
|
+
private steps;
|
|
22
|
+
private stepData;
|
|
23
|
+
private stepHistory;
|
|
24
|
+
private runState;
|
|
25
|
+
private branchKeys;
|
|
26
|
+
private workflowVersions;
|
|
27
|
+
createRun(workflowName: string, input: any, inline: boolean, graphHash: string, wire: WorkflowRunWire): Promise<string>;
|
|
28
|
+
getRun(id: string): Promise<WorkflowRun | null>;
|
|
29
|
+
getRunHistory(runId: string): Promise<Array<StepState & {
|
|
30
|
+
stepName: string;
|
|
31
|
+
}>>;
|
|
32
|
+
updateRunStatus(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
|
|
33
|
+
insertStepState(runId: string, stepName: string, rpcName: string | null, data: any, stepOptions?: WorkflowStepOptions): Promise<StepState>;
|
|
34
|
+
getStepState(runId: string, stepName: string): Promise<StepState>;
|
|
35
|
+
setStepRunning(stepId: string): Promise<void>;
|
|
36
|
+
setStepScheduled(stepId: string): Promise<void>;
|
|
37
|
+
setStepResult(stepId: string, result: any): Promise<void>;
|
|
38
|
+
setStepError(stepId: string, error: Error): Promise<void>;
|
|
39
|
+
createRetryAttempt(failedStepId: string, status: 'pending' | 'running'): Promise<StepState>;
|
|
40
|
+
withRunLock<T>(_id: string, fn: () => Promise<T>): Promise<T>;
|
|
41
|
+
withStepLock<T>(_runId: string, _stepName: string, fn: () => Promise<T>): Promise<T>;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
getCompletedGraphState(runId: string): Promise<{
|
|
44
|
+
completedNodeIds: string[];
|
|
45
|
+
failedNodeIds: string[];
|
|
46
|
+
branchKeys: Record<string, string>;
|
|
47
|
+
}>;
|
|
48
|
+
getNodesWithoutSteps(runId: string, nodeIds: string[]): Promise<string[]>;
|
|
49
|
+
getNodeResults(runId: string, nodeIds: string[]): Promise<Record<string, any>>;
|
|
50
|
+
setBranchKey(runId: string, nodeId: string, branchKey: string): Promise<void>;
|
|
51
|
+
setBranchTaken(stepId: string, branchKey: string): Promise<void>;
|
|
52
|
+
updateRunState(runId: string, name: string, value: unknown): Promise<void>;
|
|
53
|
+
getRunState(runId: string): Promise<Record<string, unknown>>;
|
|
54
|
+
upsertWorkflowVersion(name: string, graphHash: string, graph: any, source: string): Promise<void>;
|
|
55
|
+
getWorkflowVersion(name: string, graphHash: string): Promise<{
|
|
56
|
+
graph: any;
|
|
57
|
+
source: string;
|
|
58
|
+
} | null>;
|
|
59
|
+
}
|