@pikku/cli 0.12.27 → 0.12.29

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.
Files changed (89) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/index-ClGe-ul_.js +229 -0
  3. package/console-app/assets/{index-CQ29NRyR.css → index-DwUzVI5k.css} +1 -1
  4. package/console-app/index.html +2 -2
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  6. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  7. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  8. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  9. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  10. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  12. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  13. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  14. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  15. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  16. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  17. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  18. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  19. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  20. package/dist/.pikku/function/pikku-functions-meta.gen.json +183 -161
  21. package/dist/.pikku/function/pikku-functions.gen.js +5 -1
  22. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  23. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  24. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  25. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  26. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  27. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  28. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  29. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  30. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  31. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  32. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  33. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  34. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  35. package/dist/.pikku/pikku-types.gen.js +1 -1
  36. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  37. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  38. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  39. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +8 -0
  40. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  41. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  42. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  43. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +6 -5
  44. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  45. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  46. package/dist/.pikku/schemas/register.gen.js +9 -9
  47. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  48. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  49. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  50. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  51. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  52. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  53. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  54. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  55. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  56. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  57. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  58. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +15 -3
  59. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  60. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  61. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  62. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  63. package/dist/bin/pikku-bin.mjs +2 -2
  64. package/dist/src/fabric/functions/validate-core.js +65 -0
  65. package/dist/src/fabric/functions/validate.function.js +23 -7
  66. package/dist/src/functions/commands/dev.js +8 -8
  67. package/dist/src/functions/commands/tests-coverage.js +4 -2
  68. package/dist/src/functions/db/annotation-parser.d.ts +7 -7
  69. package/dist/src/functions/db/annotation-parser.js +61 -11
  70. package/dist/src/functions/db/db-codegen.d.ts +4 -0
  71. package/dist/src/functions/db/db-codegen.js +117 -15
  72. package/dist/src/functions/db/local-db.d.ts +14 -1
  73. package/dist/src/functions/db/local-db.js +151 -37
  74. package/dist/src/functions/db/postgres/postgres-introspector.d.ts +8 -2
  75. package/dist/src/functions/db/postgres/postgres-introspector.js +26 -14
  76. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +1 -0
  77. package/dist/src/functions/wirings/auth/pikku-command-auth.js +22 -0
  78. package/dist/src/functions/wirings/auth/serialize-auth-gen.d.ts +1 -0
  79. package/dist/src/functions/wirings/auth/serialize-auth-gen.js +115 -0
  80. package/dist/src/functions/workflows/all.workflow.js +1 -0
  81. package/dist/src/scaffold/rpc-remote.gen.js +1 -1
  82. package/dist/src/utils/pikku-cli-config.js +3 -0
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +7 -4
  85. package/skills/pikku-auth-js/SKILL.md +137 -117
  86. package/skills/pikku-middleware/SKILL.md +2 -2
  87. package/skills/pikku-services/SKILL.md +44 -7
  88. package/skills/pikku-workflow/SKILL.md +22 -0
  89. package/console-app/assets/index-BERGDBO9.js +0 -228
@@ -1,5 +1,8 @@
1
- import { existsSync, mkdirSync, rmSync } from 'node:fs';
1
+ import { existsSync, mkdirSync, rmSync, writeFileSync, readFileSync, } from 'node:fs';
2
2
  import { resolve, isAbsolute, relative, dirname, join } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { createRequire } from 'node:module';
5
+ import { fileURLToPath } from 'node:url';
3
6
  import { migrate } from './db-migrator.js';
4
7
  import { generateSchemaTypes } from './db-codegen.js';
5
8
  import { generateZodTypes } from './zod-codegen.js';
@@ -12,17 +15,33 @@ import { seed as runSeed } from './sqlite/seed.js';
12
15
  import { PostgresMigrationExecutor } from './postgres/postgres-migrator.js';
13
16
  import { PostgresIntrospector } from './postgres/postgres-introspector.js';
14
17
  // ─── Resolution ───────────────────────────────────────────────────────────────
18
+ /**
19
+ * Parse a DATABASE_URL string into the subset of UserConfigShape that resolveDb understands.
20
+ * - postgres(ql):// → { postgresUrl }
21
+ * - libsql:// or http(s):// → {} (remote, not handled by the CLI layer)
22
+ * - anything else → { sqliteDb } (local file path)
23
+ */
24
+ export function parseDatabaseUrl(url) {
25
+ if (/^postgres(ql)?:\/\//.test(url))
26
+ return { postgresUrl: url };
27
+ if (/^(libsql|https?):\/\//.test(url))
28
+ return {};
29
+ return { sqliteDb: url };
30
+ }
15
31
  /**
16
32
  * Resolve a UserConfigShape into an absolute-path descriptor.
17
33
  * Returns null when neither sqliteDb nor postgresUrl is configured.
18
34
  */
19
35
  export function resolveDb(userConfig, rootDir, outDir, runtimeDir) {
20
- const base = (sub, seedFileName) => ({
36
+ const base = (sub) => ({
37
+ rootDir,
21
38
  migrationsDir: resolveAgainst(rootDir, sub),
22
- seedFile: resolveAgainst(rootDir, seedFileName),
23
39
  schemaFile: join(outDir, 'db', 'schema.d.ts'),
24
40
  coercionFile: join(outDir, 'db', 'coercion.gen.ts'),
25
41
  manifestFile: join(outDir, 'db', 'classification.gen.ts'),
42
+ classificationMapFile: join(outDir, 'db', 'classification-map.gen.d.ts'),
43
+ classificationsFile: join(rootDir, 'db', 'annotations.ts'),
44
+ classificationsGenJsonFile: join(outDir, 'db', 'annotations.gen.json'),
26
45
  zodFile: join(outDir, 'db', 'zod.gen.ts'),
27
46
  camelCase: true,
28
47
  });
@@ -33,7 +52,7 @@ export function resolveDb(userConfig, rootDir, outDir, runtimeDir) {
33
52
  return {
34
53
  dialect: 'postgres',
35
54
  connectionString: userConfig.postgresUrl,
36
- ...base('db/postgres', 'db/postgres-seed.sql'),
55
+ ...base('db/postgres'),
37
56
  };
38
57
  }
39
58
  if (userConfig.sqliteDb) {
@@ -44,7 +63,8 @@ export function resolveDb(userConfig, rootDir, outDir, runtimeDir) {
44
63
  dialect: 'sqlite',
45
64
  dbFile: resolveAgainst(rootDir, userConfig.sqliteDb),
46
65
  runtimeDir: resolvedRuntimeDir,
47
- ...base('db/sqlite', 'db/sqlite-seed.sql'),
66
+ seedFile: resolveAgainst(rootDir, 'db/sqlite-seed.sql'),
67
+ ...base('db/sqlite'),
48
68
  };
49
69
  }
50
70
  return null;
@@ -60,61 +80,72 @@ function resolveAgainst(root, p) {
60
80
  return isAbsolute(p) ? p : resolve(root, p);
61
81
  }
62
82
  export async function migrateAndCodegen(resolved) {
83
+ let migrateResult;
84
+ let codegenResult;
63
85
  if (resolved.dialect === 'sqlite') {
64
86
  mkdirSync(dirname(resolved.dbFile), { recursive: true });
65
87
  const runtime = await loadSqliteRuntime();
66
88
  const db = runtime.open(resolved.dbFile);
67
89
  try {
68
90
  const executor = new SqliteMigrationExecutor(db);
69
- const migrateResult = await migrate(executor, resolved.migrationsDir);
91
+ migrateResult = await migrate(executor, resolved.migrationsDir);
70
92
  const introspector = new SqliteIntrospector(db);
71
- const codegenResult = await generateSchemaTypes(introspector, {
93
+ codegenResult = await generateSchemaTypes(introspector, {
72
94
  outFile: resolved.schemaFile,
73
95
  coercionFile: resolved.coercionFile,
74
96
  manifestFile: resolved.manifestFile,
97
+ classificationMapFile: resolved.classificationMapFile,
75
98
  camelCase: resolved.camelCase,
99
+ rootDir: resolved.rootDir,
76
100
  migrationsDir: resolved.migrationsDir,
77
101
  });
78
- const zodResult = generateZodTypes({
79
- schemaFile: resolved.schemaFile,
80
- outFile: resolved.zodFile,
81
- });
82
- return { migrate: migrateResult, codegen: codegenResult, zod: zodResult };
83
102
  }
84
103
  finally {
85
104
  db.close();
86
105
  }
87
106
  }
88
- // Postgres
89
- const introspector = new PostgresIntrospector(resolved.connectionString);
90
- await introspector.connect();
91
- try {
92
- const { Client } = await import('pg');
93
- const client = new Client({ connectionString: resolved.connectionString });
94
- await client.connect();
107
+ else {
108
+ // Postgres
109
+ const introspector = new PostgresIntrospector(resolved.connectionString);
110
+ await introspector.connect();
95
111
  try {
96
- const executor = new PostgresMigrationExecutor(client);
97
- const migrateResult = await migrate(executor, resolved.migrationsDir);
98
- const codegenResult = await generateSchemaTypes(introspector, {
99
- outFile: resolved.schemaFile,
100
- coercionFile: resolved.coercionFile,
101
- manifestFile: resolved.manifestFile,
102
- camelCase: resolved.camelCase,
103
- migrationsDir: resolved.migrationsDir,
104
- });
105
- const zodResult = generateZodTypes({
106
- schemaFile: resolved.schemaFile,
107
- outFile: resolved.zodFile,
108
- });
109
- return { migrate: migrateResult, codegen: codegenResult, zod: zodResult };
112
+ const { Client } = await import('pg');
113
+ const client = new Client({ connectionString: resolved.connectionString });
114
+ await client.connect();
115
+ try {
116
+ const executor = new PostgresMigrationExecutor(client);
117
+ migrateResult = await migrate(executor, resolved.migrationsDir);
118
+ codegenResult = await generateSchemaTypes(introspector, {
119
+ outFile: resolved.schemaFile,
120
+ coercionFile: resolved.coercionFile,
121
+ manifestFile: resolved.manifestFile,
122
+ classificationMapFile: resolved.classificationMapFile,
123
+ camelCase: resolved.camelCase,
124
+ rootDir: resolved.rootDir,
125
+ migrationsDir: resolved.migrationsDir,
126
+ });
127
+ }
128
+ finally {
129
+ await client.end();
130
+ }
110
131
  }
111
132
  finally {
112
- await client.end();
133
+ await introspector.close();
113
134
  }
114
135
  }
115
- finally {
116
- await introspector.close();
117
- }
136
+ const zodResult = generateZodTypes({
137
+ schemaFile: resolved.schemaFile,
138
+ outFile: resolved.zodFile,
139
+ });
140
+ // ── Classifications step ──────────────────────────────────────────────────
141
+ const { scaffolded, jsonWritten } = syncClassifications(resolved.classificationsFile, resolved.classificationsGenJsonFile, codegenResult.tables);
142
+ return {
143
+ migrate: migrateResult,
144
+ codegen: codegenResult,
145
+ zod: zodResult,
146
+ classificationsScaffolded: scaffolded,
147
+ classificationsJsonWritten: jsonWritten,
148
+ };
118
149
  }
119
150
  // ─── SQLite-only operations ───────────────────────────────────────────────────
120
151
  export async function seed(resolved) {
@@ -139,6 +170,89 @@ export function reset(resolved, rootDir) {
139
170
  rmSync(resolved.dbFile);
140
171
  }
141
172
  }
173
+ // ── Classification sync ───────────────────────────────────────────────────────
174
+ /**
175
+ * Loads `db/classifications.ts` via tsx, serialises it to
176
+ * `.pikku/db/classifications.gen.json` for runtime consumption (console, etc.).
177
+ *
178
+ * If `db/classifications.ts` doesn't exist yet, writes a scaffold with every
179
+ * table defaulting to `private` so the developer has a starting point.
180
+ */
181
+ function syncClassifications(classificationsFile, genJsonFile, tableNames) {
182
+ let scaffolded = false;
183
+ if (!existsSync(classificationsFile)) {
184
+ const relMap = join(dirname(classificationsFile), '..', '.pikku', 'db', 'classification-map.gen.d.ts');
185
+ const relMapPosix = relMap.replace(/\\/g, '/');
186
+ const groups = new Map();
187
+ for (const name of tableNames) {
188
+ const dot = name.indexOf('.');
189
+ const schema = dot >= 0 ? name.slice(0, dot) : '';
190
+ const table = dot >= 0 ? name.slice(dot + 1) : name;
191
+ if (!groups.has(schema))
192
+ groups.set(schema, []);
193
+ groups.get(schema).push(table);
194
+ }
195
+ const bodyLines = [
196
+ `import type { DbClassificationMap } from '${relMapPosix}'`,
197
+ ``,
198
+ `export const classifications = {`,
199
+ ];
200
+ for (const [schema, tables] of groups) {
201
+ if (schema)
202
+ bodyLines.push(` ${JSON.stringify(schema)}: {`);
203
+ for (const table of tables) {
204
+ bodyLines.push(schema
205
+ ? ` ${JSON.stringify(table)}: {`
206
+ : ` ${JSON.stringify(table)}: {`);
207
+ bodyLines.push(schema ? ` },` : ` },`);
208
+ }
209
+ if (schema)
210
+ bodyLines.push(` },`);
211
+ }
212
+ bodyLines.push(`} satisfies DbClassificationMap`, ``);
213
+ mkdirSync(dirname(classificationsFile), { recursive: true });
214
+ writeFileSync(classificationsFile, bodyLines.join('\n'), 'utf8');
215
+ scaffolded = true;
216
+ }
217
+ // Resolve tsx from the CLI package's own node_modules so it works regardless
218
+ // of whether the user's project has tsx installed.
219
+ const _require = createRequire(fileURLToPath(import.meta.url));
220
+ let tsxEsmPath = null;
221
+ try {
222
+ tsxEsmPath = _require.resolve('tsx/esm');
223
+ }
224
+ catch {
225
+ // tsx not bundled with this CLI install — skip JSON emit
226
+ }
227
+ const script = [
228
+ `import * as mod from ${JSON.stringify(classificationsFile)}`,
229
+ `const val = Object.values(mod)[0]`,
230
+ `process.stdout.write(JSON.stringify(val))`,
231
+ ].join('\n');
232
+ let jsonWritten = false;
233
+ if (tsxEsmPath) {
234
+ try {
235
+ const json = execSync(`node --import ${JSON.stringify(tsxEsmPath)} --input-type=module`, {
236
+ input: script,
237
+ encoding: 'utf8',
238
+ stdio: ['pipe', 'pipe', 'pipe'],
239
+ });
240
+ const existing = existsSync(genJsonFile)
241
+ ? readFileSync(genJsonFile, 'utf8')
242
+ : null;
243
+ const next = JSON.stringify(JSON.parse(json), null, 2) + '\n';
244
+ if (existing !== next) {
245
+ mkdirSync(dirname(genJsonFile), { recursive: true });
246
+ writeFileSync(genJsonFile, next, 'utf8');
247
+ jsonWritten = true;
248
+ }
249
+ }
250
+ catch {
251
+ // annotations file has syntax errors — skip JSON emit
252
+ }
253
+ }
254
+ return { scaffolded, jsonWritten };
255
+ }
142
256
  export async function createKysely(resolved) {
143
257
  mkdirSync(dirname(resolved.dbFile), { recursive: true });
144
258
  const runtime = await loadSqliteRuntime();
@@ -1,10 +1,16 @@
1
- import { Client } from 'pg';
2
1
  import type { DbIntrospector, ColumnInfo } from '../db-introspector.js';
2
+ interface QueryClient {
3
+ query<T = unknown>(sql: string, params?: unknown[]): Promise<{
4
+ rows: T[];
5
+ }>;
6
+ end(): Promise<void>;
7
+ }
3
8
  export declare class PostgresIntrospector implements DbIntrospector {
4
9
  private client;
5
- constructor(connectionStringOrClient: string | Client);
10
+ constructor(clientOrConnectionString: QueryClient | string);
6
11
  connect(): Promise<void>;
7
12
  listTables(): Promise<string[]>;
8
13
  getColumns(table: string): Promise<ColumnInfo[]>;
9
14
  close(): Promise<void>;
10
15
  }
16
+ export {};
@@ -1,23 +1,35 @@
1
- import { Client } from 'pg';
1
+ import { Pool } from 'pg';
2
2
  export class PostgresIntrospector {
3
3
  client;
4
- constructor(connectionStringOrClient) {
5
- this.client =
6
- typeof connectionStringOrClient === 'string'
7
- ? new Client({ connectionString: connectionStringOrClient })
8
- : connectionStringOrClient;
4
+ constructor(clientOrConnectionString) {
5
+ if (typeof clientOrConnectionString === 'string') {
6
+ this.client = new Pool({
7
+ connectionString: clientOrConnectionString,
8
+ max: 10,
9
+ });
10
+ }
11
+ else {
12
+ this.client = clientOrConnectionString;
13
+ }
9
14
  }
10
15
  async connect() {
11
- await this.client.connect();
16
+ // Pool connects lazily; nothing to do here.
12
17
  }
13
18
  async listTables() {
14
- const result = await this.client.query(`SELECT table_name
19
+ const result = await this.client.query(`SELECT table_schema, table_name
15
20
  FROM information_schema.tables
16
- WHERE table_schema = 'public' AND table_type = 'BASE TABLE'
17
- ORDER BY table_name`);
18
- return result.rows.map((r) => r.table_name);
21
+ WHERE table_schema NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
22
+ AND table_schema NOT LIKE 'pg_temp_%'
23
+ AND table_type = 'BASE TABLE'
24
+ ORDER BY table_schema, table_name`);
25
+ return result.rows.map((r) => r.table_schema === 'public'
26
+ ? r.table_name
27
+ : `${r.table_schema}.${r.table_name}`);
19
28
  }
20
29
  async getColumns(table) {
30
+ const dotIdx = table.indexOf('.');
31
+ const schema = dotIdx >= 0 ? table.slice(0, dotIdx) : 'public';
32
+ const tableName = dotIdx >= 0 ? table.slice(dotIdx + 1) : table;
21
33
  const result = await this.client.query(`SELECT
22
34
  c.column_name,
23
35
  c.data_type,
@@ -32,13 +44,13 @@ export class PostgresIntrospector {
32
44
  AND tc.table_schema = kcu.table_schema
33
45
  AND tc.table_name = kcu.table_name
34
46
  WHERE tc.constraint_type = 'PRIMARY KEY'
35
- AND tc.table_schema = 'public'
47
+ AND tc.table_schema = $2
36
48
  AND tc.table_name = $1
37
49
  AND kcu.column_name = c.column_name
38
50
  ) AS is_pk
39
51
  FROM information_schema.columns c
40
- WHERE c.table_schema = 'public' AND c.table_name = $1
41
- ORDER BY c.ordinal_position`, [table]);
52
+ WHERE c.table_schema = $2 AND c.table_name = $1
53
+ ORDER BY c.ordinal_position`, [tableName, schema]);
42
54
  return result.rows.map((r) => ({
43
55
  name: r.column_name,
44
56
  type: r.data_type,
@@ -0,0 +1 @@
1
+ export declare const pikkuAuth: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -0,0 +1,22 @@
1
+ import { pikkuSessionlessFunc } from '#pikku';
2
+ import { writeFileInDir } from '../../../utils/file-writer.js';
3
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
4
+ import { serializeAuthGen } from './serialize-auth-gen.js';
5
+ export const pikkuAuth = pikkuSessionlessFunc({
6
+ func: async ({ logger, config, getInspectorState }) => {
7
+ const { authFile } = config;
8
+ if (!authFile)
9
+ return;
10
+ const state = await getInspectorState();
11
+ if (state.auth.providers.length === 0)
12
+ return;
13
+ const content = serializeAuthGen(state.auth.providers);
14
+ await writeFileInDir(logger, authFile, content);
15
+ },
16
+ middleware: [
17
+ logCommandInfoAndTime({
18
+ commandStart: 'Generating auth.gen.ts',
19
+ commandEnd: 'Generated auth.gen.ts',
20
+ }),
21
+ ],
22
+ });
@@ -0,0 +1 @@
1
+ export declare const serializeAuthGen: (providers: string[]) => string;
@@ -0,0 +1,115 @@
1
+ import { PROVIDER_REGISTRY } from '@pikku/auth-js';
2
+ function capitalize(s) {
3
+ return s.charAt(0).toUpperCase() + s.slice(1);
4
+ }
5
+ function providerSchemaName(name) {
6
+ return `${capitalize(name.replace(/-([a-z])/g, (_, c) => c.toUpperCase()))}OAuthSchema`;
7
+ }
8
+ function providerSecretName(name) {
9
+ return `${name.replace(/-([a-z])/g, (_, c) => c.toUpperCase())}OAuth`;
10
+ }
11
+ export const serializeAuthGen = (providers) => {
12
+ const known = providers.filter((p) => PROVIDER_REGISTRY[p]);
13
+ const unknown = providers.filter((p) => !PROVIDER_REGISTRY[p]);
14
+ if (unknown.length > 0) {
15
+ throw new Error(`wireAuth: unknown providers: ${unknown.join(', ')}. Supported: ${Object.keys(PROVIDER_REGISTRY).join(', ')}`);
16
+ }
17
+ const lines = ['// AUTO-GENERATED by pikku CLI — do not edit', ''];
18
+ // Provider imports
19
+ for (const name of known) {
20
+ const def = PROVIDER_REGISTRY[name];
21
+ lines.push(`import ${def.importName} from '${def.importPath}'`);
22
+ }
23
+ if (known.length > 0)
24
+ lines.push('');
25
+ lines.push(`import { wireSecret } from '@pikku/core/secret'`);
26
+ lines.push(`import { wireVariable } from '@pikku/core/variable'`);
27
+ lines.push(`import { wireHTTPRoutes } from '@pikku/core/http'`);
28
+ lines.push(`import { createAuthRoutes } from '@pikku/auth-js'`);
29
+ lines.push(`import { z } from 'zod'`);
30
+ lines.push('');
31
+ // Zod schemas for each provider
32
+ for (const name of known) {
33
+ const def = PROVIDER_REGISTRY[name];
34
+ const schemaName = providerSchemaName(name);
35
+ const fieldLines = Object.entries(def.fields).map(([field, zodExpr]) => ` ${field}: ${zodExpr},`);
36
+ lines.push(`const ${schemaName} = z.object({`);
37
+ lines.push(...fieldLines);
38
+ lines.push(`})`);
39
+ lines.push('');
40
+ }
41
+ // wireSecret for AUTH_SECRET
42
+ lines.push(`wireSecret({`);
43
+ lines.push(` name: 'authSecret',`);
44
+ lines.push(` displayName: 'Auth Secret',`);
45
+ lines.push(` description: 'JWT signing secret for Auth.js sessions',`);
46
+ lines.push(` secretId: 'AUTH_SECRET',`);
47
+ lines.push(` schema: z.string(),`);
48
+ lines.push(`})`);
49
+ lines.push('');
50
+ // wireSecret for each provider
51
+ for (const name of known) {
52
+ const def = PROVIDER_REGISTRY[name];
53
+ const schemaName = providerSchemaName(name);
54
+ const secretName = providerSecretName(name);
55
+ lines.push(`wireSecret({`);
56
+ lines.push(` name: '${secretName}',`);
57
+ lines.push(` displayName: '${def.displayName}',`);
58
+ lines.push(` secretId: '${def.secretId}',`);
59
+ lines.push(` schema: ${schemaName},`);
60
+ lines.push(`})`);
61
+ lines.push('');
62
+ }
63
+ // wireVariable for providers with non-secret config (issuer, tenantId, etc.)
64
+ for (const name of known) {
65
+ const def = PROVIDER_REGISTRY[name];
66
+ if (!def.variables)
67
+ continue;
68
+ for (const [field, meta] of Object.entries(def.variables)) {
69
+ lines.push(`wireVariable({`);
70
+ lines.push(` name: '${name}_${field}',`);
71
+ lines.push(` displayName: '${def.displayName} ${capitalize(field)}',`);
72
+ lines.push(` description: '${meta.description}',`);
73
+ lines.push(` variableId: '${meta.variableId}',`);
74
+ lines.push(` schema: z.string(),`);
75
+ lines.push(`})`);
76
+ lines.push('');
77
+ }
78
+ }
79
+ // Auth route setup
80
+ lines.push(`const authRoutes = createAuthRoutes(async (services) => {`);
81
+ lines.push(` const secretIds = ['AUTH_SECRET', ${known.map((n) => `'${PROVIDER_REGISTRY[n].secretId}'`).join(', ')}]`);
82
+ lines.push(` const secretsMap = new Map(Object.entries(await services.secrets.getSecrets(secretIds)))`);
83
+ lines.push('');
84
+ lines.push(` const authSecret = secretsMap.get('AUTH_SECRET') as string | undefined`);
85
+ lines.push(` const providers: any[] = []`);
86
+ lines.push('');
87
+ for (const name of known) {
88
+ const def = PROVIDER_REGISTRY[name];
89
+ const varName = providerSecretName(name);
90
+ const hasVariables = def.variables && Object.keys(def.variables).length > 0;
91
+ lines.push(` const ${varName}Secrets = secretsMap.get('${def.secretId}')`);
92
+ lines.push(` if (${varName}Secrets) {`);
93
+ lines.push(` const ${varName}Config = { ...${varName}Secrets as any }`);
94
+ if (hasVariables && def.variables) {
95
+ for (const [field, meta] of Object.entries(def.variables)) {
96
+ lines.push(` const ${varName}${capitalize(field)} = await services.variables.get('${meta.variableId}')`);
97
+ lines.push(` if (${varName}${capitalize(field)} !== undefined) ${varName}Config.${field} = ${varName}${capitalize(field)}`);
98
+ }
99
+ }
100
+ lines.push(` providers.push(${def.importName}(${varName}Config))`);
101
+ lines.push(` }`);
102
+ }
103
+ lines.push('');
104
+ lines.push(` return {`);
105
+ lines.push(` providers,`);
106
+ lines.push(` secret: authSecret,`);
107
+ lines.push(` trustHost: true,`);
108
+ lines.push(` basePath: '/auth',`);
109
+ lines.push(` }`);
110
+ lines.push(`})`);
111
+ lines.push('');
112
+ lines.push(`wireHTTPRoutes({ routes: { auth: authRoutes } })`);
113
+ lines.push('');
114
+ return lines.join('\n');
115
+ };
@@ -117,6 +117,7 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
117
117
  workflow.do('Events scaffold', 'pikkuEventsScaffold', null),
118
118
  workflow.do('Emails', 'pikkuEmails', null),
119
119
  workflow.do('Secret definition types', 'pikkuSecretDefinitionTypes', null),
120
+ workflow.do('Auth', 'pikkuAuth', null),
120
121
  workflow.do('Secrets', 'pikkuSecrets', null),
121
122
  workflow.do('Credentials', 'pikkuCredentials', null),
122
123
  workflow.do('Variable definition types', 'pikkuVariableDefinitionTypes', null),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.27
2
+ * This file was generated by @pikku/cli@0.12.29
3
3
  */
4
4
  /**
5
5
  * Auto-generated remote internal RPC queue worker and HTTP endpoint
@@ -416,6 +416,9 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
416
416
  if (result.emailTemplatesDir && !isAbsolute(result.emailTemplatesDir)) {
417
417
  result.emailTemplatesDir = join(result.configDir, result.emailTemplatesDir);
418
418
  }
419
+ if (result.authFile && !isAbsolute(result.authFile)) {
420
+ result.authFile = join(result.configDir, result.authFile);
421
+ }
419
422
  if (!isAbsolute(result.tsconfig)) {
420
423
  result.tsconfig = join(result.rootDir, result.tsconfig);
421
424
  }
@@ -1 +1 @@
1
- {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate-core.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/console.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/info.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/skills.ts","../src/functions/commands/tests-coverage.ts","../src/functions/commands/tests-init.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/scaffold/rpc-remote.gen.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/check-required-types.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/http/pikku-http-wirings-map.gen.d.ts","../.pikku/http/pikku-http-wirings-meta.gen.ts","../.pikku/http/pikku-http-wirings.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"5.9.3"}
1
+ {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate-core.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/console.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/info.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/skills.ts","../src/functions/commands/tests-coverage.ts","../src/functions/commands/tests-init.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/scaffold/rpc-remote.gen.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/check-required-types.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/http/pikku-http-wirings-map.gen.d.ts","../.pikku/http/pikku-http-wirings-meta.gen.ts","../.pikku/http/pikku-http-wirings.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"5.9.3"}