@pikku/core 0.11.1 → 0.12.0
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 +55 -0
- package/dist/crypto-utils.d.ts +2 -0
- package/dist/crypto-utils.js +78 -0
- package/dist/errors/error-handler.js +3 -3
- package/dist/errors/errors.d.ts +8 -0
- package/dist/errors/errors.js +16 -0
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +0 -1
- package/dist/function/function-runner.d.ts +10 -3
- package/dist/function/function-runner.js +136 -31
- package/dist/function/functions.types.d.ts +35 -12
- package/dist/function/functions.types.js +16 -6
- package/dist/function/index.d.ts +2 -2
- package/dist/function/index.js +1 -2
- package/dist/handle-error.js +1 -10
- package/dist/index.d.ts +30 -24
- package/dist/index.js +19 -27
- package/dist/middleware/auth-apikey.d.ts +1 -1
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +1 -1
- package/dist/middleware/auth-bearer.js +3 -6
- package/dist/middleware/auth-cookie.d.ts +1 -1
- package/dist/middleware/auth-cookie.js +6 -8
- package/dist/middleware/cors.d.ts +46 -0
- package/dist/middleware/cors.js +73 -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 +1 -1
- package/dist/middleware-runner.d.ts +3 -14
- package/dist/middleware-runner.js +14 -16
- package/dist/permissions.d.ts +3 -86
- package/dist/permissions.js +20 -80
- package/dist/pikku-state.d.ts +33 -104
- package/dist/pikku-state.js +150 -66
- package/dist/schema.d.ts +8 -6
- package/dist/schema.js +31 -18
- package/dist/services/ai-agent-runner-service.d.ts +24 -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/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 +94 -0
- package/dist/services/in-memory-trigger-service.d.ts +23 -0
- package/dist/services/in-memory-trigger-service.js +50 -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 +25 -11
- package/dist/services/index.js +10 -13
- package/dist/services/local-secrets.d.ts +23 -0
- package/dist/services/local-secrets.js +45 -0
- package/dist/services/local-variables.d.ts +5 -0
- package/dist/services/local-variables.js +18 -0
- package/dist/services/scheduler-service.d.ts +21 -1
- package/dist/services/scheduler-service.js +14 -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 +23 -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 +13 -0
- 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 +43 -0
- package/dist/services/workflow-service.js +1 -0
- package/dist/types/core.types.d.ts +54 -10
- package/dist/types/core.types.js +7 -0
- package/dist/types/state.types.d.ts +127 -0
- package/dist/types/state.types.js +1 -0
- package/dist/utils.d.ts +10 -1
- package/dist/utils.js +60 -3
- package/dist/version.d.ts +6 -0
- package/dist/version.js +19 -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 +60 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -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 +96 -0
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
- package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
- package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
- package/dist/wirings/ai-agent/index.d.ts +5 -0
- package/dist/wirings/ai-agent/index.js +4 -0
- package/dist/wirings/channel/channel-common.d.ts +7 -4
- package/dist/wirings/channel/channel-common.js +15 -8
- package/dist/wirings/channel/channel-handler.js +13 -4
- 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.js +12 -12
- package/dist/wirings/channel/channel.types.d.ts +5 -1
- 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.js +18 -6
- package/dist/wirings/channel/log-channels.js +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.js +17 -6
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
- 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 +1 -1
- package/dist/wirings/cli/cli-runner.js +22 -18
- package/dist/wirings/cli/cli.types.d.ts +7 -6
- 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 +2 -2
- package/dist/wirings/http/http-runner.js +62 -27
- package/dist/wirings/http/http.types.d.ts +77 -24
- package/dist/wirings/http/index.d.ts +5 -4
- package/dist/wirings/http/index.js +4 -3
- package/dist/wirings/http/log-http-routes.js +1 -1
- package/dist/wirings/http/routers/path-to-regex.js +2 -2
- package/dist/wirings/mcp/index.d.ts +4 -3
- package/dist/wirings/mcp/index.js +3 -3
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
- package/dist/wirings/mcp/mcp-runner.js +42 -56
- package/dist/wirings/mcp/mcp.types.d.ts +3 -3
- 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 +2 -2
- package/dist/wirings/queue/index.js +1 -1
- package/dist/wirings/queue/queue-runner.d.ts +7 -0
- package/dist/wirings/queue/queue-runner.js +23 -12
- package/dist/wirings/queue/queue.types.d.ts +8 -2
- package/dist/wirings/rpc/index.d.ts +1 -1
- package/dist/wirings/rpc/index.js +1 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +40 -13
- package/dist/wirings/rpc/rpc-runner.js +191 -25
- package/dist/wirings/rpc/rpc-types.d.ts +15 -4
- package/dist/wirings/scheduler/index.d.ts +3 -3
- package/dist/wirings/scheduler/index.js +2 -3
- package/dist/wirings/scheduler/log-schedulers.js +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
- package/dist/wirings/scheduler/scheduler-runner.js +28 -10
- 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 -0
- package/dist/wirings/trigger/index.js +2 -0
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
- package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +42 -0
- package/dist/wirings/trigger/trigger-runner.js +85 -0
- package/dist/wirings/trigger/trigger.types.d.ts +130 -0
- package/dist/wirings/trigger/trigger.types.js +40 -0
- 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 +5 -0
- package/dist/wirings/workflow/dsl/index.js +4 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +292 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
- package/dist/wirings/workflow/dsl/workflow-runner.js +23 -0
- package/dist/wirings/workflow/graph/graph-node.d.ts +117 -0
- package/dist/wirings/workflow/graph/graph-node.js +58 -0
- package/dist/wirings/workflow/graph/graph-runner.d.ts +9 -0
- package/dist/wirings/workflow/graph/graph-runner.js +540 -0
- package/dist/wirings/workflow/graph/index.d.ts +4 -0
- package/dist/wirings/workflow/graph/index.js +3 -0
- 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 +82 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
- package/dist/wirings/workflow/index.d.ts +7 -12
- package/dist/wirings/workflow/index.js +8 -11
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +114 -10
- package/dist/wirings/workflow/pikku-workflow-service.js +386 -115
- package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
- package/dist/wirings/workflow/workflow-helpers.js +38 -0
- package/dist/wirings/workflow/workflow-utils.d.ts +1 -0
- package/dist/wirings/workflow/workflow-utils.js +1 -0
- package/dist/wirings/workflow/workflow.types.d.ts +83 -214
- package/package.json +13 -6
- package/run-tests.sh +4 -1
- package/src/crypto-utils.ts +99 -0
- package/src/errors/error-handler.ts +3 -3
- package/src/errors/errors.ts +17 -0
- package/src/errors/index.ts +0 -1
- package/src/factory-functions.test.ts +42 -2
- package/src/function/function-runner.test.ts +5 -12
- package/src/function/function-runner.ts +195 -40
- package/src/function/functions.types.ts +66 -14
- package/src/function/index.ts +5 -2
- package/src/handle-error.ts +2 -10
- package/src/index.ts +106 -27
- package/src/middleware/auth-apikey.test.ts +15 -12
- package/src/middleware/auth-apikey.ts +3 -3
- package/src/middleware/auth-bearer.test.ts +17 -14
- package/src/middleware/auth-bearer.ts +25 -27
- package/src/middleware/auth-cookie.test.ts +16 -13
- package/src/middleware/auth-cookie.ts +6 -8
- package/src/middleware/cors.ts +96 -0
- package/src/middleware/index.ts +5 -3
- package/src/middleware/remote-auth.ts +68 -0
- package/src/middleware-runner.test.ts +122 -0
- package/src/middleware-runner.ts +24 -17
- package/src/permissions.test.ts +102 -86
- package/src/permissions.ts +32 -93
- package/src/pikku-state.ts +168 -201
- package/src/run-tests-script.test.ts +49 -0
- package/src/schema.ts +50 -18
- package/src/services/ai-agent-runner-service.ts +29 -0
- package/src/services/ai-run-state-service.ts +20 -0
- package/src/services/ai-storage-service.ts +39 -0
- package/src/services/deployment-service.ts +22 -0
- package/src/services/gopass-secrets.ts +95 -0
- package/src/services/in-memory-trigger-service.ts +68 -0
- package/src/services/in-memory-workflow-service.ts +395 -0
- package/src/services/index.ts +49 -14
- package/src/services/local-secrets.ts +51 -0
- package/src/services/local-variables.ts +22 -0
- package/src/services/scheduler-service.ts +29 -1
- package/src/services/schema-service.ts +7 -0
- package/src/services/scoped-secret-service.ts +41 -0
- package/src/services/secret-service.ts +25 -4
- package/src/services/trigger-service.ts +38 -0
- package/src/services/typed-secret-service.ts +70 -0
- package/src/services/typed-variables-service.ts +81 -0
- package/src/services/user-session-service.ts +23 -0
- package/src/services/variables-service.ts +5 -0
- package/src/services/workflow-service.ts +94 -0
- package/src/types/core.types.ts +82 -8
- package/src/types/state.types.ts +169 -0
- package/src/utils.ts +74 -5
- package/src/version.test.ts +80 -0
- package/src/version.ts +25 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
- package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
- package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -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 +75 -0
- package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
- package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
- package/src/wirings/ai-agent/index.ts +28 -0
- package/src/wirings/channel/channel-common.ts +32 -19
- package/src/wirings/channel/channel-handler.ts +18 -5
- package/src/wirings/channel/channel-middleware-runner.ts +119 -0
- package/src/wirings/channel/channel-runner.ts +14 -15
- package/src/wirings/channel/channel.types.ts +17 -1
- 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 +47 -2
- package/src/wirings/channel/local/local-channel-runner.ts +22 -6
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/serverless/index.ts +5 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +22 -6
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
- package/src/wirings/cli/channel/index.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +28 -28
- package/src/wirings/cli/cli-runner.ts +27 -19
- package/src/wirings/cli/cli.types.ts +12 -11
- package/src/wirings/cli/command-parser.test.ts +8 -8
- 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 +5 -5
- package/src/wirings/http/http-runner.ts +80 -29
- package/src/wirings/http/http.types.ts +121 -23
- package/src/wirings/http/index.ts +16 -4
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
- package/src/wirings/http/routers/path-to-regex.ts +2 -2
- package/src/wirings/mcp/index.ts +27 -3
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
- package/src/wirings/mcp/mcp-runner.ts +56 -67
- package/src/wirings/mcp/mcp.types.ts +3 -3
- 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 +14 -2
- package/src/wirings/queue/queue-runner.test.ts +115 -73
- package/src/wirings/queue/queue-runner.ts +39 -13
- package/src/wirings/queue/queue.types.ts +12 -2
- package/src/wirings/rpc/index.ts +1 -1
- package/src/wirings/rpc/rpc-runner.ts +270 -34
- package/src/wirings/rpc/rpc-types.ts +21 -4
- package/src/wirings/scheduler/index.ts +7 -4
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +97 -53
- package/src/wirings/scheduler/scheduler-runner.ts +50 -10
- package/src/wirings/secret/index.ts +9 -0
- package/src/wirings/secret/secret.types.ts +32 -0
- package/src/wirings/secret/validate-secret-definitions.ts +82 -0
- package/src/wirings/trigger/index.ts +10 -0
- package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
- package/src/wirings/trigger/trigger-runner.ts +138 -0
- package/src/wirings/trigger/trigger.types.ts +178 -0
- package/src/wirings/variable/index.ts +8 -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 +31 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +320 -0
- package/src/wirings/workflow/dsl/workflow-runner.ts +28 -0
- package/src/wirings/workflow/graph/graph-node.ts +222 -0
- package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
- package/src/wirings/workflow/graph/graph-runner.ts +816 -0
- package/src/wirings/workflow/graph/index.ts +14 -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 +104 -0
- package/src/wirings/workflow/index.ts +64 -26
- package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
- package/src/wirings/workflow/pikku-workflow-service.ts +571 -136
- package/src/wirings/workflow/workflow-helpers.ts +79 -0
- package/src/wirings/workflow/workflow-utils.ts +0 -0
- package/src/wirings/workflow/workflow.types.ts +123 -279
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/workflow/workflow-runner.d.ts +0 -34
- package/dist/wirings/workflow/workflow-runner.js +0 -65
- package/src/function/function-runner.ts.bak +0 -188
- package/src/wirings/workflow/workflow-runner.ts +0 -72
|
@@ -6,7 +6,7 @@ import { Logger } from '../../services/index.js'
|
|
|
6
6
|
* @param logger - A logger for logging information.
|
|
7
7
|
*/
|
|
8
8
|
export const logRoutes = (logger: Logger) => {
|
|
9
|
-
const routesByType = pikkuState('http', 'routes')
|
|
9
|
+
const routesByType = pikkuState(null, 'http', 'routes')
|
|
10
10
|
if (routesByType.size === 0) {
|
|
11
11
|
logger.info('No routes added')
|
|
12
12
|
return
|
|
@@ -23,6 +23,7 @@ describe('PathToRegexRouter', () => {
|
|
|
23
23
|
test('should correctly identify static routes', () => {
|
|
24
24
|
// Setup test routes
|
|
25
25
|
pikkuState(
|
|
26
|
+
null,
|
|
26
27
|
'http',
|
|
27
28
|
'routes',
|
|
28
29
|
new Map([
|
|
@@ -36,8 +37,8 @@ describe('PathToRegexRouter', () => {
|
|
|
36
37
|
],
|
|
37
38
|
])
|
|
38
39
|
)
|
|
39
|
-
pikkuState('http', 'middleware', new Map())
|
|
40
|
-
pikkuState('channel', 'channels', new Map())
|
|
40
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
41
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
41
42
|
|
|
42
43
|
router.initialize()
|
|
43
44
|
|
|
@@ -56,6 +57,7 @@ describe('PathToRegexRouter', () => {
|
|
|
56
57
|
test('should handle dynamic routes with parameters', () => {
|
|
57
58
|
// Setup test routes with parameters
|
|
58
59
|
pikkuState(
|
|
60
|
+
null,
|
|
59
61
|
'http',
|
|
60
62
|
'routes',
|
|
61
63
|
new Map([
|
|
@@ -71,8 +73,8 @@ describe('PathToRegexRouter', () => {
|
|
|
71
73
|
],
|
|
72
74
|
])
|
|
73
75
|
)
|
|
74
|
-
pikkuState('http', 'middleware', new Map())
|
|
75
|
-
pikkuState('channel', 'channels', new Map())
|
|
76
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
77
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
76
78
|
|
|
77
79
|
router.initialize()
|
|
78
80
|
|
|
@@ -98,6 +100,7 @@ describe('PathToRegexRouter', () => {
|
|
|
98
100
|
test('should handle multi-parameter routes', () => {
|
|
99
101
|
// Setup routes with multiple parameters
|
|
100
102
|
pikkuState(
|
|
103
|
+
null,
|
|
101
104
|
'http',
|
|
102
105
|
'routes',
|
|
103
106
|
new Map([
|
|
@@ -116,8 +119,8 @@ describe('PathToRegexRouter', () => {
|
|
|
116
119
|
],
|
|
117
120
|
])
|
|
118
121
|
)
|
|
119
|
-
pikkuState('http', 'middleware', new Map())
|
|
120
|
-
pikkuState('channel', 'channels', new Map())
|
|
122
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
123
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
121
124
|
|
|
122
125
|
router.initialize()
|
|
123
126
|
|
|
@@ -139,6 +142,7 @@ describe('PathToRegexRouter', () => {
|
|
|
139
142
|
test('should prioritize static routes over dynamic routes for performance', () => {
|
|
140
143
|
// Setup mixed routes where static could conflict with dynamic
|
|
141
144
|
pikkuState(
|
|
145
|
+
null,
|
|
142
146
|
'http',
|
|
143
147
|
'routes',
|
|
144
148
|
new Map([
|
|
@@ -151,8 +155,8 @@ describe('PathToRegexRouter', () => {
|
|
|
151
155
|
],
|
|
152
156
|
])
|
|
153
157
|
)
|
|
154
|
-
pikkuState('http', 'middleware', new Map())
|
|
155
|
-
pikkuState('channel', 'channels', new Map())
|
|
158
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
159
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
156
160
|
|
|
157
161
|
router.initialize()
|
|
158
162
|
|
|
@@ -167,6 +171,7 @@ describe('PathToRegexRouter', () => {
|
|
|
167
171
|
describe('Path Normalization', () => {
|
|
168
172
|
test('should normalize paths without leading slash', () => {
|
|
169
173
|
pikkuState(
|
|
174
|
+
null,
|
|
170
175
|
'http',
|
|
171
176
|
'routes',
|
|
172
177
|
new Map([
|
|
@@ -179,8 +184,8 @@ describe('PathToRegexRouter', () => {
|
|
|
179
184
|
],
|
|
180
185
|
])
|
|
181
186
|
)
|
|
182
|
-
pikkuState('http', 'middleware', new Map())
|
|
183
|
-
pikkuState('channel', 'channels', new Map())
|
|
187
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
188
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
184
189
|
|
|
185
190
|
router.initialize()
|
|
186
191
|
|
|
@@ -201,9 +206,10 @@ describe('PathToRegexRouter', () => {
|
|
|
201
206
|
|
|
202
207
|
describe('Channel Routes Integration', () => {
|
|
203
208
|
test('should handle channel routes as GET routes', () => {
|
|
204
|
-
pikkuState('http', 'routes', new Map())
|
|
205
|
-
pikkuState('http', 'middleware', new Map())
|
|
209
|
+
pikkuState(null, 'http', 'routes', new Map())
|
|
210
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
206
211
|
pikkuState(
|
|
212
|
+
null,
|
|
207
213
|
'channel',
|
|
208
214
|
'channels',
|
|
209
215
|
new Map([
|
|
@@ -233,11 +239,13 @@ describe('PathToRegexRouter', () => {
|
|
|
233
239
|
const routeMiddleware = [async () => {}]
|
|
234
240
|
|
|
235
241
|
pikkuState(
|
|
242
|
+
null,
|
|
236
243
|
'http',
|
|
237
244
|
'routes',
|
|
238
245
|
new Map([['get', new Map([['/api/test', mockRoute('/api/test')]])]])
|
|
239
246
|
)
|
|
240
247
|
pikkuState(
|
|
248
|
+
null,
|
|
241
249
|
'http',
|
|
242
250
|
'middleware',
|
|
243
251
|
new Map([
|
|
@@ -245,7 +253,7 @@ describe('PathToRegexRouter', () => {
|
|
|
245
253
|
['/api/test', routeMiddleware],
|
|
246
254
|
])
|
|
247
255
|
)
|
|
248
|
-
pikkuState('channel', 'channels', new Map())
|
|
256
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
249
257
|
|
|
250
258
|
router.initialize()
|
|
251
259
|
|
|
@@ -260,12 +268,13 @@ describe('PathToRegexRouter', () => {
|
|
|
260
268
|
describe('No Match Scenarios', () => {
|
|
261
269
|
test('should return null for non-existent routes', () => {
|
|
262
270
|
pikkuState(
|
|
271
|
+
null,
|
|
263
272
|
'http',
|
|
264
273
|
'routes',
|
|
265
274
|
new Map([['get', new Map([['/existing', mockRoute('/existing')]])]])
|
|
266
275
|
)
|
|
267
|
-
pikkuState('http', 'middleware', new Map())
|
|
268
|
-
pikkuState('channel', 'channels', new Map())
|
|
276
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
277
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
269
278
|
|
|
270
279
|
router.initialize()
|
|
271
280
|
|
|
@@ -275,12 +284,13 @@ describe('PathToRegexRouter', () => {
|
|
|
275
284
|
|
|
276
285
|
test('should return null for unsupported HTTP methods', () => {
|
|
277
286
|
pikkuState(
|
|
287
|
+
null,
|
|
278
288
|
'http',
|
|
279
289
|
'routes',
|
|
280
290
|
new Map([['get', new Map([['/test', mockRoute('/test')]])]])
|
|
281
291
|
)
|
|
282
|
-
pikkuState('http', 'middleware', new Map())
|
|
283
|
-
pikkuState('channel', 'channels', new Map())
|
|
292
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
293
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
284
294
|
|
|
285
295
|
router.initialize()
|
|
286
296
|
|
|
@@ -292,12 +302,13 @@ describe('PathToRegexRouter', () => {
|
|
|
292
302
|
describe('Lazy Initialization', () => {
|
|
293
303
|
test('should initialize automatically on first match call', () => {
|
|
294
304
|
pikkuState(
|
|
305
|
+
null,
|
|
295
306
|
'http',
|
|
296
307
|
'routes',
|
|
297
308
|
new Map([['get', new Map([['/test', mockRoute('/test')]])]])
|
|
298
309
|
)
|
|
299
|
-
pikkuState('http', 'middleware', new Map())
|
|
300
|
-
pikkuState('channel', 'channels', new Map())
|
|
310
|
+
pikkuState(null, 'http', 'middleware', new Map())
|
|
311
|
+
pikkuState(null, 'channel', 'channels', new Map())
|
|
301
312
|
|
|
302
313
|
// Don't call initialize manually
|
|
303
314
|
const result = router.match('get', '/test')
|
|
@@ -25,8 +25,8 @@ export class PathToRegexRouter implements Router {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
public initialize() {
|
|
28
|
-
const routes = pikkuState('http', 'routes')
|
|
29
|
-
const channelRoutes = pikkuState('channel', 'channels')
|
|
28
|
+
const routes = pikkuState(null, 'http', 'routes')
|
|
29
|
+
const channelRoutes = pikkuState(null, 'channel', 'channels')
|
|
30
30
|
|
|
31
31
|
// Helper function to compile routes for a given method
|
|
32
32
|
const compileRoutesForMethod = (
|
package/src/wirings/mcp/index.ts
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
|
|
1
|
+
export { MCPEndpointRegistry } from './mcp-endpoint-registry.js'
|
|
2
|
+
export {
|
|
3
|
+
MCPError,
|
|
4
|
+
wireMCPResource,
|
|
5
|
+
wireMCPPrompt,
|
|
6
|
+
runMCPResource,
|
|
7
|
+
runMCPTool,
|
|
8
|
+
runMCPPrompt,
|
|
9
|
+
} from './mcp-runner.js'
|
|
10
|
+
export {
|
|
11
|
+
getMCPResourcesMeta,
|
|
12
|
+
getMCPToolsMeta,
|
|
13
|
+
getMCPPromptsMeta,
|
|
14
|
+
} from './mcp-runner.js'
|
|
15
|
+
export type {
|
|
16
|
+
AssertMCPResourceURIParams,
|
|
17
|
+
CoreMCPPrompt,
|
|
18
|
+
CoreMCPResource,
|
|
19
|
+
CoreMCPTool,
|
|
20
|
+
MCPPromptResponse,
|
|
21
|
+
MCPResourceMeta,
|
|
22
|
+
MCPResourceResponse,
|
|
23
|
+
MCPToolMeta,
|
|
24
|
+
MCPToolResponse,
|
|
25
|
+
MCPPromptMeta,
|
|
26
|
+
PikkuMCP,
|
|
27
|
+
} from './mcp.types.js'
|
|
@@ -147,7 +147,7 @@ describe('MCPEndpointRegistry', () => {
|
|
|
147
147
|
uri: 'file://test.txt',
|
|
148
148
|
title: 'Test Resource',
|
|
149
149
|
description: 'Test description',
|
|
150
|
-
|
|
150
|
+
pikkuFuncId: 'testResource',
|
|
151
151
|
inputSchema: null,
|
|
152
152
|
outputSchema: null,
|
|
153
153
|
mimeType: 'text/plain',
|
|
@@ -164,7 +164,7 @@ describe('MCPEndpointRegistry', () => {
|
|
|
164
164
|
name: 'test-tool',
|
|
165
165
|
title: 'Test Tool',
|
|
166
166
|
description: 'Test description',
|
|
167
|
-
|
|
167
|
+
pikkuFuncId: 'testTool',
|
|
168
168
|
inputSchema: null,
|
|
169
169
|
outputSchema: null,
|
|
170
170
|
},
|
|
@@ -179,7 +179,7 @@ describe('MCPEndpointRegistry', () => {
|
|
|
179
179
|
'test-prompt': {
|
|
180
180
|
name: 'test-prompt',
|
|
181
181
|
description: 'Test Prompt',
|
|
182
|
-
|
|
182
|
+
pikkuFuncId: 'testPrompt',
|
|
183
183
|
inputSchema: null,
|
|
184
184
|
outputSchema: null,
|
|
185
185
|
arguments: [],
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
} from '../../types/core.types.js'
|
|
8
8
|
import type {
|
|
9
9
|
CoreMCPResource,
|
|
10
|
-
CoreMCPTool,
|
|
11
10
|
CoreMCPPrompt,
|
|
12
11
|
JsonRpcRequest,
|
|
13
12
|
JsonRpcResponse,
|
|
@@ -22,8 +21,15 @@ import { getErrorResponse } from '../../errors/error-handler.js'
|
|
|
22
21
|
import { closeWireServices } from '../../utils.js'
|
|
23
22
|
import { pikkuState } from '../../pikku-state.js'
|
|
24
23
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
25
|
-
import {
|
|
26
|
-
|
|
24
|
+
import {
|
|
25
|
+
BadRequestError,
|
|
26
|
+
NotFoundError,
|
|
27
|
+
PikkuMissingMetaError,
|
|
28
|
+
} from '../../errors/errors.js'
|
|
29
|
+
import {
|
|
30
|
+
PikkuSessionService,
|
|
31
|
+
createMiddlewareSessionWireProps,
|
|
32
|
+
} from '../../services/user-session-service.js'
|
|
27
33
|
|
|
28
34
|
export class MCPError extends Error {
|
|
29
35
|
constructor(public readonly error: JsonRpcErrorResponse) {
|
|
@@ -56,39 +62,21 @@ export const wireMCPResource = <
|
|
|
56
62
|
>(
|
|
57
63
|
mcpResource: CoreMCPResource<PikkuFunctionConfig>
|
|
58
64
|
) => {
|
|
59
|
-
const resourcesMeta = pikkuState('mcp', 'resourcesMeta')
|
|
65
|
+
const resourcesMeta = pikkuState(null, 'mcp', 'resourcesMeta')
|
|
60
66
|
const mcpResourceMeta = resourcesMeta[mcpResource.uri]
|
|
61
67
|
if (!mcpResourceMeta) {
|
|
62
|
-
throw new
|
|
68
|
+
throw new PikkuMissingMetaError(
|
|
69
|
+
`Missing generated metadata for MCP resource '${mcpResource.uri}'`
|
|
70
|
+
)
|
|
63
71
|
}
|
|
64
|
-
addFunction(mcpResourceMeta.
|
|
65
|
-
const resources = pikkuState('mcp', 'resources')
|
|
72
|
+
addFunction(mcpResourceMeta.pikkuFuncId, mcpResource.func as any)
|
|
73
|
+
const resources = pikkuState(null, 'mcp', 'resources')
|
|
66
74
|
if (resources.has(mcpResource.uri)) {
|
|
67
75
|
throw new Error(`MCP resource already exists: ${mcpResource.uri}`)
|
|
68
76
|
}
|
|
69
77
|
resources.set(mcpResource.uri, mcpResource)
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
export const wireMCPTool = <
|
|
73
|
-
PikkuFunctionConfig extends CorePikkuFunctionConfig<
|
|
74
|
-
CorePikkuFunctionSessionless<any, any>
|
|
75
|
-
> = CorePikkuFunctionConfig<CorePikkuFunctionSessionless<any, any>>,
|
|
76
|
-
>(
|
|
77
|
-
mcpTool: CoreMCPTool<PikkuFunctionConfig>
|
|
78
|
-
) => {
|
|
79
|
-
const toolsMeta = pikkuState('mcp', 'toolsMeta')
|
|
80
|
-
const mcpToolMeta = toolsMeta[mcpTool.name]
|
|
81
|
-
if (!mcpToolMeta) {
|
|
82
|
-
throw new Error(`MCP tool metadata not found for '${mcpTool.name}'`)
|
|
83
|
-
}
|
|
84
|
-
addFunction(mcpToolMeta.pikkuFuncName, mcpTool.func as any)
|
|
85
|
-
const tools = pikkuState('mcp', 'tools')
|
|
86
|
-
if (tools.has(mcpTool.name)) {
|
|
87
|
-
throw new Error(`MCP tool already exists: ${mcpTool.name}`)
|
|
88
|
-
}
|
|
89
|
-
tools.set(mcpTool.name, mcpTool)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
80
|
export const wireMCPPrompt = <
|
|
93
81
|
PikkuFunctionConfig extends CorePikkuFunctionConfig<
|
|
94
82
|
CorePikkuFunctionSessionless<any, any>
|
|
@@ -96,13 +84,15 @@ export const wireMCPPrompt = <
|
|
|
96
84
|
>(
|
|
97
85
|
mcpPrompt: CoreMCPPrompt<PikkuFunctionConfig>
|
|
98
86
|
) => {
|
|
99
|
-
const promptsMeta = pikkuState('mcp', 'promptsMeta')
|
|
87
|
+
const promptsMeta = pikkuState(null, 'mcp', 'promptsMeta')
|
|
100
88
|
const mcpPromptMeta = promptsMeta[mcpPrompt.name]
|
|
101
89
|
if (!mcpPromptMeta) {
|
|
102
|
-
throw new
|
|
90
|
+
throw new PikkuMissingMetaError(
|
|
91
|
+
`Missing generated metadata for MCP prompt '${mcpPrompt.name}'`
|
|
92
|
+
)
|
|
103
93
|
}
|
|
104
|
-
addFunction(mcpPromptMeta.
|
|
105
|
-
const prompts = pikkuState('mcp', 'prompts')
|
|
94
|
+
addFunction(mcpPromptMeta.pikkuFuncId, mcpPrompt.func as any)
|
|
95
|
+
const prompts = pikkuState(null, 'mcp', 'prompts')
|
|
106
96
|
if (prompts.has(mcpPrompt.name)) {
|
|
107
97
|
throw new Error(`MCP prompt already exists: ${mcpPrompt.name}`)
|
|
108
98
|
}
|
|
@@ -115,15 +105,15 @@ export async function runMCPResource(
|
|
|
115
105
|
uri: string
|
|
116
106
|
) {
|
|
117
107
|
let endpoint: CoreMCPResource | undefined
|
|
118
|
-
let
|
|
108
|
+
let pikkuFuncId: string | undefined
|
|
119
109
|
let extractedParams: Record<string, string> = {}
|
|
120
110
|
|
|
121
|
-
const metas = pikkuState('mcp', 'resourcesMeta')
|
|
122
|
-
const endpoints = pikkuState('mcp', 'resources')
|
|
111
|
+
const metas = pikkuState(null, 'mcp', 'resourcesMeta')
|
|
112
|
+
const endpoints = pikkuState(null, 'mcp', 'resources')
|
|
123
113
|
|
|
124
114
|
if (endpoints.has(uri)) {
|
|
125
115
|
endpoint = endpoints.get(uri)
|
|
126
|
-
|
|
116
|
+
pikkuFuncId = metas[uri]?.pikkuFuncId
|
|
127
117
|
} else {
|
|
128
118
|
for (const [uriTemplate, value] of endpoints.entries()) {
|
|
129
119
|
// Extract parameter names from the template
|
|
@@ -139,7 +129,7 @@ export async function runMCPResource(
|
|
|
139
129
|
|
|
140
130
|
if (match) {
|
|
141
131
|
endpoint = value
|
|
142
|
-
|
|
132
|
+
pikkuFuncId = metas[uriTemplate]?.pikkuFuncId
|
|
143
133
|
|
|
144
134
|
// Extract parameter values and create params object
|
|
145
135
|
for (let i = 0; i < paramNames.length; i++) {
|
|
@@ -158,7 +148,7 @@ export async function runMCPResource(
|
|
|
158
148
|
'resource',
|
|
159
149
|
uri,
|
|
160
150
|
endpoint,
|
|
161
|
-
|
|
151
|
+
pikkuFuncId,
|
|
162
152
|
{ ...params, mcp: { ...params.mcp, uri } } as RunMCPEndpointParams<
|
|
163
153
|
keyof CoreMCPResource
|
|
164
154
|
>
|
|
@@ -170,14 +160,13 @@ export async function runMCPTool(
|
|
|
170
160
|
params: RunMCPEndpointParams,
|
|
171
161
|
name: string
|
|
172
162
|
) {
|
|
173
|
-
const
|
|
174
|
-
const meta = pikkuState('mcp', 'toolsMeta')[name]
|
|
163
|
+
const meta = pikkuState(null, 'mcp', 'toolsMeta')[name]
|
|
175
164
|
return await runMCPPikkuFunc(
|
|
176
165
|
request,
|
|
177
166
|
'tool',
|
|
178
167
|
name,
|
|
179
|
-
|
|
180
|
-
meta?.
|
|
168
|
+
undefined,
|
|
169
|
+
meta?.pikkuFuncId,
|
|
181
170
|
params
|
|
182
171
|
)
|
|
183
172
|
}
|
|
@@ -187,14 +176,14 @@ export async function runMCPPrompt(
|
|
|
187
176
|
params: RunMCPEndpointParams,
|
|
188
177
|
name: string
|
|
189
178
|
) {
|
|
190
|
-
const endpoint = pikkuState('mcp', 'prompts').get(name)
|
|
191
|
-
const meta = pikkuState('mcp', 'promptsMeta')[name]
|
|
179
|
+
const endpoint = pikkuState(null, 'mcp', 'prompts').get(name)
|
|
180
|
+
const meta = pikkuState(null, 'mcp', 'promptsMeta')[name]
|
|
192
181
|
return await runMCPPikkuFunc(
|
|
193
182
|
request,
|
|
194
183
|
'prompt',
|
|
195
184
|
name,
|
|
196
185
|
endpoint,
|
|
197
|
-
meta?.
|
|
186
|
+
meta?.pikkuFuncId,
|
|
198
187
|
params
|
|
199
188
|
)
|
|
200
189
|
}
|
|
@@ -206,27 +195,26 @@ async function runMCPPikkuFunc(
|
|
|
206
195
|
request: JsonRpcRequest,
|
|
207
196
|
type: 'resource' | 'tool' | 'prompt',
|
|
208
197
|
name: string,
|
|
209
|
-
mcp: CoreMCPResource |
|
|
210
|
-
|
|
198
|
+
mcp: CoreMCPResource | CoreMCPPrompt | undefined,
|
|
199
|
+
pikkuFuncId: string | undefined,
|
|
211
200
|
{ singletonServices, createWireServices, mcp: mcpWire }: RunMCPEndpointParams
|
|
212
201
|
): Promise<JsonRpcResponse> {
|
|
213
202
|
let wireServices: any
|
|
214
203
|
|
|
215
204
|
try {
|
|
216
|
-
// Validate JSON-RPC request structure
|
|
217
205
|
if (request.jsonrpc !== '2.0') {
|
|
218
206
|
throw new BadRequestError(
|
|
219
207
|
'Invalid JSON-RPC version, only supoorted version is 2.0'
|
|
220
208
|
)
|
|
221
209
|
}
|
|
222
210
|
|
|
223
|
-
if (
|
|
211
|
+
if (mcp === undefined && type !== 'tool') {
|
|
224
212
|
throw new NotFoundError(
|
|
225
213
|
`MCP '${type}' registration not found for '${name}'`
|
|
226
214
|
)
|
|
227
215
|
}
|
|
228
216
|
|
|
229
|
-
if (!
|
|
217
|
+
if (!pikkuFuncId) {
|
|
230
218
|
throw new NotFoundError(
|
|
231
219
|
`MCP '${type}' PikkuFunction Mapping not found for '${name}'`
|
|
232
220
|
)
|
|
@@ -234,33 +222,38 @@ async function runMCPPikkuFunc(
|
|
|
234
222
|
|
|
235
223
|
singletonServices.logger.debug(`Running MCP ${type}: ${name}`)
|
|
236
224
|
|
|
225
|
+
const mcpSessionService = new PikkuSessionService()
|
|
237
226
|
const wire: PikkuWire = {
|
|
238
227
|
mcp: mcpWire,
|
|
239
|
-
|
|
228
|
+
...createMiddlewareSessionWireProps(mcpSessionService),
|
|
240
229
|
}
|
|
241
230
|
|
|
242
|
-
// Get metadata for the MCP endpoint to access pre-resolved middleware
|
|
243
231
|
let meta: any
|
|
244
232
|
if (type === 'resource') {
|
|
245
|
-
meta = pikkuState('mcp', 'resourcesMeta')[name]
|
|
233
|
+
meta = pikkuState(null, 'mcp', 'resourcesMeta')[name]
|
|
246
234
|
} else if (type === 'tool') {
|
|
247
|
-
meta = pikkuState('mcp', 'toolsMeta')[name]
|
|
235
|
+
meta = pikkuState(null, 'mcp', 'toolsMeta')[name]
|
|
248
236
|
} else if (type === 'prompt') {
|
|
249
|
-
meta = pikkuState('mcp', 'promptsMeta')[name]
|
|
237
|
+
meta = pikkuState(null, 'mcp', 'promptsMeta')[name]
|
|
250
238
|
}
|
|
251
239
|
|
|
252
|
-
|
|
240
|
+
let result = await runPikkuFunc('mcp', `${type}:${name}`, pikkuFuncId, {
|
|
253
241
|
singletonServices,
|
|
254
242
|
createWireServices,
|
|
255
243
|
data: () => request.params,
|
|
256
244
|
inheritedMiddleware: meta?.middleware,
|
|
257
|
-
wireMiddleware: mcp
|
|
245
|
+
wireMiddleware: mcp?.middleware,
|
|
258
246
|
inheritedPermissions: meta?.permissions,
|
|
259
|
-
wirePermissions: mcp
|
|
260
|
-
tags: mcp
|
|
247
|
+
wirePermissions: mcp?.permissions,
|
|
248
|
+
tags: mcp?.tags,
|
|
261
249
|
wire,
|
|
250
|
+
sessionService: mcpSessionService,
|
|
262
251
|
})
|
|
263
252
|
|
|
253
|
+
if (type === 'tool' && meta?.outputSchema !== 'MCPToolResponse') {
|
|
254
|
+
result = [{ type: 'text', text: JSON.stringify(result) }]
|
|
255
|
+
}
|
|
256
|
+
|
|
264
257
|
return {
|
|
265
258
|
id: request.id,
|
|
266
259
|
result,
|
|
@@ -297,26 +290,22 @@ async function runMCPPikkuFunc(
|
|
|
297
290
|
}
|
|
298
291
|
}
|
|
299
292
|
|
|
300
|
-
export const getMCPTools = () => {
|
|
301
|
-
return pikkuState('mcp', 'tools')
|
|
302
|
-
}
|
|
303
|
-
|
|
304
293
|
export const getMCPResources = () => {
|
|
305
|
-
return pikkuState('mcp', 'resources')
|
|
294
|
+
return pikkuState(null, 'mcp', 'resources')
|
|
306
295
|
}
|
|
307
296
|
|
|
308
297
|
export const getMCPResourcesMeta = () => {
|
|
309
|
-
return pikkuState('mcp', 'resourcesMeta')
|
|
298
|
+
return pikkuState(null, 'mcp', 'resourcesMeta')
|
|
310
299
|
}
|
|
311
300
|
|
|
312
301
|
export const getMCPToolsMeta = () => {
|
|
313
|
-
return pikkuState('mcp', 'toolsMeta')
|
|
302
|
+
return pikkuState(null, 'mcp', 'toolsMeta')
|
|
314
303
|
}
|
|
315
304
|
|
|
316
305
|
export const getMCPPrompts = () => {
|
|
317
|
-
return pikkuState('mcp', 'prompts')
|
|
306
|
+
return pikkuState(null, 'mcp', 'prompts')
|
|
318
307
|
}
|
|
319
308
|
|
|
320
309
|
export const getMCPPromptsMeta = () => {
|
|
321
|
-
return pikkuState('mcp', 'promptsMeta')
|
|
310
|
+
return pikkuState(null, 'mcp', 'promptsMeta')
|
|
322
311
|
}
|
|
@@ -50,7 +50,7 @@ export type PikkuMCP<Tools extends string = any> = {
|
|
|
50
50
|
export type MCPResourceMeta = Record<
|
|
51
51
|
string,
|
|
52
52
|
Omit<CoreMCPResource, 'func' | 'middleware' | 'permissions'> & {
|
|
53
|
-
|
|
53
|
+
pikkuFuncId: string
|
|
54
54
|
inputSchema: string | null
|
|
55
55
|
outputSchema: string | null
|
|
56
56
|
middleware?: MiddlewareMetadata[] // Pre-resolved middleware chain (tag + explicit)
|
|
@@ -64,7 +64,7 @@ export type MCPResourceMeta = Record<
|
|
|
64
64
|
export type MCPToolMeta = Record<
|
|
65
65
|
string,
|
|
66
66
|
Omit<CoreMCPTool, 'func' | 'middleware' | 'permissions'> & {
|
|
67
|
-
|
|
67
|
+
pikkuFuncId: string
|
|
68
68
|
inputSchema: string | null
|
|
69
69
|
outputSchema: string | null
|
|
70
70
|
middleware?: MiddlewareMetadata[] // Pre-resolved middleware chain (tag + explicit)
|
|
@@ -78,7 +78,7 @@ export type MCPToolMeta = Record<
|
|
|
78
78
|
export type MCPPromptMeta = Record<
|
|
79
79
|
string,
|
|
80
80
|
Omit<CoreMCPPrompt, 'func' | 'middleware' | 'permissions'> & {
|
|
81
|
-
|
|
81
|
+
pikkuFuncId: string
|
|
82
82
|
inputSchema: string | null
|
|
83
83
|
outputSchema: string | null
|
|
84
84
|
arguments: Array<{
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type NodeType = 'trigger' | 'action' | 'end'
|
|
2
|
+
|
|
3
|
+
export type CoreNodeConfig = {
|
|
4
|
+
displayName: string
|
|
5
|
+
category: string
|
|
6
|
+
type: NodeType
|
|
7
|
+
errorOutput?: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type NodeMeta = {
|
|
11
|
+
name: string
|
|
12
|
+
displayName: string
|
|
13
|
+
category: string
|
|
14
|
+
type: NodeType
|
|
15
|
+
rpc: string
|
|
16
|
+
description?: string
|
|
17
|
+
errorOutput: boolean
|
|
18
|
+
inputSchemaName: string | null
|
|
19
|
+
outputSchemaName: string | null
|
|
20
|
+
tags?: string[]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type NodesMeta = Record<string, NodeMeta>
|