@pikku/cli 0.12.83 → 0.12.86
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/console-app/assets/index-CSzCJzBb.css +1 -0
- package/console-app/assets/{index-CN_U0k_D.js → index-Cr3_cO3Z.js} +161 -150
- package/console-app/index.html +2 -2
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
- package/dist/.pikku/{http/pikku-http-wirings.gen.d.ts → auth/auth.types.d.ts} +1 -1
- package/dist/.pikku/auth/auth.types.js +5 -0
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.d.ts +4 -4
- package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +4 -0
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +4 -0
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -14
- package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +45 -36
- package/dist/.pikku/function/pikku-functions.gen.js +3 -3
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -5
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -5
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +2 -1
- package/dist/.pikku/pikku-services.gen.js +1 -0
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +2 -2
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +3 -7
- package/dist/.pikku/schemas/schemas/FabricLoginInput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/PikkuUserAdminFunctionsOutput.schema.json +1 -0
- package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/meta/allWorkflow.gen.json +9 -3
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +8 -2
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/fabric/fabric-commands.d.ts +56 -53
- package/dist/src/fabric/fabric-commands.js +4 -0
- package/dist/src/fabric/functions/add.function.d.ts +2 -2
- package/dist/src/fabric/functions/addon-verify.function.d.ts +2 -2
- package/dist/src/fabric/functions/db-schema.function.d.ts +2 -2
- package/dist/src/fabric/functions/deploy-list.function.d.ts +2 -2
- package/dist/src/fabric/functions/deploy-units.function.d.ts +2 -2
- package/dist/src/fabric/functions/deploy.function.d.ts +4 -4
- package/dist/src/fabric/functions/domains-add.function.d.ts +2 -2
- package/dist/src/fabric/functions/domains-list.function.d.ts +2 -2
- package/dist/src/fabric/functions/domains-remove.function.d.ts +2 -2
- package/dist/src/fabric/functions/errors.function.d.ts +2 -2
- package/dist/src/fabric/functions/init.function.d.ts +2 -2
- package/dist/src/fabric/functions/link.function.d.ts +2 -2
- package/dist/src/fabric/functions/llm-key.function.d.ts +6 -6
- package/dist/src/fabric/functions/login.function.d.ts +6 -2
- package/dist/src/fabric/functions/login.function.js +45 -4
- package/dist/src/fabric/functions/logs.function.d.ts +2 -2
- package/dist/src/fabric/functions/metrics.function.d.ts +2 -2
- package/dist/src/fabric/functions/publish.function.d.ts +2 -2
- package/dist/src/fabric/functions/rollback.function.d.ts +2 -2
- package/dist/src/fabric/functions/secrets-list.function.d.ts +2 -2
- package/dist/src/fabric/functions/secrets-set.function.d.ts +2 -2
- package/dist/src/fabric/functions/smoke.function.d.ts +2 -2
- package/dist/src/fabric/functions/status.function.d.ts +2 -2
- package/dist/src/fabric/functions/trace.function.d.ts +2 -2
- package/dist/src/fabric/functions/validate.function.d.ts +2 -2
- package/dist/src/functions/commands/all.d.ts +1 -1
- package/dist/src/functions/commands/audit.d.ts +1 -1
- package/dist/src/functions/commands/binary.d.ts +2 -2
- package/dist/src/functions/commands/bootstrap.d.ts +1 -1
- package/dist/src/functions/commands/db-audit.d.ts +1 -1
- package/dist/src/functions/commands/db-generate.d.ts +1 -1
- package/dist/src/functions/commands/db-migrate.d.ts +1 -1
- package/dist/src/functions/commands/db-reset.d.ts +1 -1
- package/dist/src/functions/commands/db-seed.d.ts +1 -1
- package/dist/src/functions/commands/deploy-apply.d.ts +2 -2
- package/dist/src/functions/commands/deploy-info.d.ts +1 -1
- package/dist/src/functions/commands/deploy-plan.d.ts +2 -2
- package/dist/src/functions/commands/dev.d.ts +2 -2
- package/dist/src/functions/commands/emails-init.d.ts +1 -1
- package/dist/src/functions/commands/enable.d.ts +8 -8
- package/dist/src/functions/commands/import-n8n.d.ts +2 -2
- package/dist/src/functions/commands/info.d.ts +4 -4
- package/dist/src/functions/commands/login.d.ts +5 -5
- package/dist/src/functions/commands/meta.d.ts +25 -25
- package/dist/src/functions/commands/new-addon.d.ts +13 -2
- package/dist/src/functions/commands/new-addon.js +38 -4
- package/dist/src/functions/commands/new-function.d.ts +2 -2
- package/dist/src/functions/commands/new-middleware.d.ts +2 -2
- package/dist/src/functions/commands/new-permission.d.ts +2 -2
- package/dist/src/functions/commands/new-wiring.d.ts +2 -2
- package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
- package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
- package/dist/src/functions/commands/scenario.d.ts +3 -3
- package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
- package/dist/src/functions/commands/scopes-prune.d.ts +2 -2
- package/dist/src/functions/commands/serve.d.ts +2 -2
- package/dist/src/functions/commands/skills.d.ts +4 -4
- package/dist/src/functions/commands/versions-check.d.ts +1 -1
- package/dist/src/functions/commands/versions-init.d.ts +2 -2
- package/dist/src/functions/commands/versions-update.d.ts +1 -1
- package/dist/src/functions/commands/watch.d.ts +2 -2
- package/dist/src/functions/commands/workspace-validate.d.ts +2 -2
- package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
- package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
- package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.js +3 -2
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.js +6 -2
- package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +3 -2
- package/dist/src/functions/wirings/ai-agent/serialize-public-agent.d.ts +5 -1
- package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +112 -40
- package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +2 -2
- package/dist/src/functions/wirings/auth/pikku-command-auth.js +4 -0
- package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
- package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
- package/dist/src/functions/wirings/console/pikku-command-console-functions.js +6 -2
- package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
- package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
- package/dist/src/functions/wirings/console/serialize-console-functions.d.ts +5 -1
- package/dist/src/functions/wirings/console/serialize-console-functions.js +55 -23
- package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
- package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +2 -2
- package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +2 -2
- package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +2 -2
- package/dist/src/functions/wirings/functions/pikku-command-services.js +9 -2
- package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
- package/dist/src/functions/wirings/functions/schemas.js +10 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +23 -12
- package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
- package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
- package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.js +2 -0
- package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
- package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
- package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
- package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
- package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
- package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +8 -2
- package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
- package/dist/src/functions/wirings/realtime/serialize-events-scaffold.d.ts +5 -4
- package/dist/src/functions/wirings/realtime/serialize-events-scaffold.js +17 -7
- package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +6 -2
- package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +6 -2
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/serialize-public-rpc.d.ts +5 -1
- package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +16 -5
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.d.ts +5 -1
- package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +16 -5
- package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.d.ts +1 -1
- package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.js +8 -2
- package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.d.ts +5 -1
- package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.js +22 -16
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +2 -2
- package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
- package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +2 -2
- package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
- package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.d.ts +1 -0
- package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.js +49 -0
- package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.d.ts +24 -0
- package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.js +283 -0
- package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
- package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
- package/dist/src/functions/wirings/webhook/pikku-command-webhook.js +6 -2
- package/dist/src/functions/wirings/webhook/serialize-webhook.d.ts +5 -8
- package/dist/src/functions/wirings/webhook/serialize-webhook.js +19 -12
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +8 -2
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +2 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-routes.d.ts +5 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +61 -31
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +8 -2
- package/dist/src/functions/workflows/all.workflow.js +8 -0
- package/dist/src/utils/pikku-cli-config.js +40 -10
- package/dist/src/utils/remove-legacy-scaffold-file.d.ts +3 -0
- package/dist/src/utils/remove-legacy-scaffold-file.js +43 -0
- package/dist/src/utils/serialize-schemas.js +57 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/skills/pikku-addon/SKILL.md +1 -0
- package/skills/pikku-ai-agent/SKILL.md +5 -4
- package/skills/pikku-ai-vercel/SKILL.md +1 -0
- package/skills/pikku-better-auth/SKILL.md +57 -0
- package/skills/pikku-concepts/SKILL.md +1 -1
- package/skills/pikku-concepts/references/concept-mapping.md +11 -9
- package/skills/pikku-emails/SKILL.md +1 -0
- package/skills/pikku-fabric-debug/SKILL.md +112 -0
- package/skills/pikku-permissions/SKILL.md +8 -8
- package/skills/pikku-react/SKILL.md +32 -3
- package/skills/pikku-react-query/SKILL.md +38 -1
- package/skills/pikku-realtime/SKILL.md +1 -1
- package/skills/pikku-security/SKILL.md +3 -3
- package/skills/pikku-services/SKILL.md +34 -0
- package/skills/pikku-template-clone/SKILL.md +1 -0
- package/cli.schema.json +0 -1
- package/console-app/assets/index-CpHRlBt-.css +0 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.d.ts +0 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +0 -6
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +0 -26
- package/dist/.pikku/http/pikku-http-wirings.gen.js +0 -5
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +0 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +0 -6
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +0 -10
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +0 -4
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +0 -5
- package/dist/.pikku/schemas/schemas/RemoteRPCHandlerInput.schema.json +0 -1
- package/dist/src/scaffold/rpc-remote.gen.d.ts +0 -10
- package/dist/src/scaffold/rpc-remote.gen.js +0 -27
|
@@ -1,56 +1,132 @@
|
|
|
1
1
|
export const serializePublicAgent = (pathToPikkuTypes, requireAuth = true, globalHTTPPrefix = '') => {
|
|
2
2
|
const authFlag = requireAuth ? 'true' : 'false';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const schemas = `/**
|
|
4
|
+
* Auto-generated public agent schemas
|
|
5
|
+
* Do not edit manually - regenerate with 'npx pikku'
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod'
|
|
5
8
|
|
|
6
|
-
export const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
export const Attachment = z.object({
|
|
10
|
+
type: z.enum(['image', 'file']),
|
|
11
|
+
data: z.string().optional(),
|
|
12
|
+
url: z.string().optional(),
|
|
13
|
+
mediaType: z.string().optional(),
|
|
14
|
+
filename: z.string().optional(),
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export const AgentCall = z.object({
|
|
18
|
+
agentName: z.string(),
|
|
19
|
+
message: z.string(),
|
|
20
|
+
threadId: z.string(),
|
|
21
|
+
resourceId: z.string(),
|
|
22
|
+
attachments: z.array(Attachment).optional(),
|
|
23
|
+
model: z.string().optional(),
|
|
24
|
+
temperature: z.number().optional(),
|
|
25
|
+
context: z.string().optional(),
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
export const AgentApproval = z.object({
|
|
29
|
+
agentName: z.string(),
|
|
30
|
+
runId: z.string(),
|
|
31
|
+
approvals: z.array(
|
|
32
|
+
z.object({ toolCallId: z.string(), approved: z.boolean() })
|
|
33
|
+
),
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
export const AgentResume = z.object({
|
|
37
|
+
agentName: z.string(),
|
|
38
|
+
runId: z.string(),
|
|
39
|
+
toolCallId: z.string(),
|
|
40
|
+
approved: z.boolean(),
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export const ThreadsQuery = z.object({
|
|
44
|
+
agentName: z.string().optional(),
|
|
45
|
+
resourceId: z.string().optional(),
|
|
46
|
+
limit: z.number().optional(),
|
|
47
|
+
offset: z.number().optional(),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
export const ThreadRef = z.object({
|
|
51
|
+
threadId: z.string(),
|
|
52
|
+
resourceId: z.string().optional(),
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
export const ThreadDeleted = z.object({ deleted: z.boolean() })
|
|
56
|
+
`;
|
|
57
|
+
const functions = `import { canAccessThread, threadOwnerConstraint } from '@pikku/core/ai-agent'
|
|
58
|
+
import { pikkuSessionlessFunc, pikkuPermission, defineHTTPRoutes, wireHTTPRoutes } from '${pathToPikkuTypes}'
|
|
59
|
+
import {
|
|
60
|
+
AgentCall,
|
|
61
|
+
AgentApproval,
|
|
62
|
+
AgentResume,
|
|
63
|
+
ThreadsQuery,
|
|
64
|
+
ThreadRef,
|
|
65
|
+
ThreadDeleted,
|
|
66
|
+
} from './agent.schemas.gen.js'
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Thread reads are keyed by a caller-supplied \`threadId\`, so ownership cannot
|
|
70
|
+
* come from the request — it is derived from the session and checked against
|
|
71
|
+
* the stored thread's resourceId.
|
|
72
|
+
*/
|
|
73
|
+
export const isThreadOwner = pikkuPermission<{ threadId: string }>(
|
|
74
|
+
async ({ agentRunService }, { threadId }, { session }) => {
|
|
75
|
+
const thread = await agentRunService.getThread(threadId)
|
|
76
|
+
// A missing thread is denied rather than 404'd so it is indistinguishable
|
|
77
|
+
// from one owned by someone else — no existence oracle.
|
|
78
|
+
if (!thread) return false
|
|
79
|
+
return canAccessThread(thread.resourceId, session)
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
export const agentCaller = pikkuSessionlessFunc({
|
|
10
84
|
tags: ['pikku'],
|
|
11
85
|
auth: ${authFlag},
|
|
86
|
+
input: AgentCall,
|
|
12
87
|
func: async (_services, data, { rpc }) => {
|
|
13
88
|
return await rpc.agent.run(data.agentName as any, {
|
|
14
89
|
message: data.message,
|
|
15
90
|
threadId: data.threadId,
|
|
16
91
|
resourceId: data.resourceId,
|
|
92
|
+
...(data.attachments ? { attachments: data.attachments } : {}),
|
|
93
|
+
...(data.model ? { model: data.model } : {}),
|
|
94
|
+
...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
|
|
95
|
+
...(data.context ? { context: data.context } : {}),
|
|
17
96
|
})
|
|
18
97
|
},
|
|
19
98
|
})
|
|
20
99
|
|
|
21
|
-
export const agentStreamCaller = pikkuSessionlessFunc
|
|
22
|
-
{ agentName: string; message: string; threadId: string; resourceId: string; context?: string },
|
|
23
|
-
void
|
|
24
|
-
>({
|
|
100
|
+
export const agentStreamCaller = pikkuSessionlessFunc({
|
|
25
101
|
tags: ['pikku'],
|
|
26
102
|
auth: ${authFlag},
|
|
103
|
+
input: AgentCall,
|
|
27
104
|
func: async (_services, data, { rpc }) => {
|
|
28
105
|
await rpc.agent.stream(data.agentName as any, {
|
|
29
106
|
message: data.message,
|
|
30
107
|
threadId: data.threadId,
|
|
31
108
|
resourceId: data.resourceId,
|
|
109
|
+
...(data.attachments ? { attachments: data.attachments } : {}),
|
|
110
|
+
...(data.model ? { model: data.model } : {}),
|
|
111
|
+
...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
|
|
32
112
|
...(data.context ? { context: data.context } : {}),
|
|
33
113
|
})
|
|
34
114
|
},
|
|
35
115
|
})
|
|
36
116
|
|
|
37
|
-
export const agentApproveCaller = pikkuSessionlessFunc
|
|
38
|
-
{ agentName: string; runId: string; approvals: { toolCallId: string; approved: boolean }[] },
|
|
39
|
-
unknown
|
|
40
|
-
>({
|
|
117
|
+
export const agentApproveCaller = pikkuSessionlessFunc({
|
|
41
118
|
tags: ['pikku'],
|
|
42
119
|
auth: ${authFlag},
|
|
120
|
+
input: AgentApproval,
|
|
43
121
|
func: async (_services, { runId, approvals, agentName }, { rpc }) => {
|
|
44
122
|
return await rpc.agent.approve(runId, approvals, agentName)
|
|
45
123
|
},
|
|
46
124
|
})
|
|
47
125
|
|
|
48
|
-
export const agentResumeCaller = pikkuSessionlessFunc
|
|
49
|
-
{ agentName: string; runId: string; toolCallId: string; approved: boolean },
|
|
50
|
-
void
|
|
51
|
-
>({
|
|
126
|
+
export const agentResumeCaller = pikkuSessionlessFunc({
|
|
52
127
|
tags: ['pikku'],
|
|
53
128
|
auth: ${authFlag},
|
|
129
|
+
input: AgentResume,
|
|
54
130
|
func: async (_services, data, { rpc }) => {
|
|
55
131
|
await rpc.agent.resume(data.runId, {
|
|
56
132
|
toolCallId: data.toolCallId,
|
|
@@ -59,71 +135,66 @@ export const agentResumeCaller = pikkuSessionlessFunc<
|
|
|
59
135
|
},
|
|
60
136
|
})
|
|
61
137
|
|
|
62
|
-
export const getAgentThreads = pikkuSessionlessFunc
|
|
63
|
-
{ agentName?: string; resourceId?: string; limit?: number; offset?: number },
|
|
64
|
-
any[]
|
|
65
|
-
>({
|
|
138
|
+
export const getAgentThreads = pikkuSessionlessFunc({
|
|
66
139
|
tags: ['pikku', 'pikku:agent'],
|
|
140
|
+
input: ThreadsQuery,
|
|
67
141
|
title: 'Get Agent Threads',
|
|
68
142
|
description:
|
|
69
|
-
'Returns
|
|
143
|
+
'Returns the caller\\'s AI agent threads from storage. Accepts optional filters: agentName, resourceId, limit, and offset for pagination.',
|
|
70
144
|
expose: true,
|
|
71
145
|
auth: ${authFlag},
|
|
72
|
-
func: async ({ agentRunService }, input) => {
|
|
73
|
-
|
|
146
|
+
func: async ({ agentRunService }, input, { session }) => {
|
|
147
|
+
// \`owners\` is an authorization constraint derived from the session, never
|
|
148
|
+
// from input — \`resourceId\` remains a caller-supplied filter within it.
|
|
74
149
|
return await agentRunService.listThreads({
|
|
75
150
|
agentName: input?.agentName,
|
|
76
151
|
resourceId: input?.resourceId,
|
|
152
|
+
owners: threadOwnerConstraint(session),
|
|
77
153
|
limit: input?.limit,
|
|
78
154
|
offset: input?.offset,
|
|
79
155
|
})
|
|
80
156
|
},
|
|
81
157
|
})
|
|
82
158
|
|
|
83
|
-
export const getAgentThreadMessages = pikkuSessionlessFunc
|
|
84
|
-
{ threadId: string; resourceId?: string },
|
|
85
|
-
any[]
|
|
86
|
-
>({
|
|
159
|
+
export const getAgentThreadMessages = pikkuSessionlessFunc({
|
|
87
160
|
tags: ['pikku', 'pikku:agent'],
|
|
161
|
+
input: ThreadRef,
|
|
88
162
|
title: 'Get Agent Thread Messages',
|
|
89
163
|
description:
|
|
90
164
|
'Returns all messages for a given AI agent thread, ordered by creation time.',
|
|
91
165
|
expose: true,
|
|
92
166
|
auth: ${authFlag},
|
|
167
|
+
permissions: { owner: isThreadOwner },
|
|
93
168
|
func: async ({ agentRunService }, input) => {
|
|
94
|
-
if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
|
|
95
169
|
return await agentRunService.getThreadMessages(input.threadId)
|
|
96
170
|
},
|
|
97
171
|
})
|
|
98
172
|
|
|
99
|
-
export const getAgentThreadRuns = pikkuSessionlessFunc
|
|
100
|
-
{ threadId: string; resourceId?: string },
|
|
101
|
-
any[]
|
|
102
|
-
>({
|
|
173
|
+
export const getAgentThreadRuns = pikkuSessionlessFunc({
|
|
103
174
|
tags: ['pikku', 'pikku:agent'],
|
|
175
|
+
input: ThreadRef,
|
|
104
176
|
title: 'Get Agent Thread Runs',
|
|
105
177
|
description:
|
|
106
178
|
'Returns the run history for a given AI agent thread, ordered by creation time.',
|
|
107
179
|
expose: true,
|
|
108
180
|
auth: ${authFlag},
|
|
181
|
+
permissions: { owner: isThreadOwner },
|
|
109
182
|
func: async ({ agentRunService }, input) => {
|
|
110
|
-
if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
|
|
111
183
|
return await agentRunService.getThreadRuns(input.threadId)
|
|
112
184
|
},
|
|
113
185
|
})
|
|
114
186
|
|
|
115
|
-
export const deleteAgentThread = pikkuSessionlessFunc
|
|
116
|
-
{ threadId: string; resourceId?: string },
|
|
117
|
-
{ deleted: boolean }
|
|
118
|
-
>({
|
|
187
|
+
export const deleteAgentThread = pikkuSessionlessFunc({
|
|
119
188
|
tags: ['pikku', 'pikku:agent'],
|
|
189
|
+
input: ThreadRef,
|
|
190
|
+
output: ThreadDeleted,
|
|
120
191
|
title: 'Delete Agent Thread',
|
|
121
192
|
description:
|
|
122
193
|
'Deletes an AI agent thread and all of its persisted state.',
|
|
123
194
|
expose: true,
|
|
124
195
|
auth: ${authFlag},
|
|
196
|
+
permissions: { owner: isThreadOwner },
|
|
125
197
|
func: async ({ agentRunService }, input) => {
|
|
126
|
-
if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
|
|
127
198
|
const deleted = await agentRunService.deleteThread(input.threadId)
|
|
128
199
|
return { deleted }
|
|
129
200
|
},
|
|
@@ -160,4 +231,5 @@ export const agentRoutes = defineHTTPRoutes({
|
|
|
160
231
|
|
|
161
232
|
wireHTTPRoutes({ routes: { agent: agentRoutes } })
|
|
162
233
|
`;
|
|
234
|
+
return { schemas, functions };
|
|
163
235
|
};
|
|
@@ -2,6 +2,6 @@ export declare const pikkuAuth: import("#pikku").PikkuFunctionConfig<{
|
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
|
|
4
4
|
bootstrap?: boolean;
|
|
5
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
5
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
|
|
6
6
|
bootstrap?: boolean;
|
|
7
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
7
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -4,6 +4,7 @@ import { rm } from 'node:fs/promises';
|
|
|
4
4
|
import { pikkuSessionlessFunc } from '#pikku';
|
|
5
5
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
6
6
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
7
|
+
import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
|
|
7
8
|
import { serializeAuthGen } from './serialize-auth-gen.js';
|
|
8
9
|
import { serializeAuthTypes, serializeAuthTypesBootstrap, } from './serialize-auth-types.js';
|
|
9
10
|
import { serializeAuthMeta } from './serialize-auth-meta.js';
|
|
@@ -49,6 +50,9 @@ export const pikkuAuth = pikkuSessionlessFunc({
|
|
|
49
50
|
else if (existsSync(middlewareFile)) {
|
|
50
51
|
await rm(middlewareFile, { force: true });
|
|
51
52
|
}
|
|
53
|
+
for (const file of [authFile, secretsFile, middlewareFile]) {
|
|
54
|
+
await removeLegacyScaffoldFile(file);
|
|
55
|
+
}
|
|
52
56
|
// Static metadata of the enabled providers/plugins for the console SSO page,
|
|
53
57
|
// following the `*-meta.gen.json` convention. Read at runtime by the console
|
|
54
58
|
// getAuthProviders function instead of a runtime registry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuChannels: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuChannels: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type CLITypesCommandInput = {
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
};
|
|
4
|
-
export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").
|
|
4
|
+
export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
5
5
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -3,6 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
|
3
3
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
4
4
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
5
5
|
import { projectDeclaresBetterAuth } from '../../../utils/detect-better-auth.js';
|
|
6
|
+
import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
|
|
6
7
|
import { serializeConsoleFunctions } from './serialize-console-functions.js';
|
|
7
8
|
export const pikkuConsoleFunctions = pikkuSessionlessFunc({
|
|
8
9
|
func: async ({ logger, config, variables }) => {
|
|
@@ -10,7 +11,7 @@ export const pikkuConsoleFunctions = pikkuSessionlessFunc({
|
|
|
10
11
|
if (deployCodegenFlag === '1') {
|
|
11
12
|
return false;
|
|
12
13
|
}
|
|
13
|
-
if (config.scaffold?.console) {
|
|
14
|
+
if (config.scaffold?.console && config.consoleSchemasFile) {
|
|
14
15
|
// Every console RPC now requires an authenticated session (the console is
|
|
15
16
|
// an admin surface), so scaffolding it without an auth strategy produces a
|
|
16
17
|
// console that 403s on every call. Better Auth is the supported strategy —
|
|
@@ -25,7 +26,10 @@ export const pikkuConsoleFunctions = pikkuSessionlessFunc({
|
|
|
25
26
|
}
|
|
26
27
|
const pathToPikkuTypes = getFileImportRelativePath(config.consoleFunctionsFile, config.typesDeclarationFile, config.packageMappings);
|
|
27
28
|
const pathToAgentTypes = getFileImportRelativePath(config.consoleFunctionsFile, config.agentTypesFile, config.packageMappings);
|
|
28
|
-
|
|
29
|
+
const { schemas, functions } = serializeConsoleFunctions(pathToPikkuTypes, pathToAgentTypes, config.globalHTTPPrefix || '');
|
|
30
|
+
await writeFileInDir(logger, config.consoleSchemasFile, schemas);
|
|
31
|
+
await writeFileInDir(logger, config.consoleFunctionsFile, functions);
|
|
32
|
+
await removeLegacyScaffoldFile(config.consoleFunctionsFile);
|
|
29
33
|
return true;
|
|
30
34
|
}
|
|
31
35
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ConsoleGenOutput {
|
|
2
|
+
schemas: string;
|
|
3
|
+
functions: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const serializeConsoleFunctions: (pathToPikkuTypes: string, _pathToAgentTypes: string, globalHTTPPrefix?: string) => ConsoleGenOutput;
|
|
@@ -1,28 +1,62 @@
|
|
|
1
1
|
export const serializeConsoleFunctions = (pathToPikkuTypes, _pathToAgentTypes, globalHTTPPrefix = '') => {
|
|
2
|
-
|
|
2
|
+
const schemas = `/**
|
|
3
|
+
* Auto-generated console function schemas
|
|
4
|
+
* Do not edit manually - regenerate with 'npx pikku'
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod'
|
|
3
7
|
|
|
4
|
-
export const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
8
|
+
export const SecretRef = z.object({ secretId: z.string() })
|
|
9
|
+
|
|
10
|
+
export const SetSecret = z.object({
|
|
11
|
+
secretId: z.string(),
|
|
12
|
+
value: z.unknown(),
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
export const VariableRef = z.object({ variableId: z.string() })
|
|
16
|
+
|
|
17
|
+
export const SetVariable = z.object({
|
|
18
|
+
variableId: z.string(),
|
|
19
|
+
value: z.unknown(),
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export const ValueResult = z.object({
|
|
23
|
+
exists: z.boolean(),
|
|
24
|
+
value: z.unknown().nullable(),
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export const Exists = z.object({ exists: z.boolean() })
|
|
28
|
+
|
|
29
|
+
export const Success = z.object({ success: z.boolean() })
|
|
30
|
+
`;
|
|
31
|
+
const functions = `import { pikkuFunc, defineHTTPRoutes, wireHTTPRoutes, ref, wireAddon } from '${pathToPikkuTypes}'
|
|
32
|
+
import {
|
|
33
|
+
SecretRef,
|
|
34
|
+
SetSecret,
|
|
35
|
+
VariableRef,
|
|
36
|
+
SetVariable,
|
|
37
|
+
ValueResult,
|
|
38
|
+
Exists,
|
|
39
|
+
Success,
|
|
40
|
+
} from './console.schemas.gen.js'
|
|
41
|
+
|
|
42
|
+
export const pikkuConsoleSetSecret = pikkuFunc({
|
|
10
43
|
tags: ['pikku'],
|
|
11
44
|
description: 'Set the value of a secret',
|
|
12
45
|
expose: true,
|
|
46
|
+
input: SetSecret,
|
|
47
|
+
output: Success,
|
|
13
48
|
func: async ({ secrets }, { secretId, value }) => {
|
|
14
49
|
await secrets.setSecret(secretId, value)
|
|
15
50
|
return { success: true }
|
|
16
51
|
},
|
|
17
52
|
})
|
|
18
53
|
|
|
19
|
-
export const pikkuConsoleGetVariable = pikkuFunc
|
|
20
|
-
{ variableId: string },
|
|
21
|
-
{ exists: boolean; value: unknown | null }
|
|
22
|
-
>({
|
|
54
|
+
export const pikkuConsoleGetVariable = pikkuFunc({
|
|
23
55
|
tags: ['pikku'],
|
|
24
56
|
description: 'Get the current value of a variable',
|
|
25
57
|
expose: true,
|
|
58
|
+
input: VariableRef,
|
|
59
|
+
output: ValueResult,
|
|
26
60
|
func: async ({ variables }, { variableId }) => {
|
|
27
61
|
const exists = await variables.has(variableId)
|
|
28
62
|
if (!exists) {
|
|
@@ -38,13 +72,12 @@ export const pikkuConsoleGetVariable = pikkuFunc<
|
|
|
38
72
|
},
|
|
39
73
|
})
|
|
40
74
|
|
|
41
|
-
export const pikkuConsoleSetVariable = pikkuFunc
|
|
42
|
-
{ variableId: string; value: unknown },
|
|
43
|
-
{ success: boolean }
|
|
44
|
-
>({
|
|
75
|
+
export const pikkuConsoleSetVariable = pikkuFunc({
|
|
45
76
|
tags: ['pikku'],
|
|
46
77
|
description: 'Set the value of a variable',
|
|
47
78
|
expose: true,
|
|
79
|
+
input: SetVariable,
|
|
80
|
+
output: Success,
|
|
48
81
|
func: async ({ variables }, { variableId, value }) => {
|
|
49
82
|
if (typeof value === 'string') {
|
|
50
83
|
await variables.set(variableId, value)
|
|
@@ -55,26 +88,24 @@ export const pikkuConsoleSetVariable = pikkuFunc<
|
|
|
55
88
|
},
|
|
56
89
|
})
|
|
57
90
|
|
|
58
|
-
export const pikkuConsoleHasSecret = pikkuFunc
|
|
59
|
-
{ secretId: string },
|
|
60
|
-
{ exists: boolean }
|
|
61
|
-
>({
|
|
91
|
+
export const pikkuConsoleHasSecret = pikkuFunc({
|
|
62
92
|
tags: ['pikku'],
|
|
63
93
|
description: 'Check if a secret exists without reading its value',
|
|
64
94
|
expose: true,
|
|
95
|
+
input: SecretRef,
|
|
96
|
+
output: Exists,
|
|
65
97
|
func: async ({ secrets }, { secretId }) => {
|
|
66
98
|
const exists = await secrets.hasSecret(secretId)
|
|
67
99
|
return { exists }
|
|
68
100
|
},
|
|
69
101
|
})
|
|
70
102
|
|
|
71
|
-
export const pikkuConsoleGetSecret = pikkuFunc
|
|
72
|
-
{ secretId: string },
|
|
73
|
-
{ exists: boolean; value: unknown | null }
|
|
74
|
-
>({
|
|
103
|
+
export const pikkuConsoleGetSecret = pikkuFunc({
|
|
75
104
|
tags: ['pikku'],
|
|
76
105
|
description: 'Get the current value of a secret',
|
|
77
106
|
expose: true,
|
|
107
|
+
input: SecretRef,
|
|
108
|
+
output: ValueResult,
|
|
78
109
|
func: async ({ secrets }, { secretId }) => {
|
|
79
110
|
const exists = await secrets.hasSecret(secretId)
|
|
80
111
|
if (!exists) {
|
|
@@ -107,4 +138,5 @@ export const consoleRoutes = defineHTTPRoutes({
|
|
|
107
138
|
wireAddon({ name: 'console', package: '@pikku/addon-console' })
|
|
108
139
|
wireHTTPRoutes({ basePath: '${globalHTTPPrefix}', routes: { console: consoleRoutes } })
|
|
109
140
|
`;
|
|
141
|
+
return { schemas, functions };
|
|
110
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PikkuCLIConfig } from '../../../../types/config.js';
|
|
2
2
|
import type { CLILogger } from '../../../services/cli-logger.service.js';
|
|
3
|
-
export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
3
|
+
export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
4
4
|
export declare function generateEmailsArtifacts(logger: CLILogger, config: Pick<PikkuCLIConfig, 'outDir'> & {
|
|
5
5
|
emailTemplatesDir?: string;
|
|
6
6
|
}): Promise<true | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type AddonTypesCommandInput = {
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
};
|
|
4
|
-
export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").
|
|
4
|
+
export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
5
5
|
export {};
|
|
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypesSplit: import("#pikku").PikkuFunctionConf
|
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
|
|
4
4
|
bootstrap?: boolean;
|
|
5
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
5
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
|
|
6
6
|
bootstrap?: boolean;
|
|
7
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
7
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypes: import("#pikku").PikkuFunctionConfig<{
|
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
|
|
4
4
|
bootstrap?: boolean;
|
|
5
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
5
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
|
|
6
6
|
bootstrap?: boolean;
|
|
7
|
-
}, void, "rpc" | "session", import("#pikku").
|
|
7
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean) => string;
|
|
2
|
-
export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean, agentScaffoldEnabled?: boolean) => string;
|
|
2
|
+
export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -3,7 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
|
3
3
|
import { checkRequiredTypes } from '../../../utils/check-required-types.js';
|
|
4
4
|
import { writeFileInDir } from '../../../utils/file-writer.js';
|
|
5
5
|
import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
|
|
6
|
-
export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport, addonRequiredParentServices = [], authInjected = false) => {
|
|
6
|
+
export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport, addonRequiredParentServices = [], authInjected = false, agentScaffoldEnabled = false) => {
|
|
7
7
|
// Use pre-aggregated services from inspector state
|
|
8
8
|
// This includes services from:
|
|
9
9
|
// - Wired functions (HTTP, channels, queues, schedulers, MCP, CLI, RPC)
|
|
@@ -40,6 +40,13 @@ export const serializeServicesMap = (allSingletonServices, allWireServices, requ
|
|
|
40
40
|
if (authInjected) {
|
|
41
41
|
usedServices.add('auth');
|
|
42
42
|
}
|
|
43
|
+
// The generated public-agent permission (isThreadOwner) always destructures
|
|
44
|
+
// agentRunService, but agent.gen.ts is written after requiredServices is
|
|
45
|
+
// computed from inspecting hand-written sources, so the inspector never
|
|
46
|
+
// sees that usage — force it required whenever the agent scaffold runs.
|
|
47
|
+
if (agentScaffoldEnabled) {
|
|
48
|
+
usedServices.add('agentRunService');
|
|
49
|
+
}
|
|
43
50
|
// Create singleton services map: all singleton services with true/false based on usage
|
|
44
51
|
const singletonServicesMap = {};
|
|
45
52
|
allSingletonServices.forEach((service) => {
|
|
@@ -111,7 +118,7 @@ export const pikkuServices = pikkuSessionlessFunc({
|
|
|
111
118
|
}
|
|
112
119
|
const servicesImport = `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, singletonServicesType.typePath, config.packageMappings)}'`;
|
|
113
120
|
const wireServicesImport = `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, wireServicesType.typePath, config.packageMappings)}'`;
|
|
114
|
-
const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport, config.addonName ? visitState.addonRequiredParentServices : [], Boolean(visitState.auth?.definition));
|
|
121
|
+
const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport, config.addonName ? visitState.addonRequiredParentServices : [], Boolean(visitState.auth?.definition), Boolean(config.scaffold?.agent));
|
|
115
122
|
await writeFileInDir(logger, config.servicesFile, servicesCode);
|
|
116
123
|
},
|
|
117
124
|
middleware: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").
|
|
1
|
+
export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -4,7 +4,16 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
|
|
|
4
4
|
export const pikkuSchemas = pikkuSessionlessFunc({
|
|
5
5
|
func: async ({ logger, config, getInspectorState }) => {
|
|
6
6
|
const visitState = await getInspectorState();
|
|
7
|
-
|
|
7
|
+
// Bodies missing while functions still DECLARE schemas means the inspection pass
|
|
8
|
+
// was partial. Writing from it would empty register.gen.ts and delete the files
|
|
9
|
+
// behind schemas that are still required — unregistering the whole app off a bad
|
|
10
|
+
// read. Leave the previous output alone.
|
|
11
|
+
//
|
|
12
|
+
// Zero REQUIRED schemas is a different thing entirely and must still be written:
|
|
13
|
+
// that is a project whose last schema was removed, and it is the case where the
|
|
14
|
+
// files left by earlier runs have to be cleared.
|
|
15
|
+
if (visitState.requiredSchemas.size > 0 &&
|
|
16
|
+
Object.keys(visitState.schemas).length === 0) {
|
|
8
17
|
return undefined;
|
|
9
18
|
}
|
|
10
19
|
await saveSchemas(logger, config.schemaDirectory, visitState.schemas, visitState.requiredSchemas, config.schema?.supportsImportAttributes ?? true, config.addonName || null);
|