@pikku/cli 0.12.44 → 0.12.46

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 (91) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/index-ByiKUJ11.js +254 -0
  3. package/console-app/index.html +1 -1
  4. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  5. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  6. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  7. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  8. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  9. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  10. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +5 -0
  11. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +5 -0
  12. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +474 -0
  13. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  14. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  15. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  16. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  17. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  18. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  19. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  20. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  21. package/dist/.pikku/function/pikku-function-types.gen.d.ts +14 -1
  22. package/dist/.pikku/function/pikku-function-types.gen.js +17 -1
  23. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  24. package/dist/.pikku/function/pikku-functions-meta.gen.json +51 -51
  25. package/dist/.pikku/function/pikku-functions.gen.js +1 -1
  26. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  27. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  28. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  29. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  30. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  31. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  32. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  33. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  34. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  35. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  36. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  37. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  38. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  39. package/dist/.pikku/pikku-types.gen.js +1 -1
  40. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  41. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  42. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  43. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +8 -8
  44. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  45. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  46. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  47. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +1 -1
  48. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  49. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  50. package/dist/.pikku/schemas/register.gen.js +1 -1
  51. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  52. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  53. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  54. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  55. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  56. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  57. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  58. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  59. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  60. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  61. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  62. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +15 -15
  63. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  64. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  65. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  66. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  67. package/dist/bin/pikku-bin.mjs +2 -2
  68. package/dist/src/deploy/build-pipeline.js +2 -0
  69. package/dist/src/deploy/bundler/bundler.d.ts +1 -0
  70. package/dist/src/deploy/bundler/bundler.js +36 -5
  71. package/dist/src/deploy/provider-adapter.d.ts +7 -0
  72. package/dist/src/fabric/functions/validate.function.js +185 -0
  73. package/dist/src/functions/wirings/auth/pikku-command-auth.js +10 -1
  74. package/dist/src/functions/wirings/channels/pikku-channels.js +20 -11
  75. package/dist/src/functions/wirings/channels/pikku-command-channels-map.js +2 -2
  76. package/dist/src/functions/wirings/channels/pikku-command-channels.js +20 -6
  77. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.d.ts +1 -1
  78. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +59 -11
  79. package/dist/src/functions/wirings/cli/pikku-command-cli.js +20 -6
  80. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +7 -1
  81. package/dist/src/functions/wirings/functions/serialize-addon-refs.d.ts +14 -0
  82. package/dist/src/functions/wirings/functions/serialize-addon-refs.js +129 -0
  83. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +21 -6
  84. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +12 -0
  85. package/dist/src/functions/workflows/all.workflow.js +7 -0
  86. package/dist/src/scaffold/rpc-remote.gen.js +1 -1
  87. package/dist/src/utils/pikku-cli-config.js +18 -0
  88. package/dist/tsconfig.tsbuildinfo +1 -1
  89. package/package.json +3 -3
  90. package/skills/pikku-better-auth/SKILL.md +19 -3
  91. package/console-app/assets/index-CRLT8CXr.js +0 -254
@@ -1,7 +1,8 @@
1
1
  import { serializeImportMap } from '../../../utils/serialize-import-map.js';
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
3
  import { generateCustomTypes, resolveFunctionMeta } from '@pikku/inspector';
3
- export const serializeTypedChannelsMap = (logger, relativeToPath, packageMappings, typesMap, functionsMeta, addonFunctions, channelsMeta) => {
4
- const { channels, requiredTypes } = generateChannels(functionsMeta, addonFunctions, channelsMeta);
4
+ export const serializeTypedChannelsMap = (logger, relativeToPath, packageMappings, typesMap, functionsMeta, addonFunctions, channelsMeta, rpcInternalMapDeclarationFile) => {
5
+ const { channels, requiredTypes } = generateChannels(logger, typesMap, functionsMeta, addonFunctions, channelsMeta);
5
6
  typesMap.customTypes.forEach(({ references }) => {
6
7
  for (const reference of references) {
7
8
  if (reference !== '__object' && !reference.startsWith('__object_')) {
@@ -9,13 +10,25 @@ export const serializeTypedChannelsMap = (logger, relativeToPath, packageMapping
9
10
  }
10
11
  }
11
12
  });
13
+ const needsFlattenedRPCMap = Array.from(requiredTypes).some((t) => t.includes('FlattenedRPCMap'));
14
+ if (needsFlattenedRPCMap) {
15
+ for (const t of Array.from(requiredTypes)) {
16
+ if (t.includes('FlattenedRPCMap')) {
17
+ requiredTypes.delete(t);
18
+ }
19
+ }
20
+ }
12
21
  const imports = serializeImportMap(logger, relativeToPath, packageMappings, typesMap, requiredTypes);
22
+ const rpcMapImport = needsFlattenedRPCMap
23
+ ? `import type { FlattenedRPCMap } from '${getFileImportRelativePath(relativeToPath, rpcInternalMapDeclarationFile, packageMappings)}'`
24
+ : '';
13
25
  const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes);
14
26
  return `/**
15
27
  * This provides the structure needed for TypeScript to be aware of channels
16
28
  */
17
29
 
18
30
  ${imports}
31
+ ${rpcMapImport}
19
32
  ${serializedCustomTypes}
20
33
 
21
34
  interface ChannelHandler<I, O> {
@@ -40,7 +53,7 @@ export type ChannelWiringHandlerOf<
40
53
  : never;
41
54
  `;
42
55
  };
43
- function generateChannels(functionsMeta, addonFunctions, channelsMeta) {
56
+ function generateChannels(logger, typesMap, functionsMeta, addonFunctions, channelsMeta) {
44
57
  const state = { functions: { meta: functionsMeta }, addonFunctions };
45
58
  const requiredTypes = new Set();
46
59
  const channelsObject = {};
@@ -57,17 +70,30 @@ function generateChannels(functionsMeta, addonFunctions, channelsMeta) {
57
70
  const inputTypes = func.inputs || null;
58
71
  const outputTypes = func.outputs || null;
59
72
  channelsObject[name].message = {
60
- inputs: inputTypes,
61
- outputs: outputTypes,
73
+ inputs: normalizeTypes(logger, typesMap, inputTypes),
74
+ outputs: normalizeTypes(logger, typesMap, outputTypes),
62
75
  };
63
- inputTypes?.forEach((type) => requiredTypes.add(type));
64
- outputTypes?.forEach((type) => requiredTypes.add(type));
76
+ channelsObject[name].message.inputs?.forEach((type) => requiredTypes.add(type));
77
+ channelsObject[name].message.outputs?.forEach((type) => requiredTypes.add(type));
65
78
  }
66
79
  for (const [key, route] of Object.entries(messageWirings)) {
67
80
  if (!channelsObject[name].routes[key]) {
68
81
  channelsObject[name].routes[key] = {};
69
82
  }
70
83
  for (const [method, { pikkuFuncId }] of Object.entries(route)) {
84
+ // Addon functions are namespaced ('ns:fn') and their types aren't in
85
+ // the consumer's local typesMap, but are reachable via FlattenedRPCMap.
86
+ if (pikkuFuncId.includes(':')) {
87
+ const inputType = `FlattenedRPCMap['${pikkuFuncId}']['input']`;
88
+ const outputType = `FlattenedRPCMap['${pikkuFuncId}']['output']`;
89
+ channelsObject[name].routes[key][method] = {
90
+ inputTypes: [inputType],
91
+ outputTypes: [outputType],
92
+ };
93
+ requiredTypes.add(inputType);
94
+ requiredTypes.add(outputType);
95
+ continue;
96
+ }
71
97
  const func = resolveFunctionMeta(state, pikkuFuncId);
72
98
  if (!func) {
73
99
  throw new Error(`Function ${pikkuFuncId} not found in functionsMeta for channel ${name}, route ${key}, method ${method}`);
@@ -75,11 +101,11 @@ function generateChannels(functionsMeta, addonFunctions, channelsMeta) {
75
101
  const inputTypes = func.inputs || null;
76
102
  const outputTypes = func.outputs || null;
77
103
  channelsObject[name].routes[key][method] = {
78
- inputTypes,
79
- outputTypes,
104
+ inputTypes: normalizeTypes(logger, typesMap, inputTypes),
105
+ outputTypes: normalizeTypes(logger, typesMap, outputTypes),
80
106
  };
81
- inputTypes?.forEach((type) => requiredTypes.add(type));
82
- outputTypes?.forEach((type) => requiredTypes.add(type));
107
+ channelsObject[name].routes[key][method].inputTypes?.forEach((type) => requiredTypes.add(type));
108
+ channelsObject[name].routes[key][method].outputTypes?.forEach((type) => requiredTypes.add(type));
83
109
  }
84
110
  }
85
111
  }
@@ -112,3 +138,25 @@ function generateChannels(functionsMeta, addonFunctions, channelsMeta) {
112
138
  function formatTypeArray(types) {
113
139
  return types ? types.join(' | ') : 'null';
114
140
  }
141
+ function normalizeTypes(logger, typesMap, types) {
142
+ if (!types || types.length === 0)
143
+ return types;
144
+ const resolved = types.filter((type) => hasType(typesMap, type));
145
+ if (resolved.length > 0) {
146
+ return resolved;
147
+ }
148
+ logger.warn(`Channel type '${types.join(' | ')}' not found in local typesMap, falling back to unknown`);
149
+ return ['unknown'];
150
+ }
151
+ function hasType(typesMap, type) {
152
+ if (['void', 'never', 'unknown', 'null', 'undefined'].includes(type)) {
153
+ return true;
154
+ }
155
+ try {
156
+ typesMap.getTypeMeta(type);
157
+ return true;
158
+ }
159
+ catch {
160
+ return false;
161
+ }
162
+ }
@@ -7,21 +7,35 @@ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verb
7
7
  export const pikkuCLI = pikkuSessionlessFunc({
8
8
  func: async ({ logger, config, getInspectorState }) => {
9
9
  const visitState = await getInspectorState();
10
- const { cliWiringsFile, cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings, schema, } = config;
11
- const { cli } = visitState;
12
- if (cli.files.size === 0 || Object.keys(cli.meta).length === 0) {
10
+ const { cliWiringsFile, cliWiringMetaFile, cliWiringMetaJsonFile, cliContractsMetaJsonFile, cliContractsMetaFile, packageMappings, schema, } = config;
11
+ const { cli, exportedContracts } = visitState;
12
+ const hasCLIContracts = Object.keys(exportedContracts.cli).length > 0;
13
+ if ((cli.files.size === 0 || Object.keys(cli.meta).length === 0) &&
14
+ !hasCLIContracts) {
13
15
  return undefined;
14
16
  }
15
- // Generate CLI wirings file
17
+ // The bootstrap imports cliWiringsFile and cliWiringMetaFile whenever this
18
+ // command reports CLI as active (truthy return), so both must always be
19
+ // written once past the guard above — including the contracts-only case
20
+ // where there are no local wireCLI source files (cli.files is empty).
21
+ // Skipping either leaves the bootstrap importing a file that was never
22
+ // generated and the per-unit deploy bundle fails.
16
23
  await writeFileInDir(logger, cliWiringsFile, serializeFileImports('wireCLI', cliWiringsFile, cli.files, packageMappings));
17
- // Write minimal JSON (runtime-only fields)
18
24
  const minimalMeta = stripVerboseFields(cli.meta);
19
25
  await writeFileInDir(logger, cliWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
20
- // Write verbose JSON only if it has additional fields
21
26
  if (hasVerboseFields(cli.meta)) {
22
27
  const verbosePath = cliWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
23
28
  await writeFileInDir(logger, verbosePath, JSON.stringify(cli.meta, null, 2));
24
29
  }
30
+ await writeFileInDir(logger, cliContractsMetaJsonFile, JSON.stringify(exportedContracts.cli, null, 2));
31
+ if (hasCLIContracts) {
32
+ const contractsJsonImportPath = getFileImportRelativePath(cliContractsMetaFile, cliContractsMetaJsonFile, packageMappings);
33
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
34
+ const contractsImportStatement = supportsImportAttributes
35
+ ? `import contractsMeta from '${contractsJsonImportPath}' with { type: 'json' }`
36
+ : `import contractsMeta from '${contractsJsonImportPath}'`;
37
+ await writeFileInDir(logger, cliContractsMetaFile, `${contractsImportStatement}\nexport default contractsMeta`);
38
+ }
25
39
  const jsonImportPath = getFileImportRelativePath(cliWiringMetaFile, cliWiringMetaJsonFile, packageMappings);
26
40
  const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
27
41
  const importStatement = supportsImportAttributes
@@ -4,6 +4,7 @@ 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
6
  import { serializeFunctionTypes } from './serialize-function-types.js';
7
+ import { serializeAddonRefs } from './serialize-addon-refs.js';
7
8
  export const pikkuFunctionTypesSplit = pikkuSessionlessFunc({
8
9
  func: async ({ logger, config, getInspectorState }, data) => {
9
10
  const visitState = await getInspectorState(false, true, data?.bootstrap ?? false);
@@ -22,7 +23,12 @@ export const pikkuFunctionTypesSplit = pikkuSessionlessFunc({
22
23
  ? `import type { ${pikkuConfigType.type} } from '${getFileImportRelativePath(functionTypesFile, pikkuConfigType.typePath, packageMappings)}'`
23
24
  : '// Config type not found, will use fallback';
24
25
  const content = serializeFunctionTypes(`import type { ${userSessionType.type} } from '${getFileImportRelativePath(functionTypesFile, userSessionType.typePath, packageMappings)}'`, userSessionType.type, `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, singletonServicesType.typePath, packageMappings)}'`, singletonServicesType.type, `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(functionTypesFile, wireServicesType.typePath, packageMappings)}'`, wireServicesType.type, `import type { TypedPikkuRPC, FlattenedRPCMap } from '${getFileImportRelativePath(functionTypesFile, rpcInternalMapDeclarationFile, packageMappings)}'`, `import type { RequiredSingletonServices, RequiredWireServices } from '${getFileImportRelativePath(functionTypesFile, servicesFile, packageMappings)}'`, configTypeImport, config.addonName, undefined, typeof config.addon === 'object' ? config.addon?.categories : undefined);
25
- await writeFileInDir(logger, functionTypesFile, content);
26
+ const addonRefs = serializeAddonRefs({
27
+ addonHttp: visitState.exportedContracts.addonHttp,
28
+ addonChannel: visitState.exportedContracts.addonChannel,
29
+ addonCli: visitState.exportedContracts.addonCli,
30
+ });
31
+ await writeFileInDir(logger, functionTypesFile, `${content}\n${addonRefs}`);
26
32
  },
27
33
  middleware: [
28
34
  logCommandInfoAndTime({
@@ -0,0 +1,14 @@
1
+ interface AddonContracts {
2
+ addonHttp: Record<string, Record<string, any>>;
3
+ addonChannel: Record<string, Record<string, any>>;
4
+ addonCli: Record<string, Record<string, any>>;
5
+ }
6
+ /**
7
+ * Emit the addon contract reference helpers (refHTTP / refChannel / refCLI)
8
+ * mirroring `ref`. Each helper indexes a generated const map whose functions
9
+ * are pre-bound to ref('namespace:fn') RPC proxies, so type-checking and
10
+ * runtime wiring resolve from the same artifact. basePath can be overridden
11
+ * per HTTP reference; otherwise the addon contract's own basePath is preserved.
12
+ */
13
+ export declare const serializeAddonRefs: (state: AddonContracts) => string;
14
+ export {};
@@ -0,0 +1,129 @@
1
+ const refFunc = (pikkuFuncId) => `ref(${JSON.stringify(pikkuFuncId)})`;
2
+ const isHttpRouteConfig = (value) => value &&
3
+ typeof value === 'object' &&
4
+ 'method' in value &&
5
+ 'route' in value &&
6
+ 'func' in value;
7
+ const isHttpRouteGroup = (value) => value &&
8
+ typeof value === 'object' &&
9
+ 'routes' in value &&
10
+ !('method' in value);
11
+ const serializeHttpRouteMap = (routes) => {
12
+ const entries = Object.entries(routes).map(([key, value]) => {
13
+ if (isHttpRouteConfig(value)) {
14
+ const parts = [];
15
+ for (const [field, fieldValue] of Object.entries(value)) {
16
+ if (field === 'func') {
17
+ parts.push(`func: ${refFunc(fieldValue.pikkuFuncId)}`);
18
+ continue;
19
+ }
20
+ if (fieldValue === null || fieldValue === undefined)
21
+ continue;
22
+ parts.push(`${JSON.stringify(field)}: ${JSON.stringify(fieldValue)}`);
23
+ }
24
+ return `${JSON.stringify(key)}: { ${parts.join(', ')} }`;
25
+ }
26
+ if (isHttpRouteGroup(value)) {
27
+ const parts = [];
28
+ if (value.basePath) {
29
+ parts.push(`basePath: ${JSON.stringify(value.basePath)}`);
30
+ }
31
+ if (Array.isArray(value.tags) && value.tags.length > 0) {
32
+ parts.push(`tags: ${JSON.stringify(value.tags)}`);
33
+ }
34
+ if (value.auth !== undefined && value.auth !== null) {
35
+ parts.push(`auth: ${JSON.stringify(value.auth)}`);
36
+ }
37
+ parts.push(`routes: ${serializeHttpRouteMap(value.routes)}`);
38
+ return `${JSON.stringify(key)}: { ${parts.join(', ')} }`;
39
+ }
40
+ return `${JSON.stringify(key)}: ${serializeHttpRouteMap(value)}`;
41
+ });
42
+ return `{ ${entries.join(', ')} }`;
43
+ };
44
+ const serializeHttpContract = (contract) => {
45
+ const parts = [];
46
+ if (contract.basePath) {
47
+ parts.push(`basePath: ${JSON.stringify(contract.basePath)}`);
48
+ }
49
+ if (Array.isArray(contract.tags) && contract.tags.length > 0) {
50
+ parts.push(`tags: ${JSON.stringify(contract.tags)}`);
51
+ }
52
+ if (contract.auth !== undefined && contract.auth !== null) {
53
+ parts.push(`auth: ${JSON.stringify(contract.auth)}`);
54
+ }
55
+ parts.push(`routes: ${serializeHttpRouteMap(contract.routes ?? {})}`);
56
+ return `{ ${parts.join(', ')} }`;
57
+ };
58
+ const serializeChannelContract = (contract) => {
59
+ const entries = Object.entries(contract).map(([action, value]) => `${JSON.stringify(action)}: { func: ${refFunc(value.pikkuFuncId)} }`);
60
+ return `{ ${entries.join(', ')} }`;
61
+ };
62
+ const serializeCliContract = (contract) => {
63
+ const entries = Object.entries(contract).map(([command, value]) => {
64
+ const parts = [`func: ${refFunc(value.pikkuFuncId)}`];
65
+ if (Array.isArray(value.positionals) && value.positionals.length > 0) {
66
+ parts.push(`positionals: ${JSON.stringify(value.positionals)}`);
67
+ }
68
+ parts.push(`options: ${JSON.stringify(value.options ?? {})}`);
69
+ return `${JSON.stringify(command)}: { ${parts.join(', ')} }`;
70
+ });
71
+ return `{ ${entries.join(', ')} }`;
72
+ };
73
+ const serializeMap = (namespaces, serializeContract) => {
74
+ const entries = [];
75
+ for (const [namespace, contracts] of Object.entries(namespaces)) {
76
+ for (const [contractName, contract] of Object.entries(contracts)) {
77
+ const key = `${namespace}:${contractName}`;
78
+ entries.push(` ${JSON.stringify(key)}: ${serializeContract(contract)},`);
79
+ }
80
+ }
81
+ return entries.length > 0 ? `{\n${entries.join('\n')}\n}` : '{}';
82
+ };
83
+ /**
84
+ * Emit the addon contract reference helpers (refHTTP / refChannel / refCLI)
85
+ * mirroring `ref`. Each helper indexes a generated const map whose functions
86
+ * are pre-bound to ref('namespace:fn') RPC proxies, so type-checking and
87
+ * runtime wiring resolve from the same artifact. basePath can be overridden
88
+ * per HTTP reference; otherwise the addon contract's own basePath is preserved.
89
+ */
90
+ export const serializeAddonRefs = (state) => {
91
+ const exported = state ?? {
92
+ addonHttp: {},
93
+ addonChannel: {},
94
+ addonCli: {},
95
+ };
96
+ const httpMap = serializeMap(exported.addonHttp ?? {}, serializeHttpContract);
97
+ const channelMap = serializeMap(exported.addonChannel ?? {}, serializeChannelContract);
98
+ const cliMap = serializeMap(exported.addonCli ?? {}, serializeCliContract);
99
+ return `
100
+ /**
101
+ * Addon contract references. Generated from each wired addon's published
102
+ * contract metadata — no addon source is imported. Functions are proxied via
103
+ * ref() (RPC) exactly like ref('namespace:fn').
104
+ */
105
+ const __addonHttp = ${httpMap} as const
106
+ const __addonChannel = ${channelMap} as const
107
+ const __addonCli = ${cliMap} as const
108
+
109
+ export const refHTTP = <Name extends keyof typeof __addonHttp>(
110
+ name: Name,
111
+ options?: { basePath?: string }
112
+ ): (typeof __addonHttp)[Name] => {
113
+ const contract = __addonHttp[name] as any
114
+ return (
115
+ options?.basePath !== undefined
116
+ ? { ...contract, basePath: options.basePath }
117
+ : contract
118
+ ) as (typeof __addonHttp)[Name]
119
+ }
120
+
121
+ export const refChannel = <Name extends keyof typeof __addonChannel>(
122
+ name: Name
123
+ ): (typeof __addonChannel)[Name] => __addonChannel[name]
124
+
125
+ export const refCLI = <Name extends keyof typeof __addonCli>(
126
+ name: Name
127
+ ): (typeof __addonCli)[Name] => __addonCli[name]
128
+ `;
129
+ };
@@ -7,21 +7,36 @@ import { stripVerboseFields, hasVerboseFields, } from '../../../utils/strip-verb
7
7
  export const pikkuCommandHTTP = pikkuSessionlessFunc({
8
8
  func: async ({ logger, config, getInspectorState }) => {
9
9
  const visitState = await getInspectorState();
10
- const { httpWiringsFile, httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings, schema, } = config;
11
- const { http } = visitState;
12
- if (http.files.size === 0 || Object.keys(http.meta).length === 0) {
10
+ const { httpWiringsFile, httpWiringMetaFile, httpWiringMetaJsonFile, httpContractsMetaJsonFile, httpContractsMetaFile, packageMappings, schema, } = config;
11
+ const { http, exportedContracts } = visitState;
12
+ const hasHTTPContracts = Object.keys(exportedContracts.http).length > 0;
13
+ if ((http.files.size === 0 || Object.keys(http.meta).length === 0) &&
14
+ !hasHTTPContracts) {
13
15
  return undefined;
14
16
  }
17
+ // The bootstrap imports httpWiringsFile and httpWiringMetaFile whenever
18
+ // this command reports HTTP as active (truthy return), so both must
19
+ // always be written once past the guard above — including the
20
+ // contracts-only or synthetic-route case where there are no local
21
+ // wireHTTP source files (http.files is empty). Skipping either leaves the
22
+ // bootstrap importing a file that was never generated and the per-unit
23
+ // deploy bundle fails to resolve it.
15
24
  await writeFileInDir(logger, httpWiringsFile, serializeFileImports('wireHTTP', httpWiringsFile, http.files, packageMappings));
16
- // Write minimal JSON (runtime-only fields)
17
25
  const minimalMeta = stripVerboseFields(http.meta);
18
26
  await writeFileInDir(logger, httpWiringMetaJsonFile, JSON.stringify(minimalMeta, null, 2));
19
- // Write verbose JSON only if it has additional fields
20
27
  if (hasVerboseFields(http.meta)) {
21
28
  const verbosePath = httpWiringMetaJsonFile.replace(/\.gen\.json$/, '-verbose.gen.json');
22
29
  await writeFileInDir(logger, verbosePath, JSON.stringify(http.meta, null, 2));
23
30
  }
24
- // Generate TypeScript file that imports the minimal JSON
31
+ await writeFileInDir(logger, httpContractsMetaJsonFile, JSON.stringify(exportedContracts.http, null, 2));
32
+ if (hasHTTPContracts) {
33
+ const contractsJsonImportPath = getFileImportRelativePath(httpContractsMetaFile, httpContractsMetaJsonFile, packageMappings);
34
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
35
+ const contractsImportStatement = supportsImportAttributes
36
+ ? `import contractsMeta from '${contractsJsonImportPath}' with { type: 'json' }`
37
+ : `import contractsMeta from '${contractsJsonImportPath}'`;
38
+ await writeFileInDir(logger, httpContractsMetaFile, `${contractsImportStatement}\nexport default contractsMeta`);
39
+ }
25
40
  const jsonImportPath = getFileImportRelativePath(httpWiringMetaFile, httpWiringMetaJsonFile, packageMappings);
26
41
  const supportsImportAttributes = schema?.supportsImportAttributes ?? false;
27
42
  const importStatement = supportsImportAttributes
@@ -58,6 +58,18 @@ function generateHTTPWirings(routesMeta, resolvedIOTypes, requiredTypes) {
58
58
  }
59
59
  const resolved = resolvedIOTypes[pikkuFuncId];
60
60
  if (!resolved) {
61
+ if (meta.packageName) {
62
+ // Addon functions aren't in the consumer's local resolvedIOTypes, but
63
+ // their real types are reachable through the generated FlattenedRPCMap
64
+ // (the addon's RPC map is merged in under its namespace). Adding these
65
+ // to requiredTypes triggers the FlattenedRPCMap import below.
66
+ const inputType = `FlattenedRPCMap['${pikkuFuncId}']['input']`;
67
+ const outputType = `FlattenedRPCMap['${pikkuFuncId}']['output']`;
68
+ requiredTypes.add(inputType);
69
+ requiredTypes.add(outputType);
70
+ routesObj[route][method] = { inputType, outputType };
71
+ continue;
72
+ }
61
73
  throw new Error(`Function ${pikkuFuncId} not found in resolvedIOTypes. Please check your configuration.`);
62
74
  }
63
75
  requiredTypes.add(resolved.inputType);
@@ -189,6 +189,13 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
189
189
  allImports.push(config.triggersWiringMetaFile, config.triggerSourcesMetaFile, config.triggersWiringFile);
190
190
  }
191
191
  }
192
+ if (config.addon) {
193
+ await Promise.all([
194
+ workflow.do('HTTP', 'pikkuCommandHTTP', null),
195
+ workflow.do('Channels', 'pikkuCommandChannels', null),
196
+ workflow.do('CLI', 'pikkuCLI', null),
197
+ ]);
198
+ }
192
199
  const hasFunctionRegistrations = await workflow.do('Functions', 'pikkuFunctions', null);
193
200
  allImports.push(config.functionsMetaFile);
194
201
  if (hasFunctionRegistrations) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.44
2
+ * This file was generated by @pikku/cli@0.12.46
3
3
  */
4
4
  /**
5
5
  * Auto-generated remote internal RPC queue worker and HTTP endpoint
@@ -137,6 +137,12 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
137
137
  if (!result.httpWiringMetaJsonFile) {
138
138
  result.httpWiringMetaJsonFile = join(httpDir, 'pikku-http-wirings-meta.gen.json');
139
139
  }
140
+ if (!result.httpContractsMetaJsonFile) {
141
+ result.httpContractsMetaJsonFile = join(httpDir, 'pikku-http-contracts-meta.gen.json');
142
+ }
143
+ if (!result.httpContractsMetaFile) {
144
+ result.httpContractsMetaFile = join(httpDir, 'pikku-http-contracts-meta.gen.ts');
145
+ }
140
146
  if (!result.httpMapDeclarationFile) {
141
147
  result.httpMapDeclarationFile = join(httpDir, 'pikku-http-wirings-map.gen.d.ts');
142
148
  }
@@ -158,6 +164,12 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
158
164
  if (!result.channelsWiringMetaJsonFile) {
159
165
  result.channelsWiringMetaJsonFile = join(channelDir, 'pikku-channels-meta.gen.json');
160
166
  }
167
+ if (!result.channelContractsMetaJsonFile) {
168
+ result.channelContractsMetaJsonFile = join(channelDir, 'pikku-channel-contracts-meta.gen.json');
169
+ }
170
+ if (!result.channelContractsMetaFile) {
171
+ result.channelContractsMetaFile = join(channelDir, 'pikku-channel-contracts-meta.gen.ts');
172
+ }
161
173
  if (!result.channelsMapDeclarationFile) {
162
174
  result.channelsMapDeclarationFile = join(channelDir, 'pikku-channels-map.gen.d.ts');
163
175
  }
@@ -348,6 +360,12 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
348
360
  if (!result.cliWiringMetaJsonFile) {
349
361
  result.cliWiringMetaJsonFile = join(cliDir, 'pikku-cli-wirings-meta.gen.json');
350
362
  }
363
+ if (!result.cliContractsMetaJsonFile) {
364
+ result.cliContractsMetaJsonFile = join(cliDir, 'pikku-cli-contracts-meta.gen.json');
365
+ }
366
+ if (!result.cliContractsMetaFile) {
367
+ result.cliContractsMetaFile = join(cliDir, 'pikku-cli-contracts-meta.gen.ts');
368
+ }
351
369
  if (!result.cliBootstrapFile) {
352
370
  result.cliBootstrapFile = join(cliDir, 'pikku-cli-bootstrap.gen.ts');
353
371
  }
@@ -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/add.function.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/publish.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/smoke.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-generate.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/login.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/better-auth-schema.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/pglite-kysely.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/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.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/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/device-auth.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-client.gen.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/add.function.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/publish.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/smoke.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-generate.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/login.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/better-auth-schema.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/pglite-kysely.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/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.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-refs.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/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/device-auth.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-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.12.44",
3
+ "version": "0.12.46",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "BUSL-1.1",
6
6
  "imports": {
@@ -29,9 +29,9 @@
29
29
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.3.1",
30
30
  "@pikku/better-auth": "^0.12.9",
31
31
  "@pikku/core": "^0.12.35",
32
- "@pikku/deploy-cloudflare": "^0.12.3",
32
+ "@pikku/deploy-cloudflare": "^0.12.4",
33
33
  "@pikku/fetch": "^0.12.3",
34
- "@pikku/inspector": "^0.12.22",
34
+ "@pikku/inspector": "^0.12.24",
35
35
  "@pikku/kysely": "^0.12.16",
36
36
  "@pikku/kysely-node-sqlite": "^0.12.2",
37
37
  "@pikku/node-http-server": "^0.12.2",