@pikku/cli 0.12.17 → 0.12.20
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/cli.schema.json +1 -1
- package/console-app/assets/{index-DvrDbftC.css → index-BpY2pSuA.css} +10 -1
- package/console-app/assets/index-DXLy-_D4.js +717 -0
- package/console-app/index.html +2 -2
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- 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.js +11 -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-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 +29 -2
- 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 +1 -1
- 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 +274 -123
- package/dist/.pikku/function/pikku-functions.gen.js +5 -1
- 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/http/pikku-http-wirings-meta.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +62 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +2 -1
- package/dist/.pikku/http/pikku-http-wirings.gen.js +2 -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 +2 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +2 -1
- 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 +7 -6
- package/dist/.pikku/pikku-services.gen.js +5 -4
- 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 +12 -4
- 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 +27 -7
- package/dist/.pikku/schemas/schemas/DevInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/GraphStarterInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/GraphStarterOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/WorkflowRunStatus.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowRunnerInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowStarterInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowStarterOutput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowStatusCheckerInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowStatusStreamFullInput.schema.json +1 -0
- package/dist/.pikku/schemas/schemas/WorkflowStatusStreamInput.schema.json +1 -0
- 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 +911 -0
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +5 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -4
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +5 -2
- package/dist/src/cli.wiring.js +25 -0
- package/dist/src/deploy/analyzer/analyzer.d.ts +1 -0
- package/dist/src/deploy/analyzer/analyzer.js +18 -15
- package/dist/src/deploy/codegen/per-unit-codegen.js +3 -3
- package/dist/src/functions/commands/all.js +2 -186
- package/dist/src/functions/commands/bootstrap.js +10 -10
- package/dist/src/functions/commands/console.js +1 -1
- package/dist/src/functions/commands/dev.d.ts +13 -0
- package/dist/src/functions/commands/dev.js +187 -0
- package/dist/src/functions/commands/versions-update.js +7 -3
- package/dist/src/functions/commands/watch.js +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -0
- package/dist/src/functions/wirings/rpc/pikku-command-react-query.js +33 -0
- package/dist/src/functions/wirings/rpc/serialize-react-query-hooks.d.ts +1 -0
- package/dist/src/functions/wirings/rpc/serialize-react-query-hooks.js +108 -0
- package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
- package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +6 -4
- package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +128 -29
- package/dist/src/functions/workflows/all.workflow.d.ts +1 -0
- package/dist/src/functions/workflows/all.workflow.js +207 -0
- package/dist/src/scaffold/rpc-remote.gen.js +1 -1
- package/dist/src/scaffold/workflow-routes.gen.d.ts +84 -0
- package/dist/src/scaffold/workflow-routes.gen.js +197 -0
- package/dist/src/services.js +2 -0
- package/dist/src/utils/pikku-cli-config.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -4
- package/console-app/assets/index-CzMWJFqj.js +0 -700
- package/dist/.pikku/agent/pikku-agent-wirings-meta.gen.d.ts +0 -1
- package/dist/.pikku/agent/pikku-agent-wirings-meta.gen.js +0 -6
- package/dist/.pikku/agent/pikku-agent-wirings-meta.gen.json +0 -3
- package/dist/.pikku/agent/pikku-agent-wirings.gen.d.ts +0 -4
- package/dist/.pikku/agent/pikku-agent-wirings.gen.js +0 -4
- package/dist/.pikku/channel/pikku-channels-meta.gen.d.ts +0 -1
- package/dist/.pikku/channel/pikku-channels-meta.gen.js +0 -6
- package/dist/.pikku/channel/pikku-channels-meta.gen.json +0 -1
- package/dist/.pikku/channel/pikku-channels.gen.d.ts +0 -4
- package/dist/.pikku/channel/pikku-channels.gen.js +0 -5
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.d.ts +0 -1
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +0 -8
- package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +0 -5
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +0 -4
- package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +0 -5
- package/dist/.pikku/pikku-websocket.gen.d.ts +0 -45
- package/dist/.pikku/pikku-websocket.gen.js +0 -63
- 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 -1
- 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/rpc/pikku-remote-rpc-workers.gen.d.ts +0 -17
- package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +0 -25
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.d.ts +0 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +0 -6
- package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +0 -1
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +0 -4
- package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +0 -5
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This file was generated by @pikku/cli@0.12.
|
|
2
|
+
* This file was generated by @pikku/cli@0.12.20
|
|
3
3
|
*/
|
|
4
4
|
import { pikkuState } from '@pikku/core/internal';
|
|
5
|
-
|
|
5
|
+
import allWorkflowMeta from './meta/allWorkflow.gen.json' with { type: 'json' };
|
|
6
|
+
const workflowsMeta = {
|
|
7
|
+
'allWorkflow': allWorkflowMeta,
|
|
8
|
+
};
|
|
6
9
|
pikkuState(null, 'workflows', 'meta', workflowsMeta);
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export {};
|
|
2
1
|
/**
|
|
3
|
-
* This file was generated by @pikku/cli@0.12.
|
|
2
|
+
* This file was generated by @pikku/cli@0.12.20
|
|
4
3
|
*/
|
|
4
|
+
import { addWorkflow } from '@pikku/core/workflow';
|
|
5
|
+
import './pikku-workflow-wirings-meta.gen.js';
|
|
6
|
+
import { allWorkflow } from '../../src/functions/workflows/all.workflow.js';
|
|
7
|
+
addWorkflow('allWorkflow', allWorkflow);
|
package/dist/src/cli.wiring.js
CHANGED
|
@@ -2,6 +2,7 @@ import { pikkuSchemas } from './functions/wirings/functions/schemas.js';
|
|
|
2
2
|
import { pikkuFetch } from './functions/runtimes/fetch/index.js';
|
|
3
3
|
import { pikkuWebSocketTyped } from './functions/runtimes/websocket/pikku-command-websocket-typed.js';
|
|
4
4
|
import { pikkuRPCClient } from './functions/wirings/rpc/pikku-command-rpc-client.js';
|
|
5
|
+
import { pikkuReactQuery } from './functions/wirings/rpc/pikku-command-react-query.js';
|
|
5
6
|
import { pikkuQueueService } from './functions/wirings/queue/pikku-command-queue-service.js';
|
|
6
7
|
import { pikkuOpenAPI } from './functions/wirings/http/pikku-command-openapi.js';
|
|
7
8
|
import { pikkuNext } from './functions/runtimes/nextjs/pikku-command-nextjs.js';
|
|
@@ -10,6 +11,7 @@ import { all } from './functions/commands/all.js';
|
|
|
10
11
|
import { bootstrap } from './functions/commands/bootstrap.js';
|
|
11
12
|
import { watch } from './functions/commands/watch.js';
|
|
12
13
|
import { consoleCommand } from './functions/commands/console.js';
|
|
14
|
+
import { dev } from './functions/commands/dev.js';
|
|
13
15
|
import { pikkuVersionsInit } from './functions/commands/versions-init.js';
|
|
14
16
|
import { pikkuVersionsCheck } from './functions/commands/versions-check.js';
|
|
15
17
|
import { pikkuVersionsUpdate } from './functions/commands/versions-update.js';
|
|
@@ -101,6 +103,25 @@ wireCLI({
|
|
|
101
103
|
},
|
|
102
104
|
},
|
|
103
105
|
}),
|
|
106
|
+
dev: pikkuCLICommand({
|
|
107
|
+
func: dev,
|
|
108
|
+
description: 'Start a local development server with all services wired',
|
|
109
|
+
options: {
|
|
110
|
+
port: {
|
|
111
|
+
description: 'Port for the dev server',
|
|
112
|
+
default: '3000',
|
|
113
|
+
short: 'p',
|
|
114
|
+
},
|
|
115
|
+
watch: {
|
|
116
|
+
description: 'Watch for file changes and regenerate',
|
|
117
|
+
default: true,
|
|
118
|
+
},
|
|
119
|
+
hmr: {
|
|
120
|
+
description: 'Enable hot module reload',
|
|
121
|
+
default: true,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
}),
|
|
104
125
|
console: pikkuCLICommand({
|
|
105
126
|
func: consoleCommand,
|
|
106
127
|
description: 'Start the Pikku Console UI with live file watching',
|
|
@@ -137,6 +158,10 @@ wireCLI({
|
|
|
137
158
|
func: pikkuRPCClient,
|
|
138
159
|
description: 'Generate RPC client wrappers',
|
|
139
160
|
}),
|
|
161
|
+
'react-query': pikkuCLICommand({
|
|
162
|
+
func: pikkuReactQuery,
|
|
163
|
+
description: 'Generate React Query hooks from RPC map',
|
|
164
|
+
}),
|
|
140
165
|
'queue-service': pikkuCLICommand({
|
|
141
166
|
func: pikkuQueueService,
|
|
142
167
|
description: 'Generate queue service wrapper',
|
|
@@ -71,7 +71,7 @@ export function analyzeDeployment(state, options) {
|
|
|
71
71
|
handlers.push({ type: 'queue', queueName: queueMeta.name ?? queueName });
|
|
72
72
|
queues.push({
|
|
73
73
|
name: queueMeta.name ?? queueName,
|
|
74
|
-
consumerUnit:
|
|
74
|
+
consumerUnit: toSafeKebab(funcId),
|
|
75
75
|
consumerFunctionId: funcId,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
@@ -87,7 +87,7 @@ export function analyzeDeployment(state, options) {
|
|
|
87
87
|
scheduledTasks.push({
|
|
88
88
|
name: schedMeta.name,
|
|
89
89
|
schedule: schedMeta.schedule,
|
|
90
|
-
unitName:
|
|
90
|
+
unitName: toSafeKebab(funcId),
|
|
91
91
|
functionId: funcId,
|
|
92
92
|
});
|
|
93
93
|
}
|
|
@@ -129,7 +129,7 @@ export function analyzeDeployment(state, options) {
|
|
|
129
129
|
continue;
|
|
130
130
|
}
|
|
131
131
|
units.push({
|
|
132
|
-
name:
|
|
132
|
+
name: toSafeKebab(funcId),
|
|
133
133
|
role: 'function',
|
|
134
134
|
target: resolveDeployTarget(funcMeta, serverlessIncompatible),
|
|
135
135
|
functionIds: [funcId],
|
|
@@ -143,10 +143,10 @@ export function analyzeDeployment(state, options) {
|
|
|
143
143
|
for (const [agentName, agentMeta] of entries(state.agents.agentsMeta)) {
|
|
144
144
|
const toolIds = agentMeta.tools ?? [];
|
|
145
145
|
const subAgentNames = agentMeta.agents ?? [];
|
|
146
|
-
const unitName = `agent-${
|
|
146
|
+
const unitName = `agent-${toSafeKebab(agentName)}`;
|
|
147
147
|
// Agent gateway depends on its tool function units
|
|
148
|
-
const toolUnitNames = toolIds.map((id) =>
|
|
149
|
-
const subAgentUnitNames = subAgentNames.map((sa) => `agent-${
|
|
148
|
+
const toolUnitNames = toolIds.map((id) => toSafeKebab(id));
|
|
149
|
+
const subAgentUnitNames = subAgentNames.map((sa) => `agent-${toSafeKebab(sa)}`);
|
|
150
150
|
// Agent needs AI services
|
|
151
151
|
const agentServices = [
|
|
152
152
|
{ capability: 'ai-model', sourceServiceName: 'aiAgentRunner' },
|
|
@@ -209,7 +209,7 @@ export function analyzeDeployment(state, options) {
|
|
|
209
209
|
const allMcpIds = [...mcpToolIds, ...mcpResourceIds, ...mcpPromptIds];
|
|
210
210
|
if (allMcpIds.length > 0) {
|
|
211
211
|
const unitName = 'mcp-server';
|
|
212
|
-
const mcpFuncUnitNames = allMcpIds.map((id) =>
|
|
212
|
+
const mcpFuncUnitNames = allMcpIds.map((id) => toSafeKebab(id));
|
|
213
213
|
units.push({
|
|
214
214
|
name: unitName,
|
|
215
215
|
role: 'mcp',
|
|
@@ -232,8 +232,8 @@ export function analyzeDeployment(state, options) {
|
|
|
232
232
|
const funcIds = collectChannelFunctionIds(channelMeta);
|
|
233
233
|
if (funcIds.length === 0)
|
|
234
234
|
continue;
|
|
235
|
-
const unitName = `channel-${
|
|
236
|
-
const funcUnitNames = funcIds.map((id) =>
|
|
235
|
+
const unitName = `channel-${toSafeKebab(channelName)}`;
|
|
236
|
+
const funcUnitNames = funcIds.map((id) => toSafeKebab(id));
|
|
237
237
|
units.push({
|
|
238
238
|
name: unitName,
|
|
239
239
|
role: 'channel',
|
|
@@ -346,7 +346,7 @@ function buildWorkflows(graphMeta, _functionsMeta, _httpMeta, units, workflows,
|
|
|
346
346
|
continue;
|
|
347
347
|
if (!('rpcName' in node))
|
|
348
348
|
continue;
|
|
349
|
-
const stepUnitName =
|
|
349
|
+
const stepUnitName = toSafeKebab(node.rpcName);
|
|
350
350
|
const isAsync = node.options?.async === true;
|
|
351
351
|
const isInline = !isAsync && graph.inline === true;
|
|
352
352
|
steps.push({
|
|
@@ -358,7 +358,7 @@ function buildWorkflows(graphMeta, _functionsMeta, _httpMeta, units, workflows,
|
|
|
358
358
|
stepUnitNames.push(stepUnitName);
|
|
359
359
|
}
|
|
360
360
|
// Build orchestrator unit — no function code, just orchestration
|
|
361
|
-
const orchUnitName = `wf-${
|
|
361
|
+
const orchUnitName = `wf-${toSafeKebab(graph.name)}`;
|
|
362
362
|
const orchServices = [
|
|
363
363
|
{ capability: 'workflow-state', sourceServiceName: 'workflowService' },
|
|
364
364
|
{ capability: 'queue', sourceServiceName: 'queueService' },
|
|
@@ -387,7 +387,7 @@ function buildWorkflows(graphMeta, _functionsMeta, _httpMeta, units, workflows,
|
|
|
387
387
|
},
|
|
388
388
|
];
|
|
389
389
|
// Orchestrator queue — the orchestrator consumes from this
|
|
390
|
-
const orchQueueName = `wf-orchestrator-${
|
|
390
|
+
const orchQueueName = `wf-orchestrator-${toSafeKebab(graph.name)}`;
|
|
391
391
|
const orchHandlers = [
|
|
392
392
|
{ type: 'fetch', routes: wfRoutes },
|
|
393
393
|
{ type: 'queue', queueName: orchQueueName },
|
|
@@ -413,10 +413,10 @@ function buildWorkflows(graphMeta, _functionsMeta, _httpMeta, units, workflows,
|
|
|
413
413
|
for (const step of steps) {
|
|
414
414
|
if (step.inline || !step.functionId)
|
|
415
415
|
continue;
|
|
416
|
-
const stepQueueName = `wf-step-${
|
|
416
|
+
const stepQueueName = `wf-step-${toSafeKebab(step.functionId)}`;
|
|
417
417
|
queues.push({
|
|
418
418
|
name: stepQueueName,
|
|
419
|
-
consumerUnit:
|
|
419
|
+
consumerUnit: toSafeKebab(step.functionId),
|
|
420
420
|
consumerFunctionId: `pikkuWorkflowWorker:${step.functionId}`,
|
|
421
421
|
});
|
|
422
422
|
}
|
|
@@ -523,10 +523,13 @@ function collectChannelFunctionIds(channelMeta) {
|
|
|
523
523
|
// ---------------------------------------------------------------------------
|
|
524
524
|
// Naming helpers
|
|
525
525
|
// ---------------------------------------------------------------------------
|
|
526
|
-
function
|
|
526
|
+
export function toSafeKebab(str) {
|
|
527
527
|
return str
|
|
528
528
|
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
529
529
|
.replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
|
|
530
|
+
.replace(/[:/\\]/g, '-')
|
|
531
|
+
.replace(/--+/g, '-')
|
|
532
|
+
.replace(/^-|-$/g, '')
|
|
530
533
|
.toLowerCase();
|
|
531
534
|
}
|
|
532
535
|
function fromKebab(str) {
|
|
@@ -14,6 +14,7 @@ import { tmpdir } from 'node:os';
|
|
|
14
14
|
import { randomBytes } from 'node:crypto';
|
|
15
15
|
import { promisify } from 'node:util';
|
|
16
16
|
import { serializeInspectorState } from '@pikku/inspector';
|
|
17
|
+
import { toSafeKebab } from '../analyzer/analyzer.js';
|
|
17
18
|
const execFileAsync = promisify(execFile);
|
|
18
19
|
/**
|
|
19
20
|
* Resolve the pikku CLI binary path.
|
|
@@ -122,12 +123,11 @@ function collectFilterNames(unit, manifest, inspectorState) {
|
|
|
122
123
|
names.add('http:get:/workflow/:workflowName/status/:runId/stream');
|
|
123
124
|
names.add('http:post:/workflow/:workflowName/graph/:nodeId');
|
|
124
125
|
// Queue names for orchestrator and step workers
|
|
125
|
-
|
|
126
|
-
names.add(`wf-orchestrator-${toKebab(wfDef.name)}`);
|
|
126
|
+
names.add(`wf-orchestrator-${toSafeKebab(wfDef.name)}`);
|
|
127
127
|
for (const step of wfDef.steps) {
|
|
128
128
|
if (step.functionId) {
|
|
129
129
|
names.add(step.functionId);
|
|
130
|
-
names.add(`wf-step-${
|
|
130
|
+
names.add(`wf-step-${toSafeKebab(step.functionId)}`);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
}
|
|
@@ -1,191 +1,7 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
2
1
|
import { pikkuVoidFunc } from '#pikku';
|
|
3
|
-
const scaffoldFiles = (config) => {
|
|
4
|
-
const files = [];
|
|
5
|
-
if (config.scaffold?.rpc && config.publicRpcFile)
|
|
6
|
-
files.push({ file: config.publicRpcFile, generator: 'pikkuPublicRPC' });
|
|
7
|
-
if (config.scaffold?.console && config.consoleFunctionsFile)
|
|
8
|
-
files.push({
|
|
9
|
-
file: config.consoleFunctionsFile,
|
|
10
|
-
generator: 'pikkuConsoleFunctions',
|
|
11
|
-
});
|
|
12
|
-
if (config.scaffold?.agent && config.publicAgentFile)
|
|
13
|
-
files.push({
|
|
14
|
-
file: config.publicAgentFile,
|
|
15
|
-
generator: 'pikkuPublicAgent',
|
|
16
|
-
});
|
|
17
|
-
return files;
|
|
18
|
-
};
|
|
19
2
|
export const all = pikkuVoidFunc({
|
|
20
3
|
remote: true,
|
|
21
|
-
func: async (
|
|
22
|
-
|
|
23
|
-
let typesDeclarationFileExists = true;
|
|
24
|
-
if (!existsSync(config.outDir)) {
|
|
25
|
-
logger.debug(`• .pikku directory not found, running bootstrap first...`);
|
|
26
|
-
await getInspectorState(false, false, true);
|
|
27
|
-
await rpc.invoke('pikkuFunctionTypes', null);
|
|
28
|
-
await rpc.invoke('pikkuFunctionTypesSplit', null);
|
|
29
|
-
await rpc.invoke('pikkuHTTPTypes', null);
|
|
30
|
-
await rpc.invoke('pikkuChannelTypes', null);
|
|
31
|
-
await rpc.invoke('pikkuSchedulerTypes', null);
|
|
32
|
-
await rpc.invoke('pikkuQueueTypes', null);
|
|
33
|
-
await rpc.invoke('pikkuWorkflow', null);
|
|
34
|
-
await rpc.invoke('pikkuMCPTypes', null);
|
|
35
|
-
await rpc.invoke('pikkuAIAgentTypes', null);
|
|
36
|
-
await rpc.invoke('pikkuCLITypes', null);
|
|
37
|
-
await getInspectorState(true);
|
|
38
|
-
}
|
|
39
|
-
if (!existsSync(config.typesDeclarationFile)) {
|
|
40
|
-
typesDeclarationFileExists = false;
|
|
41
|
-
}
|
|
42
|
-
const missingScaffolds = scaffoldFiles(config).filter((s) => !existsSync(s.file));
|
|
43
|
-
if (missingScaffolds.length > 0) {
|
|
44
|
-
for (const { generator } of missingScaffolds) {
|
|
45
|
-
await rpc.invoke(generator, null);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
await rpc.invoke('pikkuFunctionTypes', null);
|
|
49
|
-
if (!typesDeclarationFileExists || missingScaffolds.length > 0) {
|
|
50
|
-
logger.debug(`• Type file or scaffolds first created, inspecting again...`);
|
|
51
|
-
await getInspectorState(true);
|
|
52
|
-
}
|
|
53
|
-
await rpc.invoke('pikkuFunctionTypesSplit', null);
|
|
54
|
-
await rpc.invoke('pikkuTriggerTypes', null);
|
|
55
|
-
await rpc.invoke('pikkuAIAgentTypes', null);
|
|
56
|
-
if (!config.addon) {
|
|
57
|
-
await rpc.invoke('pikkuHTTPTypes', null);
|
|
58
|
-
await rpc.invoke('pikkuChannelTypes', null);
|
|
59
|
-
await rpc.invoke('pikkuSchedulerTypes', null);
|
|
60
|
-
await rpc.invoke('pikkuQueueTypes', null);
|
|
61
|
-
await rpc.invoke('pikkuMCPTypes', null);
|
|
62
|
-
await rpc.invoke('pikkuCLITypes', null);
|
|
63
|
-
}
|
|
64
|
-
const middleware = await rpc.invoke('pikkuMiddleware', null);
|
|
65
|
-
if (middleware) {
|
|
66
|
-
allImports.push(config.middlewareFile);
|
|
67
|
-
}
|
|
68
|
-
const permissions = await rpc.invoke('pikkuPermissions', null);
|
|
69
|
-
if (permissions) {
|
|
70
|
-
allImports.push(config.permissionsFile);
|
|
71
|
-
}
|
|
72
|
-
await rpc.invoke('pikkuServices', null);
|
|
73
|
-
const hasPackageFactories = await rpc.invoke('pikkuPackage', null);
|
|
74
|
-
if (hasPackageFactories) {
|
|
75
|
-
allImports.push(config.packageFile);
|
|
76
|
-
}
|
|
77
|
-
const hasInternalRPCs = await rpc.invoke('pikkuRPC', null);
|
|
78
|
-
const agents = await rpc.invoke('pikkuAIAgent', null);
|
|
79
|
-
if (agents) {
|
|
80
|
-
allImports.push(config.agentWiringMetaFile, config.agentWiringsFile);
|
|
81
|
-
if (config.scaffold?.agent) {
|
|
82
|
-
await rpc.invoke('pikkuPublicAgent', null);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
await rpc.invoke('pikkuPublicRPC', null);
|
|
86
|
-
await rpc.invoke('pikkuConsoleFunctions', null);
|
|
87
|
-
await rpc.invoke('pikkuNodeTypes', null);
|
|
88
|
-
await rpc.invoke('pikkuSecretDefinitionTypes', null);
|
|
89
|
-
await rpc.invoke('pikkuSecrets', null);
|
|
90
|
-
await rpc.invoke('pikkuCredentials', null);
|
|
91
|
-
await rpc.invoke('pikkuVariableDefinitionTypes', null);
|
|
92
|
-
await rpc.invoke('pikkuVariables', null);
|
|
93
|
-
await rpc.invoke('pikkuAddonTypes', null);
|
|
94
|
-
if (hasInternalRPCs) {
|
|
95
|
-
allImports.push(config.rpcInternalWiringMetaFile);
|
|
96
|
-
}
|
|
97
|
-
if (agents || !config.addon) {
|
|
98
|
-
await getInspectorState(true);
|
|
99
|
-
}
|
|
100
|
-
const schemas = await rpc.invoke('pikkuSchemas', null);
|
|
101
|
-
if (schemas) {
|
|
102
|
-
allImports.push(`${config.schemaDirectory}/register.gen.ts`);
|
|
103
|
-
}
|
|
104
|
-
await rpc.invoke('pikkuRPCInternalMap', null);
|
|
105
|
-
await rpc.invoke('pikkuRPCExposedMap', null);
|
|
106
|
-
const workflows = await rpc.invoke('pikkuWorkflow', null);
|
|
107
|
-
let remoteRPC = false;
|
|
108
|
-
let workflowRoutes = false;
|
|
109
|
-
if (!config.addon) {
|
|
110
|
-
remoteRPC = await rpc.invoke('pikkuRemoteRPC', null);
|
|
111
|
-
if (workflows) {
|
|
112
|
-
workflowRoutes = await rpc.invoke('pikkuWorkflowRoutes', null);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
if (workflows || remoteRPC || workflowRoutes) {
|
|
116
|
-
await getInspectorState(true);
|
|
117
|
-
await rpc.invoke('pikkuSchemas', null);
|
|
118
|
-
}
|
|
119
|
-
if (!config.addon) {
|
|
120
|
-
const http = await rpc.invoke('pikkuHTTP', null);
|
|
121
|
-
if (http) {
|
|
122
|
-
await rpc.invoke('pikkuHTTPMap', null);
|
|
123
|
-
await rpc.invoke('pikkuFetch', null);
|
|
124
|
-
await rpc.invoke('pikkuRPCClient', null);
|
|
125
|
-
allImports.push(config.httpWiringMetaFile, config.httpWiringsFile);
|
|
126
|
-
}
|
|
127
|
-
const scheduler = await rpc.invoke('pikkuScheduler', null);
|
|
128
|
-
if (scheduler) {
|
|
129
|
-
allImports.push(config.schedulersWiringMetaFile, config.schedulersWiringFile);
|
|
130
|
-
}
|
|
131
|
-
const triggers = await rpc.invoke('pikkuTrigger', null);
|
|
132
|
-
if (triggers) {
|
|
133
|
-
allImports.push(config.triggersWiringMetaFile, config.triggerSourcesMetaFile, config.triggersWiringFile);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const hasFunctionRegistrations = await rpc.invoke('pikkuFunctions', null);
|
|
137
|
-
allImports.push(config.functionsMetaFile);
|
|
138
|
-
if (hasFunctionRegistrations) {
|
|
139
|
-
allImports.push(config.functionsFile);
|
|
140
|
-
}
|
|
141
|
-
if (workflows) {
|
|
142
|
-
allImports.push(config.workflowsWiringFile);
|
|
143
|
-
}
|
|
144
|
-
if (!config.addon) {
|
|
145
|
-
const queues = await rpc.invoke('pikkuQueue', null);
|
|
146
|
-
if (queues) {
|
|
147
|
-
await rpc.invoke('pikkuQueueMap', null);
|
|
148
|
-
await rpc.invoke('pikkuQueueService', null);
|
|
149
|
-
allImports.push(config.queueWorkersWiringMetaFile, config.queueWorkersWiringFile);
|
|
150
|
-
}
|
|
151
|
-
const channels = await rpc.invoke('pikkuChannels', null);
|
|
152
|
-
if (channels) {
|
|
153
|
-
await rpc.invoke('pikkuChannelsMap', null);
|
|
154
|
-
await rpc.invoke('pikkuWebSocketTyped', null);
|
|
155
|
-
allImports.push(config.channelsWiringMetaFile, config.channelsWiringFile);
|
|
156
|
-
}
|
|
157
|
-
const gateways = await rpc.invoke('pikkuGateway', null);
|
|
158
|
-
if (gateways) {
|
|
159
|
-
allImports.push(config.gatewaysWiringFile);
|
|
160
|
-
}
|
|
161
|
-
const mcp = await rpc.invoke('pikkuMCP', null);
|
|
162
|
-
if (mcp) {
|
|
163
|
-
await rpc.invoke('pikkuMCPJSON', null);
|
|
164
|
-
allImports.push(config.mcpWiringsMetaFile, config.mcpWiringsFile);
|
|
165
|
-
}
|
|
166
|
-
const cli = await rpc.invoke('pikkuCLI', null);
|
|
167
|
-
if (cli) {
|
|
168
|
-
await rpc.invoke('pikkuCLIEntry', null);
|
|
169
|
-
allImports.push(config.cliWiringMetaFile, config.cliWiringsFile);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
await rpc.invoke('pikkuNodesMeta', null);
|
|
173
|
-
if (config.clientFiles?.nextBackendFile ||
|
|
174
|
-
config.clientFiles?.nextHTTPFile) {
|
|
175
|
-
await rpc.invoke('pikkuNext', null);
|
|
176
|
-
}
|
|
177
|
-
if (config.openAPI) {
|
|
178
|
-
logger.debug(`• OpenAPI requires a reinspection to pickup new generated types..`);
|
|
179
|
-
await getInspectorState(true);
|
|
180
|
-
await rpc.invoke('pikkuOpenAPI', null);
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
await rpc.invoke('pikkuVersionsUpdate', null);
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
logger.warn(`Run 'pikku versions init' to enable contract versioning.`);
|
|
187
|
-
}
|
|
188
|
-
await rpc.invoke('pikkuBootstrap', { allImports });
|
|
189
|
-
await rpc.invoke('pikkuSummary', null);
|
|
4
|
+
func: async (services, _data, { rpc }) => {
|
|
5
|
+
await services.workflowService.runToCompletion('allWorkflow', {}, rpc);
|
|
190
6
|
},
|
|
191
7
|
});
|
|
@@ -3,16 +3,16 @@ export const bootstrap = pikkuVoidFunc({
|
|
|
3
3
|
remote: true,
|
|
4
4
|
func: async ({ logger, getInspectorState }, _data, { rpc }) => {
|
|
5
5
|
await getInspectorState(false, false, true);
|
|
6
|
-
await rpc.invoke('pikkuFunctionTypes'
|
|
7
|
-
await rpc.invoke('pikkuFunctionTypesSplit'
|
|
8
|
-
await rpc.invoke('pikkuHTTPTypes'
|
|
9
|
-
await rpc.invoke('pikkuChannelTypes'
|
|
10
|
-
await rpc.invoke('pikkuSchedulerTypes'
|
|
11
|
-
await rpc.invoke('pikkuQueueTypes'
|
|
12
|
-
await rpc.invoke('pikkuWorkflow'
|
|
13
|
-
await rpc.invoke('pikkuMCPTypes'
|
|
14
|
-
await rpc.invoke('pikkuAIAgentTypes'
|
|
15
|
-
await rpc.invoke('pikkuCLITypes'
|
|
6
|
+
await rpc.invoke('pikkuFunctionTypes');
|
|
7
|
+
await rpc.invoke('pikkuFunctionTypesSplit');
|
|
8
|
+
await rpc.invoke('pikkuHTTPTypes');
|
|
9
|
+
await rpc.invoke('pikkuChannelTypes');
|
|
10
|
+
await rpc.invoke('pikkuSchedulerTypes');
|
|
11
|
+
await rpc.invoke('pikkuQueueTypes');
|
|
12
|
+
await rpc.invoke('pikkuWorkflow');
|
|
13
|
+
await rpc.invoke('pikkuMCPTypes');
|
|
14
|
+
await rpc.invoke('pikkuAIAgentTypes');
|
|
15
|
+
await rpc.invoke('pikkuCLITypes');
|
|
16
16
|
if (logger.hasCriticalErrors()) {
|
|
17
17
|
process.exit(1);
|
|
18
18
|
}
|
|
@@ -88,7 +88,7 @@ export const consoleCommand = pikkuSessionlessFunc({
|
|
|
88
88
|
const handle = async () => {
|
|
89
89
|
try {
|
|
90
90
|
const start = Date.now();
|
|
91
|
-
await rpc.invoke('all'
|
|
91
|
+
await rpc.invoke('all');
|
|
92
92
|
logger.info({
|
|
93
93
|
message: `✓ Generated in ${Date.now() - start}ms`,
|
|
94
94
|
type: 'timing',
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const dev: import("#pikku").PikkuFunctionConfig<{
|
|
2
|
+
port?: string;
|
|
3
|
+
watch?: boolean;
|
|
4
|
+
hmr?: boolean;
|
|
5
|
+
}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
|
|
6
|
+
port?: string;
|
|
7
|
+
watch?: boolean;
|
|
8
|
+
hmr?: boolean;
|
|
9
|
+
}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
|
|
10
|
+
port?: string;
|
|
11
|
+
watch?: boolean;
|
|
12
|
+
hmr?: boolean;
|
|
13
|
+
}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
|